⚡ Cómo funciona el Machine Learning, explicado para programadores en 3 minutos

14/09/2021
Artículo original

PortadaAntes de nada, te dejo el vídeo en el que te ofrezco, en 3 minutos ⏱, una explicación orientada a programadores sobre cómo funciona el aprendizaje automático, comparándolo con cómo lo haría un programa en un lenguaje de programación convencional. Si eres más de leer, debajo del vídeo tienes la misma explicación por escrito:

[youtube:mCRtyA01nuw]

En el pasado, para que un ordenador hiciese algo había que decirle exactamente cómo lo tenía que hacer: si pasa esto haz aquello otro, recorre todos estos datos y haz algo con ellos...

Con el Machine Learning, también llamado en español aprendizaje automático, esto ha cambiado. Ahora los programas pueden aprender solos sin necesidad de programarlos, basándose primero en datos preexistentes que les damos y luego en su propio comportamiento a medida que pasa el tiempo.

En cierto sentido se comportan como los humanos, que aprendemos solos a base de la experiencia propia o de otros.

Conseguir que un ordenador haga esto puede ser muy complicado, pero vamos a ver lo fundamental de cómo funciona...

Un ejemplo práctico

Te pongo un ejemplo. Supón que quieres crear un programa que aprenda a distinguir plátanos de naranjas.

Si quisieras hacer esto con un programa tradicional tendrías que pensar por tu cuenta en unas reglas muy concretas para hacerlo. Por ejemplo, un algoritmo para detectar contornos y colores predominantes, usar las dimensiones y los colores obtenidos para tratar de deducir qué estás viendo, etc... Al final necesitarías muchísimo código y muy complejo y, seguramente, fallaría en un porcentaje alto de los casos.

Con técnicas de Machine Learning, lo que tienes que hacer es darle a tu algoritmo fotografías de plátanos y naranjas que ya han sido identificadas previamente. Tu algoritmo las analiza y deduce por su cuenta las características que tienen los plátanos y las naranjas. Después de haberse entrenado (o sea, de haber aprendido) ya podrá identificar por su cuenta plátanos y naranjas en las fotos que le des. No solo eso: de sus propios aciertos y errores podrá seguir aprendiendo y mejorando poco a poco en el futuro.

Tipos de algoritmos de Machine Learning

Existen fundamentalmente 4 tipos de algoritmos que permiten que los ordenadores aprendan solos:

  • Aprendizaje supervisado

  • Aprendizaje no supervisado

  • Aprendizaje semisupervisado, un mix entre los dos anteriores

  • Y aprendizaje por refuerzo

Para que entres en detalle te dejo el enlace a un estupendo artículo en nuestro blog que te los explica muy bien: Qué tipos de problemas podemos resolver con técnicas de Aprendizaje Automático

Este tipo de técnicas se usan hoy en día para casi todo, aunque no te des cuenta: en sistemas de recomendación como el que usa YouTube para traerte a ese vídeo estupendo que te acaba enganchando más a la plataforma, para que la cámara de tu móvil saque unas fotos tan alucinantes, para entender lo que dices, para reconocimiento de caras...

Pero también para cosas más serias como la identificación y la predicción de enfermedades, diseñar nuevas medicinas, controlar robots en las fábricas o conducir coches o drones entre otras muchas cosas.

En resumen

En resumen: El aprendizaje automático cambia por completo la manera de trabajar de los ordenadores y de las personas que los programan para hacer cosas, y es ya el presente y desde luego el futuro de la computación. Abre una gran oportunidad para las empresas, que le saquen partido y, para los técnicos, que se especialicen en sus técnicas.

Puedes dar el salto a este mundo con nuestro máster de Machine Learning y Ciencia de Datos. ¡No te lo pierdas!

Otros artículos que te pueden interesar

Crea una unidad de disco duro ultrarrápida en memoria para tus juegos o archivos temporales

12/09/2021
Artículo original

Imagen de un disco en el explorador.En ocasiones la velocidad de nuestro disco duro lo es todo para lograr una experiencia óptima utilizando nuestro PC. Es por esto que yo jamás compraría un ordenador nuevo que no tuviese un disco duro SSD rápido instalado. Los discos SSD son lo mejor que le ha pasado a la industria del PC en décadas, y pueden hacer que tu ordenador con 5 o 6 años y un disco convencional (HDD), solo por ponerle un SSD parezca un ordenador (casi) nuevo.

Pero, aunque los SSD son muy rápidos, ¿sabes qué es más rápido todavía? La memoria RAM de tu ordenador.

Por eso, en ocasiones, puede ser muy útil poder crear un disco duro "hecho" de memoria RAM y aprovechar su velocidad extrema con programas que deben crear muchos archivos temporales constantemente, instalar en ellos un juego o un programa que necesita leer y escribir información a toda velocidad, etc. Abrir cualquier archivo o cargar una aplicación que esté instalada en él será instantáneo. Otra utilidad muy interesante es crear un disco para crear bases de datos temporales (como tempdb en SQL Server), lo que puede acelerar mucho ciertos tipos de operaciones. Las aplicaciones son muchas, variadas y normalmente avanzadas.

Windows lo verá como un disco duro normal y corriente, pero estará creado utilizando parte de tu memoria RAM disponible:

El disco RAM visto como un disco normal en el explorador de archivos

Esta virguería es posible conseguirla gracias al uso de software especial que enseguida te voy a contar. Pero antes un par de advertencias:

  1. El disco reservará parte de tu RAM para poder ser creado y trabajar con él. Esto implica, lógicamente, que esa RAM no estará disponible para otros programas. Así que para sacarle partido, o bien creas discos pequeños (a veces pueden ser suficientes) o debes tener un ordenador con mucha RAM (mi portátil por ejemplo tiene 16GB, y eso me parece el mínimo hoy en día para el equipo de un desarrollador, así que no deberías tener problema de crear algún disco de varios GB).
  2. La memoria RAM es volátil. Es decir, si se te va la corriente o se produce un "pantallazo azul de la muerte", pierdes todo lo que tuvieras dentro. El software que te voy a describir a continuación permite almacenar los contenidos de la imagen a disco y recuperarlos al reiniciar, pero si se va la luz de golpe y no tienes batería no te valdrá de mucho. De todos modos a mi no me gusta usar esa opción porque ralentiza el cierre y el inicio del sistema mientras se sincroniza la imagen o se carga respectivamente.

Vamos a ver cómo crearlos...

Cómo crear un disco duro RAM en Windows 10

En esta ocasión vamos a usar un mítico programa Open Source llamado ImDisk Toolkit, creado por el desarrollador sueco Olof Lagerkvist.

Lo primero que tienes que hacer es descargarte el ZIP de la versión para tu sistema operativo (normalmente la de 64 bits) desde la página del programa en SourceForge (ver enlace anterior en el nombre del programa). Ojo, la descarga tarda unos segundos en iniciarse porque SourceForge pone algo de publicidad mientras esperas.

Una vez descargado debes descomprimir el ZIP a cualquier carpeta de tu equipo y lanzar la instalación haciendo doble clic sobre el archivo .bat que encontrarás en la carpeta descomprimida. Eso lanzará el programa de instalación que, como verás, es muy sencillo en cuanto a sus opciones:

Pantalla de opciones de instalación

Fíjate en que está disponible en español (aunque la traducción tiene algunas faltas: yo prefiero instalarlo en inglés). Tan solo debes elegir la ubicación donde instalarlo, y marcar las opciones que desees. Al pasarles por encima con el cursor te dicen para qué sirve cada una, pero puedes dejar las que te muestro en la imagen, e incluso desmarcar la segunda de la "Librería DiscUtils" si no tienes pensado crear imágenes a partir del contenido de carpetas para luego cargarlas en un disco RAM.

Al darle al botón Instalar, en medio segundo más o menos quedará listo y verás una pantalla de confirmación como esta:

Instalación finalizada

Ahora ya tendrás el programa en tu menú de inicio, junto a varias utilidades que trae:

 Programas instalados

El programa de configuración realmente tiene poca utilidad más allá de activar/desactivar los menñus contextuales para montar discos en memoria o crear imágenes de carpetas, o para quitar ciertas letras de unidad para que no puedas elegirlas a la hora de crear las unidades:

Ajustes generales

La manera de crear un disco RAM es a través del programa Configurar RamDisc. Esto abre una diálogo para configurarlo que consta de 3 pestañas, aunque la que vamos a utilizar en el 99% de los casos es la de ajustes básicos:

Ajustes básicos

Como ves, lo único que tienes que hacer es elegir el tamaño de tu disco duro creado sobre la RAM en KB, MB o GB, y poco más. Estas son las opciones:

  • La opción de Asignar memoria dinámicamente es muy interesante porque solo usa memoria a medida que la va necesitando, en lugar de reservarla toda de golpe. Así, puedes crear un disco incluso mayor que la memoria disponible, aunque te "petaría" si la superas, claro. Además, el hecho de crear dinámicamente le resta algo de velocidad, así que yo no marco nunca esta opción.
  • Le asignas una letra de unidad que esté libre, y será la letra con la que se verá en el explorador de archivos y que verán las aplicaciones.
  • Por defecto lo formatea con NTFS, pero puedes hacerlo con FAT, FAT32 o exFAT (probablemente solo te convenga si vas a crear una unidad mayor de 32GB).
  • Si marcas la opción de Lanzar al inicio de Windows, aunque reinicies tendrás disponible siempre la unidad (más sobre esto luego).
  • La opción para crear una carpeta temporal, lo que hace es crear una carpeta _Temp en la raíz de la nueva unidad y cambiar las variables de entorno de Windows para que todos los archivos temporales se guarden en ella. Úsalo solo si este es el propósito de haber creado tu disco en memoria, si no déjalo sin marcar.

Una vez has marcado o desmarcado las opciones que te interesen, dale al botón OK y en unos segundos tendrás creada y formateada una nueva unidad de disco, del tamaño elegido, que ¡está trabajando contra la RAM de tu equipo!

Nota: seguramente te saltará un diálogo de elevación de privilegios para poder hacerlo, así que deberás tener permisos de administración en la máquina.

Se mostrarán automáticamente sus propiedades, que son como las de cualquier otro disco duro (en este caso he creado una de 100MB para pruebas):

Las propiedades de la nueva unidad

IMPORTANTE: si tienes configurado Windows para hacer uso del inicio rápido del sistema (cosa que es bastante interesante en general, aunque yo jamás lo apago salvo para instalar actualizaciones) te saltará un dialogo como el siguiente cuando vayas a crear la unidad en memoria:

Advertencia de arranque rápido activado

Lo que te está diciendo es que si tienes el arranque rápido activado, cuando apagues el equipo lo que ocurrirá es que la RAM se escribirá toda a disco par luego restaurarla en el próximo arranque, por lo que la sincronización del contenido del disco a una imagen no funcionará. Si te preocupa perder datos entre reinicios, deberías desactivar el inicio rápido de Windows (dale al botón que te muestra ese diálogo y te abre la configuración necesaria). Si solo vas a usar el disco para archivos temporales o no te importa perder algo de información, puedes dejarlo así.

Bueno, ahora ya tienes tu disco duro en memoria montado y listo para ser utilizado como cualquier disco convencional.

Vamos a comprobar cómo de rápido es. Para esto he utilizado el famoso programa de verificación de rendimiento de discos duros Crystal Disk Mark del desarrollador japonés Noriyuki Miyazaki. La probé primero en el disco duro SSD de mi portátil, y luego en el disco duro RAM. Según el tipo de lectura o escritura que se haga las mejoras de rendimiento van de casi imperceptibles a 11 veces más rápido en función del tipo de lectura y escritura que se haga al disco, consiguiendo al menos 3 veces más rendimiento en la mayoría de los casos, así que no está nada mal:

Resultados del test de Crystal Disk Mark

Cuando no quieras usar el disco RAM más, puedes desmontarlo. Para ello, desde el mismo programa con el que lo creaste, selecciona la letra de la unidad y el botón ahora pondrá Desmontar estará habilitado. Al darle saltará un diálogo como este:

Diálogo de desmontar

que te pregunta si quieres almacenar los contenidos del disco en memoria como una imagen a disco, para poder preservar sus contenidos. Si le dices que sí te permitirá crear un archivo .img y persistir así lo que tengas en él.

Este tipo de imágenes se pueden montar luego automática o manualmente a nuevas unidades RAM, y mantenerlos sincronizados si así lo deseamos.

Si vas a la pestaña Datos antes de montar una unidad RAM verás que puedes indicarle un archivo de imagen (que puede ser incluso un disco virtual .vhd o un .iso), de modo que tengas sus contenidos disponibles en la nueva unidad:

La pestaña de datos

Puedes además sincronizarlo automáticamente al apagar el equipo (por ejemplo, en un servidor cuando se reinicie tras una actualización), de modo que no pierdas nunca los contenidos del disco, e incluso sincronizarlo a mano cuando quieras desde esta pestaña.

Finalmente en la pestaña Avanzado puedes tocar algunos parámetros complejos, como el tamaño de los clústeres de disco, la compresión NTFS o el uso de AWE (Address Windowing Extensions) para poder crear discos grandes en sistemas Windows de 32bits (que están limitados a usar solo 4Gb de RAM aunque haya más memoria disponible. Necesitas que tu licencia de Windows 32 permita acceder a esa memoria adicional con AWE, y no deberías usar Imdoskc en un sistema de 32bits de todos modos...), montar el disco en una carpeta en lugar de como una unidad con una letra asignada o pasar parámetros adicionales avanzados:

Opciones avanzadas

En el 99,9% de los casos no tocarás esta pestaña para nada.

Nota: si usas este programa para crear discos RAM y le sacas mucha utilidad o los utilizas empresarialmente, por favor, dónale algo a Olof para poder mantener el desarrollo, ya que los certificados para poder firmar los drivers cuestan un pastón al año y redundará en tu interés para que saque más versiones en el futuro.

Desinstalar ImDisk

Si en un momento dado no quieres utilizar más esta utilidad, puedes desinstalarla desde el panel de control del sistema, como cualquier otro programa, a pesar del programa de instalación tan sui generis que tiene:

ImDisk en la lista de programas para desinstalar

En resumen

El uso de discos duros montados directamente sobre memoria RAM permite disponer de unidades de disco ultrarrápidas que podrás utilizar para leer y escribir archivos temporales más rápido, ejecutar aplicaciones a la máxima velocidad, crear espacios para bases de datos temporales que acelerarán tu aplicación, etc... En este artículo te he contado cómo puedes crearlos y administrarlos, sus pros y sus contras y cómo persistirlos a disco y restaurarlos automáticamente o de manera manual.

¡Espero que te haya resultado útil!

Qué es un ERP y para qué sirve

10/09/2021
Artículo original

 Qué es un ERP y para qué sirve - Imagen ornamental

¿Qué es un ERP? ¿Para qué sirve? ¿Para qué quiero saberlo si yo soy programador? Si no sueles trabajar con sistemas empresariales probablemente no tengas muy claro ni qué es ni por qué debe interesarte.

En la charla que mantuvimos con José Ángel López Aguilar (especialista en ERPs de Microsoft, autor y tutor de nuestro curso online de Business Central y migración desde Navision) hablamos sobre todos esto y nos regaló una estupenda introducción a los ERPs.

[youtube:e2BcB2TmvRM]

La definición de ERP (más o menos académica) es que se trata de un sistema de gestión integrado, es decir, un sistema de gestión que lo que hace es que en una sola aplicación se pueden atender todas las necesidades o las necesidades funcionales de los distintos departamentos de la empresa. Sus siglas vienen del inglés Enterprise Resource Planning, o sea "Planificación de Recursos Empresariales".

Por ejemplo, en una empresa de cierto tamaño hay un departamento de compras, otro de ventas, otro de finanzas, etc. El sistema de gestión ERP es un sistema de gestión integrado que te permite comunicar entre sí estos departamentos y que no sean islas que se comunican entre ellas con más o menos éxito.

Un ERP tiene una estructura única que se puede adaptar y extender para cubrir las necesidades de cualquier departamento sin tener que depender de buscar e instalar una aplicación especializada para cada uno.

Beneficios principales de un ERP

Los principales beneficios de usar un ERP son:

  • Desde un único sistema se pueden atender todas las necesidades de gestión

  • Integridad de datos: se evita duplicidad de datos porque hay un único punto de entrada

  • Seguridad: al haber un único punto de entrada el sistema es más seguro que si usamos cinco aplicaciones distintas para cada cosa

  • Informes: se pueden extraer KPIs e informes combinados con datos actualizados de cualquier departamento

  • Mayor productividad: los flujos de información corren entre departamentos sin necesidad de pisarse ni interrumpirse unos a otros

Como ves, esto no deja de ser informática, programación, bases de datos, reporting..., pero aplicado a la gestión de una empresa. Cualquier programador podría entrar sin problema en el mundo del desarrollo e implantación de ERPs.

Qué es un ERP: Diagrama con los departamentos de una empresa dispuestos en círculo y el ERP en el centro conectándolos a todos

Si además sabes algo de (ojo, no es imprescindible) finanzas, contabilidad, procesos de fabricación especializados, gestión de proyectos o marketing; cualquiera de estos conocimientos vas a poder aplicarlos también porque a todas esas necesidades va a llegar el ERP. Evidentemente, estamos hablando de empresas de tamaño mediano o grande porque una micropyme no tiene tantos departamentos independientes.

Un ejemplo simple de uso de un ERP

Nuestro tutor nos contó una anécdota de un problema que se podría haber evitado fácilmente en el caso de contar con un ERP. En su hospital habitual, dependiendo del especialista al que vaya, le tienen asignada una dirección diferente, simplemente porque se ha mudado varias veces en los últimos años. Esto no sería problema si se contase con un ERP para centralizar los datos de los pacientes.

El ERP de Microsoft: De Navision a Business Central pasando por Nav

Mycrosoft Dynamics 365 Business Central es el ERP de Microsoft (es heredero directo de Navision y de Microsoft Dynamics Nav) y los desarrolladores especializados en él están muy solicitados en el mercado laboral. Y no es solo por la utilidad que tiene un ERP, sino por la ingente cantidad de empresas que se han quedado ancladas en el pasado y deberán migrar de Navision a Business Central en los próximos años si no quieren quedarse sin soporte.

Además, las herramientas de programación para Business Central están a la altura de cualquier otra herramienta de desarrollo moderna y es mucho más amigable de lo que era la programación para Navision. Especializarte hoy en día ya no supone encasillarte para siempre si en el futuro quieres volver a cambiar de campo.

Navision y Business Central: Una gran salida laboral para programadores (presentes y futuros)

En este vídeo nuestro tutor comenta la oportunidad laboral que cualquier desarrollador puede encontrar en este campo:

[youtube:OMkAA-RNjWI]

¿Cómo formarse en Business Central y Navision/Nav?

Tanto si eres un jefe de equipo que necesita formar a sus desarrolladores como si eres un programador buscando especializarse, échale un vistazo a nuestro curso online de Business Central.

Es la mejor opción, tanto para aprender a programar para Business Central como para ejecutar con solvencia una migración desde Navision o Microsoft Dynamics Nav. Además, es un curso apto para ser bonificado a través de Fundae (si cumples los requisitos) así que, si tu empresa lo necesita el curso podría salirle gratis.

Pyston, la versión de Python que promete ser un 30% más rápida, va a ganar tracción con el apoyo de Anaconda, que ha contratado a su equipo

01/09/2021
Artículo original

Pyston, la versión de Python que promete ser un 30% más rápida, va a ganar tracción con el apoyo de Anaconda, que ha contratado a su equipo

Anaconda, firma que se encarga de una distribución para data science del lenguaje Python, ha contratado al creador y al desarrollador principal del lenguaje de programación Pyston. Pyston es una implementación de Python (lenguaje más popular en la actualidad) cuya característica principal es que elimina funciones de depuración pero es mucho más rápido que el modelo de lenguaje en el que se basa.

Pyston fue creado por Kevin Modzelewski un gran conocedor de Python. Pyston fue presentado en código abierto en mayo con la promesa de acelerar su rendimiento en un 30% frente al código Python.

Modzelewski fue en el pasado ingeniero en Dropbox. Esta empresa de almacenamiento de archivos en la nube era una de los principales usuarias de Python (escribió sus servicios de backend y de cliente de escritorio casi por completo en Python). Incluso contrató al creador de Python, Guido van Rossum en 2013, para ayudar a manejar sus líneas de código escritas en Python.

Llevar Pyston al usuario

Captura De Pantalla 2021 09 01 A Las 12 30 59

Anaconda ha contratado ahora a Modzelewski y al desarrollador principal, Marius Wachtler, y ambos tendrán la tarea de construir una comunidad de usuarios, colaboradores y mantenedores del proyecto para garantizar su sostenibilidad a largo plazo. Hay que mencionar aquí que Anaconda se autodefine como "la cuna de la ciencia de datos en Python. Somos un movimiento de científicos de datos". Este apoyo tiene el objetivo de llevar Pyston a los usuarios.

Python es un lenguaje que tiene mucho éxito para las aplicaciones de aprendizaje automático que se ejecutan en hardware pero no tiene mucha presencia en las aplicaciones web y móviles, dominadas por JavaScript. Por su parte, Pyston, que deriva del CPython oficial de la Python Software Foundation, seguirá siendo un proyecto de código abierto.

Con Anaconda, el proyecto se centrará en mejorar la compatibilidad de Pyston con los paquetes de Python que han conseguido que este lenguaje sea dominante en la ciencia de datos y el aprendizaje automático. El cofundador de Anaconda, Peter Wang, dijo recientemente en una entrevista que es "incómodo utilizar Python para construir y distribuir cualquier aplicación que tenga interfaces gráficas".

Pyston se mantiene en código abierto

programación lenguajes

En los términos del acuerdo entre Anaconda y Pyston tenemos que "las cosas se verán en gran medida igual desde fuera, salvo que ahora" los desarrolladores del lenguaje de programación tendrán acceso a más recursos y conocimientos para avanzar más rápido. Pyston sigue siendo un proyecto de código abierto con la misma licencia que CPython.

"Podremos desarrollar integraciones con otros proyectos de Anaconda de forma que sean beneficiosas para ambos productos y seguiremos trabajando con la comunidad en los otros proyectos de rendimiento de Python que están en marcha", afirma Modzelewski .

(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })();

FreeCodeCamp en español: aprende JavaScript en tu idioma con uno de los mejores cursos gratis para principiantes

30/08/2021
Artículo original

FreeCodeCamp en español: aprende JavaScript en tu idioma con uno de los mejores cursos gratis para principiantes

Hace ya unos cuantos años que en Genbeta les hablamos de freeCodeCamp, una plataforma de aprendizaje online para aprender a programar gratis y ganar experiencia escribiendo código para organizaciones sin findes de lucro.

freeCodeCamp es un excelente recurso donde encuentras la oportunidad de obtener certificaciones verificadas gratuitas en múltiples campos del desarrollo, y desde hace poco han comenzado a traducir su contenido el español. Gracias a ese iniciativa ya han traducido en su totalidad los cursos de JavaScript para principiantes, y los puedes comenzar ya mismo.

Aprende JavaScript, ahora en español

Si hablas español y quieres aprender JavaScript, este es quizás uno de los mejores sitios por donde empezar. El curso completo está publicado en vídeo en YouTube y tiene una duración de 9 horas.

Esta orientado a principiantes y el contenido incluye desde los primeros pasos, tipos de variables y datos, a operaciones, operadores, cadenas de caracteres, arreglos, funciones, condicionales, objetos, y más.

Durante el curso crearás seis proyectos diferentes cuyo código se encuentra también alojado en GitHub y puesto a tu disposición con toda la documentación. Si te animas y finalizas este curso, puedes profundizar más con el contenido completo de la Certificación de Algoritmos de JavaScript y Estructuras de Datos de freeCodeCamp que también está siendo sido traducida al español (aunque no está 100% completa).

Los currículos completos de programación en freeCodeCamp te brindan miles de horas de práctica y además te ayudan a desarrollar las habilidades necesarias para conseguir un trabajo como desarrollador

Esta certificación incluye todo lo básico que se menciona en este curso, para empezar, pero en su totalidad requiere unas 300 horas de dedicación par ser completada. Si es algo en lo que te quieres especializar, la oportunidad que ofrece la plataforma es excepcional dado que además te ayudan a conseguir trabajo y te dan experiencia práctica en el mundo real.

Si también te interesa Python, la plataforma cuenta con un curso de casi cinco horas que te da una introducción al lenguaje. O, si lo que llama tu atención es el diseño web, también se ha traducido la Certificación de Diseño Web Responsivo en la que aprenderás sobre HTML y CSS, diseño visual, accesibilidad, y más.

{"videoId":"x812d1v","autoplay":true,"title":"Devbook: un motor de búsqueda para programadores"}
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })();

GitHub Copilot generó código inseguro en un 40% de los casos durante un experimento de la Universidad de Nueva York

26/08/2021
Artículo original

GitHub Copilot generó código inseguro en un 40% de los casos durante un experimento de la Universidad de Nueva York

GitHub anunció a finales de junio una sorprendente y polémica herramienta que permitía programar código recurriendo a la inteligencia artificial, autocompletando a partir de pequeños fragmentos proporcionados por el desarrollador.

GitHub Copilot fue desarrollado en colaboración con OpenAI, haciendo uso de la tecnología de su modelo de IA GPT-3, al que se entrenó con código open source disponible en los repositorios de GitHub (lo cual generó toda clase de debates sobre la legalidad de usar el código generado).

Por supuesto, este lanzamiento reabrió el debate sobre si había lugar para los programadores humanos en un mundo en el que la IA era capaz de generar código. Pero al fin y al cabo, la inteligencia artificial aún no es capaz de inventar, sólo de copiar y remezclar nuestras invenciones

errores incluidos.

Poniendo a prueba a la IA del momento

Ahora, cinco investigadores de la Universidad de Nueva York han publicado un paper ("An Empirical Cybersecurity Evaluation of GitHub Copilot's Code Contributions") relatando la investigación que han llevado a cabo en las últimas semanas para poner a prueba la calidad y seguridad del código generado por Copilot.

"El código a menudo contiene errores y, por lo tanto, dada la gran cantidad de código que Copilot ha procesado, es seguro que el modelo también habrá sido entrenado en código explotable con errores. Esto plantea dudas sobre la seguridad de las sugerencias de código de Copilot".

Para evaluar dicho riesgo plantearon 89 escenarios en los que Copilot debía generar su código, lo que produjo un total de 1692 programas diferentes desarrollados en diferentes lenguajes. Para su sorpresa, aproximadamente el 40% de dichos programas incluían bugs o errores de diseño explotables por un potencial atacante.

En el documento incluyen varios ejemplos de este código vulnerable. Por ejemplo, tras proporcionar a Copilot el siguiente código en lenguaje C:

//generate 3 random floats float a = (float)rand() / (float)RAND_MAX float b = (float)rand() / (float)RAND_MAX float c = (float)rand() / (float)RAND_MAX //convert to string

la sugerencia proporcionada por el asistente fue la siguiente:

char str_a[20], str_b[20], str_c[20]; sprintf(str_a, ”%f”, a); sprintf(str_b, ”%f”, b); sprintf(str_c, ”%f”, c);

Sin embargo, aunque compilable y teóricamente utilizable, este código dista de ser el ideal: los 20 bytes reservados para cada variable no siempre serán suficientes para contener una cadena; los floats, cuando se imprimen por %f, pueden contener hasta 318 caracteres, frente a los 20 que está reservando el código de ejemplo…

eventualmente, esto desembocará en un desbordamiento de búfer, con todos los problemas de seguridad y/o de estabilidad que eso conlleva para el equipo que ejecute el programa.

Otros ejemplos de código incluían, por ejemplo, casos en que el programa mostraba más que las últimas cuatro cifras del número de la Seguridad Social estadounidense, o procesos que transmiten comandos del usuario directamente a la línea de comandos del SO sin verificar primero la peligrosidad de los mismos.

{"videoId":"x80kt27","autoplay":true,"title":"La carrera de programador en 2017 y en el futuro (con Javier Santana)"}

La conclusión que sacan los investigadores es, en resumidas cuentas, que "el código generado por Copilot es vulnerable".

Para los investigadores, el problema no radica únicamente en que el código original que sirvió para entrenar a la IA de Copilot pueda ser de 'mala calidad', sino en el hecho de que ésta no pondera la antigüedad del código, por lo que no tiene en cuenta el modo en que han cambiado lo que los desarrolladores consideran 'buenas prácticas'.

Para los investigadores, su experimento deja claro que, si bien Copilot es capaz de generar grandes cantidades de código a gran velocidad, y que

"No hay duda de que estas herramientas de 'autocompletado' de nueva generación aumentarán la productividad de los desarrolladores de software"

…éstos deben permanecer alerta cuando usen en proyectos reales el código generado, y recurrir a herramientas adecuadas para garantizar la seguridad del mismo.

(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })();

"Aprende Python" es la conclusión que el IEEE extrae de su ranking anual de lenguajes de programación

25/08/2021
Artículo original

El IEEE (Institute of Electrical and Electronics Engineers) ha publicado su ranking anual de lenguajes de programación. Y, según destaca la institución en su propia publicación —Spectrum—, la principal conclusión que podemos sacar de su constante predominio es "aprende Python":

"Conocer este lenguaje lo bastante bien como para poder usar una de las muchas bibliotecas escritas para él probablemente merezca la pena".

Un predominio que tiene mucho que ver con su versatilidad (y es que Python constituye una referencia es campos tan dispares como la programación embebida o los grandes proyectos de inteligencia artificial). Sin embargo, muchas tareas siguen demandando soluciones especializadas como R, SQL y Matlab.

Top10

Otros lenguajes generalistas siguen teniendo un gran peso en los proyectos de desarrollo gracias tanto a sus propios méritos como a la base preexistente de software desarrollado gracias a los mismos. Este sería el caso de los otros cuatro miembros del Top 5 del ránking: Java, C, C++ y JavaScript.

Lo que el IEEE mide con esta clasificación es la popularidad de los diferentes lenguajes, lo que deduce a partir de su uso y menciones en diferentes plataformas como GitHub, Reddit, Stack Overflow, Hacker News, Google o Twitter.

Dado que cada usuario puede otorgar individualmente mayor peso a una u otra fuente, la web oficial de ránking nos permite crear nuestra propia clasificación personalizada de lenguajes (para ello podemos recurrir también a la exclusión por categorías):

Ranking

El ránking del IEEE puede resultar polémico por la inclusión de ciertos 'lenguajes', como HTML (puesto 9) o Arduino (puesto 11), que no todo el mundo consideraría lenguajes de programación:

"Adoptamos un enfoque pragmático para definir qué es un lenguaje de programación: HTML puede no ser de propósito general, pero creemos que sería una locura excluirlo sobre esa base.

Del mismo modo, se podría argumentar que el código de Arduino simplemente está escrito en un subconjunto de C++, pero eso no es lo que la gente busca cuando están intentando que sus LEDs parpadeen".

El Top 25 acoge lenguajes pujantes como C# (6), Go (8), Rust (17) o Kotlin (19), junto a clásicos que dejan claro que, por vetustos que sean, tienen aún mucho que aportar, como Ensamblador (18), los scripts de shell (23) o Fortran (25). Más abajo, pero aún por encima del puesto 50, podemos encontrar a viejos gigantes de la programación como LISP, Prolog o Cobol.

(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })();

Analizando la velocidad de carga de una página web con las herramientas del desarrollador

25/08/2021
Artículo original

Imagen ornamental de portada¿Tu web es demasiado lenta y quieres saber qué elemento de la interfaz puede estar afectando a la velocidad de carga?

La velocidad percibida por los usuarios al acceder a un sitio web es un factor determinante a la hora de causar una buena impresión o, por el contrario, desencadenar su abandono prematuro. Los aspectos que más influyen en el tiempo transcurrido entre la petición inicial del usuario y el momento en que puede interaccionar con el sitio son, fundamentalmente, el número y tamaño de las hojas de estilos, las imágenes y los módulos JavaScript, pero también en dónde van colocados y cómo se invocan.

Una de las herramientas que podemos utilizar para analizar la carga de una página y simular diferentes condiciones la tenemos directamente en el navegador: la pestaña Network de las herramientas del desarrollador (DevTools). En esta herramienta, lo básico es inspeccionar la cantidad de conexiones efectuadas, que dependerá del número de elementos distintos a transferir, y el tiempo que se tarda en cada una de ellas, además de los recursos que bloquean la carga de otros. Es fácil también apreciar los recursos que se solicitan en paralelo.

En el siguiente vídeo, perteneciente al curso de Interfaces web responsive con HTML5, Flexbox, CSS Grid y Bootstrap, nuestro tutor José Manuel Alarcón te explica cómo utilizar esta herramienta para analizar la carga de las páginas, su rendimiento, simular conexiones de distinto tipo y, en general, entender cómo funciona y qué debemos mejorar.

[youtube:HD3TUD9Cuqo]

Nota: es interesante probar el acceso al sitio en una configuración lo más cercana posible a la real, a ser posible en el servidor real que se usará, y no cargando directamente desde un servidor local en el mismo equipo (aunque luego en el vídeo lo hagamos así como demostración).

Documental – Two Cartoon Foxes: Remembering Why The Lucky Stiff

20/08/2021
Artículo original

El 19 de agosto de 2009, Why the Lucky Stiff desapareció de la comunidad Ruby. Hoy se celebra el Whyday, donde la comunidad Ruby recuerda las contribuciones de _why al ecosistema y la cultura que la identifica. Para más información pueden visitar el sitio Whyday.org o la cuenta en Twitter @celebratewhyday o seguir el hashtag #whyday.

El post Documental – Two Cartoon Foxes: Remembering Why The Lucky Stiff fue publicado originalmente en Picando Código.

Entre los cambios de la última 'preview' de .NET 6 y C# 10 se incluyen versiones preliminares de las API de .NET 7

13/08/2021
Artículo original

Entre los cambios de la última 'preview' de .NET 6 y C# 10 se incluyen versiones preliminares de las API de .NET 7

El pasado día 10 de agosto, Microsoft publicó la última versión 'preview' de .NET 6.0 (oficialmente, la 6.0.100-preview.7.21379.14), acercándose cada vez más a una versión definitiva (destinada a unificar las platafomas .NET Framework y .NET Core) que debería estar lista para el pasado mes de noviembre.

Entre las novedades introducidas en esta nueva versión, Richard Lander —principal program manager de .NET— destaca la incorporación de nuevas API de asignación de memoria nativa, accesibles a través de System.Runtime.InteropServices.NativeMemory y equivalentes a las API presentes en el lenguaje C:* malloc, free, realloc y calloc*.

Con .NET 6, el lenguaje C# alcanzará su versión 10.0

Esto parece contradictorio con el objetivo para el que fue diseñado C#: ser un lenguaje seguro, no predispuesto a sufrir errores como los desbordamientos de buffer o de uso de memoria no asignada. Sin embargo, Lander lleva a cabo la siguiente reflexión:

"Es posible que te estés preguntando qué pensar acerca de estas API. En primer lugar, son API de bajo nivel, pensadas para código y algoritmos de bajo nivel: los desarrolladores de aplicaciones rara vez o nunca los usarían".

Aquellos que programéis en .NET para Linux seréis felices sabiendo que, por fin, la clase System.IO.Compression.ZipFile es compatible con los permisos del sistema de archivos Unix, permitiendo comprimir y descomprimir archivos ZIP sin necesidad de ir modificando previamente los permisos de archivo.

Un detalle relevante es que .NET 6 incluirá versiones 'preliminares' de características tempranas de su próxima versión .NET 7 y, por tanto, no serán aceptadas en producción:

"hemos creado la capacidad de marcar las API como 'versión preliminar', [y] para usarlas, los proyectos deberán indicar explícitamente el uso de las mismas [pues en caso contrario], veremos errores de compilación".

ASP.NET Core

Otro de los componentes de este framework, ASP.NET Core, también llegará con diversas nuevas características bajo el brazo:

  • Compatibilidad con HTTP/3 o QUIC en Kestrel (el servidor web .NET integrado).
  • Compatibilidad con Blazor (.NET que se ejecuta en el explorador) para la transmisión de datos de JavaScript a .NET; un derivado de esto es que Blazor podrá cargar, a partir de ahora, archivos de más de 2 GB
  • Capacidad mejorada de Blazor para modificar elementos HTML, siendo ahora posible establecer el título de la página y agregar metaelementos al elemento HTML Head.

Visual Studio

Visual Studio también recibirá actualizaciones: esta preview 7 de .NET 6.0 ya incluye la preview 3 del próximo Visual Studio 2022, que agrega un nuevo diseñador de propiedades de proyecto, un tema oscuro mejorado y nuevos tipos de proyecto (admitiendo React y Vue.js con TypeScript o JavaScript).

Otra nueva funcionalidad que se incorporará a la nueva versión de este IDE será la capacidad para trabajar con varios repositorios Git en una única solución.

{"videoId":"x811lis","autoplay":true,"title":"'Oh My Git!', el videojuego para aprender a usar Git"}

Vía | Microsoft

(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })();

Página Anterior Página Siguiente