<?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: Orbis Alonzo Gutierrez</title>
    <description>The latest articles on DEV Community by Orbis Alonzo Gutierrez (@orbis25).</description>
    <link>https://dev.to/orbis25</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F456038%2F7866ea3a-fec2-454e-9336-52c310c0783e.jpg</url>
      <title>DEV Community: Orbis Alonzo Gutierrez</title>
      <link>https://dev.to/orbis25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orbis25"/>
    <language>en</language>
    <item>
      <title>Guía Práctica: Potencia tu Claude Code con Serena y CodeGraph</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Sat, 19 Sep 2026 12:19:01 +0000</pubDate>
      <link>https://dev.to/orbis25/guia-practica-potencia-tu-claude-code-con-serena-y-codegraph-4k0n</link>
      <guid>https://dev.to/orbis25/guia-practica-potencia-tu-claude-code-con-serena-y-codegraph-4k0n</guid>
      <description>&lt;p&gt;Aprende a conectar un «GPS» y un «bisturí de precisión» a Claude Code para que trabaje más rápido, cometa menos errores y ahorre dinero.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;¿Por qué hacemos esto y cómo funciona? (Explicado fácil)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Imagina que contratas a un asistente inteligente (Claude Code) para reparar una mansión enorme y compleja (tu proyecto de software).&lt;/p&gt;

&lt;p&gt;Sin ayuda externa, Claude hace lo siguiente:&lt;/p&gt;

&lt;p&gt;Entra a oscuras habitación por habitación buscando una llave perdida.&lt;/p&gt;

&lt;p&gt;Abre cajón por cajón (lee cientos de archivos completos).&lt;/p&gt;

&lt;p&gt;Esto toma mucho tiempo, gasta muchos recursos (tokens/dinero) y a veces se cansa o confunde cosas.&lt;/p&gt;

&lt;p&gt;Para evitar esto, le entregamos dos superherramientas:&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1t0pl0ur2fjbg6s7alo6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1t0pl0ur2fjbg6s7alo6.png" alt="ia tools" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. ¿Qué hace cada pieza?
&lt;/h2&gt;

&lt;p&gt;CodeGraph (El Mapa / GPS):&lt;/p&gt;

&lt;p&gt;Crea una maqueta o mapa relacional de todo tu código antes de empezar. Cuando Claude pregunta «¿dónde está la función de inicio de sesión y a quién afecta si la cambio?», CodeGraph se lo dice en un segundo, sin tener que escanear archivo por archivo.&lt;/p&gt;

&lt;p&gt;Serena (El Cirujano / Bisturí):&lt;/p&gt;

&lt;p&gt;Permite a Claude editar código a nivel de "símbolo" (la función específica, la variable o la clase), en lugar de reescribir archivos enteros de 500 líneas con riesgo de borrar cosas por accidente.&lt;/p&gt;

&lt;p&gt;¿Cómo lo orquesta Claude Code?&lt;/p&gt;

&lt;p&gt;Paso A: Recibe tu instrucción.&lt;/p&gt;

&lt;p&gt;Paso B: Primero consulta a CodeGraph para entender dónde tocar y cuál es el impacto.&lt;/p&gt;

&lt;p&gt;Paso C: Luego usa Serena para ir directamente a la línea exacta y realizar la modificación limpia.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Paso previo: Instalar lo necesario en tu computadora
&lt;/h2&gt;

&lt;p&gt;Antes de conectarlos a Claude, necesitamos tener el motor que los ejecuta. Usaremos una herramienta moderna llamada uv, que instala y corre programas en lenguaje Python de forma ultrarrápida y sin errores de configuración.&lt;/p&gt;

&lt;h2&gt;
  
  
  2.1. Instalar uv (El gestor universal)
&lt;/h2&gt;

&lt;p&gt;Abre tu Terminal (en Mac/Linux) o PowerShell (en Windows) y pega el comando correspondiente:&lt;/p&gt;

&lt;p&gt;En Mac o Linux: &lt;code&gt;curl -LsSf https://astral.sh/uv/install.sh | sh&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
En Windows (PowerShell): &lt;code&gt;powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2.2. Instalar Serena y CodeGraph
&lt;/h2&gt;

&lt;p&gt;Con uv listo, instalamos ambos paquetes&lt;/p&gt;

&lt;p&gt;codegraph macOS / Linux -&amp;gt; link al repo &lt;a href="https://github.com/colbymchenry/codegraph" rel="noopener noreferrer"&gt;codegraph&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;en el repositorio oficial veremos un step by step, de como se instala y regresaremos a este post.&lt;/p&gt;

&lt;p&gt;serena corremos este comando:&lt;br&gt;
&lt;code&gt;uv tool install -p 3.13 serena-agent&lt;/code&gt; y hacemos &lt;code&gt;serena init&lt;/code&gt; en el proyecto que la vamos a usar.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Paso 1: Agregar Serena a Claude Code
&lt;/h2&gt;

&lt;p&gt;Claude Code cuenta con un sistema llamado MCP (Protocolo de Contexto de Modelo), que le permite conectar enchufes o accesorios externos.&lt;/p&gt;

&lt;p&gt;Abre tu terminal.&lt;/p&gt;

&lt;p&gt;Ve a la carpeta de tu proyecto (escribe cd seguido de un espacio y arrastra tu carpeta a la terminal, luego pulsa Enter):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd /ruta/de/tu/proyecto&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ejecuta este comando para vincular Serena:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;claude mcp add serena -- serena-mcp-server --context ide-assistant --project .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;¿Qué significa este comando?&lt;/p&gt;

&lt;p&gt;Le estás diciendo a Claude: «Añade un accesorio llamado "serena", ejecútalo en modo asistente y analiza el proyecto que está en esta carpeta actual (.).&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Paso 2: Agregar CodeGraph a Claude Code
&lt;/h2&gt;

&lt;p&gt;Ahora conectamos el mapa del proyecto.&lt;/p&gt;
&lt;h2&gt;
  
  
  4.1. Primero: Crear el mapa inicial de tu proyecto
&lt;/h2&gt;

&lt;p&gt;En la misma carpeta de tu proyecto, corre: &lt;code&gt;codegraph init&lt;/code&gt; Verás un mensaje indicando que indexó entidades y relaciones (generalmente toma entre 2 y 10 segundos).&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Paso 3: Configurar Hooks para que Claude NO se salte las herramientas
&lt;/h2&gt;

&lt;p&gt;El problema de las IAs distraídas&lt;/p&gt;

&lt;p&gt;Si solo le dices a Claude: «Por favor, usa siempre CodeGraph y Serena», el modelo puede olvidarlo cuando tiene prisa o cuando la conversación se alarga.&lt;/p&gt;

&lt;p&gt;La solución: Los "Hooks" (Reglas obligatorias de sistema)&lt;/p&gt;

&lt;p&gt;Un Hook no es una sugerencia; es un candado programado dentro de Claude Code que se dispara automáticamente en momentos clave de la sesión.&lt;/p&gt;

&lt;p&gt;Vamos a configurar dos salvaguardas:&lt;/p&gt;

&lt;p&gt;Un Hook de inicio de consulta (UserPromptSubmit): Cada vez que le pidas algo, el sistema le inyecta la orden estricta a su memoria de trabajo antes de procesar la respuesta.&lt;/p&gt;

&lt;p&gt;Un archivo de directrices (CLAUDE.md): La constitución de tu proyecto.&lt;/p&gt;

&lt;p&gt;Paso a paso para activar el Hook:&lt;/p&gt;

&lt;p&gt;Dentro de la carpeta de tu proyecto, entra a la carpeta oculta .claude (si no existe, créala).&lt;/p&gt;

&lt;p&gt;Crea o edita el archivo llamado settings.json dentro de .claude:&lt;/p&gt;

&lt;p&gt;Ruta: .claude/settings.json&lt;/p&gt;

&lt;p&gt;Pega la siguiente configuración exacta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"UserPromptSubmit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo 'REGLA OBLIGATORIA DEL SISTEMA: Antes de explorar archivos con grep o lectura manual ciega, consulta obligatoriamente CODEGRAPH para mapear dependencias y SERENA para ubicar y modificar los símbolos relevantes.'"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Cómo funciona esto?&lt;/p&gt;

&lt;p&gt;Cada vez que presionas Enter con una pregunta o tarea, el Hook se ejecuta en una fracción de milisegundo y le dice al oído a Claude: «Alto, no explores a ciegas; consulta primero CodeGraph y Serena». Claude no puede ignorarlo porque viene inyectado a nivel de sistema.&lt;/p&gt;

&lt;p&gt;Paso complementario: El archivo CLAUDE.md&lt;/p&gt;

&lt;p&gt;En la raíz de tu proyecto, crea un archivo de texto llamado CLAUDE.md y pega esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Reglas de Operación del Proyecto&lt;/span&gt;

&lt;span class="gu"&gt;## 1. Búsqueda y Exploración&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Prohibido hacer barridos masivos de archivos con búsquedas de texto tradicionales si la información puede obtenerse con CodeGraph.
&lt;span class="p"&gt;-&lt;/span&gt; Usa las herramientas de &lt;span class="sb"&gt;`codegraph`&lt;/span&gt; para identificar qué funciones llaman a qué otras y cuál es el mapa arquitectónico.

&lt;span class="gu"&gt;## 2. Modificación de Código&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Para renombrar, inspeccionar o editar funciones, clases o métodos, utiliza prioritariamente las herramientas de &lt;span class="sb"&gt;`serena`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; No leas archivos enteros si solo necesitas el cuerpo de una función específica.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Paso 4: Cómo comprobar que todo está funcionando
&lt;/h2&gt;

&lt;p&gt;Hacer una prueba real&lt;/p&gt;

&lt;p&gt;Hazle una pregunta estructural a Claude sobre tu proyecto:&lt;/p&gt;

&lt;p&gt;«Explícame qué hace este proyecto y cuáles son los componentes principales según CodeGraph.»&lt;/p&gt;

&lt;p&gt;Observarás que Claude ejecutará una herramienta llamada codegraph o serena directamente en lugar de ponerse a abrir archivos de texto al azar.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Swagger en .NET Core, UI y GEN</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Sun, 27 Sep 2020 00:13:10 +0000</pubDate>
      <link>https://dev.to/orbis25/swagger-en-net-core-ui-y-gen-47ek</link>
      <guid>https://dev.to/orbis25/swagger-en-net-core-ui-y-gen-47ek</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vFCfEtTWTSY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;FOLLOW MY CHANEL&lt;/p&gt;

&lt;p&gt;SIGUEME EN MI CANAL&lt;/p&gt;

&lt;p&gt;LINK : &lt;a href="https://www.youtube.com/channel/UCHjyhBUaqk3HFsf7f-TrfXw"&gt;https://www.youtube.com/channel/UCHjyhBUaqk3HFsf7f-TrfXw&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Notificaciones con expo y .Net Core en react-native</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Sat, 12 Sep 2020 01:37:27 +0000</pubDate>
      <link>https://dev.to/orbis25/notificaciones-con-expo-y-netcore-en-react-native-22fa</link>
      <guid>https://dev.to/orbis25/notificaciones-con-expo-y-netcore-en-react-native-22fa</guid>
      <description>&lt;p&gt;Hola, hoy quiero hablarte de un tema muy importante cuando desarrollamos aplicaciones moviles y efectivamente son &lt;strong&gt;las notificaciones&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Simpre necesitamos ese feedback que nos indique que pasa dentro de nuestra aplicación, se compró un nuevo producto, se agregó un nuevo cliente y entre otras... Son muchas las notificaciones que requerimos y recibimos a diario y por esto es que quiero enseñarte como crear una aplicación con un backend en .netCore y poder recibir esas notificaciones que enviamos en una aplicación desarrollada con &lt;strong&gt;react native&lt;/strong&gt; y &lt;strong&gt;Expo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lo primero que vamos a hacer es crear nuestro proyecto de &lt;strong&gt;React native con expo&lt;/strong&gt;; corremos los siguientes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --global expo-cli

expo init my-project

cd my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En mi caso tendré la siguiente estructura debido a que cree el proyecto con el template de &lt;strong&gt;TypeScript&lt;/strong&gt; pero aplica para &lt;strong&gt;JavaScript&lt;/strong&gt; igual asi que no te preocupes 😁.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ATlq_PBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92526943-a6c1e900-f1fc-11ea-844e-faa4089cfbd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ATlq_PBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92526943-a6c1e900-f1fc-11ea-844e-faa4089cfbd3.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora abrimos nuestro &lt;strong&gt;App.tsx&lt;/strong&gt; o &lt;strong&gt;App.js&lt;/strong&gt; y agregamos el siguiente codigo a nuesto componente App para sacar el token correspondiente a nuestro dispositivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//metodo que genera y registra el token unico
async function registerForPushNotificationsAsync() {
  let token;
  if (Constants.isDevice) {
    const { status: existingStatus } = await Permission.getAsync(
      Permission.NOTIFICATIONS
    );
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
      const { status } = await Permission.askAsync(Permission.NOTIFICATIONS);
      finalStatus = status;
    }
    if (finalStatus !== "granted") {
      alert("Failed to get push token for push notification!");
      return;
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
    console.log(token);
  } else {
    alert("Must use physical device for Push Notifications");
  }

  if (Platform.OS === "android") {
    Notifications.setNotificationChannelAsync("default", {
      name: "default",
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: "#FF231F7C",
    });
  }

  console.log(token);
  alert(token); //mostramos el token
  return token;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora en nuestro hook &lt;strong&gt;useEffect&lt;/strong&gt; llamamos dicha función para obtener el token que posteriormente necesitaremos para enviarle las notificaciones desde nuestro backend en &lt;strong&gt;.netCore&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  useEffect(() =&amp;gt; {
    (async () =&amp;gt; {
      registerForPushNotificationsAsync();
    })();
  }, []);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego corremos nuestra app y veremos el token en ella, ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tQuEyLrM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92529354-be9b6c00-f200-11ea-9f36-5eb35e959981.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tQuEyLrM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92529354-be9b6c00-f200-11ea-9f36-5eb35e959981.png" alt="Screenshot_2020-09-08-17-21-45"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Listo tenemos la primera parte funcionando, todo va excelente!&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicación en .netCore
&lt;/h2&gt;

&lt;p&gt;En este ejemplo utilizaremos una aplicación de consola, pero puedes implementarlo en una api, web app etc. aplica para cada caso solo depende de tu necesidad. (Lo correcto seria que ese token se lo asignemos a nuesto usuario en la db 😎 para posteriormente llamar esa información de alli. Pero para ilustrar el ejemplo lo voy a hacer &lt;strong&gt;Hard code&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;Creamos nuestra aplicación de consola en .netCore (OJO sirve para cualquier tipo de proyecto en .netCore).&lt;/p&gt;

&lt;p&gt;Paso 2: Instalar el siguiente nugget package : &lt;strong&gt;Expo.Server.SDK&lt;/strong&gt; &lt;br&gt;
y luego tendremos que hacer un codigo como el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q0rwMaTV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92984217-fc0d2d00-f47e-11ea-807a-b45aea726373.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q0rwMaTV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92984217-fc0d2d00-f47e-11ea-807a-b45aea726373.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Listo solo tienes que correr el proyecto y llegara tu notificación
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Lo correcto seria que guardaramos estos tokens asignados a los usuarios de la app en nuestra db y luego llamaramos esos token con alguna logica que necesitemos implementar.&lt;/p&gt;

&lt;p&gt;Espero que sirva, recuerda dejar tu like y tus dudas en los comentarios; aqui debajo te dejo los repositorios.&lt;/p&gt;

&lt;p&gt;Repositorio NetCore =&amp;gt; &lt;a href="https://github.com/Orbis25/expo-notifications-netCore"&gt;https://github.com/Orbis25/expo-notifications-netCore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositorio React-native-app =&amp;gt; &lt;a href="https://github.com/Orbis25/react-native-ui-apps/tree/master/expo-notifications"&gt;https://github.com/Orbis25/react-native-ui-apps/tree/master/expo-notifications&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netcore</category>
      <category>reactnative</category>
      <category>expo</category>
      <category>exponotifications</category>
    </item>
    <item>
      <title>Organiza tu Startup class</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Fri, 04 Sep 2020 17:22:44 +0000</pubDate>
      <link>https://dev.to/orbis25/organiza-tu-startup-class-1fd5</link>
      <guid>https://dev.to/orbis25/organiza-tu-startup-class-1fd5</guid>
      <description>&lt;p&gt;Todo el tiempo necesitamos que nuestro codigo, además de que funcione sea entendible para los demas programadores.&lt;/p&gt;

&lt;p&gt;Algo muy común es ver nuestra &lt;strong&gt;startup class&lt;/strong&gt; o &lt;strong&gt;startup.cs&lt;/strong&gt; un poco revuelta y aveces tener muchos servicios registrados, implementaciones, db contexts, configuraciones no es muy conveniente tenerlo todo alli, suele ser mucho codigo poco separado, poco organizado y un programador que se dirija a revisar tu codigo, para posteriormente realizar algún cambio puede ser un poco tedioso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crea metodos de extension
&lt;/h2&gt;

&lt;p&gt;Si creas metodos de extension de tu clase startup puedes tener el codigo mas organizado y la persona que necesite ir a tu codigo solo tendrá que ir a dichas implementaciones, por ejemplo : &lt;/p&gt;

&lt;p&gt;Esta seria mi clase startup con metodos de extension donde solo los estoy llamando y no escribiendo toda la logica o configuración de esta en el &lt;strong&gt;ConfigureServices&lt;/strong&gt;.&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%2Fuser-images.githubusercontent.com%2F38229144%2F92267626-44dd4880-eeb7-11ea-951d-3094e9235dce.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%2Fuser-images.githubusercontent.com%2F38229144%2F92267626-44dd4880-eeb7-11ea-951d-3094e9235dce.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Crea una clase StartupExtension.cs
&lt;/h2&gt;

&lt;p&gt;En esta clase es preciso que sea &lt;strong&gt;static&lt;/strong&gt; para que pueda ser llamada en la clase &lt;strong&gt;startup&lt;/strong&gt;, con la siguiente estructura donde definas los metodos de extensión de la misma (Lamento los borrones 😁Cuestiones de seguridad). Ejemplo : &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%2Fuser-images.githubusercontent.com%2F38229144%2F92268052-1318b180-eeb8-11ea-9327-c1868513eb24.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%2Fuser-images.githubusercontent.com%2F38229144%2F92268052-1318b180-eeb8-11ea-9327-c1868513eb24.png" alt="Screenshot_3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Manten la organización de tus implementaciones
&lt;/h2&gt;

&lt;p&gt;Recuerda que la programación es lineal, ten cuidado como organizes tus servicios o implementaciones dentro de metodo &lt;strong&gt;ConfigureServices&lt;/strong&gt; y tambien en el &lt;strong&gt;middleware&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sigue extendiendo 🐱‍💻
&lt;/h2&gt;

&lt;p&gt;Si tu &lt;strong&gt;middleware&lt;/strong&gt; necesita tener muchas implementaciones sigue extendiendo su funciones, por ejemplo cuando necesites hacer un log de los request que entren a tu api o proyecto web, lo correcto seria que llamaras esa implementación en tu &lt;strong&gt;middleware&lt;/strong&gt; porque allí es donde pasan todos los request de tu applicación, asi que para estos casos muy especificos cuando tengas mucha logica o mucha configuración extiendelo!&lt;/p&gt;

&lt;p&gt;Si te sirvio, no olvides dejar tu comentario y dar like a la publicación.&lt;/p&gt;

&lt;p&gt;Sigueme en GitHub =&amp;gt; &lt;a href="https://github.com/Orbis25" rel="noopener noreferrer"&gt;https://github.com/Orbis25&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netcore</category>
      <category>net</category>
      <category>cleanarquitecture</category>
      <category>bestpractices</category>
    </item>
  </channel>
</rss>
