<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ulises Serrano</title>
    <description>The latest articles on DEV Community by Ulises Serrano (@ulisesserranop).</description>
    <link>https://dev.to/ulisesserranop</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828044%2Fc5561e7d-e4f7-4047-9cb1-7f0a344d693b.jpeg</url>
      <title>DEV Community: Ulises Serrano</title>
      <link>https://dev.to/ulisesserranop</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ulisesserranop"/>
    <language>en</language>
    <item>
      <title>Crear software: Juego de personas</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Fri, 03 Jan 2025 17:28:31 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/crear-software-juego-de-personas-4afk</link>
      <guid>https://dev.to/ulisesserranop/crear-software-juego-de-personas-4afk</guid>
      <description>&lt;p&gt;Sino estas inmerso en el desarrollo de software posiblemente lo veas como un área complicada y que la gran mayoría del tiempo vas a estar pegado frente a una computadora y posiblemente esto sea verdadero en cierta medida.&lt;/p&gt;

&lt;p&gt;Pero si realmente estas creando soluciones de software complejas y que sean de calidad, si o si, vas a estar hablando con personas todo el tiempo. Una de las cosas más importantes es que no tomes por sentado nada, debes de hacer la mayor cantidad de preguntas que puedas para obtener la mayor cantidad de información. También la calidad de las preguntas se verán reflejadas la calidad de las respuestas. Algunos ejemplos de ello son: ¿Cuál es la forma en la que resuelven el problema ahora?, ¿Cuál es el problema que tiene haciendo de esta manera?, ¿Por qué es importante automatizarlo?, ¿Donde se encuentran los datos ahora?, ¿Se conecta con otros sistemas?, etc.&lt;/p&gt;

&lt;p&gt;Así como tu cliente va respondiendo estas preguntas debes de ir imaginando la solución y todo lo que implica hacer todos estos requerimientos. Lo que debes de tomar en cuenta que tus clientes no saben con certeza que es lo que realmente necesitan.&lt;/p&gt;

&lt;p&gt;Es por ello que el software me gusta tanto porque es crear y construir soluciones a partir de la simple comunicación entre personas. A tu cliente no le va importar si usas la base de datos más moderna o que si ocupaste el framework mas rápido. El quiere soluciones y entre mejor lo entiendas y escuches, tu solución se adecuara mejor.&lt;/p&gt;

&lt;p&gt;Como lo mencionaba la técnica admitámoslo, en este punto de nuestra historia es solo ser integradores de soluciones.&lt;/p&gt;

&lt;p&gt;La IA esta avanzando a pasos agigantados y no me cierro a la posibilidad de que sea capas de llegar al punto de soluciones y razonamiento que tenga un humano, pero sigo pensando que aún va a necesitar personas que le den las instrucciones precisas y completas para que pueda desarrollar e integrar sistemas complejos.&lt;/p&gt;

&lt;p&gt;Algo que siempre he hecho en mis sistemas y soluciones es agregar cosas que posiblemente el cliente no lo tenia en el radar y que yo considero que es un valor agregado, esto va desde acomodar los datos en orden cronológico o exportar sus datos a un formato en especifico como excel o PDF.&lt;/p&gt;

&lt;p&gt;Como ya lo abordamos creo firmemente que sin buena comunicación no vas a crear buen software.&lt;/p&gt;

&lt;p&gt;Se curioso e indaga más por medio de preguntas.&lt;/p&gt;

&lt;p&gt;No seas el desarrollador que solo esta involucrado en la parte técnica, es genial y yo lo he hecho pero te pierdes de mucho y del verdadero core de generar una solución de software.&lt;/p&gt;

&lt;p&gt;Activa tu modo prime, creando software genial.&lt;/p&gt;

&lt;p&gt;—U.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>spanish</category>
    </item>
    <item>
      <title>La dualidad de tu profesión.</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Mon, 23 Dec 2024 22:39:12 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/la-dualidad-de-tu-profesion-4ahb</link>
      <guid>https://dev.to/ulisesserranop/la-dualidad-de-tu-profesion-4ahb</guid>
      <description>&lt;p&gt;El otro día leyendo el libro (Nada Cambia) de Morgan Housel tuve un tipo de epifania, en donde me di cuenta que nuestras expectativas son una de las cosas más poderosas que tenemos los seres humanos. Porque como bien lo explican si tus expectativas son demasiado altas y te encuentras con una realidad que no esperabas, va ser decepcionante.&lt;/p&gt;

&lt;p&gt;Mi trabajo actual es en una dependencia de gobierno en México, mi trabajo consiste en desarrollar sistemas para los procesos de una dependencia en especifico, estos sistemas resuelven flujos de trabajo internos para el funcionamiento de temas administrativos que se llevan a cabo dentro del gobierno, siempre he disfrutado de crear software y me gusta mucho poder ayudar a las personas con las herramientas que se hacen. Considero que una de las mejores partes de mi trabajo es tener estas grandes satisfacciones en donde resuelves problemas y ayudas a hacer un poco mas sencillo el trabajo de otras personas.&lt;/p&gt;

&lt;p&gt;El dilema en este momento de mi vida es si conseguir algo mejor y ser ultra especializado dentro de una empresa o seguir creando software con libertad para resolver problemas.&lt;/p&gt;

&lt;p&gt;La dualidad se encuentra en perseguir esas metas económicas creadas por mi mismo al tener ciertas expectativas de como debería de ser mi vida o seguir con mis convicciones y tener estas satisfacciones personales. No es una decisión de un día para el otro, hacer la elección incorrecta tendrá como consecuencia que me este taladrando la cabeza la otra opción para siempre. La parte económica siempre te va a proporcionar un mejor estilo de vida, pero como siempre lo he dicho en persona, en la vida son unas por otras, el dinero y la estabilidad económica son geniales pero a veces siempre a costa de salud porque mi carrera no es que sea precisamente lo más sano del mundo, o por el otro lado tiempo de estar con los que mas quiero.&lt;/p&gt;

&lt;p&gt;No me considero la persona más talentosa ni tampoco la más inteligente en el ramo de las TI, pero siento que si tengo potencial, de ahí el ¿donde enfocar mis esfuerzos?, si en ayudar a los demás con mis conocimientos o generar recursos. Esta va ser una decisión que tengo que tomar a corto plazo porque al ser papá creo que las prioridades se re-acomodan y surgen nuevos problemas que resolver y nuevas formas de ver la vida.&lt;/p&gt;

&lt;p&gt;Si estas leyendo esto y estas en la misma situación, no hay camino correcto o incorrecto supongo que ya a estas alturas de la vida te has dado cuenta que la vida no es de dicotomias sino mas bien de matices, es por ello que estoy tratando de tener un sistema en donde pueda tener ingresos extras sin descuidar mis convicciones, ¿lo lograré? no lo sé, pero estoy seguro de que se puede llegar a un punto medio en donde tenga lo mejor de ambos mundos o por lo menos lo más cercado a esto.&lt;/p&gt;

&lt;p&gt;— U.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>writing</category>
    </item>
    <item>
      <title>Dockerando una aplicación de Angular</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Thu, 12 Dec 2024 17:46:38 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/dockerando-una-aplicacion-de-angular-1d80</link>
      <guid>https://dev.to/ulisesserranop/dockerando-una-aplicacion-de-angular-1d80</guid>
      <description>&lt;p&gt;En este post vamos a crear un contenedor para correr una aplicación de Angular para desarrollo. Angular es uno de los marcos de trabajo más famosos del mundo, hago este post para ayudar a los equipo de desarrollo que estén migrando sus proyectos a contenedores.&lt;/p&gt;

&lt;p&gt;En el equipo que desarrollo hicimos el paso decidimos hacer este contenedor porque a pesar de tener las mismas dependencias instaladas y las mismas versiones tanto de Angular como de NodeJS teníamos comportamientos no esperados. Es por ello que se decidió crear un contenedor para que todo sea absolutamente todo lo mismo. En el próximo articulo les voy ayudar a crear una imagen personalizada para ambiente productivo.&lt;/p&gt;

&lt;p&gt;Regularmente a mi me gusta ocupar dos archivos de configuración&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dev.Dockerfile&lt;/li&gt;
&lt;li&gt;docker-compose.override.yml&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El primero regularmente lo ocupa para la personalización de la imagen base y agregar capas personalizadas a la misma de acuerdo con mis necesidades. Y el otro archivo regularmente lo ocupo para configurar los volúmenes persistentes y también los puertos que van a estar expuesto.&lt;/p&gt;

&lt;p&gt;A continuación muestro el contenido del archivo de dev.Dockerfile, regularmente debe de estar a nivel de proyecto, como se muestra a continuación:&lt;/p&gt;

&lt;p&gt;Estructura de proyecto de ejemplo ignorar el archivo docker-compose.yml&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg89c958a1y5crhbkzwlx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg89c958a1y5crhbkzwlx.png" alt="Estructura de proyecto" width="506" height="1096"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contenido de dev.Dockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:20.10.0

RUN mkdir -p /app

WORKDIR /app

COPY ["app-angular/package.json", "app-angular/package-lock.json", "/app/"]

COPY ["app-angular", "/app/"]

RUN npm install -g @angular/cli @angular-devkit/build-angular &amp;amp;&amp;amp; npm install

CMD ["npm", "run", "start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las lineas se describen a continuación:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La primera parte es el nombre de la imagen de node puedes optar por la completa o por alguna versión de Alpine Linux que regularmente son mucho mas ligeras lo cual agiliza el proceso de despliegue cuando se hace por medio de pipelines.&lt;/li&gt;
&lt;li&gt;Creamos una carpeta dentro de contenedor a nivel de raiz en donde se van a almacenar los archivos de nuestro proyecto.&lt;/li&gt;
&lt;li&gt;Establecemos el directorio en donde nos queremos mover y en donde se ejecutaran los comandos siguientes.&lt;/li&gt;
&lt;li&gt;Se copian los archivos de configuración de NPM (package.json y package-lock.json) que se encuentran dentro de la carpeta app-angular dentro del contenedor.&lt;/li&gt;
&lt;li&gt;Se copian todos los archivos que se encuentran dentro de la carpeta del proyecto de app-angular dentro del contenedor.&lt;/li&gt;
&lt;li&gt;Se instalan las dependencias que están configuradas dentro del contenedor.&lt;/li&gt;
&lt;li&gt;Se corre el proyecto dentro del contenedor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Todos los pasos anteriores deberíamos de tener una imagen lista para poder ocupar con nuestro archivo de docker-compose.yml&lt;/p&gt;

&lt;p&gt;Contenido del archivo de docker-compose.yml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: angular-project

services: 
  angular-container:
    build:
      context: .
      dockerfile: dev.Dockerfile
    ports:
      - "4200:4200"
    volumes:
      - ./app-angular:/app
      - /app/node_modules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El archivo de configuración de docker-compose.yml es importante porque yo regularmente lo ocupo para configurar puertos y volúmenes persistentes. Ocupo este archivo porque es sencillo modificar y bastante visual. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La primera linea es el nombre del stack&lt;/li&gt;
&lt;li&gt;El segmento de build es importante porque ahí se especifica cual es el documento de Dockerfile que se va ocupar.&lt;/li&gt;
&lt;li&gt;En el segmento de ports se especifica cual es el puerto que se va exponer en tu localhost. El puerto de la izquierda es de tu host o computadora y del lado derecho es el del contenedor, no necesariamente deben de coincidir.&lt;/li&gt;
&lt;li&gt;Se configura un volumen, este volumen es para que todos los archivos dentro de app-angular si son modificados se vean reflejados automáticamente en el contenedor. El segundo es para decir que ignore la carpeta de node_modules y no la sincronice con el host.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Teniendo estos dos archivos ahora solo se debe de ejecutar el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d --build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando hará que no solo se cree la imagen a partir del dev.Dockerfile sino que también corra la imagen con las configuraciones del docker-compose.yml&lt;/p&gt;

</description>
      <category>angular</category>
      <category>espanol</category>
      <category>docker</category>
    </item>
    <item>
      <title>Instalar Jenkins en Docker</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Wed, 27 Mar 2024 22:33:47 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/instalar-jenkins-en-docker-5bbh</link>
      <guid>https://dev.to/ulisesserranop/instalar-jenkins-en-docker-5bbh</guid>
      <description>&lt;p&gt;En este post vamos a dar una revisada de como instalar Jenkins dentro de un contenedor de Docker. Jenkins es una herramienta Open Source y es una de las herramientas más utilizadas para la automatización de tareas o generación de pipelines.&lt;/p&gt;

&lt;p&gt;Prerequisitos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tener instalado Docker&lt;/li&gt;
&lt;li&gt;Jalar la imagen de Docker in Docker de Docker Hub por medio del siguiente comando: docker pull docker:dind&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de comenzar lo que necesitamos es crear una red con Docker en este ejemplo la llamaremos jenkins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker network create jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Posteriormente lo que necesitamos es instalar un contenedor con Docker para que tenga acceso al de Jenkins y se puede ocupar los comandos de Docker dentro de Jenkins, para ello ejecutamos la siguiente instrucción en nuestra línea de comandos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run \
  --name jenkins-docker \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  docker:dind \
  --storage-driver overlay2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo vamos a ir desglosando paso a paso para que sepamos que estamos haciendo con la anterior instrucción.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Se especifica el nombre del contenedor.&lt;/li&gt;
&lt;li&gt;Se corre el contenedor en segundo plano y no se quede atado a la terminal en la que estamos ejecutando el comando.&lt;/li&gt;
&lt;li&gt;Para ejecutar Docker in Docker se necesita de privilegios para ser ejecutado, es por ello que esta línea es requerida.&lt;/li&gt;
&lt;li&gt;Queremos que se conecte a la red que creamos en el paso anterior.&lt;/li&gt;
&lt;li&gt;Se genera una variable de entorno en donde se administrarán los certificados TLS de Docker.&lt;/li&gt;
&lt;li&gt;Se crea un volumen persistente con el directorio de jenkins-docker-certs para la administración de los certificados TLS.&lt;/li&gt;
&lt;li&gt;Se crea un volumen persistente con el directorio jenkins-data, este volumen ayuda a que el contenedor de Docker pueda tener acceso a Jenkins.&lt;/li&gt;
&lt;li&gt;Como parte de docker run tambien queremos que ejecute la imagen de Docker in Docker pero con una pequeña configuración el driver de almacenamiento sea overlay2.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una vez que tenemos el contenedor de Docker configurado vamos a personalizar la imagen de Jenkins para que Docker pueda autenticar los paquetes del mismo e instala dos plugings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM jenkins/jenkins:2.440.2-jdk17
USER root
RUN apt-get update &amp;amp;&amp;amp; apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" &amp;gt; /etc/apt/sources.list.d/docker.list
RUN apt-get update &amp;amp;&amp;amp; apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora construimos la imagen de Jenkins de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t myjenkins-blueocean:2.440.2-1 .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez creada la imagen de Jenkins la tenemos que correr son los siguientes parámetros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run \
  --name jenkins-blueocean \
  --restart=always\
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  myjenkins-blueocean:2.440.2-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo vamos a desglosar paso a paso para que entendamos que hace cada parámetro.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Se especifica el nombre del contenedor.&lt;/li&gt;
&lt;li&gt;En caso de que el contenedor se pare se tiene que volver a levantar.&lt;/li&gt;
&lt;li&gt;Se corre el contenedor en segundo plano y no se quede atado a la terminal en la que estamos ejecutando el comando.&lt;/li&gt;
&lt;li&gt;Queremos que se conecte a la red que creamos en el paso anterior.&lt;/li&gt;
&lt;li&gt;Se configuran las variables que son usadas por docker y docker-compose para conectar con las herramientas de Docker ya configuradas.&lt;/li&gt;
&lt;li&gt;Se expone el puerto 8080 para entrar al contenedor de Jenkins a través del portal web.&lt;/li&gt;
&lt;li&gt;Se generan los volúmenes tanto jenkins-data como jenkins-docker-cert&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una vez corriendo el contenedor de Jenkins se puede acceder por medio de la IP del servidor en el puerto 8080, se desplegará una pantalla como la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn18ksdj8tkz332n8x73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn18ksdj8tkz332n8x73.png" alt="Pantalla de configuración de Jenkins" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos solicita que ingresemos la contraseña del administrador que la podemos obtener de la siguiente manera estando dentro del contenedor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat /var/jenkins_home/secrets/initialAdminPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copiamos y pegamos la clave como se muestra en la imagen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4alqvprzoqv05vva71xl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4alqvprzoqv05vva71xl.png" alt="Ejemplo de clave de administrador" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De esta manera ya tendrías corriendo Jenkins.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>sysadmin</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Un vistazo a NVIDIA</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Tue, 05 Mar 2024 17:42:31 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/un-vistazo-a-nvidia-17ep</link>
      <guid>https://dev.to/ulisesserranop/un-vistazo-a-nvidia-17ep</guid>
      <description>&lt;p&gt;NVIDIA es una de las empresas que siempre ha estado ahí, pero con la llegada de la Inteligencia Artificial (IA) a nuestras vidas sus chips de alta velocidad de procesamiento para este tipo de problemas se han vuelto muy populares, no por nada se ha convertido en la tercer empresa mas grande de todo el mundo, a momento de escribir este articulo.&lt;/p&gt;

&lt;p&gt;Los chips de NVIDIA se volvieron extremadamente populares con la explosión de Blockchain, ya que las tarjetas graficas eran ocupadas para los rig de minería de criptomonedas. Es una empresa que a tenido como cualquiera sus altos y bajos pero la llegada de la IA la cosa se ha salido de control, y no es que las personas a pie como tu y yo nos peleemos por sus chips sino lo hacen las empresas mas grandes de tecnología del mundo, como lo son Google, Meta, Amazon y Microsoft pero la cosa no queda ahí sino que también se empieza a convertir en un juego geopolítico, el gobierno de los Estados Unidos creo algunas restricciones de venta de este tipo de hardware a los competidores del otro lado del charco (China), pero como las restricciones eran muy especificas, por lo que la empresa siguió comercializando otro tipo de chip con otro nombre y con ciertas restricciones de velocidad pero que era prácticamente el mismo chip, pero maquillado.&lt;br&gt;
En este momento están creando algo completamente nuevo que ellos llaman la fabrica de IA (Factory AI), en sus palabras del actual CEO&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An AI factory is much more like a power generator.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No se tienen detalles puntales de que es lo que va a ser, pero todas las empresas tendrán una, desde las empresas de biotecnología hasta las fábricas que construyen automóviles, etc. &lt;br&gt;
La magia de esta empresa es desarrollar chips que son extremadamente buenos para tareas en especifico (GPU e IA), y como lo hemos estado viendo en la industria cada vez mas empresas generar chips que se especialicen en IA como Google en sus procesadores Tensor, ya que en cuestión de energía optimizan mejor los recursos que disponen y no se ven afectadas por estrangulamientos térmicos, aún que el rey de este tipo de cosas es Apple pero eso es para otro articulo.&lt;/p&gt;

&lt;p&gt;La filosofía de NVIDIA es pragmática y consiente de si misma, ya que son consiente de que siempre están haciendo cosas nuevas y por lo tanto no todo puede salir bien, pero no por ello no van a poder todos sus recursos para que sea todo un éxito lo que se proponen.&lt;/p&gt;

&lt;p&gt;Solo el tiempo nos dirá si se convertira en la próxima empresa disruptiva que la humanidad esperaba, o solo ha sido beneficiada por circunstancias azarosas.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Por suerte no termine mi maestría</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Fri, 23 Feb 2024 20:10:14 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/por-suerte-no-termine-mi-maestria-1cmm</link>
      <guid>https://dev.to/ulisesserranop/por-suerte-no-termine-mi-maestria-1cmm</guid>
      <description>&lt;p&gt;Hace unos días me di a la tarea de recuperar mi titulo profesional en la universidad que estudie ingeniería, y el motivo de irlo a traer es porque no culmine mi maestría, me tomo por sorpresa la pandemia y no logre superar ese momento. Sinceramente creo que estudiarla en el mismo lugar en donde hice mi licenciatura no era el lugar correcto, porque no me estaba exigiendo, sino simplemente la estaba haciendo tener una falsa sensación de logro y de estar avanzando falsamente.´&lt;/p&gt;

&lt;p&gt;Viendo mas en retrospectiva mi universidad en el momento que me toco estudiar ahí, habían bastantes personas que te impulsaban a que dieras lo mejor de ti (la gran mayoría doctores y maestros), que hora lamentablemente ya no están, y eso claro por no saber el concepto de retención de talento. Algunas de las cosas que me di cuenta ese día en mi visita fue que realmente.&lt;/p&gt;

&lt;p&gt;Parte de este texto es desahogar un poco de los sentimientos encontrados ese día y sí me di cuenta de que yo no quería llevar con orgullo un titulo de maestría de una universidad en donde sus procesos son lentos, no es moderna y no esta alineada a lo que yo represento, no me había sorprendido con lo que aprendí y claramente no llenaban mi sed de curiosidad. &lt;/p&gt;

&lt;p&gt;Es por ello que decidí buscar al otro lado del mundo en el continente Europeo, nunca había estudiado 100% en línea y di el salto en una institución que me llamo la atención y no me equivoque, no íbamos con rodeos y empecé desde el día uno en materia (Inteligencia Artificial y Machine Learning), me gusto mucho y ya que estoy a punto de terminar me doy cuenta que eres lo que estudias y en donde te relacionas, yo creo que he acortado años de mi vida literalmente por esa escuela y estoy muy contento de poder finalizar esa formación, mi proyecto final reto mis habilidades tanto de programador como de los nuevos conocimientos que he adquirido a lo largo de este proceso, me gusto y el equipo es increíble. &lt;/p&gt;

&lt;p&gt;En este punto de mi vida considero que una maestría es para las personas que con curiosas y nunca dejan de aprender, las maestrías te hacen dar cuenta el mundo que todavía te falta por descubrir y maravillarte por esos pasos que están dando que forman parte de tu crecimiento profesional. Saberlo todo no es la meta, sino disfrutar del camino que te hace llegar a las metas que esperas.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Docker ps con formato</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Mon, 08 Jan 2024 17:26:37 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/docker-ps-con-formato-34kd</link>
      <guid>https://dev.to/ulisesserranop/docker-ps-con-formato-34kd</guid>
      <description>&lt;p&gt;Cuando tienes varios contenedores corriendo se puede poner complicado a la hora de administrar los puertos disponibles, una forma de ver esto desde un servidor en donde no tenemos interfaz gráfica. Lo podemos hacer de la siguiente manera con el comando docker ps pero la ventaja que tenemos es que tenemos la posibilidad de personalizar la salida por medio de la opción --format. El siguiente comando la salida nos mostrará en formato de tabla el nombre del servicio y el puerto asociado al mismo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WWn34ZNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvd7swr79svvj9m0j4yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WWn34ZNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvd7swr79svvj9m0j4yh.png" alt="Docker ps with normal format" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una versión un poco mas avanzada es que podamos ver en orden los puertos que están ocupados y así saber de manera más sencilla cuales son los que están disponibles y podamos asignarlo con mucha mas confianza.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kuLxhtdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cf827mi0c3u0kvw4639.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kuLxhtdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cf827mi0c3u0kvw4639.png" alt="Docker ps with format advance" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para mas información acerca de formatos puedes consultar directamente la documentación oficial: &lt;a href="https://docs.docker.com/config/formatting/"&gt;https://docs.docker.com/config/formatting/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sé ese profesional</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Fri, 05 Jan 2024 19:59:49 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/se-ese-profesional-418l</link>
      <guid>https://dev.to/ulisesserranop/se-ese-profesional-418l</guid>
      <description>&lt;p&gt;El impacto de tu trabajo como profesional de TI es muy importante, en el ámbito de sistemas, al crear  una herramienta con tu equipo que automatiza un proceso, no solo estas ayudando a que las personas hagan más rápido su trabajo sino que se dediquen a lo verdaderamente importante que es pensar y dedicar tiempo a optimizar su tiempo y el de las personas que lo rodean.&lt;/p&gt;

&lt;p&gt;Muchas veces lo que trabajamos en estas áreas solemos tener un ego muy grande que no nos permite ayudar a las personas que nos rodean por el simple hecho de creer que no lo merecen.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que ayuda a sus compañeros y que recibe retroalimentación de sus contrapartes.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que no discrimina por la forma de aprender.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que no tiene complejos de superioridad.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que se equivoca y lo admite, aprende de sus errores y sigue.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que agrega valor desmedido a su equipo, enseñando y mostrando nuevas formas de hacer y deshacer, nuevas tecnologías y sobre todo crea una cultura de aprendizaje continuo.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que resuelve problemas.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que las personas fuera de tu área quieran que los ayudes.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que tiene habilidades gerenciales, que administra, delega y se pone al frente.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que no tiene tapujos de decir lo que esta mal pero también dar una propuesta de solución.&lt;/p&gt;

&lt;p&gt;Sé ese profesional decidido que no tiene miedo a desaprender, romper con sus esquemas y reinventarse las veces que sea necesario.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que se expone y enseña en internet.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que se sabe comunicar y expone sus ideas de forma clara y sencilla.&lt;/p&gt;

&lt;p&gt;Sé ese profesional que es ambicioso y no se conforma, pide ese aumento, muévete, contagia esa actitud con los que te rodean.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>espanol</category>
    </item>
    <item>
      <title>¿Cómo empiezo a programar de cero?</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Tue, 26 Dec 2023 20:51:53 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/como-empiezo-a-programar-de-cero-3l2a</link>
      <guid>https://dev.to/ulisesserranop/como-empiezo-a-programar-de-cero-3l2a</guid>
      <description>&lt;p&gt;La semana pasada terminada mi primera semana del Curso de Introducción a la Programación (CIP) que imparto en la empresa &lt;br&gt;
@kodemiamx. El punto más importante es que nunca en ningún momento es mal momento para empezar a programar. Recuérdalo NUNCA es mal momento para empezar a programar. Considero que no importa si te dedicas a derecho, contabilidad o diseño, es una de las habilidades que cualquier profesional debe de aprender. Y no te preocupes con respecto a que si hay espacio o ya no, siempre las empresas están en búsqueda de talento.&lt;/p&gt;

&lt;p&gt;Lo más importante cuando se empieza a programar es desarrollar lógica, pero, ¿Qué es realmente esto?, te estarás preguntando. Bueno pues lo que significa es que empieces a conocer como funciona una computadora y saber que ella internamente ejecuta miles o millones de algoritmos para que pueda funcionar, y ¿Qué es un algoritmo? la respuesta corta la podríamos definir de la siguiente manera: una serie de pasos finitos para resolver un problema. Tú tarea principal va ser dar esas instrucciones de manera precisa y correcta para que las computadoras las ejecutan y solucionen un problema. Si resolver problemas es el pan de todos los días en esto de la programación por lo tanto se deben de tener o desarrollar ciertas habilidades sino se cuentan, como lo son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resiliencia al estrés&lt;/li&gt;
&lt;li&gt;Habilidad para entender problemas&lt;/li&gt;
&lt;li&gt;Descomponer problemas grandes en problemas más pequeños&lt;/li&gt;
&lt;li&gt;Trabajar en equipo&lt;/li&gt;
&lt;li&gt;Hacer las cosas simples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regularmente cuando se esta empezando en este mundillo, quieres empezar de YA a aprender un lenguaje de programación, abrir tu editor de texto y empezar a tirar líneas de código, cuando en realidad el proceso para llegar ahí es un poco mas complejo. El lenguaje de programación es la cúspide inicial pero no es el fin absoluto, esto quiere decir que aprender un lenguaje de programación no te va estorbar pero dependiendo de lo que quieras solucionar es el que vas a tener que elegir, pero eso es otro tema que no abordaré en este post.&lt;/p&gt;

&lt;p&gt;Volviendo con el tema de iniciar con el lenguaje de programación, primero te tienes que detener y empezar a pensar en si en el problema, si el problema al que te estas enfrentando ya lo haz resuelto en el pasado, en caso de que no, será necesario entender el que es lo que se necesita resolverlo, de ahí ver si existen soluciones y cuando me refiero a ver soluciones no es código sino por ejemplo te piden resolver el problema para calcular el área de un terreno, tendremos que recordar la formula para calcular el área de un rectángulo ¿Cierto?, ya de ahí tendremos que buscar la formula. Ya que tenemos la formula debe de entender que elementos son necesarios para este ejemplo son el largo y ancho del terreno, después de contar con esos elementos ahora si ya podemos calcular el área.&lt;/p&gt;

&lt;p&gt;El algoritmo lo podemos definir como lo siguiente:&lt;br&gt;
1, Solicitar el ancho del terreno&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Solicitar el largo del terreno&lt;/li&gt;
&lt;li&gt;Calcular el área del terreno (formula para calcular área de un rectángulo)&lt;/li&gt;
&lt;li&gt;Mostrar el cálculo del área&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ahora resolvemos el problema, te das cuenta de que desarrollar lógica es independiente de cualquier lenguaje de programación, y eso es lo verdaderamente valioso de aprender. Después de tener el algoritmo puedes pasarlo a dos herramientas que también son muy importantes cuando estamos en etapas iniciales como lo son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diagrama de flujo&lt;/li&gt;
&lt;li&gt;Pseudocódigo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para cerrar te puedo decir que aprender a programar no solo es conocer como escribir código sino que es desarrollar habilidades que cuando llegues a tirar líneas sea un proceso más sencillo. También al que tienes que tener presente en todo momento es que entrar en un área de tecnología implica estar aprendiendo y desaprendiendo muchas cosas pero los fundamentos siempre van a estar ahí, también velo esto si estas empezando como un maratón no como una carrera de velocidad. Prepárate muy bien y siempre empieza por lo básico, me lo agradecerás después.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>writing</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Lo básico de lo básico de GitHub Codespaces</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Mon, 11 Dec 2023 04:53:11 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/lo-basico-de-lo-basico-de-github-codespaces-dh6</link>
      <guid>https://dev.to/ulisesserranop/lo-basico-de-lo-basico-de-github-codespaces-dh6</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;GitHub Codespaces es una herramienta que esta disponible con tu cuenta de GitHub y es un entorno de desarrollo en la nube super completo, esta herramienta te permite no preocuparte por detalles de infraestructura, sino en lo verdaderamente importante que es resolver problemas y por tener una buena conexión a internet.&lt;/p&gt;

&lt;p&gt;GitHub Spaces surge de la necesidad de poder tener un entorno de desarrollo controlado en donde podemos empezar un proyecto muy fácilmente.&lt;/p&gt;

&lt;p&gt;Codespaces lo podemos encontrar dentro de nuestra cuenta de GitHub en las opciones de la esquina superior derecha.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv1qfdlpkb2t71hrqtee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv1qfdlpkb2t71hrqtee.png" alt="Menú izquieda"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro podemos escoger que plantilla ocupar para nuestro nuevo proyecto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d1ydb7r7txnt1ukwzy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d1ydb7r7txnt1ukwzy4.png" alt="Plantillas Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Las plantillas para empezar un proyecto tenemos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Ruby and Rails&lt;/li&gt;
&lt;li&gt;Jupyter Notebook&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;NextJS&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En este ejemplo vamos a ocupar Express pero bien los pasos que vamos a describir se pueden aplicar a cualquiera de las plantillas. Ya que el poder que reside de Codespaces es el de tener un entorno de desarrollo en segundos y no solo eso sino que también ligado a un repositorio de código.&lt;/p&gt;

&lt;p&gt;Al seleccionar una plantilla de manera automática se va a crear un proyecto base de Express y que esta disponible en la nube, lo mejor de esto es que no se esta corriendo este proyecto en tu computadora sino en un servidor en la nube de GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fre5zkw8vi58sj1uox6qb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fre5zkw8vi58sj1uox6qb.png" alt="Proyecto base"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para poder ligar este espacio de trabajo con un repositorio lo único que tienes que hacer es entrar a la sección de Git del entorno de desarrollo y darle en publicar branch. Ahí te mostrará dos opciones si quieres un repositorio privado o un repositorio publico.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxb0d3b73zq31wtj1nmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxb0d3b73zq31wtj1nmz.png" alt="Seleccionar repositorio"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conectar con Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;Una de las ventajas también de tener el ambiente corriendo en la nube es que tienes la posibilidad de conectar tu Visual Studio Code para trabajar con él de una manera mas "local". Lo que tenemos que hacer es abrir nuestro VS Code, dentro del editor de texto en la esquina inferior izquierda hay un botón azul que tenemos y dar clic y aparecerán algunas opciones, en donde se selecciona Codespaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6aagjmf30wcsz21n1wr7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6aagjmf30wcsz21n1wr7.png" alt="Botón de opciones"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se solicitará una autorización para que "GitHub para Visual Studio" tenga acceso a la cuenta de GitHub, como se muestra a continuación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyx0ht5gq4nxhzaqvn58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyx0ht5gq4nxhzaqvn58.png" alt="Autorización"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez autorizado el permiso dentro del navegador mostrará todos los Codespaces que se tienen y se pueden ocupar. En este ejemplo solo tenemos uno y lo seleccionamos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh33orpy61oye9yeyjjlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh33orpy61oye9yeyjjlz.png" alt="Muestra de Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pasados unos segundos ahora tendremos el Codespaces configurado en nuestro Visual Studio Code, en donde ahora podemos trabajar sin ningún problema como si fuera un proyecto de nuestra computadora.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffhjt5enge8xmifck6cby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffhjt5enge8xmifck6cby.png" alt="Proyecto en VS Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Aumento de capacidades de cómputo
&lt;/h2&gt;

&lt;p&gt;Si por alguna razón estamos haciendo algún tipo de proyecto en donde tenemos que aumentar la cantidad de poder computacional se pueden mover los parámetros de nuestro entorno de nube muy fácilmente. Directamente dentro de nuestro repositorio hay un botón verde que dice Code, ahí tenemos que dar clic y nos desplegará dos pestañas, en la primera es para clonar y en la segunda concierne a las opciones disponibles de Codespaces. Acá se desplegarán todas las configuraciones que tenemos disponibles, en este caso solo tenemos una y ahí podemos dar clic en el botón con tres círculos para mostrar un menú que contiene varias opciones del CodeSpace, damos clic en donde dice cambiar tipo de maquina. Nos mostrará un menú de varias configuraciones que podemos seleccionar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54rskd61thymdx238lue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54rskd61thymdx238lue.png" alt="Menú de opciones Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por defecto tenemos una computadora con las siguientes capacidades técnicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 cores&lt;/li&gt;
&lt;li&gt;4 GB de RAM&lt;/li&gt;
&lt;li&gt;32 GB de espacio de disco duro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con estas capacidades considero que son mas que suficientes para cualquier proyecto pero si tus necesidades en particular necesitan mayor poder, ahí esta la opción para que lo utilices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalización de Codespaces
&lt;/h2&gt;

&lt;p&gt;Una de las ventajas mas poderosas es que Codespaces esta basado en un contenedor, es por ello que puedes personalizar o mover los parámetros que tu necesites para que se comporte de la forma que necesites, incluso se puede personalizar VS code con los plugins que tu necesites para tu proyecto. Las configuraciones estan dentro de la carpeta de .devcontainer y el archivo devcontainer.json&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsxnve0bm11y4bxyyces.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsxnve0bm11y4bxyyces.png" alt="Archivo de configuración"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agregaremos lo siguiente para instalar Copilot y Copilot Chat dentro del archivo de devcontainer.json, generamos el commit y confirmamos el cambio.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"customizations": {
    "codespaces": {
      "openFiles": [
        "index.js"
      ]
    },
    "vscode": {
      "extensions": [
        "GitHub.copilot",
        "GitHub.copilot-chat"
      ]
    }
  },
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro del Codespaces bajamos cambios y abrimos la paleta de comandos ejecutamos rebuild container.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzza7bezkn6syxf2v5dr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzza7bezkn6syxf2v5dr3.png" alt="Contruir Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminado el proceso ya tendremos las dos extensiones que hemos agregado al nuestro Codespaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk6d4gaaja9whhsznijl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk6d4gaaja9whhsznijl.png" alt="Copilot y Copilot Chat"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora sabes lo básico para ocupar GitHub Codespaces ahora tu curiosidad es el límite. Mas recursos en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/devcontainers/tutorial" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/devcontainers/tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://containers.dev/implementors/json_reference" rel="noopener noreferrer"&gt;https://containers.dev/implementors/json_reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>github</category>
      <category>spanish</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Un profesional de TI con superpoderes.</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Thu, 16 Nov 2023 20:15:50 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/un-profesional-de-ti-con-superpoderes-4khk</link>
      <guid>https://dev.to/ulisesserranop/un-profesional-de-ti-con-superpoderes-4khk</guid>
      <description>&lt;p&gt;Uno de las cosas que mencionaba Steve Jobs en alguna de sus platicas es la idea de conectar puntos.&lt;/p&gt;

&lt;p&gt;Como desarrollador de software llega un momento en donde ya es relativamente sencillo en saltar entre tecnologías y lenguajes de programación. Por que gran parte de las tecnologías adaptan patrones que son bastante similares entre pilas de tecnologías.&lt;/p&gt;

&lt;p&gt;Yo por ejemplo mi carrera en este mundo de la programación empecé haciendo programación en C, recuerdo que dedique bastante tiempo entendiendo muchos conceptos y llego un momento en donde ya podía resolver problemas. De ahí pase a Java y empecé a entender como guardar un poco más estructurados los datos en clases y como esas clases se podían comunicar para resolver problemas mucho mas complejos como una especie de LEGO. Con estos conocimientos y experiencia de resolver problemas, pase a la parte web con PHP porque se me hacía muy familiar la forma en la que tenia que construir con lo que ya traía de Java. De ahí pase a construir aplicaciones en Android por lo de Java y la base de PHP me permitió hacer API's. Con lo de Android pasar a iOS no es pan comido pero son tecnologías bastante parecidas que es en lo que ando. La construcción de API's existen fundamentos que bien los puedes aplicar a otra tecnología por ejemplo NodeJS con ExpressJS. Y eso es lo que ando ahora pero todo lo anterior me ha permitido entrar en la parte de aprendizaje computacional, y lo que sigue no se que es lo que es lo que se podría ser.&lt;/p&gt;

&lt;p&gt;Pero al punto al que quiero llegar es que no te limites a lo que tu curiosidad te empuje, me considero un generalista, toda esa historia que te conté ha estado plagada de experimentos con servidores, diferentes tecnologías y plataformas como lo es Ruby, Bash, Docker, Azure, AWS, Copilot, Angular, Laravel, Python, Django, entre otras.&lt;/p&gt;

&lt;p&gt;Tener este panorama mas amplio de tecnologías te permite una mejor toma de decisiones, al fin y al cabo son herramientas que necesitas utilizar para resolver problemas y dependiendo el problema unas se adecuan mejor que otras.&lt;/p&gt;

&lt;p&gt;No seas el desarrollador de software que ocupa una sola tecnología para todo, revisa, investiga, haz MVP's, equivócate, deja una tecnología, regresa años después que mejoro, que empeoro. SI, la ultra especialización es el pan de todos los días de muchas personas de TI pero yo no me siento a gusto encapsulándome a algo todo el tiempo, entiendo que las tecnologías van avanzando y tienes que actualizarte pero ve mas allá.&lt;/p&gt;

&lt;p&gt;El profesional de vanguardia de las TI debería de tener la capacidad técnica buena pero también el poder coordinar equipos, delegar, saber expresarse de manera fácil y sencilla además de contar con habilidades de comunicación, obviamente todo esto es aspiracional no llegas al punto en donde dominas todo y sabrás todo pero si te da un entendimiento superior de varias cosas. &lt;/p&gt;

&lt;p&gt;Te conviertes en un profesional de las TI con superpoderes.&lt;/p&gt;

&lt;p&gt;— U.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>spanish</category>
    </item>
    <item>
      <title>¿Por qué el Deep Learning ha ganado tanto terreno en los últimos años?</title>
      <dc:creator>Ulises Serrano</dc:creator>
      <pubDate>Wed, 08 Nov 2023 17:44:20 +0000</pubDate>
      <link>https://dev.to/ulisesserranop/por-que-el-deep-learning-ha-ganado-tanto-terreno-en-los-ultimos-anos-1mi8</link>
      <guid>https://dev.to/ulisesserranop/por-que-el-deep-learning-ha-ganado-tanto-terreno-en-los-ultimos-anos-1mi8</guid>
      <description>&lt;p&gt;Una de las razones principales por la cual el Deep Learning (DL) esta siendo tan ocupado porque puede resolver problemas mucho mas complejos que lo podrían hacer otros algoritmos de Machine Learning, el algoritmo predilecto del DL son las redes neuronales, están pensadas para tener un funcionamiento al de una neurona real, en donde el resultado de una sirve como entrada de la siguiente. Además en cuanto al ámbito del hardware también ha sido un factor que ha contribuido para la proliferación de esta técnica, porque ahora se puede hacer muchos mas cálculos y reducir el tiempo de entrenamiento gracias al uso de GPU en vez de CPU.&lt;/p&gt;

&lt;p&gt;Podemos enumerar las siguientes ventajas y desventajas de las redes neuronales.&lt;br&gt;
Ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El proceso de extracción de características ya no se hace de manera manual sino de forma automática.&lt;/li&gt;
&lt;li&gt;Se puede resolver problemas de regresión, clasificación binaria y multiclase. &lt;/li&gt;
&lt;li&gt;El entrenamiento se puede hacer en bloques (batch), ya que normalmente se ocupa una gran cantidad de datos para esta fase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se necesita una gran cantidad de datos (millones) para que las redes neuronales tengan un buen desempeño en cuanto al problema que se quiere resolver.&lt;/li&gt;
&lt;li&gt;El costo computacional es muy alto en comparación con otros algoritmos de aprendizaje computacional mas tradicionales.&lt;/li&gt;
&lt;li&gt;El entrenamiento puede conllevar una cantidad de tiempo considerablemente mas grande que los algoritmos tradicionales.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>machinelearning</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
