jueves, 23 de marzo de 2023

Curso C# 1 ( Instalación .NET creación de proyectos de consola y web)

 


Documentación y programa de entrenamiento oficial
 
1 CLR (Common Language Runtime)
CLR es un entorno de ejecución para códigos de programas que corren sobre plataformas Microsoft, en el caso que nos ocupa .NET. CLR es el encargado de compilar una forma de código intermedio llamado Common Intermediate Language al código nativo mediante un compilador en tiempo de ejecución.

No debe confundirse el CLR con una máquina virtual que, una vez compliado el código corre de forma nativa sin necesidad de ninguna capa de abstracción sobre le hardaware. Es una implementación del estándar CLI (Common Languages Insfraestructure).

Los desarrolladores que usan CLR escriben el código fuente en un lenguaje compatible con .NET; C#, Visual basic… y en tiempo de compilación un compilador .NET convierte el código.

CLR funciona solamente en máquinas Windows. La manera en que la máquina virtual se relaciona con el CLR permite a los programadores ignorar muchos detalles específicos del microprocesador que se estará ejecutando en el programa, CLR también permite otros servicios importantes, como

·         Administración de la memorio

·         Administración de hilos (threads)

·         Manejo de excepciones

·         Recolección de basura

·         Seguridad

¿Qué tipo de aplicaciones se pueden desarrollar con .NET

Microsoft lanzó la primera versión del framework .NET en 2002, en esa época las aplicaciones desarrolladas en .NET sólo podían ejecutarse en máquinas Windows con NET Framework instalado. Esto ha cambiado con NET core.

Las aplicaciones desarrolladas en .NET Framework siguen pudiendo funcionar sólo en máquinas Windows, Mientras que NET Core se puede usar tanto en Windows como en MAC o Linux.

La última aplicación .NET es NET Core que apareció por 2016, se trata de una fuente de reimplementación abierta en el firmware al completo. Está disponible para Windows Mac y Linux, se proporciona un subconjunto de las bibliotecas de las clases .NET.

NET Core es compatible con el desarrollo de aplicaciones de consola y aplicaciones web basadas en ASP NET Core compatible con todos los sistemas operativos.

Diferencias de .NET Framework con .NET Core

Las diferencias principales son las siguientes:

 

.NET Framenwork

·        Ligado a Windows

·        Uso de CLR

·        Librería completa pero pesada

·        No es Open Source

.NET Core

·        Multiplataforma (Windows, Mac, Linux)

·        Open Source

·        Se puede implementar como parte de la propia aplicación

·        La herramienta de desarrollo no está fuertemente a VisualEstudio

·        Mejor rendimiento y tiempo de ejecución

·        Solo migradas aplicaciones Web y de consola(en la versión 3 se amplía con Windows forms y WPF)

 

C# & dotnet con Visual Studio

Una vez tenemos descargado e instalado VS code, necesitamos una manera de poder crear proyectos de C#, para ello vamos a descargar un SDK o un conjunto de programas que nos van a permitir crear proyectos, ejecutarlos, testearlos, etc. Pero para poder hacer esto en dotnet por lo general vamos a descargar el SDK para ello iremos a

https://dotnet.microsoft.com/en-us/download

Esta página es donde se encuentren la mayoría  de proyectos que maneja Microsoft, aquí encontraremos .NET Core y .NET Framework.

En nuestro caso descargaremos .NET Core para empezar a crear proyectos, pero en este caso descargaremos solo el SDK


Haremos la instalación del SDK el típico siguiente, una vez instalado para ver si todo se ha instalado correctamente, podemos abrir una terminal de símbolo del sistema y ejecutar:


Lo que nos indica que ya tenemos el SDK correctamente instalado y nos da la versión en este caso es la 7.0.201

Creando un proyecto de consola

Vamos a ver los diferentes tipos de proyecto que podemos crear con .NET y la manera de hacerlo. Para tener una primera fotografía de todo lo que podemos hacer con dotnet podemos abrir una terminal y ejecutar el comando dotnet new –help, lo cual nos mostrará información muy relevante:


Vamos a generar nuestro primer proyecto

Con la consola navegaremos a la ubicación deseada en este caso vamos a ir al desktop y crearemos una carpeta con el comando mkdir que podemos llamar proyecto_1.

Nos metemos en la carpeta con cd proyecto_1 y una vez dentro podemos generar el primer proyecto que será un proyecto de consola con el comando:

dotnet new console -o myfirstapp

donde -o es donde queremos la salida de nuestro proyecto y le indicamos que lo cree en otra carpeta que podemos llamar myfirstapp:

Si hacemos enter


Si vamos al escritorio veremos que se han creado las carpetas de nuestro primer proyecto:


Podemos abrir este nuevo proyecto en nuestro VScode veremos nuestro primer proyecto:


VScode detecta que es un proyecto C# y nos pedirá que agregemos las extensiones correspondientes para tener soporte, le diremos que si.

Si no apereciera podemos instalarla desde extensiones buscando C#


Para ejecutar nuestro proyecto de consola hello world lo único que tenemos que hacer es abir una terminal en vscode  y ejecutar el comando dotnet run


Con esto ya vemos nuestra salida del programa “Hello. World”

Creando un proyecto Web

Del mismo modo que hemos creado un proyecto de consola podemos crear proyectos web vamos a ver cómo.

Volvemos a abrir una consola en el pc y nos ubicamos en la carpeta proyecto_1

Y una vez dentro vamos a crear un nuevo proyecto esta vez web con el comando



 Donde aspnetapp es el nombre de nuestro proyecto (puedes poner el que quieras) si hacemos intro veremos que se crea nuestro proyecto web

Si abrimos nuestro proyecto en VScode, en el archivo program.cs veremos el siguiente código:

var builder = WebApplication.CreateBuilder(args);
 
// Add services to the container.
builder.Services.AddControllersWithViews();
 
var app = builder.Build();
 
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
 
app.UseHttpsRedirection();
app.UseStaticFiles();
 
app.UseRouting();
 
app.UseAuthorization();
 
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
 
app.Run();


si nos fijamos nuestra app está usando autorización (remarcado en azul), cuando creamos una nueva App mvc esto es así por defecto. Si queremos crear una App sin Auth en nuestro comando en la consola deberemos añadir el siguiente flag:


Y listo ya hemos creado nuestro proyecto mvc c#


Para ejecutar nuestra app, como ene l caso de la app de consola bastará con abrir la consola y hacer dotnet run

Se iniciará la compilación y nos creará un servidor (en amarillo)´


Si vamos a esa dirección local podremos ver nuestro proyecto web de inicio










sábado, 18 de marzo de 2023

Guía para escribir prompts para Midjourney ( IA texto - imagen )



 

En esta entrada vamos a hacer un “cheatsheet” detallado de palabras clave, comandos y trucos para mejorar la producción de imágenes con la conocida IA Midjourney. 

¿Qué es Midjourney?

Si aún no conoces esta increíble IA debes leer esta entrada del blog. 

Midjourney es una inteligencia artificial de generación de imágenes mediante texto (prompts) similar a DALLE-2 de Open AI y DreamStudio de Stable Diffusion. Esta aplicación  usa alrededor de setecientos millones de imágenes distribuidas por todo internet para generar impresionantes imágenes basadas en el texto o prompt proporcionado por el usuario. 

Pese a encontrarse en fase beta, cada día se le van añadiendo más y más funciones y mejoras, si ya en esta fase beta las posibilidades parecen infinitas cuesta imaginar a dónde puede llegar en un futuro. 

Lo primero que vas a necesitar es descargarte Discord y crearte una cuenta verificada. Luego buscarás el servidor de Midjourney y entrarás en alguna de las salas para “novatos”  newbies.


En el cuadro de diálogo debes escribir /imagine y hacer click en la etiqueta que te aparecerá encima que dice “prompt”, una vez hecho esto podrás escribir la descripción que la imagen que deseas que la IA realice. 

Prompt texto bruto

Si ya has utilizado la aplicación midjouney habrás observado que cuanto más descriptivo y detallado sea tu prompt, más espectacular y único será el resultado entregado. Normalmente los usuarios principiantes suelen usar textos directos y sin formato como “estudio de música realista” lo que podría generar algo como la siguiente imagen. 

Estas imágenes que vienen a ser el resultado de un prompt básico, pueden ser suficientemente atractivas en función de lo que el usuario necesite pero existen muchas más opciones que un texto sin formato para poder generar resultados predecibles y muy consistentes. 

Vamos a ver una lista de opciones avanzadas con las que podremos generar variaciones en las imágenes y algunos de los ajustes avanzados . 

En nuestro prompt añadiremos la palabra clave "estilo", seguido de alguna de las siguientes opciones:

  • estilizar 
  • caos
  • Resolución 
  • Relación de aspecto 
  • Imagen como URL
  • Ponderación de palabras 
  • Filtrado de palabras 

En pocas palabras, el estilo se ve afectado por las palabras clave de nuestra elección, podemos especificar qué tipo de estilo queremos, podemos ver una amplia clasificación de los tipos de estilo que podemos elegir: 


1. Palabra clave estilo

Proporcionar un conjunto de palabras clave de apoyo asociadas a los estilos creará diferentes resultados en función del tipo de estilo elegido. Estas son algunas de las palabras clave y subtipos basados en tipo de arte/diseño/artista/género que podemos elegir como estilos: 



2. utilizar el nombre del artista como estilo


También puede especificar el artista como su estilo de salida . A continuación se muestran algunos ejemplos
/imagine caballo galopando al atardecer pintando al estilo Andy Warhol



3. utilizando las propiedades de renderizado/iluminación como estilo




4. Estilizar el resultado

Puedes añadir el ajuste--s <some number>( denotando estilo )
Las siguientes imágenes son de las mismas indicaciones con la opción de estilizar bajo y alto.

/imagine bomberos --s 6000


5. caos - Aumentar la abstracción

Toma un número de 0 a 100 para aumentar o disminuir el nivel de abstracción del tema

/imagine la torre Eiffel --caos 60


6. Resolución

Para especificar la resolución de salida, puede utilizar algunas de las palabras clave habituales como 8K , 4K , fotorrealista , ultra fotorrealista , ultra detallada, detalles intrincados etc
O puede ir con los ajustes estándar para salidas predecibles hd y calidad / --q son dos de estos ajustes
/imagine flor de rosa roja --hd
/imagine flor de rosa roja --calidad 5

7.  Relación de aspecto

Puede especificar la relación anchura:longitud de la imagen de salida. Esto se denomina relación de aspecto. La salida por defecto es una imagen cuadrada (relación de aspecto 1:1). Pero si quieres una vista más cinematográfica - o simplemente quieres hacer un papel de pared para tu portátil, puedes cambiar la relación de aspecto

/imagine jazmín en la flor silvestre --ar 4:3
Si desea especificar un tamaño de imagen personalizado, utilice el siguiente ejemplo

/imagine jasmine in the wild flower --w 600 --h 300
¡👉 No puedes especificar sus relaciones de aspecto personalizadas - pero puede especificar algunas de las relaciones estándar y algunas no estándar también ! ( He aquí algunos ejemplos)



8. Imagen como prompt

Si desea obtener salidas similares a un estilo de imagen, ( cuando desee obtener salidas consistentes ) a través de múltiples imágenes, pase una URL de la imagen

/imagine http://www.imgur.com/Im3424.jpg caja llena de bombones
La imagen generada tomará señales tanto de la imagen semilla ( de la URL que pasó ) y también las indicaciones de texto.
👉 Puedes dar múltiples imágenes como prompts
👉 Puedes especificar pesos a las imágenes ( ver el siguiente punto )

Pesos a los prompt de las imágenes

Si desea que su salida se parezca más a su imagen prompt ( ver el punto anterior), dé un mayor peso a esa imagen (palabra clave : --iw <número>) .

/imagine http://www.imgur.com/ks34f24.jpg chocolates --iw:4

9. Pesos a la indicación de texto

/imagine animales salvajes tigre::2 cebra::4 leones::1.5

10.  Filtrar palabras de la imagen

Utilice la palabra clave --no para descartar cualquier tema no deseado que aparezca en su imagen

/imagine pollo frito KFC --sin salsa


11. Por último, algunas palabras clave interesantes que puede intentar utilizar

* Sony Alpha α7, ISO1900, Leica M, = para especificar cualquier tipo de lente o tipo de cámara * photorealistic , ultra photoreal , ultra detailed, intricate details, = para especificar algunos detalles posibles y un aspecto realista y menos de artístico * unreal = para especificar una sensación de motor irreal* volumetric light , cinematic lighting = para especificar algunas condiciones de iluminación

Fuente: traducción del sitio: 

domingo, 19 de febrero de 2023

Master en Ciberseguridad y Privacidad UOC

 



El próximo 1 de Marzo es un día muy especial para mi ya que por fin empiezo mis estudios de posgrado en la Universitat Oberta de Catalunya en el Master de Ciberseguridad y privacidad. 
Dejo el folleto de presentación de este Master embebido en esta entrada. 
Cuando empecé el grado Multimedia en esta universidad no tuve la idea de registrar mi avance en los estudios en un blog desde el principio, por supuesto con el posgrado va a ser distinto, esta vez no solo pretendo registrar aquí todo los trabajos y prácticas que vaya desarrollando de forma organizada sino que pretendo poner en marcha un canal de Twitch en el que poder hacer streamings, resolviendo máquinas de la plataforma “Hack the box”. 


lunes, 30 de enero de 2023

Proyecto PWA HIRALITE

 La importancia de la Resiliencia 

Cuando terminé el grado en ingeniería multimedia, tenia claro que mi TFG quería enfocarlo en alguna solución orientada a la empresa en la que trabajo. Arcelormittal. Además ya que una de las últimas asignaturas optativas que cursé me introdujo en VueJS, un increíble Framework progresivo con un alto nivel de desacoplamiento lo que te permite como desarrollador crear interfaces, SPA o como en mi caso PWA, de una forma muy flexible y ágil. 

El primer intento 

Mi primera idea que además fue mi TFG, era crear una “red social” orientada al negocio de la empresa, es decir  una app que cubriera todas las necesidades de comunicación internas de forma vertical, desde la dirección a los empleados pasando por los mandos intermedios de forma cualquier evento o información importante se transmitiera de manera ágil y fácil. 

Me centré en tres tipos de aplicación:
- compartir imágenes en un muro en tiempo real 
- creación de chat en tiempo real 
- compartir documentos en tiempo real 

Con estar 3 premisas podría construir una “red social” orientada a la comunicación dentro de la empresa , por supuesto con sistema de autenticación y perfil de usuario. Así que empecé con cada una una de estas características haciendo clones de aplicaciones ya existentes con Vuejs. 
Primero clone instagram, luego clone WhatsApp. Cuando tenia dos PWA que funcionaban bien me dispuse a integrarlas en una sola App, con un backend no-sql montado en Firebase la app funcionaba muy bien aún en beta. 
Por aquellos días había superado ya el TFG con buena nota y me había graduado, por lo que tenia tiempo para dedicarme íntegramente al estudio y al desarrollo de mi app mientras lo compaginaba con el trabajo. 

Contexto

Acciones puntuales no programadas

Hojas HIRALITE

Cuando se realizan tareas de mantenimiento puntuales o programadas tenemos implementado un sistema de seguridad llamado HIRALITE, por sus siglas en inglés “Hazard Identfication and Risk Assesment”.

Básicamente, la idea es que el actor que va a realizar la tarea, debe identificar los riesgos asociados a la misma cumplimentando una hoja de análisis preliminar de riesgos. El formulario es un catálogo de posibles riesgos y el trabajador debe marcar las casillas de los eventuales riesgos que se prevén, así como las medidas de seguridad para mitigar dichos riesgos.

Órdenes de trabajo

Las hojas HIRALITE van siempre asociadas a las órdenes de trabajo. Aunque son cosas distintas están íntimamente relacionadas y ambas conforman la documentación de la que se debe disponer si se quiere realizar un trabajo en las líneas ya sea en turnos de parada o productivas. Las órdenes de trabajo son algo más complejas ya que involucran a más actores que intervienen en su composición. Éstos son:

• Jefe de turno / responsable de línea • Mantenimientos

• Contratistas

El proceso es el siguiente:

Cuando se quiere iniciar una tarea, el jefe de turno que es el responsable último en la línea. Rellena una orden de trabajo con sus datos, en esa hoja autoriza a los mantenimientos a iniciar las consignaciones de las máquinas y sistemas.

Cuando los mantenimientos han finalizado las consignaciones, de forma que las máquinas estén debidamente desenergizadas y posicionadas para permitir la entrada de trabajadores de forma segura, los mantenimientos firman esta hoja indicando que las consignaciones han finalizado.

En este momento el jefe de turno autoriza el inicio de los trabajos. Trabajos que deben ir acompañados siempre de una HIRALITE.

Los trabajadores, en el momento de acceder a la línea para empezar sus labores, guardan en unos cajetines metálicos la orden de trabajo y cierran el cajetín con un candado personal identificado (uno por trabajador) a dicho cajetín.

No se puede iniciar ninguna desconsignación o puesta en marcha de ningún sistema hasta que no se haya retirado hasta el último de esos candados por su dueño.

Una vez que los trabajos han terminado, cada trabajador retira su candado, se saca del cajetín la orden de trabajo. Para iniciar desconsignaciones y puesta en marcha de los sistemas el proceso es el mismo de inicio pero al contrario.


Problemática

En actuaciones puntuales, la creación de las órdenes de trabajo e HIRALITES generan una gran cantidad de papel impreso con el correspondiente consumo asociado tanto en papel como en tinta y energía. A demás todas esas órdenes terminan apiladas en cajas hasta que trascurrido el tiempo estimado que deben ser guardadas, deben ser destruidas y recicladas.

Por otra parte, a demás de los inconvenientes del uso de papel como soporte, estas órdenes impresas poseen una gran cantidad de datos que no estamos aprovechando; como ejemplo podríamos citar:

• Medias de tiempo reales de duración de trabajos y reparaciones basadas en datos

• Frecuencia de tipos de incidencias y averías

• Tiempos de reacción ante averías puntuales

Todas estas informaciones y más están presentes en el soporte de papel que acaba siendo reciclado. Mediante la digitalización de este proceso, podemos ir creando una base de datos de en la que guardar y consultar estos datos que pueden resultar muy beneficiosos al incrementar nuestro conocimiento de todos los aspectos de los diferentes tipos de reparación, su frecuencia, su tiempo de resolución, etc. Esto puede devenir incluso en una mejor organización en las actuaciones programadas ya que se dispone de más información a la hora de por ejemplo establecer la duración de una parada programada.

Por otra parte, centralizar el ciclo de vida de una orden de trabajo desde que se solicita hasta que se da por finalizada, agiliza de forma significativa el proceso ya que el responsable de la instalación tiene en la interfaz de su PC o Smartphone todos los trabajos activos, pudiendo ver en tiempo real cual es el estado de cada uno de los trabajos, firmando autorizaciones, etc. También el mismo solicitante de la orden ve agilizado el proceso de solicitudes y autorizaciones, ya que no necesitará ir buscando a los responsables de instalación o mantenimientos para las firmas, que es algo que inevitablemente ocurre sobre todo en instalaciones grandes como las nuestras.

Propuesta

La App HIRALITE, soluciona en gran medida la mayoría de las problemáticas anteriormente expuestas. La app agiliza estos procesos, recopila datos de los trabajos guardándolos en la base de datos, facilita la comunicación de los actores implicados, evita la impresión de documentos con el consiguiente ahorro.

Beneficios

Gracias a su desarrollo basado en programación progresiva y reactiva multiplataforma, se pueden realizar cambios en la app de forma muy ágil y dinámica, por lo que se convierte en una herramienta viva en constante proceso de adaptación a las eventuales nuevas necesidades.

• Ubicuidad y tiempo real: HIRALITE es una App con un procesado en tiempo real y trabaja con una base de datos también en tiempo real, esto le ofrece mucha flexibilidad y dinamismo. La creación de órdenes de trabajo, así como sus HIRALITE asociados, se crean en cuestión de minutos e inmediatamente, están disponibles de forma ubicua y muy visual, tanto para los supervisores de seguridad, como para los responsables de línea a los que les basta con una mirada a la aplicación obtener una fotografía del estado de los trabajos, así como de toda la información relativa a los mismos.

• Ecofriendly: Gracias a la digitalización del proceso, el único papel que será necesario imprimir será el de la pegatina con el código QR para el trabajador. Esto supone un gran ahorro tanto de papel como de tinta ya que, al cabo de pocas semanas, se acumulan un gran número de órdenes de trabajo e HiraLItes impresas, que al final terminan en reciclado. Si se tiene en cuenta este ahorro, no sólo para la empresa sino también para el medio ambiente, se puede decir si dudar que HIRALITE es una App ecofriendly.

• Persistencia de datos: Tanto las órdenes de trabajo como sus HIRALITE, se guardan en la base de datos, se puede establecer si se desea una fecha límite de persistencia, a partir de la cuál esos documentos serán eliminados de forma automática.

• Modularidad y escalabilidad: La app se basa en las últimas tecnologías PWA, Firebase, Vuejs, lo que nos ofrece la posibilidad de escalar la aplicación, o añadirle nuevos módulos.

• Multiplataforma y CrossBrowser: Gracias a su tecnología de última generación, no se requieren desarrollos distintos, para iOS, Android, Windows, etc. Un solo desarrollo basta para que la App funciones de forma nativa en absolutamente cualquier tipo de dispositivo con conexión y sin conexión, incluidos los SmartTV, independientemente del sistema operativo que presenten.

• Es por ello, que cualquier cambio o actualización se puede lanzar de una sola vez y en muy poco tiempo para todos los usuarios.

• Industria 4.0: El avance de la digitalización es un hecho, la industria y sus procesos deben adaptarse a ellos de forma eficaz, esta aplicación es una solución a una problemática concreta y puede suponer el inicio de un proceso de análisis y ejecución de soluciones a otros procesos que también sean susceptibles de ser digitalizados, además sería una aplicación creada por y para Arcelormittal Sagunto.

Contras

• La App en su versión actual, es una herramienta de campo, es decir los datos recopilados se guardan en una base de datos Firebase de Google en tiempo real pensada para el trabajo dinámico y no para la persistencia de datos. Por tanto, los datos deben ser descargados antes de que la orden sea eliminada si se quiere disponer de esos datos en una base de datos propia y persistente. Esto está contempla do desde el principio en el diseño de la app que en este momento es completamente funcional, pero ya estoy trabajando en el desarrollo de una interfaz para la descarga de datos a una base de datos propia, también estoy estudiando la posibilidad de que la interfaz pueda generar gráficas y medias con los datos descargados.

• Firebase de Google, es una plataforma en la nube para el desarrollo de aplicaciones móviles. Los servicios cloud de esta plataforma no son gratuitos, pero si muy generosos, su forma de facturar es por operaciones de lectura / escritura en sus servidores, por ejemplo, en la base de datos que usa HIRALITE se deberían superar 600.000 operaciones de lectura / escritura al día para incurrir en gastos, por lo que se puede decir que para el uso en nuestra planta el coste es de 0€.

Podemos encontrar toda la información relativa al uso de los servicios de Google Cloud en el siguiente enlace:

https://firebase.google.com/pricing?hl=es-419

Este servicio se usa para el trabajo en tiempo real, aunque entre sus servicios disponemos de autentificación y analíticas entre otros, una vez descargados los datos de los servidores de Google a una base de datos propia esos datos son ya exclusivamente de nuestra propiedad.

• La integración de estas tecnologías con SAP es posible, si por ejemplo se quisiera llevar más allá de las actuaciones puntuales y enlazar con SAP PM en WCM. En estos momentos no poseo conocimientos de alto nivel en SAP ya que no es mi especialidad, pero me estoy formando por iniciativa propia.

Conclusión

HIRALITE, es una herramienta para el trabajo del día a día en las instalaciones, agiliza el trabajo y la comunicación en las tareas comunes. Puede suponer una primera aproximación a lo que se ha denominado como industria 4.0 y pretende poner de manifiesto que estas tecnologías son aplicables a cualquier campo donde se requiera una automatización de procesos. En este caso, se integra en la red de seguridad con la creación de HIRALITE y órdenes de trabajo, pero este tipo de tecnologías progresivas son aplicables allí donde exista un procedimiento en diferentes ámbitos susceptible de ser digitalizado.

Palabras clave

Industria 4.0, automatización de procesos de seguridad y calidad, comunicación, App multiplataforma.

 

sábado, 28 de enero de 2023

El auge de la IA



El mundo está apunto de cambiar “otra vez”.  

OpenAI, empezó como una organización sin ánimo de lucro creada por (adivina quien) Elon Musk y Sam Altman. La idea era promover un desarrollo justo de la IA, democratizarla para beneficio de toda la humanidad. 
En 2019 Musk abandona el cargo en OpenAI y ese modelo “sin ánimo de lucro” deriva en un modelo mixto capaz de poder financiar su supervivencia, OpenAI abre una ronda de inversiones y aparece Microsoft que invierte mil millones de dólares.  Desde luego una inversión arriesgada por parte de Microsoft si se considera que aún en 2019, los modelos generativos de imagen y texto como ChatGPT aún eran ciencia ficción pero estamos hablando de Microsoft. 

El 30 de noviembre de 2022 es la fecha de lanzamiento de ChatGPT. Se trata de un modelo conversacional basado en un modelo anterior (GPT-3.5), que es capaz de interactuar con un humano respondiendo preguntas en cualquier idioma incluso es capaz de generar código de forma de forma tan eficaz como lo haría un humano, tanto que asusta un poco. De repente esta forma de IA ya no es sci-fi y aquí viene la jugada maestra de Microsoft, parte de esos mil millones invertidos en OpenAI están en créditos de uso de su plataforma Cloud Azure. ¿Por qué? Porque en el campo de la inteligencia artificial uno de los mayores problemas para efectuar desarrollo e investigación es la gran potencia de computación necesaria para entrenar modelos, así que OpenAi se garantiza desde el principio poseer poder crear computación ilimitada. 

Mientras que Microsoft, que ha dado otra vez en el clavo, va perfilando su modelo de negocio para rentabilizar la gran inversión realizada. Va a haber miles de empresas que querrán crear servicios basados en ChatGPT y la gran malloría querrán un modelo funcional, estarán dispuestas a pagar por el acceso a una API que les devuelva directamente los resultados de consultas a la IA que, además funciona en Microsoft Azure.
De mientras, hay otro actor en esta apasionante historia que aún no se ha pronunciado, hablamos claro está de Google. El gigante con su proyecto DeepMind, no se va a quedar de brazos cruzados viendo a Microsoft comerse todo el pastel. Google tiene tanto poder de computación Cloud como Microsoft (o más) y estos días ha sido noticia que Google ha convocado a sus creadores  Larry Page y Sergey Brin para que vuelvan a primera línea en la batalla por la posición predominante en el campo de la IA. 

Todo esto no es más que la punta de iceberg de todo lo que se nos viene encima. Vivimos sin duda un tiempo tan excitante como cuando apareció la primera internet o el iPhone probablemente mucho más, un tiempo que está apunto de cambiar para siempre nuestra forma de vida. 

 

Todo no es de color de rosa 

 
“El éxito en la creación de la inteligencia artificial podrá ser el evento más grande en la historia de la humanidad. Desafortunadamente también sería el último, a menos de que aprendamos cómo evitar los riesgos”.
 
Esta frase fue publicada por Stephen Hawking en un artículo para The Independent en 2014. El famoso físico también publicó un artículo en conjunto con los expertos Stuart Russell, especialista en computación, y los físicos Max Tegmark y Frank Wilczek en el que se advertía de los pocos estudios serios que se habían realizado más allá de el Machine Intelligence Research Institute y el Future of Life Institute" advirtiendo que que la comunidad científica aún no se estaba preocupando lo suficiente por mantener bajo control un eventual sistema de inteligencia artificial autónoma el día en que se descubriera.
 

¿Qué es la inteligencia artificial?

 
En 1950, el matemático Alan Turing se hizo una pregunta: “ ¿Pueden pensar las máquinas?”. Esta simple pregunta transformaría el mundo. El artículo de Alan Turing «Computing Machinery and Intelligence» y el consiguiente «Test de Turing» sentaron las bases de la inteligencia artificial, su visión y sus objetivos.
 
El objetivo de la inteligencia artificial pretende responder afirmativamente a la pregunta de Alan Turing, es decir pretende replicar o simular la inteligencia humana en las máquinas. Este ambicioso objetivo plantea muchos interrogantes y suscita el debate. Por ello, aún no existe una definición única de inteligencia artificial. 
En un intento de remediar este problema, Stuart Russell y Peter Norvig publicaron el libro «Artificial Intelligence: A Modern Approach».
 
En el  libro, los dos expertos unifican sus trabajos sobre el tema de los agentes inteligentes en las máquinas. Según ellos, «la IA es el estudio de los agentes que reciben percepciones del entorno y realizan acciones».
 
Otra definición moderna describe la IA como «máquinas que responden a simulaciones como los humanos, con capacidad de contemplación, juicio e intención». Estos sistemas son capaces de «tomar decisiones que normalmente requieren un nivel humano de conocimiento». Tienen tres cualidades que constituyen la esencia de la inteligencia artificial: intencionalidad, inteligencia y adaptabilidad.
Estas diferentes definiciones pueden parecer abstractas y complejas. Sin embargo, ayudan a establecer la inteligencia artificial como una ciencia informática. 

Dejo algunas capturas de mi primer contacto con ChatGPT



Aquí le pido que me escriba un programa en PHP que imprima por pantalla 4 veces el texto “Hola mundo”. No solo me lo escribe perfectamente funcional si no que me lo explica al detalle;