Blanca Montoya Gago Nuevas pymes digitales gracias a los Fondos Europeos Las pymes, pequeñas y medianas empresas, suponen el 95% del tejido empresarial en España. Estas, junto con los autónomos, han sido de los ámbitos que más han sufrido los...
Ramón Pérez Hernández ¿De qué nos suena blockchain? ¿Cuánto tiempo llevamos escuchando que blockchain va a cambiar la forma en la que percibimos diferentes aspectos de nuestra vida y no solo relativos a la economía y los...
Ana Zamora Ciclismo, datos y mucha diversión en el Día Internacional del Voluntario Telefónica El pasado viernes 19 de Octubre Telefónica celebró su Día Internacional del Voluntario, una fecha en la que toda la empresa desde sus 32 países se vuelca en ayudar organizando...
Raúl Alonso 14 errores por los que no van a financiar tu proyecto Analizan decenas de startups al año, pero solo invierten en un puñado de ellas. Sin convencimiento en el proyecto y confianza en el equipo ninguna aceleradora, business angel o...
ElevenPaths #CodeTalks4Devs – Rubika: un sistema Anti-Rubber Hose basado en el Cubo de Rubik Segundo capítulo de la cuarta temporada de Code Talks for Devs. Enrique Blanco te muestra Rubika, un sistema Anti-Rubber Hose basado en el cubo de Rubik.
Sergio de los Santos OpenPGP: Buscando a Kristian desesperadamente Las aplicaciones de código abierto funcionan gracias a un sistema de servidores que nunca ha funcionado correctamente. ¿Por qué sucede esto?
Raúl Alonso 10 ideas que debes recordar cada vez que busques innovación ¿Qué diferencia la innovación que funciona de la que no funciona? Lamento comunicarte que aquí tampoco vas a encontrar la fórmula magistral de equilibrio que convierta tu idea en...
AI of Things Lo más destacado del BDID2017 (VI): como crear el mejor equipo de eSports del mundo, Pedro de Alarcón y Fernando Piquer El Big Data Innovation Day 2017 cerró la agenda del evento con un tema de gran interés para un gran público: los eSports. Una ponencia de la mano de...
ChainLock, nuestra herramienta para bloquear archivos importantes en LinuxÁrea de Innovación y Laboratorio de Telefónica Tech 29 septiembre, 2020 Supongamos que tienes un archivo valioso en tu sistema, algo como una billetera de bitcoins (‘wallet.dat’) o un documento con información sensible que quieres mantener seguro y para ello piensas en añadirle una contraseña. Si utilizas Windows, tal vez, has tomado alguna medida extra para protegerte de clipboard hijacking malware, pero es probable que te preguntes cuál es el siguiente paso en esta carrera por no permitir que los atacantes tomen el control. Sabemos que algunos malwares tienen como objetivo robar tu archivo ‘wallet.dat’ para que, una vez en su poder, intentar crackear la contraseña offline y transferir los fondos de esa billetera a sus cuentas. Por ello, desde el equipo de Innovación y Laboratorio, hemos creado una nueva herramienta pero, esta vez, para usuarios de Linux. Queríamos que la herramienta fuese accesible para todos, y que pudiera utilizarse para proteger archivos sensibles sin tener que realizar tediosas tareas como recompilar el kernel o configurar un SELinux, así que creamos ChainLock. Chainlock puede bloquear cualquier archivo de tu ordenador con sistema Linux de tal forma que pueda ser accedido únicamente por una aplicación especifica. Por ejemplo, puedes bloquear tu archivo ‘wallet.dat’ y garantizar que solo pueda ser accedido por tu aplicación de bitcoin de preferencia y no pueda ser copiado o abierto por otra aplicación o por un malware. ¿Cómo funciona? Primero, incorporamos el archivo a proteger con el ChainLock CLI. Este va a cifrar el archivo de destino con una contraseña segura, y luego aparece un código QR en la pantalla que podemos escanear con la aplicación complementaria para smartphone. Ahora, la llave para desbloquear el archivo protegido está guardada únicamente en tu smartphone. De esta manera ya tenemos una protección extra, ya que, para tener éxito, un atacante debería comprometer los dos dispositivos para desbloquear el archivo sin tu permiso. Cuando intentemos acceder al archivo cifrado, podemos usar la línea de comando de la aplicación para desbloquearlo. Este nos mostrará un código QR que con la aplicación complementaria desde el smartphone podemos escanear, seleccionar el archivo que deseamos desbloquear, y la app enviará la información utilizando servicios de Tor hacia nuestra computadora para desbloquearlo. ChainLock además inicia un daemon para vigilar el archivo y permitir el acceso sólo desde el binario o la aplicación autorizada, de manera tal que, una vez descifrado el archivo, no dejará que ninguna otra aplicación intente acceder al mismo si no es la aplicación que previamente se había definido para tal fin. ¿Dónde puedo encontrarlo? En la web de ChainLock se encuentra la aplicación para Linux y la aplicación complementaria para Android, y además puedes seguir el tutorial de uso. Además te dejamos un vídeo para que puedas verlo en acción: Con esta herramienta hemos intentado desarrollar una prueba de concepto y poner a disposición de la comunidad una forma de asegurar sus archivos. Esperamos que sea de utilidad. Curiosidades sobre el filtrado de código de Windows XP#CodeTalks4Devs – Un Macintosh SE con espacio infinito de almacenamiento gracias a Google Photos
Talento digital: los 20 conocimientos y habilidades más demandadosRaúl Alonso 29 septiembre, 2020 ¿Faltan personas o faltan competencias? Pese a las dificultades, el mercado laboral sigue contratando. No obstante, de cada seis empresas que requieren un profesional digital, solo una encuentra el perfil que busca. Y para hacernos una idea de la dimensión de este desencuentro entre oferta y demanda, otro dato de Eurostat: en 2019, el 47% de las grandes empresas europeas fichó o intentó fichar a profesionales del sector digital. Una vez más, hablamos de un problema que se agrava en España. Según la OCDE, el nuestro es el segundo país con mayor disfunción estructural entre la oferta y la demanda laboral, tan solo superado por Italia. En su informe Employment Outlook 2019, la OCDE apunta una de las razones de la situación: el 28,1% de los universitarios elige en Europa carreras STEM (Ciencia, Tecnología, Ingeniería o Matemática, según el acrónimo inglés), en España lo hace el 23,7%. Por su parte, el informe Empleabilidad y talento digital, de la Universidad Autónoma de Madrid y la Fundación Vass, dedica muchas de sus 106 páginas a analizar un problema coyuntural, que requiere la confluencia de muchos esfuerzos para ser solucionado. Pero el estudio también incluye la solución, al menos a nivel individual. Y no es otra que identificar los conocimientos y habilidades que el profesional debe reunir para resultar atractivo al mercado laboral en la actualidad. Y es que, en mi opinión, no faltan tantas personas como competencias. 58% de conocimiento y 42% de habilidades ¿Qué profesional digital busca la empresa? Aquellos que quieren mostrar el talento más solicitado por el mercado deben diferenciar entre hard skills y soft skills. Pero, ¿qué porcentaje de uno y otro hay que mostrar? La respuesta puede sorprender. No se reclama el perfil del cerebrito brillante, como los protagonistas de la serie The Big Bang Theory (y que Sheldon Lee Cooper me perdone), sino perfiles más poliédricos y ricos en matices. En concreto, según la Universidad Autónoma de Madrid, el talento digital más deseado estaría compuesto por: 58,3% de hard skill. Se refiere al conocimiento o competencias duras, aquellas que le cualifican para desempeñar una labor profesional específica.41,7% de soft skill. Son esos atributos conductuales, también llamados competencias blandas y que todos identificamos con las habilidades. Sirven para poner en valor el conocimiento, ya que favorece que se adapte a entornos empresariales y humanos diferentes. Resulta interesante señalar que en el estudio de la Universidad Autónoma presentado este 2020, las soft skills pesan 1,8 puntos más que en el del año pasad0 (39,9%). Y es que las habilidades son, al menos, tan valiosas como el conocimiento para afrontar un entorno cambiante como el actual. Para visualizar el reto, es muy recurrida la demoledora advertencia de la OCDE: el 14% de los trabajos podrán desaparecer entre 15 y 20 años, y otro 32% cambiará completamente su modelo de actuación, en este caso hablamos del conjunto de profesionales. Qué talento digital busca la empresa Llegamos al aporte más interesante del estudio de la universidad madrileña. Según su panel de expertos, estos son los conocimientos y habilidades más buscados por el mercado en la actualidad: Las 10 primeras hard skills Desarrollos en Plataformas NET y/o Java EE.Despliegue y operación de software en la nube.Desarrollo web front-end: HTML, CSS, Javascript…Arquitecturas de microservicios y server-less.Desarrollo web Back End (PHP, JSP, ASP, HTML…).Diseño e implementación de bases de datos.Gestión y planificación de proyectos informáticos.Ciencia de datos: análisis de grandes volúmenes de información.Ingeniería de datos: plataformas software con volúmenes de información. Técnicas de testing y desarrollo guiado por pruebas. Las 10 primeras soft skills Adaptación al cambio y nuevas situaciones: flexibilidad.Capacidad analítica.Capacidad para la cooperación y el trabajo en equipo.Búsqueda de la excelencia y la mejora continua.Orientación a resultados.Responsable y sentido del deber; pensamiento crítico.Orientación al cliente.Habilidades en la comunicación oral y escrita.Capacidad de autoorganización.Dominio de idiomas. Infografía: Diferencias entre el Samsung Galaxy Note20 y el Note20 Ultra 5G«Scarcity»: cómo usar esta técnica para maximizar las ventas
La revolución de las redes empresariales ya ha empezadoLuis María Lepe 29 septiembre, 2020 Las redes empresariales conectan a los empleados de diferentes sedes proporcionándoles acceso a la información de la organización de una forma instantánea y segura. Hace pocos años estas redes privadas virtuales (VPN) configuraban entornos mediante accesos dedicados (punto a punto, ATM, MPLS) dentro de los cuales circulaba la información de manera reservada y segura. Pero desde dichas redes no era sencillo conectarse a Internet. Se hacía a través de líneas sobre las que se colocaban complejos firewalls que filtraban el tráfico que entraba y salía de la empresa. La realidad es que en esa época tampoco era muy necesario acceder a Internet desde la oficina (tal vez para leer la prensa si la política de la empresa lo permitía). Todas las aplicaciones e información necesarias para trabajar estaban dentro del CPD corporativo y solo eran accesibles desde la oficina. El perímetro estaba perfectamente definido mediante un cable que terminaba en un PC WINTEL de sobremesa dentro de los edificios, con un vigilante en la puerta. Esto simplificaba enormemente la gestión de la red y la protección de la información. Todo está cambiando En los últimos años las empresas se están llevando sus aplicaciones empresariales a la nube para mejorar la experiencia de cliente y empleado, además de ganar en flexibilidad y escalabilidad. Se ha generalizado el consumo de software en modo servicio impulsado por aplicaciones nativas cloud como Salesforce, SAP o Office 365 (el correo Outlook era uno de los grandes consumidores de recursos de almacenamiento en los CPD). Ya no es necesario hacer frente a costosas inversiones iniciales y lentos despliegues para lanzar un servicio. Existe una amplia oferta de plataformas e infraestructuras en modo servicio en la nube (IaaS y PaaS) ofrecidas en data centers de terceros y por los tres hiperescalares (AWS, Azure o Google CloudPlatform) sobre las que diseñar las nuevas aplicaciones. Se han generalizado los accesos a Internet de alta velocidad y disponibilidad en el hogar (ADSL, FTTH), lo que, junto con la extensión de la movilidad (Wifi, LTE, 5G) hace posible el acceso a la información desde múltiples ubicaciones. A esto se suma la proliferación de nuevos elementos que se conectan a la red empresarial (IoT) y que el COVID-19 ha acelerado la implantación del teletrabajo de una manera que no podíamos imaginar. El perímetro de la red empresarial ha saltado por los aires y es más amplio que nunca. El nuevo «borde» del servicio en ocasiones ni tan siquiera está bien definido. Esto añade complejidad a la gestión y nuevos retos en el ámbito de la ciberseguridad. Redes empresariales adaptadas a la nueva realidad Todo ello hace que en la actualidad nos enfrentemos a una nueva (y muy compleja) realidad cuando diseñamos las redes empresariales: El CPD corporativo ya no es el punto central del TI empresarial. Convive con una nube de CPD, muchos de los cuales ni tan siquiera sabemos dónde se ubican. La información ya no está solo dentro de la red corporativa. El tráfico empresarial se ha desplazado desde la VPN a Internet y está más distribuido que nunca.Los empleados ya no solo trabajan desde la oficina y no solo usan dispositivos corporativos. Las empresas son más multisede y multidispositivo que nunca. Las redes ya no son VPN en estrella de pocos nodos. Teletrabajo e IoT añaden miles de nuevos puntos de acceso a la red empresarial como nunca antes habíamos visto.La seguridad ya no solo cubre elementos hardware y software ubicados dentro de la empresa. Cada nuevo eslabón de la cadena es una potencial brecha de seguridad. Nunca antes habíamos tenido tantos eslabones. Cinco claves de las nuevas redes Como consecuencia de todo esto, las redes empresariales tienen que evolucionar. Es necesario simplificar la gestión y facilitar que la información esté accesible de forma segura desde cualquier lugar y dispositivo. Para ello es necesaria una nueva arquitectura que comprenda las siguientes cinco piezas: SDWAN: redes alineadas con el negocio Redes “softwarizadas” (SDWAN) sobre las que se incorporan funciones de red virtualizadas (NFV) para una adaptación dinámica de la red a las aplicaciones, integrada de manera nativa con la nube. Esto permite una mayor automatización y simplifica la gestión.Conectividad universal adaptada a las necesidades de las aplicaciones y empleados. La combinación de diferentes tipos de acceso (MPLS, FTTH, xDSL, LTE, 5G) permite atender necesidades específicas de las aplicaciones (por ejemplo, latencia y ancho de banda exigentes en aplicaciones de videoconferencia, escritorio remoto, VoIP … ) y aporta una mayor rapidez en los despliegues.Cloud híbrida que combina infraestructuras dedicadas con otras nubes en modo servicio (IaaS, PaaS o SaaS) prestadas por terceras partes. Seguridad desde el «borde del servicio». Modelo de entrega de servicio integrado de red más seguridad (SASE) Este modelo pone énfasis en los puntos desde los cuales se accede al servicio y abarca tanto las oficinas de la empresa como la red del operador o la infraestructura cloud para una visión integral.Eficiencia y captura de ahorros, sin renunciar a calidad de servicio. Se trata de optimizar el ancho de banda y equipamiento (hardware de propósito general desacoplado del software) a las necesidades del servicio en cada ubicación (por ejemplo, accesos MPLS para información crítica o legacy y accesos Internet para teletrabajo o cloud) Convergencia de la red con las TI Estamos en una nueva era: la de la convergencia de la red con las TI. La combinación de tecnologías de ambos mundos sin renunciar a privacidad y seguridad es una revolución. Es preciso abordarla junto al socio tecnológico idóneo. Telefónica Empresas tiene todas las capacidades necesarias. Imagen Despliegue de 5G: del concepto inicial a posibilidades aún inimaginablesLa Torre Outlet Zaragoza, un centro comercial con la digitalización en el ADN
La Torre Outlet Zaragoza, un centro comercial con la digitalización en el ADNJavier Lorente 29 septiembre, 2020 Si tuviéramos que dar una definición de digitalización, quizá una de las más acertadas sería la de utilizar la tecnología para registrar perfiles y comportamientos del mundo real de forma que interacciones analógicas se convierten en interacciones digitales con todo lo que eso conlleva en cuanto a tratamiento de datos, interacción en remoto, etc. Esta definición aplica a cualquier proceso de negocio y por tanto, no está suscrito a ningún tipo de sector concreto. Sectores tan dispares como la banca, industria, transporte, retail, etc. ya se transforman introduciendo la tecnología para eficientar procesos y disponer de herramientas que en un entorno previo a lo digital no estarían disponibles. El complejo más digitalizado de España Grupo Iberebro, con la idea de ofrecer a sus visitantes un nuevo concepto de ocio y compras absolutamente digitalizado, decide acometer un proyecto en el que transforma su antigua fábrica de Pikolin en Zaragoza en La Torre Outlet Zaragoza, el complejo comercial más digitalizado de España. El proyecto, consigue que este centro comercial no sea un centro comercial al uso. A través de la implementación de nuevas soluciones digitales tanto los nuevos consumidores del centro como los operadores que albergará podrán beneficiarse de un modelo relación-marca cliente basando en la omnicanalidad y la alta personalización de la oferta comercial. Un espacio a cielo abierto con estética industrial, que ha sido diseñado con un balance de comercios y ocio que hacen del mismo un espacio singular no solo en Aragón sino en todo el noreste español. Su propuesta comercial, en modo outlet, abarca casi un centenar de marcas mundialmente conocidas, sin embargo, en este post nos centraremos en hablar más allá de la propia oferta del centro y trasladaremos la importancia de la tecnología para que este espacio se convierta en un espacio comercial innovador. Sus espacios de ocio incluyen experiencias digitales en primera línea y el centro en su conjunto es diseñado en cada una de sus facetas con la digitalización en mente. Telefónica, socio tecnológico del proyecto, ha integrado las soluciones para ofrecer a los clientes una experiencia única donde confluyen los mundos real y digital. Telefónica, ha sido el partner tecnológico elegido para llevar a cabo este proyecto, integrando las capacidades de red, comunicaciones e infraestructuras WiFi con las soluciones digitales más avanzadas de IoT, Big Data e Inteligencia Artificial a través de la filial Telefónica Tech, para crear una experiencia de usuario única en la que confluyen el mundo físico y digital. La Torre Outlet Zaragoza abrirá sus puertas a finales de Octubre y tuvo el evento inaugural de encendido digital el 22 de septiembre, comenzando la cuenta atrás para la apertura definitiva. El proyecto digital del centro ha ido de la mano del proyecto arquitectónico y de negocio, y esa simbiosis se refleja en el resultado. Desde su concepción, Telefónica ha estado trabajando con Grupo Iberebro para diseñar y llevar a cabo la mejor propuesta de tecnología, tanto en los aspectos de comunicaciones como de experiencia de usuario o seguridad. Desde las comunicaciones más básicas, a las cámaras de seguridad, pasando por las soluciones audiovisuales, han sido planteadas como un proyecto más, dentro del proyecto arquitectónico. Quizá la parte más visible de esta colaboración sea el Video Wall LED instalado en la plaza central del centro comercial con una superficie de 141m² de gran resolución (2880 x 768 pixeles), una de las más grandes de España y que, sincronizada con la iluminación y el sonido gracias a la plataforma de Smart Retail de Telefónica spotdyna, permitirá realizar eventos de todo tipo; incluso con interactividad con los visitantes. Aunque no de los aspectos que mejor definen la digitalización de La Torre Outlet Zaragoza, aunque no sea visible para los visitantes, es el uso extensivo del Big Data, Wifi y Control de Aforos, además de los datos recopilados a través de la App, centralizado en un único dashboard interactivo de gestión, donde se integran todas las fuentes de datos disponibles para ayudar al centro a optimizar la toma de decisiones, basadas en datos, convirtiéndose en uno de los primeros centros comerciales data-driven de España. Además de las fuentes de datos procedentes de los sensores IoT del centro, se refuerza el conocimiento del cliente con los insights que provee Telefónica. Ello permitirá al centro y a las tiendas que lo conforman, una gestión más eficiente al poder tomar decisiones en tiempo real y desarrollar planes de acción basados en datos. La solución permite también identificar clientes potenciales y anticipar comportamientos de compra tanto en el centro comercial como en su página web. Más allá de la interactividad de la pantalla principal, no faltan otras soluciones que transmiten esta digitalización y que permiten al público sentirse protagonistas del espacio en sus visitas. Con el objetivo de ofrecer una nueva experiencia digital, desde Telefónica Tech se ha desplegado en el centro Kimchi!, una solución de realidad aumentada que simula un photocall interactivo con la que los clientes pueden hacerse sus propias instantáneas y proyectarlas en el Vídeo Wall y que en función de los eventos y promociones del centro conseguirán una mayor interacción con los visitantes. Este nuevo complejo será pionero en el mundo al desarrollar su gemelo digital 3D. La Torre Outlet Zaragoza se convertirá también en el primer centro comercial a nivel mundial con un gemelo digital 3D, es decir, una recreación virtual del mismo desarrollado por Imascono, un estudio aragonés especializado en realidad extendida. Este espacio virtual permitirá, entre otras cosas, pasear por el centro, descubrir sus tiendas y, en un futuro, realizar compras (e-commerce 3D) así como reunirse con amigos y conocer a nuevas personas (red social 3D). Siendo la seguridad integral del complejo otra parte fundamental de la digitalización del mismo, operada desde el Centro de Control de Seguridad de Telefónica se configurará como un sofisticado sistema de última generación. En el evento del pasado 22 de septiembre se pudo observar la capacidad de crear experiencias gracias a la tecnología, con momentos como el miniconcierto en directo de Lionwareo o la reproducción de ciertos contenidos sincronizados anunciando la próxima apertura. Como en otras ocasiones, Telefónica ha sido apoyado por algunos colaboradores que han ayudado a que el proyecto sea un éxito en su conjunto, como BGL Audiovisual, Imascono, Hapigami o Tecco, empresas que han aportado elementos de la experiencia que han sido integrados y coordinados por Telefónica. Tendremos que esperar aún unos días para poder recorrer las calles del centro comercial, visitar sus cines o sus centros experienciales de realidad virtual. De momento nos recuerda ese momento una cuenta atrás situada en la emblemática Torre Pikolin, a pocos metros del centro, que también ha sigo digitalizada con nuevas pantallas. La revolución de las redes empresariales ya ha empezadoTracking media o cómo la visión artificial optimiza procesos
DCGAN para reconstrucción de imágenesEnrique Blanco 29 septiembre, 2020 Hacer algo más de un año en este blog hicimos una muy breve introducción a los modelos generativos profundos. Hoy vamos a mostrar como construir y entrenar una DCGAN (Deep convolutional generative adversarial networks) dedicada a la reconstrucción de imágenes haciendo uso de Python y Keras. Las arquitecturas generativas más usadas, recordemos, son los Variational Autoencoders (VAEs) y las GANs o Generative Adversarial Networks. En este artículo, vamos a poner un ejemplo práctico con Keras de implementación de una GAN para la reconstrucción de imágenes. Este tipo de redes son el perfecto ejemplo de una red neuronal que constituye un modelo generativo haciendo uso del paradigma de aprendizaje no supervisado para entrenar dos modelos en paralelo en un juego de suma cero. Figura 1. Ejemplo de una red neuronal GAN. Fuente La misión del generador es crear nuevas imágenes similares al conjunto de datos que deberían ser indistinguibles por las redes discriminadoras. La red discriminadora tiene en cuenta dos salidas, que son las imágenes del conjunto de datos real y las imágenes que salen de la red del generador. El discriminador funciona como un clasificador binario y determina si una imagen dada por el generador es sintética o real. Comencemos definiendo la ubicación del checkpoint del generador que vamos a entrenar además de importar las librerías y el dataset con el que vamos a trabajar. codegenerator_save_name = 'generator.h5' generator_checkpoint_path = './checkpoints/' import numpy as np import random import matplotlib.pyplot as plt import datetime import os from tqdm import tqdm from keras.layers import Input, Conv2D from keras.layers import AveragePooling2D, BatchNormalization from keras.layers import UpSampling2D, Flatten, Activation from keras.models import Model, Sequential from keras.layers.core import Dense, Dropout from keras.layers.advanced_activations import LeakyReLU from keras.callbacks import EarlyStopping, TensorBoard from keras.optimizers import Adam from keras import backend as K from keras.datasets import mnist Como vemos, contamos con 60000 imágenes de entrenamiento y 10000 imágenes de testeo con una dimensión de 28 x 28 píxeles para un total de 10 clases distintas. (X_train, y_train), (X_test, y_test) = mnist.load_data() print('Size of the training_set: ', X_train.shape) print('Size of the test_set: ', X_test.shape) print('Shape of each image: ', X_train[0].shape) print('Total number of classes: ', len(np.unique(y_train))) print('Unique class labels: ', np.unique(y_train)) ---------------------------------------------------------------- Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 0s 0us/step Size of the training_set: (60000, 28, 28) Size of the test_set: (10000, 28, 28) Shape of each image: (28, 28) Total number of classes: 10 Unique class labels: [0 1 2 3 4 5 6 7 8 9] Aquí podemos ver 9 ejemplos de los dígitos que hemos importado. Cada una de estas imágenes viene acompañada de su correspondiente etiqueta. # Plot of 9 random images for i in range(0, 9): plt.subplot(331+i) # plot of 3 rows and 3 columns plt.axis('off') # turn off axis plt.imshow(X_train[i], cmap='gray') # gray scale Figura 2. Muestra de 9 imágenes contenidas en MNIST dataset. Data preprocessing Las imágenes vienen con un solo canal entre 0 y 255. Nuestra intención aquí para procesar la imagen es hacer una normalización entre -1 y 1. # Converting integer values to float types X_train = X_train.astype(np.float32) X_test = X_test.astype(np.float32) # Scaling and centering X_train = (X_train - 127.5) / 127.5 X_test = (X_test - 127.5)/ 127.5 print('Maximum pixel value in the training_set after Centering and Scaling: ', np.max(X_train)) print('Minimum pixel value in the training_set after Centering and Scaling: ', np.min(X_train)) ---------------------------------------------------------------- Maximum pixel value in the training_set after Centering and Scaling: 1.0 Minimum pixel value in the training_set after Centering and Scaling: -1.0 Enriqueciendo el dataset Ahora vamos a crear una función que modifique un poco nuestras imágenes. Nuestra misión es incluir algunas máscaras de ceros dentro de la imagen para un pequeño número de píxeles. Un ejemplo del resultado de aplicar esa función lo podemos ver a continuación. def noising(image): """Masking.""" import random array = np.array(image) i = random.choice(range(8, 12)) # x coord for top left corner of the mask j = random.choice(range(8, 12)) # y coord for top left corner of the mask array[i:i+8, j:j+8] = -1 # setting the pixels in the masked region to 0 return array noised_train_data = np.array([*map(noising, X_train)]) noised_test_data = np.array([*map(noising, X_test)]) print('Noised train data Shape/Dimension : ', noised_train_data.shape) print('Noised test data Shape/Dimension : ', noised_train_data.shape) ---------------------------------------------------------------- Noised train data Shape/Dimension : (60000, 28, 28) Noised test data Shape/Dimension : (60000, 28, 28) Figura 3. Muestra de las mismas 9 imágenes de la Figura 2, pero enmascaradas. Haciendo un reshaping de los datos de entrenamiento y testeo Para poder alimentar correctamente tanto el discriminador como el generador necesitamos hacer un reshape de nuestro DataSet simplemente añadimos una dimensión más a las ya conocidas. c# Reshaping the training data X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2], 1) print('Size/Shape of the original training set: ', X_train.shape) # Reshaping the nosied training data noised_train_data = noised_train_data.reshape(noised_train_data.shape[0], noised_train_data.shape[1], noised_train_data.shape[2], 1) print('Size/Shape of the noised training set: ', noised_train_data.shape) # Reshaping the testing data X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 1) print('Size/Shape of the original test set: ', X_test.shape) # Reshaping the noised testing data noised_test_data = noised_test_data.reshape(noised_test_data.shape[0], noised_test_data.shape[1], noised_test_data.shape[2], 1) print('Size/Shape of the noised test set: ', noised_test_data.shape) ---------------------------------------------------------------- Size/Shape of the original training set: (60000, 28, 28, 1) Size/Shape of the noised training set: (60000, 28, 28, 1) Size/Shape of the original test set: (10000, 28, 28, 1) Size/Shape of the noised test set: (10000, 28, 28, 1) A continuación, incluimos algunas funciones auxiliares para revertir el escalado de las imágenes y para representar el resultado del aprendizaje de nuestro generador durante el entrenamiento. ef upscale(image): """Scale the image to 0-255 scale.""" return (image*127.5 + 127.5).astype(np.uint8) def generated_images_plot(original, noised_data, generator): """Plot subplot of images during training.""" print('NOISED') for i in range(9): plt.subplot(331 + i) plt.axis('off') plt.imshow(upscale(np.squeeze(noised_data[i])), cmap='gray') plt.show() print('GENERATED') for i in range(9): pred = generator.predict(noised_data[i:i+1], verbose=0) plt.subplot(331 + i) plt.axis('off') plt.imshow(upscale(np.squeeze(pred[0])), cmap='gray') plt.show() print('ORIGINAL') for i in range(9): plt.subplot(331 + i) plt.axis('off') plt.imshow(upscale(np.squeeze(original[i])), cmap='gray') plt.show() def plot_generated_images_combined(original, noised_data, generator): """Another function to plot images during training.""" rows, cols = 4, 12 num = rows * cols image_size = 28 generated_images = generator.predict(noised_data[0:num]) imgs = np.concatenate([original[0:num], noised_data[0:num], generated_images]) imgs = imgs.reshape((rows * 3, cols, image_size, image_size)) imgs = np.vstack(np.split(imgs, rows, axis=1)) imgs = imgs.reshape((rows * 3, -1, image_size, image_size)) imgs = np.vstack([np.hstack(i) for i in imgs]) imgs = upscale(imgs) plt.figure(figsize=(8, 16)) plt.axis('off') plt.title('Original Images: top rows, ' 'Corrupted Input: middle rows, ' 'Generated Images: bottom rows') plt.imshow(imgs, cmap='gray') plt.show() def plot_training_loss(discriminator_losses, generator_losses): """Plot the losses.""" plt.figure() plt.plot(range(len(discriminator_losses)), discriminator_losses, color='red', label='Discriminator loss') plt.plot(range(len(generator_losses)), generator_losses, color='blue', label='Adversarial loss') plt.title('Discriminator and Adversarial loss') plt.xlabel('Iterations') plt.ylabel('Loss (Adversarial/Discriminator)') plt.legend() plt.show() Definición de hiperparametros de nuestra red neuronal K.clear_session() # Smoothing value smooth_real = 0.9 # Number of epochs epochs = 10 # Batchsize batch_size = 64 # Optimizer for the generator optimizer_g = Adam(lr=0.0002, beta_1=0.5) # Optimizer for the discriminator optimizer_d = Adam(lr=0.0004, beta_1=0.5) # Shape of the input image input_shape = (28,28,1) Creando el generador Vamos a crear la arquitectura del generador usando Keras. Probemos en primer lugar con seis bloques convolucionales. def img_generator(input_shape): generator = Sequential() generator.add(Conv2D(32, (3, 3), padding='same', input_shape=input_shape)) # 32 filters generator.add(BatchNormalization()) generator.add(Activation('relu')) generator.add(AveragePooling2D(pool_size=(2, 2))) generator.add(Conv2D(64, (3, 3), padding='same')) # 64 filters generator.add(BatchNormalization()) generator.add(Activation('relu')) generator.add(AveragePooling2D(pool_size=(2, 2))) generator.add(Conv2D(128, (3, 3), padding='same')) # 128 filters generator.add(BatchNormalization()) generator.add(Activation('relu')) generator.add(Conv2D(128, (3, 3), padding='same')) # 128 filters generator.add(Activation('relu')) generator.add(UpSampling2D((2,2))) generator.add(Conv2D(64, (3, 3), padding='same')) # 64 filters generator.add(Activation('relu')) generator.add(UpSampling2D((2,2))) generator.add(Conv2D(1, (3, 3), activation='tanh', padding='same')) # 1 filter return generator # print generator summary img_generator(input_shape).summary() ---------------------------------------------------------------- Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_1 (Conv2D) (None, 28, 28, 32) 320 _________________________________________________________________ batch_normalization_1 (Batch (None, 28, 28, 32) 128 _________________________________________________________________ activation_1 (Activation) (None, 28, 28, 32) 0 _________________________________________________________________ average_pooling2d_1 (Average (None, 14, 14, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 14, 14, 64) 18496 _________________________________________________________________ batch_normalization_2 (Batch (None, 14, 14, 64) 256 _________________________________________________________________ activation_2 (Activation) (None, 14, 14, 64) 0 _________________________________________________________________ average_pooling2d_2 (Average (None, 7, 7, 64) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 7, 7, 128) 73856 _________________________________________________________________ batch_normalization_3 (Batch (None, 7, 7, 128) 512 _________________________________________________________________ activation_3 (Activation) (None, 7, 7, 128) 0 _________________________________________________________________ conv2d_4 (Conv2D) (None, 7, 7, 128) 147584 _________________________________________________________________ activation_4 (Activation) (None, 7, 7, 128) 0 _________________________________________________________________ up_sampling2d_1 (UpSampling2 (None, 14, 14, 128) 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 14, 14, 64) 73792 _________________________________________________________________ activation_5 (Activation) (None, 14, 14, 64) 0 _________________________________________________________________ up_sampling2d_2 (UpSampling2 (None, 28, 28, 64) 0 _________________________________________________________________ conv2d_6 (Conv2D) (None, 28, 28, 1) 577 ================================================================= Total params: 315,521 Trainable params: 315,073 Non-trainable params: 448 _________________________________________________________________ Cómo vemos hemos creado un modelo con unos 315 parámetros a optimizar. Creando el discriminador Ahora es el turno de crear el discriminador. Vamos a poner tres bloques convolucionales seguidos de una capa densa que termine en una única unidad, con un 0 o un 1. def img_discriminator(input_shape): discriminator = Sequential() discriminator.add(Conv2D(64, (3, 3), strides=2, padding='same', input_shape=input_shape, activation = 'linear')) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.2)) discriminator.add(Conv2D(128, (3, 3), strides=2, padding='same', activation = 'linear')) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.2)) discriminator.add(Conv2D(256, (3, 3), padding='same', activation = 'linear')) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.2)) discriminator.add(Flatten()) discriminator.add(Dense(1, activation='sigmoid')) return discriminator # print summary of the discriminator img_discriminator(input_shape).summary() ---------------------------------------------------------------- Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_7 (Conv2D) (None, 14, 14, 64) 640 _________________________________________________________________ leaky_re_lu_1 (LeakyReLU) (None, 14, 14, 64) 0 _________________________________________________________________ dropout_1 (Dropout) (None, 14, 14, 64) 0 _________________________________________________________________ conv2d_8 (Conv2D) (None, 7, 7, 128) 73856 _________________________________________________________________ leaky_re_lu_2 (LeakyReLU) (None, 7, 7, 128) 0 _________________________________________________________________ dropout_2 (Dropout) (None, 7, 7, 128) 0 _________________________________________________________________ conv2d_9 (Conv2D) (None, 7, 7, 256) 295168 _________________________________________________________________ leaky_re_lu_3 (LeakyReLU) (None, 7, 7, 256) 0 _________________________________________________________________ dropout_3 (Dropout) (None, 7, 7, 256) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 12544) 0 _________________________________________________________________ dense_1 (Dense) (None, 1) 12545 ================================================================= Total params: 382,209 Trainable params: 382,209 Non-trainable params: 0 _________________________________________________________________ El número de parámetros a entrenar esta rama de la GAN está en el mismo orden de magnitud que para el generador. Creando la GAN Tras definir el discriminador y el generador, con la siguiente función vamos a ser capaces de construir la red neuronal generativa. def dcgan(discriminator, generator, input_shape): # Don't train the discriminator when compiling GAN discriminator.trainable = False # Accepts the noised input gan_input = Input(shape=input_shape) # Generates image by passing the above received input to the generator gen_img = generator(gan_input) # Feeds the generated image to the discriminator gan_output = discriminator(gen_img) # Compile everything as a model with binary crossentropy loss gan = Model(inputs=gan_input, outputs=gan_output) return gan Entendiendo el entrenamiento Sigamos los siguientes pasos para entrenar nuestro modelo generativo Cargamos el generador y el discriminador haciendo uso de las funciones que acabamos de crear;Compilamos el discriminador con una función de pérdida binary cross entropy;Creamos la GAN y compilamos con la misma función de pérdida;Generamos baches tanto de imágenes originales como de imágenes modificadas y alimentamos el generador con imágenes modificadas;A continuación, alimentamos el discriminador con imágenes originales e imágenes obtenidas desde el generador;Ponemos discriminator.trainable a True para permitir que el discriminador se entren con este nuevo set de imágenes;Alimentamos el generador con aquellas imágenes que el discriminador ha etiquetado como 1. No se nos debe olvidar cambiar discriminator.trainable a False. No queremos que el discriminador modifique sus pesos mientras se está entrenando el generador;Desde el punto cuatro hasta el punto 7 repetimos los pasos durante tantas épocas como hayamos definido. def train(X_train, noised_train_data, input_shape, smooth_real, epochs, batch_size, optimizer_g, optimizer_d): """Training GAN.""" discriminator_losses = [] generator_losses = [] # Number of iteration possible with batches of size 128 iterations = X_train.shape[0] // batch_size # Load the generator and the discriminator generator = img_generator(input_shape) discriminator = img_discriminator(input_shape) # Compile the discriminator with binary_crossentropy loss discriminator.compile(loss='binary_crossentropy', optimizer=optimizer_d) # Feed the generator and the discriminator to the function dcgan # to form the DCGAN architecture gan = dcgan(discriminator, generator, input_shape) # Compile the DCGAN with binary_crossentropy loss gan.compile(loss='binary_crossentropy', optimizer=optimizer_g) for i in range(epochs): print('Epoch %d' % (i+1)) # Use tqdm to get an estimate of time remaining for j in tqdm(range(1, iterations+1)): # batch of original images (batch = batchsize) original = X_train[np.random.randint(0, X_train.shape[0], size=batch_size)] # batch of noised images (batch = batchsize) noise = noised_train_data[np.random.randint(0, noised_train_data.shape[0], size=batch_size)] # Generate fake images generated_images = generator.predict(noise) # Labels for generated data dis_lab = np.zeros(2*batch_size) dis_train = np.concatenate([original, generated_images]) # label smoothing for original images dis_lab[:batch_size] = smooth_real # Train discriminator on original images discriminator.trainable = True discriminator_loss = discriminator.train_on_batch(dis_train, dis_lab) # save the losses discriminator_losses.append(discriminator_loss) # Train generator gen_lab = np.ones(batch_size) discriminator.trainable = False sample_indices = np.random.randint(0, X_train.shape[0], size=batch_size) original = X_train[sample_indices] noise = noised_train_data[sample_indices] generator_loss = gan.train_on_batch(noise, gen_lab) # save the losses generator_losses.append(generator_loss) if i == 0 and j == 1: print('Iteration - %d', j) generated_images_plot(original, noise, generator) plot_generated_images_combined(original, noise, generator) print("Discriminator Loss: ", discriminator_loss, ", Adversarial Loss: ", generator_loss) generated_images_plot(original, noise, generator) plot_generated_images_combined(original, noise, generator) # Save generator model generator.save(generator_checkpoint_path) # plot the losses plot_training_loss(discriminator_losses, generator_losses) return generator Procedamos a lanzar el entrenamiento: generator = train(X_train, noised_train_data, input_shape, smooth_real, epochs, batch_size, optimizer_g, optimizer_d) Figura 3. Primera evaluación antes de empezar la primera época de entrenamiento (I) Figura 4. Primera evaluación antes de empezar la primera época de entrenamiento (II) Figura 5. Inferencia del generador tras 10 épocas de entrenamiento (I) Figura 6. Inferencia del generador tras 10 épocas de entrenamiento (II) Es fácil observar cómo el generador aprende a reproducir las imágenes que se le facilitan, aunque estas estén enmascaradas. En la figura anterior, por ejemplo, tenemos 4 conjuntos de imágenes, de los cuales la primera fila son las imágenes originales, la segunda son los mismos números enmascarados y la tercera es la reconstrucción del generador. El desempeño es bastante bueno dado el poco tiempo que hemos dejado entrenando la red (1 minuto por época). Fíjense en cómo son las primeras reconstrucciones (Figuras 3 y 4). Infiriendo con el generador ya entrenado Al entrenar en un modelo convolucional de clasificación normal nuestro dataset de MNIST, obtendremos una precisión cercana al 98-99% . # input image shape input_shape = (28,28,1) def train_mnist(input_shape, X_train, y_train): model = Sequential() model.add(Conv2D(32, (3, 3), strides=2, padding='same', input_shape=input_shape)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Conv2D(64, (3, 3), strides=2, padding='same')) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Conv2D(128, (3, 3), padding='same')) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(1024, activation = 'relu')) model.add(Dense(10, activation='softmax')) # Compilamos el modelo model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) if not os.path.isdir('./logs'): os.mkdir('./logs') # Algunos callbacks que nos pueden ser de utilidad early_stopping_callback = EarlyStopping(monitor='val_loss', patience=3) tensorboard_callback = TensorBoard(log_dir='./logs/mnist' + datetime.datetime.now().strftime("%Y%m%d-%H%M%S"), histogram_freq=0, # It is general issue with keras/tboard that you cannot get histograms with a validation_generator write_graph=True, write_images=True, ) # Ajustamos a los datos de entrenamiento model.fit(X_train, y_train, batch_size = 128, epochs = 3, callbacks= [early_stopping_callback, tensorboard_callback], validation_data=(X_test, y_test), verbose = 2 ) return model mnist_model = train_mnist(input_shape, X_train, y_train) ---------------------------------------------------------------- Train on 60000 samples, validate on 10000 samples Epoch 1/3 - 13s - loss: 0.1935 - accuracy: 0.9390 - val_loss: 0.0564 - val_accuracy: 0.9817 Epoch 2/3 - 13s - loss: 0.0603 - accuracy: 0.9808 - val_loss: 0.0364 - val_accuracy: 0.9886 Epoch 3/3 - 13s - loss: 0.0436 - accuracy: 0.9862 - val_loss: 0.0305 - val_accuracy: 0.9907 Si con ese modelo evaluamos la precisión sobre el conjunto de entrenamiento enmascarado esta misma disminuye hasta el 76,85%, lo cual es entendible. # prediction on the masked images pred_labels = mnist_model.predict_classes(noised_test_data) print('The model median accuracy on the masked images is:',np.mean(pred_labels==y_test)*100) ---------------------------------------------------------------- The model median accuracy on the masked images is: 76.85 Si en vez de alimentar un modelo convolucional normal entrenado con datos sin enmascarar alimentamos el generador de la GAN que acabamos de entrenar, obtenemos una precisión media del 91,17 %. Esto se traduce en un incremento de casi el 15% en precisión. # predict on the restored/generated digits gen_pred_lab = mnist_model.predict_classes(gen_imgs_test) print('The model model accuracy on the generated images is:',np.mean(gen_pred_lab==y_test)*100) ---------------------------------------------------------------- The model model accuracy on the generated images is: 91.17 Por lo tanto, podemos asegurar que nuestro generador ha aprendido correctamente a distinguir números manuscritos a pesar de haber sido alimentado con imágenes enmascaradas. Por ello, podemos asegurar que este modelo será capaz de generar imágenes fidedignas a partir de imágenes ruidosas. Además, nuestro discriminador también las identificará correctamente. Veamos un ejemplo abajo, donde el discriminador se equivoca (y es entendible su equivocación, cualquiera erraría en la identificación) ante la «rareza» del ‘8’ reconstruido. Figura 7. Imágenes generadas y etiquetadas por nuestra GAN. Como se muestra a continuación, alimentemos el generador cargado desde el último checkpoint con una imagen de un seis enmascarada. from keras.models import load_model loaded_generator = load_model(generator_checkpoint_path, compile=False) random_idx = np.random.randint(0, noised_test_data.shape[0]) plt.imshow(upscale(np.squeeze(noised_test_data[random_idx])), cmap='gray') Figura 8. Dígito correspondiente a un ‘6’ enmascarado. La recreación del generador de la imagen es satisfactoria. reconstructed = loaded_generator.predict(noised_test_data[random_idx].reshape(1, noised_test_data[random_idx].shape[0], noised_test_data[random_idx].shape[1], noised_test_data[random_idx].shape[2])) plt.imshow(upscale(np.squeeze(reconstructed)), cmap='gray') Figura 9. Dígito de la Figura 8 reconstruida. Esperamos que este artículo sirva para dar más luz en el mundo de los modelos generativos sobre cómo se pueden entrenar este tipo de arquitecturas. Para mantenerte al día con LUCA visita nuestra página web, suscríbete a LUCA Data Speaks o síguenos en Twitter, LinkedIn y YouTube. Living Apps: cómo diferenciar tu empresa a través de experiencias digitalesRobots, mayores y dependencia
Curiosidades sobre el filtrado de código de Windows XPSergio de los Santos 28 septiembre, 2020 La atención se centraba hace unos días en Reddit, dentro de una comunidad que se caracteriza por sus teorías conspiranoicas. Según las noticias consistía en el filtrado de 43 GBs de datos de «Windows XP» pero, según el propio nombre del Torrent (más exacto), lo que se filtraba era“Microsoft leaked source code archive”, porque realmente contenía mucho más. Se trata de un compendio de filtraciones anteriores, documentos, documentales, imágenes… y sí, código fuente inédito. Más de la mitad del contenido lo componen en realidad todas las patentes de Microsoft, hasta 27 GBs comprimidos. Analicemos otras curiosidades. Análisis de directorios y ficheros Aquí os dejamos una panorámica de lo que se descarga: En la descripción del propio Torrent se deja claro. Incluidos en este Torrent están: MS-DOS 3.30 OEM Adaptation Kit (source code)MS-DOS 6.0 (source code)DDKs / WDKs stretching from Win 3.11 to Windows 7 (source code)Windows NT 3.5 (source code)Windows NT 4 (source code)Windows 2000 (source code) Windows XP SP1 (source code) Windows Server 2003 (build 3790) (source code) (file name is ‘nt5src.7z’) Windows CE 3.0 Platform Builder (source code) Windows CE 4.2 Shared Source (source code) Windows CE 5.0 Shared Source (source code) Windows CE 6.0 R3 Shared Source (source code) Windows Embedded Compact 7.0 Shared Source (source code) Windows Embedded Compact 2013 (CE 8.0) Shared Source (source code)Windows 10 Shared Source Kit (source code) Windows Research Kernel 1.2 (source code) Xbox Live (source code) (most recent copyright notice in the code says 2009) Xbox OS (source code) (both the «Barnabas» release from 2002, and the leak that happened in May 2020) En negrita hemos indicado lo más relevante puesto que, del resto, buena parte ya se conocía por filtraciones anteriores. Por ejemplo, en mayo de 2020 se filtró el código de la Xbox original y NT 3.5; en 2017, algunas partes de Windows 10; y en 2004, algunas partes de NT y 2000. Reproducimos aquí ese TXT completo justificando en qué consiste el Torrent. El apartado de PDFs no tiene desperdicio, más que nada por el valor de juntar tanta documentación y noticias sobre revelaciones de código. Un misterioso RAR cifrado El leak contiene un RAR cifrado (Windows_xp_source.rar), y la propia persona que lo incluye apela a la comunidad para intentar descifrar la contraseña. «Including ‘windows_xp_source.rar’ in this collection, even though it’s password protected. Maybe someone can crack (or guess) the password and see what’s inside. The archive is bigger than the other XP / Neptune source tree. It might be genuine, it might not. But I’m including it just in case, since the file was so hard to track down. Original upload date seems to have been around 2007 or 2008. The hash key is: $RAR3$*0*c9292efa2e495f90*044d2e5042869449c10f890c1cced438« ¿Es esto relevante? Lo importante, por tanto, y parece que nuevo, es el código fuente del kernel 5 de 2003 y compartido en buena parte también por XP. Nt5src.7z, que son aproximadamente 2.4 gigabytes y que descomprimido alcanza cerca de 10 GB. Al parecer el código es muy completo, pero no se sabe si contiene lo suficiente como para compilarlo. La inmensa mayoría de los ficheros están fechados el 2 de septiembre de 2002. El Service Pack salió oficialmente el día 9. Con respecto a si este leak supone una amenaza para seguridad, ayudará a detectar o analizar más rápidamente potenciales vulnerabilidades que todavía se conserven en Windows 10 por su código heredado. Los atacantes podrán, una vez identificado una oportunidad de fallo, entender mejor por qué se produce si acuden a la porción de código en claro. Y no sólo las partes heredadas en Windows 10. Windows XP y 2003 en sí mismos todavía se encuentran en una buena parte de sistemas importantes. Claro que desde 2014 que se detuvo el soporte, los administradores tienen otros problemas añadidos si aún mantienen este sistema. Pero esto lo puede agravar. No demasiado, pero es importante. En todo caso, cualquier investigador que buscara vulnerabilidades en el código, comenzaría por los comentarios… donde los programadores reflejan dudas, temores y… potenciales grietas. Una simple búsqueda por “WARNING:” nos da alguna idea interesante de qué cosas pueden fallar en el código, según los propios programadores. Algunas no dejarán de ser curiosidades y otros podrían verse como potenciales problemas de seguridad. Ponemos aquí algunos ejemplos. No comprueba el búfer… Podría romperlo todo… Es difícil de mirar… Jamás rompas la compatibilidad hacia atrás… Overflow… Esto no me gusta pero… La cadena JlJmIhClBsr No queríamos dejar pasar el recordar que en el código relacionado con la compartición de ficheros, se encuentra la cadena JlJmIhClBsr, algo curioso que puede indicar que la NSA ya tenía acceso al código de Windows (esto no sería nada raro) pero que además da a entender que cometió un despiste a la hora de crear el exploit de EnternalBlue. Porque al incluir esa cadena, que se encontraba en el código fuente no se sabe muy bien por qué, estaba añadiendo (sin ser consciente) una especie de firma IDS muy relevante para saber si alguien estaba siendo atacado por el exploit de EternalBlue. Esto es muy curioso porque además implicaría que la NSA creó el exploit fijándose o adaptando el código fuente directamente. Cuando se hizo público el exploit, WannaCry, creado bajo la base de EternalBlue, también heredó esa cadena. Sin embargo, la cadena no sirve para nada y cuando se portó a Metasploit se eliminó sin más. En su día, ya investigamos y comprobamos que en realidad esta cadena JlJmIhClBsr solo tendría una utilidad: servir perfectamente como una firma o marca para detectar el ataque por red. Un despiste por parte de la NSA. Parte del código de svrcall.c Noticias de Ciberseguridad: Boletín semanal 19-25 de septiembreChainLock, nuestra herramienta para bloquear archivos importantes en Linux
Infografía: Diferencias entre el Samsung Galaxy Note20 y el Note20 Ultra 5GFernando Rodríguez Cabello 28 septiembre, 2020 El fabricante coreano Samsung lanzó en agosto sus dos últimos modelos de smartphone, el Samsung Galaxy Note20 y Note20 Ultra 5G. Se trata de dos dispositivos de alta gama, muy esperados por los consumidores y con muchas prestaciones y novedades. Estos smartphones premium son un auténtico ordenador que se puede llevar en un bolsillo. Además de su cámara, muy potente y con software de edición profesional, incluye un lápiz digital, el S Pen, con nuevas funcionalidades. Lo que más destaca es la sensibilidad del lápiz, que permite escribir como si lo hiciéramos sobre papel, consiguiendo un resultado muy similar. Pero quizás lo más interesante es que permite controlar a distancia el dispositivo. También es digna de mención la evolución de la aplicación Samsung Notes, que incorpora la posibilidad de tomar apuntes sobre documentos pdf y sincronizar notas escritas y de audio. En la siguiente infografía realizamos una comparativa de las principales características de ambos modelos, el Samsung Galaxy Note20 y el Note20 Ultra 5G. Podréis conocer, de un solo vistazo, las diferencias en cuanto a tamaño, peso, pantalla, cámara, procesador, memoria, etc. Esperamos que os resulte útil. Infografía de Fernando Rodríguez Cabello Imagen portada: Samsung.com España sí es país para startupsTalento digital: los 20 conocimientos y habilidades más demandados
Despliegue de 5G: del concepto inicial a posibilidades aún inimaginablesPatricia Robles Mansilla 28 septiembre, 2020 Parece que fue ayer cuando comenzamos a hablar sobre 5G y a conocer sus posibilidades, requisitos y especificaciones. Sin embargo, tan solo un par de años después, esta tecnología ha pasado de ser un mero concepto a convertirse en toda una realidad. La conversación ahora es sobre el despliegue de 5G. A principios de este mes Telefónica anunciaba la puesta en servicio de su red 5G con el compromiso de llegar al 75 por ciento de la población española a finales de 2020. Ventajas y casos de uso de 5G Como ya contábamos en este blog, las comunicaciones 5G permiten alcanzar velocidades pico de 20 Gbps (es decir, veinte veces superiores a las del 4G). También multiplican por diez la capacidad para soportar dispositivos y permiten reducir la latencia en torno a un milisegundo frente a los 20 ó 30 milisegundos propios de las redes 4G. Efecto multiplicador con la inteligencia artificial y edge computing Por este motivo, la gran transformación por la que apuesta el 5G no son solo las comunicaciones interpersonales. Al tratarse de una tecnología orientada a las comunicaciones machine to machine (M2M), también permite establecer conexiones entre millones de dispositivos. De este modo, ofrece una cantidad ingente de datos que, sumados a la inteligencia artificial y al edge computing, proporcionará posibilidades aún inimaginables. Para usuarios finales y empresas Entre las ventajas en el ámbito particular, con 5G los usuarios se pueden descargar películas en cuestión de segundos o disfrutar de la experiencia de los videojuegos en tiempo real con total libertad de movimiento. En el ámbito empresarial destacan los servicios de multiaccess edge computing, que ofrecen servicios de ultra baja latencia, además de las redes privadas 5G o el IoT masivo. Casos de uso de 5G de Telefónica Telefónica lleva varios años trabajando en diferentes casos de uso de 5G, con el objetivo de impulsar esta nueva tecnología. Desde la puesta en marcha de su proyecto “Ciudades Tecnológicas” en 2018, ha participado en diferentes pilotos promovidos por Red.es. En concreto, el pasado mes de julio, resultó adjudicataria de la segunda convocatoria para el desarrollo del 5G, impulsada por el Ministerio de Asuntos Económicos y Transformación Digital. De este modo, se pondrán en marcha una serie de nuevos pilotos 5G en Madrid, Andalucía, Extremadura y Castilla La Mancha. Entre ellos se incluyen diversos casos de uso para los sectores de industria, turismo, educación, salud y producción televisiva. Éstos se unen al ya existente piloto 5G Galicia, en cuyo marco Telefónica desplegó cobertura 5G en el estadio de ABANCA-Riazor de A Coruña hace tan solo unas semanas. Fases del despliegue de 5G El despliegue de la red 5G se hará de manera progresiva y por fases. En una primera etapa la red estará en servicio combinando el despliegue de 5G en modo Non Stand Alone (NSA) y la tecnología de compartición de espectro Dynamic Spectrum Sharing (DSS) para, posteriormente convertirse en una red Stand Alone (SA). Asimismo, en esta primera fase se utilizará la infraestructura actual que, más adelante, se irá completando con nuevas estaciones base según los requisitos de capacidad o cobertura lo demanden. Para realizar este despliegue actualmente se está utilizando la banda de 3500 MHz, única banda 5G licenciada hasta el momento a los operadores, y las bandas de 1800–2100 MHz, en las que actualmente se encuentra el 4G. De este modo se aprovecha la posibilidad de usar equipos que pueden funcionar en ambas tecnologías a la vez. La capacidad plena de 5G Sin embargo, es necesario tener en cuenta que la capacidad plena de 5G no llegará hasta que tengamos disponibles los tres tipos de frecuencias de esta nueva tecnología móvil. Por un lado, las bandas bajas de 700 MHz que proporcionarán cobertura extensa; por otro lado, las ya comentadas bandas de 3500 MHz y, por último, las bandas milimétricas de 26 GHz dedicadas a proporcionar capacidad. Estos nuevos despliegues irán acompasados de un paulatino apagado de las redes de segunda y tercera generación, necesarias hasta el momento para proporcionar servicios de voz, con el objetivo de liberar espectro de cara a este nuevo despliegue. Como veis, es cierto que la tecnología 5G sigue evolucionando y también que aún le queda recorrido. Sin embargo, el progresivo despliegue de las redes móviles, junto con el avance en los diferentes casos de uso, son la clave para llevar a cabo el desarrollo de 5G que ayudarán a la mejora de los procesos actuales, la transformación digital o la prestación de nuevos servicios. Imagen: RK Bentley La maduración de un equipo de «agile coaches»La revolución de las redes empresariales ya ha empezado
4 formas en que un portal multicloud te hace más eficienteJuan Carlos Estévez 27 septiembre, 2020 Actualmente, no basta con utilizar un solo servicio de nube. Se requiere contratar los servicios de diferentes proveedores e integrar nubes públicas, privadas e híbridas que realmente suplan las necesidades de las organizaciones Sin embargo, mientras más servicios en la nube se contratan, más complejo es el proceso de control y coordinación entre ellos. Sin la preparación técnica y sin un equipo de TI detrás que garantice un buen funcionamiento, más que soluciones habrá dolores de cabeza. Por eso nacen los portales multicloud, para facilitar la gestión de todos los servicios en la nube de una empresa desde una sola interfaz y de manera homogénea. Un portal garantiza control, automatización y rapidez en el entorno multicloud. Formas en que un portal multicloud hace más eficientes a las empresas 1. Integra los mejores servicios en la nube Algunos servicios de nube ofrecen mayor versatilidad que otros, no obstante, a veces es necesario implementar tecnologías para funciones o regiones específicas. Un servicio de nube individual no puede ofrecer todo lo que una empresa realmente necesita, al menos no de manera óptima, pero un portal de nubes múltiples es bastante flexible en este sentido y hace posible alinear los objetivos empresariales con los mejores proveedores para cada tarea específica. Además, se pueden manejar los principales servicios de la nube de internet desde una sola interfaz. 2. Equilibra rendimiento y costos No solo hay más flexibilidad para elegir los mejores servicios en la nube, sino que se puede equilibrar el rendimiento con los costos al elegir la modalidad multicloud. Por ejemplo, con un enfoque multicloud es posible aprovechar las instancias de spot AWS (EC2) y asegurar la capacidad de computación a bajos precios, pero también es posible utilizar las máquinas virtuales de baja prioridad de Azure o las máquinas virtuales interrumpibles de Google Cloud para obtener un mejor precio cuando las EC2 se escapan del presupuesto. De este modo, es posible adaptar el rendimiento y los costos a las necesidades de la empresa. Además, una plataforma multicloud permite analizar, predecir y estimar los gastos de los diferentes entornos. 3. Entrega mayor facilidad y agilidad Manejar una estrategia de nubes múltiples no es una tarea sencilla. Hay organizaciones tradicionales en las que la transformación digital ha significado un esfuerzo adicional: luchan con sus antiguos sistemas de TI, infraestructura y proveedores de hardware. La heterogeneidad de las plataformas de nubes puede traer demasiadas complicaciones en este tipo de casos, pero un portal multicloud elimina todos estos problemas. Al dejar encargada a una empresa experimentada en el manejo de nubes, se puede conseguir una mayor agilidad. 4. Automatiza y gestiona los entornos La automatización garantiza la eficiente gestión de datos, aplicaciones e infraestructura a través de múltiples entornos de nube; amplía las capacidades de despliegue conectando aplicaciones y procesos de flujo de trabajo para ofrecer los servicios empresariales con mayor rapidez. Por todas estas razones, cada vez es más importante integrar todos los servicios desde una sola plataforma. El portal multicloud de Telefónica permite gestionar los recursos de una forma eficiente. Utiliza un panel único de gestión que integra los principales servicios de la nube de internet, desde donde es posible, entre otras muchas cosas más: Configurar todos los servicios. Automatizar los despliegues y el ciclo de vida de todos los entornos de nube. Gestionar gastos. Establecer roles de usuario y políticas de uso. Obtener informes y recomendaciones sobre cada entorno. Cómo optimizar recursos con un panel de control multicloud4 beneficios del multicloud para empresas corporativas
Cómo optimizar recursos con un panel de control multicloudSebastián Molinetti 26 septiembre, 2020 A la hora de gestionar sus sistemas, aplicaciones y, con ello, mejorar la experiencia de usuario y el rendimiento de diversos procesos, las empresas deben optar por soluciones que, además de lo anterior, les permitan optimizar recursos y administrar de manera eficiente su infraestructura en la nube. Pero, ¿cómo hacerlo? La respuesta está en un panel multicloud. Dado el gran nivel de digitalización y competitividad del mercado actual, las compañías necesitan entornos escalables que les permitan agilizar sus procesos, optimizar recursos y adaptarlos a necesidades específicas. En ese sentido, una estrategia multicloud ofrece a las empresas beneficios como: Dinamismo. El multicloud permite a las organizaciones incrementar la agilidad de sus operaciones, evitar o minimizar bloqueos de un proveedor y gestionar sistemas o software dependiendo de las exigencias del momento. Escalabilidad. En la actualidad, las operaciones, sistemas y aplicaciones requieren de una arquitectura modular, algo clave en todo plan de optimización de recursos. Un enfoque multicloud brinda a las organizaciones esta posibilidad. Ahorro de costos. A la hora de saber cómo optimizar recursos, una infraestructura multicloud es determinante, pues no es necesaria una gran infraestructura propia para alojar aplicaciones, datos, etc. Ahora bien, para que las compañías puedan agilizar sus operaciones y optimizar recursos al máximo, un panel multicloud es una herramienta de carácter estratégico. Panel multicloud: optimización de recursos y mayor eficiencia en las operaciones Al implementar un panel multicloud, las empresas pueden gestionar de mejor manera sus software y sistemas, independientemente del proveedor cloud del que se trate. Se trata de una solución indispensable en todo plan de optimización de recursos. ¿Las razones? Entre las principales, vale la pena destacar: 1. Control total de todas las cloud Gracias a un panel multicloud, las empresas pueden administrar todas las clouds con las que trabajan, pudiendo destinar o disminuir recursos a cada una en la medida que sea necesario. Así, las organizaciones pueden monitorizar y crear alertas de los elementos desplegados con límites para cada entorno, asignar roles de usuario y políticas de uso, auditoría y flujos de aprobación, mejorando el rendimiento de sus plataformas. En la misma línea, un panel multicloud brinda la posibilidad de gestionar un catálogo de plantillas de máquinas virtuales y/o plantillas avanzadas. Además, ofrece automatización de despliegues (Chef, Ansible y Docker) para optimizando procesos y cargas de trabajo. 2. Medición de todos los servicios cloud Un panel multicloud ofrece la posibilidad de gestionar -en tiempo real- todos los servicios cloud con los que trabaja una empresa, generando informes de los diferentes entornos, ofreciendo predicciones e información sobre el gasto en cada cloud, estimaciones de costos para nuevos despliegues, etc. 3. Optimizar el uso y gasto de cada cloud Al utilizar un panel multicloud, las organizaciones pueden obtener recomendaciones según la utilización de los recursos, automatizar y gestionar el ciclo de vida de cada cloud, gestionar redes y planificar tareas, entre otras posibilidades. En definitiva, para saber cómo optimizar recursos al máximo, es necesario apoyarse en un partner estratégico líder en su área. Por eso, Multicloud de Movistar es la solución ideal para que las empresas puedan administrar todas sus cargas en la nube desde una sola herramienta, garantizando seguridad y máxima eficiencia en las operaciones. 4 servicios cloud que una empresa digitalizada debe utilizar4 formas en que un portal multicloud te hace más eficiente