<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The impostor blog]]></title><description><![CDATA[Artículos sobre tecnología, desarrollo, plataformas en la nube, y consultoría de software.]]></description><link>https://theimpostorblog.vacacela.com</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Apr 2026 16:22:44 GMT</lastBuildDate><atom:link href="https://theimpostorblog.vacacela.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Transforma tus Negociaciones: De la Confrontación al Acuerdo Inteligente]]></title><description><![CDATA[¿Te ha pasado que en una negociación sientes que estás más peleando que buscando una solución? El libro "Getting to Yes" nos da una perspectiva diferente sobre cómo negociar de manera efectiva. ¡Prepárate para transformar tus conversaciones difíciles...]]></description><link>https://theimpostorblog.vacacela.com/resumen-de-getting-to-yes-13</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-de-getting-to-yes-13</guid><category><![CDATA[getting-to-yes]]></category><category><![CDATA[habilidadesblandas]]></category><category><![CDATA[Negociacion]]></category><category><![CDATA[#resumenlibro]]></category><category><![CDATA[DesarrolloPersonal]]></category><category><![CDATA[comunicacion]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 05 Oct 2025 01:20:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/4mEyvORkbN0/upload/ae6d93d1dd78f08abc1843d1ef0e1d20.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>¿Te ha pasado que en una negociación sientes que estás más peleando que buscando una solución? El libro "Getting to Yes" nos da una perspectiva diferente sobre cómo negociar de manera efectiva. ¡Prepárate para transformar tus conversaciones difíciles! ✨</p>
<h2 id="heading-el-problema-de-aferrarse-a-la-posicion">El Problema de "Aferrarse a la Posición"</h2>
<p>El libro arranca con una idea clave: negociar desde una posición fija es un error. 🙅‍♀️ ¿Por qué?</p>
<ul>
<li><p><strong>El Ego se Interpone:</strong> Cuando te aferras a una posición, tu ego se involucra y lo importante deja de ser el acuerdo para convertirse en "ganar" la discusión. 🏆</p>
<ul>
<li>Ejemplo: Imagina que estás negociando un aumento de sueldo. En lugar de enfocarte en tus logros y el valor que aportas a la empresa, te limitas a decir "Merezco ganar más porque llevo X años aquí". 🙄</li>
</ul>
</li>
<li><p><strong>Te Olvidas de lo que Realmente Importa:</strong> Te enfocas tanto en defender tu postura que olvidas cuáles son tus verdaderas necesidades y las de la otra persona. 🧐</p>
<ul>
<li>Ejemplo: Estás discutiendo con tu pareja sobre dónde ir de vacaciones. En lugar de considerar qué tipo de actividades disfrutan ambos, te empeñas en ir a tu destino favorito sin importar sus preferencias. 🏖️➡️🙅‍♀️</li>
</ul>
</li>
<li><p><strong>Es Lento e Ineficiente:</strong> Imagina ceder poquito a poquito... ¡una eternidad! ⏳</p>
</li>
<li><p><strong>Daña Relaciones:</strong> La negociación se convierte en una competencia, y si hay más personas involucradas, ¡peor!</p>
</li>
</ul>
<h3 id="heading-errores-comunes-al-negociar-desde-una-posicion">Errores Comunes al Negociar desde una Posición:</h3>
<ul>
<li><p><strong>Tomarlo Personal:</strong> Asumir que la otra persona está tratando de atacarte.</p>
</li>
<li><p><strong>No Escuchar Activamente:</strong> Interrumpir y pensar en tu respuesta en lugar de comprender su punto de vista.</p>
</li>
<li><p><strong>Ser inflexible:</strong> Negarse a considerar otras opciones o perspectivas.</p>
</li>
<li><p><strong>Dejarte Llevar por las Emociones:</strong> Reaccionar impulsivamente en lugar de mantener la calma y la objetividad. 😤➡️🧘‍♀️</p>
</li>
</ul>
<h3 id="heading-ser-buena-onda-es-la-solucion">¿Ser "Buena Onda" es la Solución?</h3>
<p><strong>¡Tampoco! 😅</strong></p>
<p>A veces, por ser amables, caemos en la "negociación blanda":</p>
<ul>
<li><p><strong>Priorizas el Acuerdo</strong>: Quieres quedar bien y terminas cediendo en todo, ¡error! 😬</p>
</li>
<li><p><strong>Cedes Demasiado</strong>: Confías ciegamente y cambias de opinión a cada rato. 🔄</p>
</li>
<li><p><strong>Resultado</strong>: Acuerdos malos solo por mantener la paz. 📉</p>
</li>
</ul>
<p>¡Ojo! Tampoco se trata de ser el más duro y salirte con la tuya a toda costa. 🥊</p>
<h3 id="heading-la-alternativa-inteligente-negociacion-basada-en-principios-metodo-harvard">La Alternativa Inteligente: Negociación Basada en Principios (Método Harvard)</h3>
<p>"Getting to Yes" nos propone un camino diferente, basado en cuatro pilares:</p>
<ol>
<li><p><strong>Personas:</strong> Separa a la persona del problema. No es un ataque personal, ¡es una negociación! 🤝</p>
</li>
<li><p><strong>Intereses:</strong> Enfócate en lo que realmente quieren ambas partes, no en sus posiciones iniciales. 🤔</p>
</li>
<li><p><strong>Opciones:</strong> Busca soluciones creativas donde ambos ganen. ¡Lluvia de ideas! 🧠💡</p>
</li>
<li><p><strong>Criterios:</strong> Basen el acuerdo en datos objetivos, reglas claras o estándares justos. ✅</p>
</li>
</ol>
<p><strong>Ejemplo:</strong> Imagina que estás colaborando con otros desarrolladores en un proyecto de código abierto en Hashnode. Surge un desacuerdo sobre la mejor manera de implementar una nueva funcionalidad. 🧑‍💻💬🧑‍💻</p>
<p><strong>Negociación basada en posiciones (lo que NO debes hacer):</strong></p>
<ul>
<li><p>Desarrollador A: "Mi forma es la correcta, porque siempre lo he hecho así y es más eficiente." 😤</p>
</li>
<li><p>Desarrollador B: "No, mi método es mejor porque usa la última tecnología y es más moderno." 🤓</p>
</li>
</ul>
<p>En este caso, ambos se aferran a su posición sin escuchar al otro. El resultado es una discusión estéril y frustración. 📉</p>
<p><strong>Negociación basada en principios (la forma inteligente):</strong></p>
<ol>
<li><p><strong>Gente:</strong> Recuerda que todos están en el mismo equipo, buscando el mejor resultado para el proyecto.</p>
</li>
<li><p><strong>Intereses:</strong> ¿Qué es lo que realmente importa? Tal vez la eficiencia, la mantenibilidad, la escalabilidad o la compatibilidad con otras partes del código.</p>
</li>
<li><p><strong>Opciones:</strong> Exploren diferentes enfoques. ¿Podrían combinar elementos de ambas propuestas? ¿Existe una tercera alternativa que no han considerado?</p>
</li>
<li><p><strong>Criterios:</strong> Basen su decisión en métricas objetivas, como pruebas de rendimiento, estándares de codificación o la opinión de otros miembros de la comunidad.</p>
</li>
</ol>
<p><strong>Resultado:</strong> En lugar de una pelea de egos, tienen una discusión productiva que lleva a una solución innovadora y que beneficia a todo el proyecto. Además, fortalecen su relación como colaboradores. 🚀✨</p>
<p><a target="_blank" href="https://a.co/d/8f4ChBg">Encuentra el libro aquí: Obtenga el sí: El arte de negociar sin ceder</a> 📚</p>
<p>Ahora te toca a ti: 👇 ¿Alguna vez te has encontrado en una negociación donde te aferraste demasiado a tu posición? ¿Cómo crees que podrías haber aplicado los principios de "Getting to Yes" en esa situación? ¡Cuéntanos tu experiencia en los comentarios! 💬 Y la próxima vez que tengas que negociar, ¡pon en práctica estos principios y cuéntanos cómo te fue!</p>
]]></content:encoded></item><item><title><![CDATA[Resumen de Platform Engineering (Cap 1)]]></title><description><![CDATA[📚 Capítulo 1: ¿Por qué necesitamos Platform Engineering?
¿Por qué necesito leer este libro?
Porque Platform Engineering ofrece una visión clara y práctica sobre cómo construir plataformas internas que realmente empoderen a los equipos de desarrollo,...]]></description><link>https://theimpostorblog.vacacela.com/resumen-de-platform-engineering-cap-1</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-de-platform-engineering-cap-1</guid><category><![CDATA[Platform Engineering ]]></category><category><![CDATA[spanish]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Thu, 10 Apr 2025 03:16:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1744255214942/875166a3-001a-43df-b32b-388262f5209d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-capitulo-1-por-que-necesitamos-platform-engineering">📚 Capítulo 1: ¿Por qué necesitamos Platform Engineering?</h1>
<h2 id="heading-por-que-necesito-leer-este-libro">¿Por qué necesito leer este libro?</h2>
<p>Porque <em>Platform Engineering</em> ofrece una visión clara y práctica sobre cómo construir plataformas internas que realmente empoderen a los equipos de desarrollo, mejoren la eficiencia operativa y escalen con el crecimiento de tu organización. Con la experiencia combinada de <strong>Camille Fournier</strong> e <strong>Ian Nowland</strong>, este libro te ayuda a evitar errores comunes, entender qué hace valiosa a una plataforma y cómo liderar equipos técnicos hacia soluciones sostenibles, reutilizables y centradas en el usuario interno. Es una lectura esencial si quieres que tu equipo construya más rápido, con menos fricción y mayor impacto.</p>
<h2 id="heading-que-motivo-la-aparicion-de-las-plataformas">¿Qué motivó la aparición de las plataformas?</h2>
<p>Las plataformas nacen de los desafíos modernos en la ingeniería de software a escala. Los equipos deben gestionar ecosistemas tecnológicos cada vez más diversos y cambiantes, sin sacrificar disponibilidad ni desempeño. Esta presión llevó a la necesidad de crear soluciones reutilizables y eficientes que reduzcan complejidad sin ralentizar la innovación.</p>
<hr />
<h2 id="heading-conceptos-clave-de-platform-engineering">Conceptos clave de <em>Platform Engineering</em></h2>
<h3 id="heading-plataforma">🔧 Plataforma</h3>
<blockquote>
<p>“Las plataformas son los cimientos de APIs self-service, herramientas, servicios, conocimiento y soporte que se disponen como un producto interno muy interesante. Equipos de aplicación autónomos pueden hacer uso de la plataforma para la entrega de funciones de producto más rápido y con menor coordinación.”<br />— Evan Bottcher, 2018</p>
</blockquote>
<h3 id="heading-platform-engineering">🛠️ Platform Engineering</h3>
<blockquote>
<p>Es la disciplina dedicada al diseño, construcción y operación de plataformas. Su propósito: manejar la complejidad técnica para acelerar el negocio.</p>
</blockquote>
<h3 id="heading-leverage-influencia">⚖️ Leverage (influencia)</h3>
<blockquote>
<p>El trabajo de unos pocos ingenieros en una plataforma puede tener un impacto positivo en toda la organización. Esto se logra aumentando la productividad de los equipos de aplicación y evitando esfuerzos duplicados.</p>
</blockquote>
<h3 id="heading-plataforma-como-producto">🎯 Plataforma como producto</h3>
<blockquote>
<p>Ver la plataforma como un producto significa adoptar un enfoque centrado en el cliente interno (los desarrolladores), guiando el desarrollo de funcionalidades con base en sus necesidades reales.</p>
</blockquote>
<hr />
<h2 id="heading-un-poco-de-historia-como-llegamos-a-este-punto">🧠 Un poco de historia: ¿cómo llegamos a este punto?</h2>
<p>Aunque la industria ha evolucionado mucho en cuanto a herramientas e infraestructura en los últimos 25 años, los costos de mantener sistemas complejos han crecido. Las aplicaciones son más fáciles de construir, pero más difíciles de operar. Y a medida que escalan, se vuelven más lentas… como caminar en un pantano.</p>
<p>Según Jossi Koskinen, entre el 60 y 75% del costo de un software ocurre <strong>después</strong> de su lanzamiento inicial, y gran parte se va en mantenimiento y migraciones.</p>
<h3 id="heading-cambio-1-explosion-de-opciones">💥 Cambio #1: Explosión de opciones</h3>
<p>La llegada de la nube pública trajo una avalancha de alternativas. Los desarrolladores buscaban independencia, rapidez y menos fricción con equipos de infraestructura. Sin embargo, la diversidad trajo consigo complejidad, riesgos de seguridad y costos ocultos.</p>
<h3 id="heading-cambio-2-nuevas-necesidades-operativas">⚙️ Cambio #2: Nuevas necesidades operativas</h3>
<p>Este nuevo ecosistema exigía no solo nuevas herramientas, sino también nuevos roles. Apareció el movimiento DevOps, con una cultura centrada en colaboración y automatización. Más adelante, Google presentó SRE (Site Reliability Engineering) como su forma de garantizar confiabilidad en producción. Aunque fue revolucionario, fuera de Google ha sido difícil de replicar con éxito.</p>
<details><summary>Site reliability engineering (SRE)</summary><div data-type="detailsContent">En 2004 Google cambió de Operations Engineering a algo llamado Site Reliability Engineering. En 2015, durante el ascenso de la popularidad de DevOps, Google publicó un libro sobre sus prácticas, <a target="_self" class="notion-link-token notion-focusable-token notion-enable-hover" href="https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/">Site Reliability Engineering: How Google Runs Productions Systems</a><a target="_self" href="https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/">. Lo que causó furor entre aquellos que habian adoptado DevOps y </a>estaban teniendo dificultades con las complejidades de ésta práctica. Se pensó que el SRE sería la solución mágica que la industria necesitaba para balancear las necesidades operacionales y de desarrollo. Sin embargo, no ha tenía un éxito generalizado fuera de Google, demasiados procesos apegados a su cultura y capital internos. Paradójicamente estos bloqueantes son explicados por el director antiguo de SRE de Google, Dave O’Connor, quien después de un par de temporadas fuera de Google escribió un post en 2023 titulado “<a target="_self" class="notion-link-token notion-focusable-token notion-enable-hover" href="https://log.andvari.net/6reasons.html">6 Razones por las que no necesidad un equipo SRE</a><a target="_self" href="https://log.andvari.net/6reasons.html">“</a></div></details>

<hr />
<h2 id="heading-como-ayuda-platform-engineering-a-salir-del-pantano">🔍 ¿Cómo ayuda Platform Engineering a salir del pantano?</h2>
<p>Las plataformas permiten:</p>
<ul>
<li><p><strong>Reducir la cantidad de tecnologías primitivas</strong> (por ejemplo, herramientas OSS) sin sacrificar flexibilidad.</p>
</li>
<li><p><strong>Disminuir el acoplamiento</strong> entre equipos y herramientas, al ofrecer abstracciones reutilizables.</p>
</li>
<li><p><strong>Centralizar migraciones</strong>, encapsulando tecnologías y exponiéndolas a través de APIs internas. Y mejorarando la observabilidad, controlando qué se usa y cómo se usa en la organización.</p>
</li>
<li><p><strong>Empoderar a los developers</strong>, permitiéndoles operar lo que construyen, sin cargar con la complejidad operativa de fondo.</p>
</li>
</ul>
<p>Un ejemplo clásico es Terraform: en vez de que cada equipo gestione su propia infraestructura, la plataforma puede encargarse de abstraer esa complejidad y ofrecer una experiencia más alineada con las necesidades reales de los equipos.</p>
<hr />
<h2 id="heading-crear-plataformas-requiere-colaboracion">🚀 Crear plataformas requiere colaboración</h2>
<p>Se mencionan cuatro enfoques que son populares y traen valor a la organización, pero debido a los sesgos de su rol, no es común que estén aptos para la tarea de crear plataformas. Por lo tanto, la ingeniería de plataformas promueve que estos grupos de ingenieros salgan de los silos y trabajen en equipos con una misión más amplia para crear plataformas que provean un balance. Incluyendo a los equipos de:</p>
<ul>
<li><p><strong>Infraestructura</strong>, balancear las capacidades de infraestructura y las simplicidades centradas en el desarrollador.</p>
</li>
<li><p><strong>DevTools</strong>, balancear la experiencia de desarrollo con la experiencia de soporte en producción.</p>
</li>
<li><p><strong>DevOps</strong>, balancear la cohesión idónea por aplicación con un software más general para dar soporte a muchas más aplicaciones.</p>
</li>
<li><p><strong>SRE</strong>, balancear la fiabilidad con otros atributos de sistema como agilidad de funciones, eficiencia de costos, seguridad y desepeño</p>
</li>
</ul>
<p>La ingeniería de plataformas une estos mundos. Promueve equipos más integrados, con misiones claras y un foco en construir soluciones escalables, mantenibles y centradas en el usuario interno.</p>
<hr />
<p>¿Te interesa este tema? ¡Estoy escribiendo un resumen por cada capítulo!<br />Puedes seguirme para más artículos sobre platform engineering, DevOps y arquitectura moderna.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo pasé de no saber Dart a construir una app completa con flutter]]></title><description><![CDATA[Objetivo del blog: compartir mi proceso, dificultades y aprendizajes.
📚 ¿Por qué decidí aprender Flutter y Dart?

La capacidad de flutter para crear aplicaciones con alto desempeño para sistemas operativos iOS y Android a partir de un mismo código b...]]></description><link>https://theimpostorblog.vacacela.com/como-pase-de-no-saber-dart-a-construir-una-app-completa-con-flutter</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/como-pase-de-no-saber-dart-a-construir-una-app-completa-con-flutter</guid><category><![CDATA[Dart]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[Mobile apps]]></category><category><![CDATA[Learning Journey]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Mon, 24 Feb 2025 03:57:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/n31x0hhnzOs/upload/2a07955adee77fcaad6f8d9e4deabb15.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Objetivo del blog: compartir mi proceso, dificultades y aprendizajes.</strong></p>
<h2 id="heading-por-que-decidi-aprender-flutter-y-dart"><strong>📚 ¿Por qué decidí aprender Flutter y Dart?</strong></h2>
<ul>
<li><p>La capacidad de flutter para crear aplicaciones con alto desempeño para sistemas operativos iOS y Android a partir de un mismo código base.</p>
</li>
<li><p>Por su creciente adopción en aplicaciones de nivel empresarial señala su potencial futuro.</p>
</li>
<li><p>Curva de aprendizaje es bastante rápida, si se tiene conococimiento de POO (Programación Orientada a Objetos).</p>
</li>
<li><p>Dart es mencionado por el <a target="_blank" href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2023/09/tr_technology_radar_vol_29_es.pdf">Tech Radar de Thoughtworks</a>.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1740364017664/5213fa50-91ee-4bf2-9d16-37aac90a1167.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-mi-punto-de-partida"><strong>💡Mi punto de partida</strong></h2>
<p>Conocimientos en varios lenguajes de programación entre ellos: python, java, javascript. Experiencia con herramientas de CI/CD.</p>
<p><strong>Contexto del dominio:</strong> Se requiere una aplicación que ayude a reportar la cantidad de banano recolectado por día, así como también el personal que ha laborado.</p>
<h2 id="heading-paso-1-primer-encuentro-con-dart-y-flutter"><strong>🛠️ Paso 1: Primer Encuentro con Dart y Flutter</strong></h2>
<ul>
<li><p>Instalación y configuración del entorno de desarrollo (Dart SDK, Flutter, VS Code/Android Studio), siguiendo las instrucciones de la <a target="_blank" href="https://docs.flutter.dev/get-started/install">documentación oficial</a>.</p>
</li>
<li><p>Primeros conceptos en Dart: variables, funciones, clases y tipado (ver más info <a target="_blank" href="https://dart.dev/language">aquí</a>).</p>
<ul>
<li><p>Si eres más de los que aprenden con videos, te adjunto el curso de Udemy <a target="_blank" href="https://www.udemy.com/course/flutter-bootcamp-with-dart/"><strong>The Complete Flutter Development Bootcamp with Dart</strong></a> by Angela Yu.</p>
</li>
<li><p>Entender sobre <a target="_blank" href="https://docs.flutter.dev/get-started/fundamentals/widgets">Widgets</a>.</p>
</li>
</ul>
</li>
<li><p>Creando la aplicación usando el <a target="_blank" href="https://docs.flutter.dev/reference/flutter-cli">Futtler Command Line Tool</a>.</p>
</li>
<li><p>Buscando buenas prácticas para definir la estructura del proyecto.</p>
</li>
</ul>
<blockquote>
<p><strong>Advertencia.</strong> Si bien esta estructura podría ser tomada como una referencia en aplicaciones sencillas. Si la aplicación sigue creciendo podría causar confusiones. Te dejo <a target="_blank" href="https://medium.com/@vortj/leveling-up-your-flutter-project-structure-fcb7099a3930">esta</a> referencia en donde pueden guiarse de una estructura más limpia y mantenible,</p>
</blockquote>
<pre><code class="lang-plaintext">➜  crechazo-app   
lib
├── data
├── exceptions
├── models
│   ├── builder
│   └── types
├── screens
│   ├── farms
│   ├── plate_detail
│   ├── reports
│   ├── staff
│   └── widgets
├── services
└── utils
</code></pre>
<ul>
<li><p>data. Definición de la base de datos (BD), y carga de datos iniciales. Además se definen <strong>clases data</strong> para realizar consultas a la BD.</p>
</li>
<li><p>exceptions. Clases de exepciones personalizadas.</p>
</li>
<li><p>models. Definición de entidades</p>
<ul>
<li><p>builder. Clases para creación de entidades usando el <a target="_blank" href="https://refactoring.guru/design-patterns/builder">patrón de diseño Builder</a>.</p>
</li>
<li><p>types. Enums</p>
</li>
</ul>
</li>
<li><p>screeens: Pantallas de interfaz de usuario.</p>
</li>
<li><p>services: Lógica de negocio y conexión con las <strong>clases data.</strong></p>
</li>
<li><p>utils: Agrupa funciones útiles en diferentes partes de la aplicación. No relacionados con la lógica de negocio específica.</p>
</li>
</ul>
<hr />
<h2 id="heading-paso-2-mi-primer-widget-y-la-magia-de-flutter"><strong>📌 Paso 2: Mi Primer Widget y la Magia de Flutter</strong></h2>
<p><a target="_blank" href="https://api.flutter.dev/flutter/material/MaterialApp-class.html">MaterialApp</a> - la base de tu app</p>
<p>Piénsalo como el contenedor principal de tu aplicación en Flutter. Es como el "esqueleto" que define el estilo y la estructura general.</p>
<p><a target="_blank" href="https://api.flutter.dev/flutter/material/Scaffold-class.html">Scaffold</a> - la estructura visual</p>
<p>Ahora que tenemos el "esqueleto" con <code>MaterialApp</code>, necesitamos una estructura con barras de herramientas, botones flotantes, etc. Ahí entra <strong>Scaffold</strong>.</p>
<p><a target="_blank" href="https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html">StatelessWidget</a> Widgets que no cambian</p>
<p>Un <code>StatelessWidget</code> es un elemento de la pantalla que <strong>no cambia con el tiempo</strong>.</p>
<p>🧠 <strong>Ejemplo:</strong> Piensa en un letrero en la calle. Siempre muestra el mismo mensaje, no importa lo que pase.</p>
<p><a target="_blank" href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a> - widgets que sí cambian</p>
<p>Un <code>StatefulWidget</code> <strong>puede cambiar su estado</strong> cuando el usuario interactúa con él.</p>
<p>🧠 <strong>Ejemplo:</strong> Imagina un interruptor de luz. Al presionarlo, cambia de encendido a apagado.</p>
<hr />
<h2 id="heading-paso-3-entendiendo-el-manejo-de-estado"><strong>🚀 Paso 3: Entendiendo el Manejo de Estado</strong></h2>
<p><code>setState()</code> es una función en Flutter que le dice a la app: <strong>"Hey, algo cambió, actualiza la pantalla"</strong>.</p>
<p>Se usa en <strong>StatefulWidgets</strong> cuando necesitamos que la interfaz de usuario (UI) cambie en respuesta a una acción del usuario, como presionar un botón o ingresar texto.</p>
<p>🛠️ <strong>Reglas importantes sobre</strong> <code>setState()</code></p>
<p>✅ Siempre úsalo dentro de un <code>StatefulWidget</code>.<br />✅ Solo actualiza lo necesario, no toda la app.<br />✅ No cambies el estado fuera de <code>setState()</code>, o Flutter no lo reconocerá.</p>
<p>🧠 <strong>Ejemplo:</strong> Cargando datos de un modelo a <a target="_blank" href="https://api.flutter.dev/flutter/widgets/TextEditingController-class.html">controladores</a>.</p>
<p>Uno de los desafíos que enfrenté es entender cómo funciona el cambio de estado. En este ejemplo, se tiene a <code>staffModel</code>, si lo usamos fuera de <code>setState()</code> a pesar de setear los valores en los controladores, estos no se verán reflejados en la pantalla.</p>
<pre><code class="lang-dart">...
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_StaffEditScreenState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">StaffEditScreen</span>&gt; </span>{
  <span class="hljs-keyword">final</span> TextEditingController staffNameController = TextEditingController();
  <span class="hljs-keyword">final</span> _formKey = GlobalKey&lt;FormState&gt;();

  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> initState() {
    <span class="hljs-keyword">super</span>.initState();
    SchedulerBinding.instance.addPostFrameCallback((_) {
      _loadFarmData();
    });
  }

  <span class="hljs-keyword">void</span> _loadFarmData() {
    setState(() {
      staffNameController.text = widget.staffModel.name;
    });
  }

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
        appBar: AppBar(
          ...
        ),
        body: Form(
            key: _formKey,
            child: Column(
              children: &lt;Widget&gt;[
                Padding(
                  child: TextFormField(
                      controller: staffNameController,
                      decoration: <span class="hljs-keyword">const</span> InputDecoration(
                        border: UnderlineInputBorder(),
                        labelText: <span class="hljs-string">'Nombre:'</span>,
                      )),
                )
              ],
            )));
  }
}
</code></pre>
<hr />
<h2 id="heading-paso-4-integrando-una-base-de-datos"><strong>💾 Paso 4: Integrando una Base de Datos</strong></h2>
<p><strong>Usando SQLite como base de datos</strong></p>
<p><a target="_blank" href="https://pub.dev/packages/sqflite"><strong>SQLite</strong></a> es una base de datos <strong>ligera y embebida</strong> que no necesita un servidor. Se usa en Flutter para almacenar datos localmente en el dispositivo, como configuraciones, listas de tareas o historiales de usuarios.</p>
<p>🔹 <strong>¿Por qué usar SQLite en Flutter?</strong><br />✅ No necesita internet.<br />✅ Almacena datos de manera estructurada (tablas y consultas SQL).<br />✅ Es rápido y eficiente para apps móviles.</p>
<p><strong>Insertando datos</strong></p>
<pre><code class="lang-dart">Future&lt;<span class="hljs-keyword">void</span>&gt; insertarUsuario(Database db, <span class="hljs-built_in">String</span> nombre) <span class="hljs-keyword">async</span> {
  <span class="hljs-keyword">await</span> db.insert(<span class="hljs-string">"usuarios"</span>, {<span class="hljs-string">"nombre"</span>: nombre});
}
</code></pre>
<p><strong>Lectura de datos</strong></p>
<pre><code class="lang-dart">Future&lt;<span class="hljs-built_in">List</span>&lt;<span class="hljs-built_in">Map</span>&lt;<span class="hljs-built_in">String</span>, <span class="hljs-built_in">dynamic</span>&gt;&gt;&gt; obtenerUsuarios(Database db) <span class="hljs-keyword">async</span> {
  <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> db.query(<span class="hljs-string">"usuarios"</span>);
}
</code></pre>
<hr />
<h2 id="heading-paso-5-logica-de-negocio"><strong>📉 Paso 5: Lógica de negocio</strong></h2>
<p>Para evitar sobrecargar las clases de datos con la lógica negocio, se crean clases de servicios. Estas almacenarán cálculos y referencias a las clases datos.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:crechazo_app/data/farm_data.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:crechazo_app/models/builder/farm_builder.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:crechazo_app/models/farm_model.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FarmService</span> </span>{
  <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> FarmService _instance = FarmService._(FarmData());
  FarmService._(<span class="hljs-keyword">this</span>.farmData);

  <span class="hljs-keyword">static</span> FarmService <span class="hljs-keyword">get</span> instance =&gt; _instance;

  <span class="hljs-keyword">final</span> FarmData farmData;

  FarmService(<span class="hljs-keyword">this</span>.farmData);

  Future&lt;<span class="hljs-built_in">List</span>&lt;FarmModel&gt;&gt; all() <span class="hljs-keyword">async</span> {
    <span class="hljs-built_in">List</span>&lt;<span class="hljs-built_in">dynamic</span>&gt; list = <span class="hljs-keyword">await</span> farmData.all();

    <span class="hljs-keyword">return</span> <span class="hljs-built_in">List</span>.generate(list.length, (i) {
      <span class="hljs-keyword">return</span> FarmBuilder.fromMap(list[i]).build();
    });
  }

  Future&lt;<span class="hljs-keyword">void</span>&gt; insert(FarmModel farmModel) <span class="hljs-keyword">async</span> {
    <span class="hljs-keyword">await</span> farmData.insert(farmModel);
  }

  Future&lt;<span class="hljs-keyword">void</span>&gt; update(FarmModel farmModel) <span class="hljs-keyword">async</span> {
    <span class="hljs-keyword">await</span> farmData.update(farmModel);
  }
}
</code></pre>
<p>Para hacer referencia a las clases de servicios desde cualquier pantalla e inicializar una única vez, se usó el <a target="_blank" href="https://refactoring.guru/design-patterns/singleton">patrón de diseño Singleton</a>.</p>
<h2 id="heading-pensamientos-finales"><strong>⚙️ Pensamientos finales</strong></h2>
<p>Funcionalmente la aplicación estará lista usando estos conceptos. Sin embargo, es necesario optimizar el código para construir una aplicación escalable, mantenible usando principios arquitéctonicos eficaes.</p>
<p>En la próxima entrega mostraré cómo se desarrollan nuevas funciones usando como base el libro <a target="_blank" href="https://www.amazon.com/Flutter-Design-Patterns-Best-Practices/dp/1801072647"><strong><em>Flutter Design Patterns and Best Practices: Build scalable, maintainable, and production-ready apps using effective architectural principles</em></strong></a> de Daria Orlova, Esra Kadah y Jaime Blasco.</p>
]]></content:encoded></item><item><title><![CDATA[Fundamentos de seguridad de AWS]]></title><description><![CDATA[En la nube, hay un número de principios que pueden ayudarte a fortalecer la seguridad.
Principios de diseño:

Implementar una sólida base de identidad. Implementar el principio de privilegio mínimo y hace cumplir la separación de tareas con la autori...]]></description><link>https://theimpostorblog.vacacela.com/fundamentos-de-seguridad-de-aws</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/fundamentos-de-seguridad-de-aws</guid><category><![CDATA[Security]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Wed, 19 Feb 2025 04:25:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/KrPulSdUetk/upload/3bb0dc7b93701f99b7f665615359848a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En la nube, hay un número de principios que pueden ayudarte a fortalecer la seguridad.</p>
<h3 id="heading-principios-de-diseno">Principios de diseño:</h3>
<ul>
<li><p><strong>Implementar una sólida base de identidad.</strong> Implementar el principio de privilegio mínimo y hace cumplir la separación de tareas con la autorización apropiada para cada interacción con los recursos de AWS.</p>
</li>
<li><p><strong>Habilitar la trazabilidad.</strong> Monitear, alertar y auditar acciones y cambios de tu ambiente en tiempo real. Integrar logs y métricas con sistemas para responder automáticamente y tomar acción.</p>
</li>
<li><p><strong>Aplicar seguridad a todas las capas.</strong> En lugar de centrarse en la protección de una única capa exterior, aplicar un enfoque de defenza en profundidad con otros controles de seguridad.</p>
</li>
<li><p><strong>Automatizar las mejores prácticas de seguridad.</strong> Los mecanismos de seguridad automatizados basados en software mejoran su capacidad para escalar de forma segura con mayor rapidez y rentabilidad. Implementar controles que son definidos y gestionados como código en plantillas controladas por versionamiento.</p>
</li>
<li><p><strong>Proteger datos en tránsito y en reposo.</strong> Clasifica tus datos en niveles de sensibilidad, use mecanismos como encriptación y control de acceso.</p>
</li>
<li><p><strong>Hacer cumplir el princio de privilegio mínimo.</strong> Acceso a los datos debería únicamente ser otorgado a las personas que realmente necesitan el acceso. Comience denegando acceso a todo y otorgando acceso como lo necesite.</p>
</li>
<li><p><strong>Prepararse para incidentes de seguridad.</strong> Prepárese para un incidente mediante un proceso de gestión de incidentes que se ajuste a los requerimientos de tu organización. Realice simulacros de respuesta a incidentes y use herramientas automatizadas para incrementar la velocidad para la detección, investigación y recuperación.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Recursos código limpio]]></title><description><![CDATA[Libros

Code Smells.

Refactoring por Martin Fowler

Clean code por Robert Martin, Dean Wamper

Básicos de clean code

Hacer ejercicio de un código hecho, y revisar.

Crear PR de código limpio


Testing

Tangentially related for determining whether w...]]></description><link>https://theimpostorblog.vacacela.com/recursos-codigo-limpio</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/recursos-codigo-limpio</guid><category><![CDATA[clean code]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Mon, 09 Dec 2024 03:14:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ipARHaxETRk/upload/02dd00d18e06f2ef317c63ea353eec68.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Libros</strong></p>
<ul>
<li><p><a target="_blank" href="https://sourcemaking.com/refactoring/smells">Code Smells.</a></p>
</li>
<li><p><a target="_blank" href="https://martinfowler.com/books/refactoring.html">Refactoring por Martin Fowler</a></p>
</li>
<li><p><a target="_blank" href="https://www.amazon.com/-/es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean code por Robert Martin, Dean Wamper</a></p>
</li>
<li><p><a target="_blank" href="https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29">Básicos de clean code</a></p>
</li>
<li><p>Hacer ejercicio de un código hecho, y revisar.</p>
<ul>
<li>Crear PR de código limpio</li>
</ul>
</li>
<li><p>Testing</p>
<ul>
<li><p>Tangentially related for determining whether we can trust our tests, but not for test code structure feedback <a target="_blank" href="https://mutatest.readthedocs.io/en/latest/">https://mutatest.readthedocs.io/en/latest/</a></p>
</li>
<li><p><a target="_blank" href="https://podcasts.apple.com/us/podcast/thoughtworks-technology-podcast/id881136697?i=1000568230647">Better testing through mutations</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking and Learning: Refactor Your Wetware</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Acronymous in English]]></title><description><![CDATA[Commons acronymous to use at work and in daily life:

FOMO: Fear of missing out

DOB: Date of Birth

BTW: By the way

BLT: Bacon, lettuce and tomato

RSVP: Respondez sil vous plait (please reply if you are invited a party)

PS: post scriptum, additio...]]></description><link>https://theimpostorblog.vacacela.com/acronymous-in-english</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/acronymous-in-english</guid><category><![CDATA[english]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Thu, 28 Nov 2024 03:53:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/s9CC2SKySJM/upload/20d5d54399639d06ee76139b1081ba01.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Commons acronymous to use at work and in daily life:</p>
<ul>
<li><p>FOMO: Fear of missing out</p>
</li>
<li><p>DOB: Date of Birth</p>
</li>
<li><p>BTW: By the way</p>
</li>
<li><p>BLT: Bacon, lettuce and tomato</p>
</li>
<li><p>RSVP: Respondez sil vous plait (please reply if you are invited a party)</p>
</li>
<li><p>PS: post scriptum, additional information</p>
</li>
<li><p>ASAP: As soon as possible</p>
</li>
<li><p>BO: Body odour, mal olor del cuerpo</p>
</li>
<li><p>LOL: Laugh out loud</p>
</li>
<li><p>BYOB: Bring your own bear, bring alcohol</p>
</li>
<li><p>BRB: Be right back</p>
</li>
<li><p>ETA: Estimated time of arrival</p>
</li>
<li><p>TBC: To be confirmed</p>
</li>
<li><p>GF: Girl friend</p>
</li>
<li><p>BF: Best friend</p>
</li>
<li><p>OMG: Oh my God</p>
</li>
<li><p>IMO: In my Opinion</p>
</li>
<li><p>IMHO: In my humble opinion</p>
</li>
<li><p>PTO: Please turn on</p>
</li>
<li><p>EOD: End of day</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Aprendizajes siendo Technical Consultant]]></title><description><![CDATA[Es más importante hacer buenas preguntas que tener todas las respuestas
(Slin, 2022)

—

Being a tech leader… And my role in that is in my mind to make sure that everyone is set up for success and and not so much that that it's on my shoulders becaus...]]></description><link>https://theimpostorblog.vacacela.com/aprendizajes-siendo-technical-consultant</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/aprendizajes-siendo-technical-consultant</guid><category><![CDATA[technical-consultant]]></category><category><![CDATA[learnings]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Thu, 28 Nov 2024 03:46:11 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/AeqQ7EksoFU/upload/9513a5cfcd0909eeaf1ed8dff66891ea.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>Es más importante hacer buenas preguntas que tener todas las respuestas</p>
<p>(Slin, 2022)</p>
</blockquote>
<p>—</p>
<blockquote>
<p>Being a tech leader… And my role in that is in my mind to make sure that everyone is set up for success and and not so much that that it's on my shoulders because that's I feel like that type of mindset can lead to like control.</p>
<p>(Andrew, 2022)</p>
</blockquote>
<p>—</p>
<blockquote>
<p>Si se repite tres o mas veces puede abstraer en un método.</p>
</blockquote>
<p><strong>Sandeep advices:</strong></p>
<blockquote>
<ul>
<li><p>Al recibir retroalimentación, no importa tanto de quién venga, sino la calidad de retroalimentación. (2022)</p>
</li>
<li><p>Cuando codificas pregúntate como si es fácil hacer los test. Por ejemplo declarar inicializaciones de de otros servicios en vez de pasarlos en el constructor. (2022)</p>
</li>
</ul>
</blockquote>
<p>—</p>
<blockquote>
<p><em>Neither comprehension nor learning can take place in an atmosphere of anxiety.</em></p>
<p>– Rose Kennedy</p>
</blockquote>
<p>—</p>
<blockquote>
<p>To find ideas, find problems. To find problems talk to customers.</p>
<p>– Julie Zhuo Authot of "The Making of a Manager"</p>
</blockquote>
<p>—</p>
<blockquote>
<p>"El estándar que pasas por alto es el estándar que aceptas". Negarse a dejar pasar las cosas, ya sean malas prácticas de ingeniería de software, informes de proyectos inadecuados, miembros del equipo con mal comportamiento o problemas sociales que deben abordarse.</p>
<p>— Kristan Vingrys</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Autenticación JWT con React JS y Django]]></title><description><![CDATA[Los programadores conocen los beneficios de todo y las ventajas y desventajas de nada. Los arquitectos necesitan entender ambos.
-Rich Hickey, Creador de lenguaje de programación Clojure


JSON Web Token (JWT) es un estándar para la transmisión de in...]]></description><link>https://theimpostorblog.vacacela.com/autentificacion-jwt-con-react-js-y-django</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/autentificacion-jwt-con-react-js-y-django</guid><category><![CDATA[Django]]></category><category><![CDATA[React]]></category><category><![CDATA[JWT]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 03 Nov 2024 04:22:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6pflEeSzGUo/upload/a7119732c2de38b9bdcc50d5508e23fa.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>Los programadores conocen los beneficios de todo y las ventajas y desventajas de nada. Los arquitectos necesitan entender ambos.</p>
<p><strong>-Rich Hickey, Creador de lenguaje de programación Clojure</strong></p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730643782831/f0f18f31-ae35-4649-8582-e4bbceaf38f7.gif" alt class="image--center mx-auto" /></p>
<p>JSON Web Token (JWT) es un estándar para la transmisión de información de manera segura entre dos partes: el cliente y el servidor. Un JWT es un token encriptado que contiene información relevante del usuario, como su identidad y permisos, y puede ser verificado y procesado sin necesidad de almacenar el estado del usuario en el servidor.</p>
<p>En un sistema de autenticación con React JS en el frontend y Django en el backend, el uso de JWT permite manejar sesiones de usuario de manera eficiente y segura. Cuando un usuario inicia sesión, Django genera un JWT que se envía al cliente React. Este token se incluye en cada solicitud posterior, permitiendo al backend autenticar al usuario y verificar permisos sin tener que consultar constantemente la base de datos, lo que mejora el rendimiento y la escalabilidad del sistema.</p>
<hr />
<h3 id="heading-backend-django"><strong><em>Backend — Django</em></strong></h3>
<p>Primero, configuraremos el proyecto.</p>
<p>Crear el entorno virtual:</p>
<pre><code class="lang-bash">python -m venv &lt;Virtual Environment Name&gt;
</code></pre>
<p>Activar el entorno virtual</p>
<pre><code class="lang-bash"><span class="hljs-built_in">source</span> &lt;Virtual Environment Name&gt;/bin/activate
</code></pre>
<p>Después de activar el entorno virtual, instalamos los paquetes como Django, Django REST framework, Django REST framework simple JWT y Django CORS headers. Los paquetes DRF se utilizan para crear la API, mientras que DRF simple JWT brinda la capacidad de generar el token JWT y Django CORS headers se utiliza para evitar problemas relacionados con CORS.</p>
<pre><code class="lang-bash">pip install Django
pip install djangorestframework
pip install djangorestframework-simplejwt
pip install django-cors-headers
</code></pre>
<p>Una vez hecho esto, crearemos el Proyecto.</p>
<pre><code class="lang-bash">django-admin startproject backend
</code></pre>
<p>Luego, crearemos la primera aplicación dentro del proyecto.</p>
<pre><code class="lang-bash">python manage.py startapp &lt;app name&gt;
</code></pre>
<p>Ahora tenemos que cambiar la configuración del proyecto. Vaya al archivo <a target="_blank" href="http://settings.py">settings.py</a> y realice las siguientes modificaciones:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> timedelta
.....
INSTALLED_APPS = [
     ...........
     <span class="hljs-comment"># Register your app</span>
     <span class="hljs-string">'&lt;app name&gt;.apps.&lt;className&gt;'</span>,
     <span class="hljs-string">'corsheaders'</span>,
     <span class="hljs-string">'rest_framework'</span>,
     <span class="hljs-string">'rest_framework_simplejwt.token_blacklist'</span>
]
.....
CORS_ORIGIN_ALLOW_ALL = <span class="hljs-literal">True</span>
.....
MIDDLEWARE = [
    <span class="hljs-string">'corsheaders.middleware.CorsMiddleware'</span>,
    ...........
]
.....
REST_FRAMEWORK = {
     <span class="hljs-string">'DEFAULT_AUTHENTICATION_CLASSES'</span>: [
        <span class="hljs-string">'rest_framework_simplejwt.authentication.JWTAuthentication'</span>,
      ],
}
.....
SIMPLE_JWT = {
     <span class="hljs-string">'ACCESS_TOKEN_LIFETIME'</span>: timedelta(minutes=<span class="hljs-number">10</span>),
     <span class="hljs-string">'REFRESH_TOKEN_LIFETIME'</span>: timedelta(days=<span class="hljs-number">1</span>),
     <span class="hljs-string">'ROTATE_REFRESH_TOKENS'</span>: <span class="hljs-literal">True</span>,
     <span class="hljs-string">'BLACKLIST_AFTER_ROTATION'</span>: <span class="hljs-literal">True</span>
}
</code></pre>
<p>Veamos lo que hemos hecho. Primero, hemos registrado el nombre de nuestra aplicación (escribirás el nombre de tu aplicación), DRF, DRF simple JWT y CORS en INSTALLED_APPS. En segundo lugar, hemos establecido CORS_ORIGIN_ALLOW_ALL = True y hemos agregado el middleware de encabezado CORS personalizado en MIDDLEWARE para evitar el problema relacionado con CORS. Luego, hemos agregado la clase JWT de autenticación en REST_FRAMEWORK y hemos agregado las configuraciones de token SIMPLE_JWT para implementar una lógica de acceso/actualización.</p>
<p>Después de agregar la configuración en el archivo <a target="_blank" href="http://settings.py">settings.py</a>, crearemos la URL para el token de acceso y el token de actualización en el archivo backend/<a target="_blank" href="http://urls.py">urls.py</a>.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.contrib <span class="hljs-keyword">import</span> admin
<span class="hljs-keyword">from</span> django.urls <span class="hljs-keyword">import</span> path, include
<span class="hljs-keyword">from</span> rest_framework_simplejwt <span class="hljs-keyword">import</span> views <span class="hljs-keyword">as</span> jwt_views
urlpatterns = [
     .....
     path(<span class="hljs-string">'token/'</span>, 
          jwt_views.TokenObtainPairView.as_view(), 
          name =<span class="hljs-string">'token_obtain_pair'</span>),
     path(<span class="hljs-string">'token/refresh/'</span>, 
          jwt_views.TokenRefreshView.as_view(), 
          name =<span class="hljs-string">'token_refresh'</span>)
</code></pre>
<p>Ahora estamos casi listos para probar si funciona o no. Antes de ejecutar el proyecto, debemos aplicar la migración y crear el usuario. Ejecute este comando para aplicar la migración:</p>
<pre><code class="lang-bash">python manage.py migrate
</code></pre>
<p>Una vez hecho esto, crearemos el usuario mediante este comando:</p>
<pre><code class="lang-bash">python manage.py createsuperuser
</code></pre>
<p>Llene todos los campos y ahora iniciaremos el servidor de desarrollo usando este comando:</p>
<pre><code class="lang-bash">python manage.py runserver
</code></pre>
<p>Luego de ejecutar el servidor, navegaremos a <a target="_blank" href="http://localhost:8000/token/">http://localhost:8000/token/</a>, veremos esta página que contiene el formulario con el campo de nombre de usuario y contraseña.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730585807485/f1bb855f-a26c-404b-8189-7e4f999edb62.png" alt class="image--center mx-auto" /></p>
<p>Llene este formulario con su nombre de usuario y contraseña creados, debería ver el token de acceso y actualización.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730586016497/8357034d-b46e-493d-899b-8f8083179bd6.png" alt class="image--center mx-auto" /></p>
<p>Todos sabemos que el token de acceso deja de ser válido después de un tiempo. Por lo tanto, mediante el uso del token de actualización, generaremos el nuevo token de acceso y el token de actualización también. Para generar el nuevo token de acceso con la ayuda del token de actualización, navegaremos a esta URL <a target="_blank" href="http://localhost:8000/token/refresh/">http://localhost:8000/token/refresh/</a>, veremos esta página que contiene el formulario con el campo Actualizar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730586102994/5e36d706-af93-4bff-b0b2-56d8343eefae.png" alt class="image--center mx-auto" /></p>
<p>Complete este formulario con el token de actualización, debería ver el nuevo token de acceso y actualización.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730586166938/0ec48bb8-5c2e-4381-9471-03db0bda5eea.png" alt class="image--center mx-auto" /></p>
<p>Ahora, crearemos un Endpoint para las pruebas. Entonces, crearemos el paquete <strong>users</strong> y dentro al archivo <strong>views.py.</strong> Escribiremos el siguiente código.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> rest_framework.decorators <span class="hljs-keyword">import</span> api_view, permission_classes
<span class="hljs-keyword">from</span> rest_framework.permissions <span class="hljs-keyword">import</span> IsAuthenticated
<span class="hljs-keyword">from</span> django.contrib.auth.models <span class="hljs-keyword">import</span> User
<span class="hljs-keyword">from</span> rest_framework.response <span class="hljs-keyword">import</span> Response
<span class="hljs-keyword">from</span> rest_framework <span class="hljs-keyword">import</span> status


<span class="hljs-meta">@api_view(['GET'])</span>
<span class="hljs-meta">@permission_classes([IsAuthenticated])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">by_id</span>(<span class="hljs-params">_, user_id</span>):</span>
    <span class="hljs-string">"""Get the user by id"""</span>
    <span class="hljs-keyword">try</span>:
        user = User.objects.get(id=user_id)
        <span class="hljs-keyword">return</span> Response({<span class="hljs-string">'username'</span>: user.username, <span class="hljs-string">'email'</span>: user.email, 
            <span class="hljs-string">'first_name'</span>: user.first_name, <span class="hljs-string">'last_name'</span>: user.last_name})
    <span class="hljs-keyword">except</span> User.DoesNotExist:
        <span class="hljs-keyword">return</span> Response(status=status.HTTP_204_NO_CONTENT)
</code></pre>
<p>Veamos lo que hemos hecho. Primero, importamos los módulos y creamos la función by_id que recibe como parámetros un objeto <strong>request</strong> y <strong>user_id</strong>. Agregamos decoradores para especificar el método GET, y establecemos que el acceso a la función debe realizarse estando autentificado.</p>
<p>Ahora, crearemos la URL para el Endpoint. Para crear la URL primero, tenemos que crear el archivo <a target="_blank" href="http://urls.py">urls.py</a> en el directorio de nuestra aplicación.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.urls <span class="hljs-keyword">import</span> path
<span class="hljs-keyword">from</span> .users <span class="hljs-keyword">import</span> views <span class="hljs-keyword">as</span> user_views


urlpatterns = [
    path(<span class="hljs-string">'users/&lt;int:user_id&gt;'</span>, user_views.by_id, name =<span class="hljs-string">'user'</span>),
]
</code></pre>
<p>En segundo lugar, tenemos que registrar la ruta del archivo <a target="_blank" href="http://urls.py">urls.py</a> en el directorio de nuestro proyecto.</p>
<pre><code class="lang-python">urlpatterns = [
    ......
    path(<span class="hljs-string">''</span>, include(<span class="hljs-string">'&lt;app name&gt;.urls'</span>)),
]
</code></pre>
<p>Ahora, usaremos el plugin Rest Client en VSC para acceder a esta url <a target="_blank" href="http://localhost:8000/users/1">http://localhost:8000/users/1</a>, siguiendo el estándar <a target="_blank" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html">RFC 2616</a> que incluye el método de la solicitud, encabezados y cuerpo. Crearemos un nuevo archivo <strong>users.http</strong>, y agregaremos:</p>
<pre><code class="lang-http">### Get user without token
<span class="hljs-attribute">GET http://localhost:8000/users/1</span>
</code></pre>
<p>Obtendremos un mensaje de credenciales de autenticación no proporcionadas porque en la función by_id hemos configurado la clase de permiso en IsAuthenticated, lo que significa que esta página es solo para usuarios autenticados.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730587600069/f835764f-02e4-4134-a798-3bd95f6606f9.png" alt class="image--center mx-auto" /></p>
<p>Entonces, tenemos que proporcionar el token de acceso en la autorización para obtener el resultado. Ahora, nuevamente, crearemos la solicitud de obtención con el token de acceso.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730587924804/30efb41e-13a4-43b6-a146-d920cbc67d40.png" alt class="image--center mx-auto" /></p>
<p>Ahora, tenemos que agregar la funcionalidad de cerrar sesión ya que el token de acceso es válido por un tiempo.</p>
<p>Mediante el uso del token de actualización (refresh_token), generaremos el nuevo token de acceso. Pero, ¿qué sucede cuando el usuario desea cerrar sesión? El cliente puede olvidar ambos tokens. Por ejemplo, eliminamos tanto el token de acceso como el de actualización de localStorage. Pero, si el token de actualización es robado, otro cliente usa este token y lo usa. Para evitar esto, crearemos la API de cierre de sesión, al usarla podemos invalidar el token de actualización.</p>
<p>Para crear la API de cierre de sesión, agregaremos el modulo <strong>authentication</strong> y dentro el archivo views.py, agregaremos:</p>
<pre><code class="lang-python"> <span class="hljs-keyword">from</span> rest_framework.views <span class="hljs-keyword">import</span> APIView
<span class="hljs-keyword">from</span> rest_framework.response <span class="hljs-keyword">import</span> Response
<span class="hljs-keyword">from</span> rest_framework.permissions <span class="hljs-keyword">import</span> IsAuthenticated
<span class="hljs-keyword">from</span> rest_framework_simplejwt.tokens <span class="hljs-keyword">import</span> RefreshToken
<span class="hljs-keyword">from</span> rest_framework <span class="hljs-keyword">import</span> status


<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">LogoutView</span>(<span class="hljs-params">APIView</span>):</span>
     permission_classes = (IsAuthenticated,)

     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">post</span>(<span class="hljs-params">self, request</span>):</span>          
          <span class="hljs-keyword">try</span>:
               refresh_token = request.data[<span class="hljs-string">"refresh_token"</span>]
               token = RefreshToken(refresh_token)
               token.blacklist()
               <span class="hljs-keyword">return</span> Response(status=status.HTTP_205_RESET_CONTENT)
          <span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
               <span class="hljs-keyword">return</span> Response(status=status.HTTP_400_BAD_REQUEST)
</code></pre>
<p>Después de crear LogoutView, tenemos que crear la URL para LogoutView en nuestro archivo <a target="_blank" href="http://urls.py">urls.py</a> en el directorio de la aplicación.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> .authentication <span class="hljs-keyword">import</span> views <span class="hljs-keyword">as</span> authn_views

urlpatterns = [
    ...
    path(<span class="hljs-string">'logout/'</span>, authn_views.LogoutView.as_view(), name =<span class="hljs-string">'logout'</span>)
]
</code></pre>
<p>Al usar la URL <a target="_blank" href="http://localhost:8000/logout/">http://localhost:8000/logout/</a>, podemos invalidar el token de actualización y agregarlo a la lista negra. Usando <strong>Rest Client</strong>, podemos acceder a esta URL con una solicitud POST y pasar el token de acceso en la autorización y el token de actualización en el cuerpo.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730589153532/b72ede9f-2372-4f44-b1a9-3ffa7c0788b9.png" alt class="image--center mx-auto" /></p>
<hr />
<p>Hemos llegado al final de la primera parte, la cual como habrás notado está basado principalmente en el escrito de <a target="_blank" href="https://medium.com/@ronakchitlangya1997?source=post_page---byline--c034aae1e60d--------------------------------">Ronak Chitlangya</a>.</p>
<h3 id="heading-frontend-react-js"><strong><em>Frontend — React JS</em></strong></h3>
<p>En esta segunda parte, para la conexión del frontend (ReactJS) con Django utilizaremos <strong>React Auth Kit.</strong> Ésta es una biblioteca de gestión de estado de autenticación liviana para proyectos basados ​​en React JS. Te facilitará la gestión de los datos de sesión como token de acceso, token de actualización y información de estado del usuario. Además ofrece funcionalidades de redireccionamiento en caso de no estar autenticado (redirigirse a la página de inicio de sesión).</p>
<p>Abre el terminal y ejecuta el comando siguiente para crear un nuevo proyecto React con Vite:</p>
<pre><code class="lang-bash">npm init vite@latest frontend -- --template react-ts
</code></pre>
<p>Instalar los siguientes paquetes</p>
<pre><code class="lang-bash">npm i --save bootstrap react-bootstrap axios \
    react-router-dom react-auth-kit @auth-kit/react-router jwt-decode
</code></pre>
<ul>
<li><p>bootstrap. Un marco front-end elegante, intuitivo y potente para un desarrollo web más rápido y sencillo.</p>
</li>
<li><p>react-bootstrap. Compatible con versiones de bootstrap.</p>
</li>
<li><p>axios. Cliente HTTP basado en promesas para el navegador y node.js</p>
</li>
<li><p>react-router-dom. Enlaces para usar React Router en aplicaciones web.</p>
</li>
<li><p>react-auth-kit. Es una biblioteca de gestión de estado de autenticación liviana para proyectos basados ​​en React JS</p>
</li>
<li><p>@auth-kit/react-router. Contiene funciones útiles para administrar rutas privadas usando react-router* o react-router-dom.</p>
</li>
<li><p>jwt-decode. Biblioteca de navegador que ayuda a decodificar tokens JWT codificados en Base64Url</p>
</li>
</ul>
<p>Después de configurar el proyecto, ejecute este comando para ejecutar la aplicación React:</p>
<pre><code class="lang-bash">npm run dev
</code></pre>
<p>Abra <a target="_blank" href="http://localhost:5173/">http://localhost:5173/</a> para ejecutar la aplicación React.</p>
<p>Después de ejecutar el servidor exitosamente, avanzamos para diseñar la aplicación.</p>
<p>Comenzaremos eliminando el contenido de los archivos <strong>src/App.css</strong> y <strong>index.css</strong>. Vamos a utilizar los estilos de bootstrap, para lo cual se agrega en el archivo <strong>main.tsx</strong> lo siguiente:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> <span class="hljs-string">'bootstrap/dist/css/bootstrap.min.css'</span>;
</code></pre>
<p>Para la conexión con el backend (el cual está desplegado localmente en el puerto 8000) configuraremos el proxy en el archivo vite.config.ts:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { defineConfig } <span class="hljs-keyword">from</span> <span class="hljs-string">'vite'</span>
<span class="hljs-keyword">import</span> react <span class="hljs-keyword">from</span> <span class="hljs-string">'@vitejs/plugin-react'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> defineConfig({
  plugins: [react()],
  server: {
    proxy: {
      <span class="hljs-string">'/api'</span>: {
        target: <span class="hljs-string">'http://localhost:8000'</span>,
        changeOrigin: <span class="hljs-literal">true</span>,
        rewrite: <span class="hljs-function">(<span class="hljs-params">path</span>) =&gt;</span> path.replace(<span class="hljs-regexp">/^\/api/</span>, <span class="hljs-string">''</span>)
      }
    }
  }
})
</code></pre>
<p>Esto evitará errores de tipo <strong>Cross-Origin Resource Sharing</strong> cuando hagamos peticiones al backend usando <strong>axios</strong>.</p>
<p>Crearemos el archivo security/users.tsx en el cual llamaremos a los diferentes Endpoints para la creación del token de aceso, actualización del token y cierre de sesión.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> axios <span class="hljs-keyword">from</span> <span class="hljs-string">"axios"</span>;

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">login</span>(<span class="hljs-params">data: <span class="hljs-built_in">any</span></span>): <span class="hljs-title">Promise</span>&lt;<span class="hljs-title">any</span>&gt; </span>{
  <span class="hljs-keyword">return</span> axios.post(<span class="hljs-string">"/api/token/"</span>, data);
}

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">refreshToken</span>(<span class="hljs-params">refresh: <span class="hljs-built_in">string</span></span>): <span class="hljs-title">Promise</span>&lt;<span class="hljs-title">any</span>&gt; </span>{
  <span class="hljs-keyword">return</span> axios.post(<span class="hljs-string">"/api/token/refresh/"</span>, { refresh: refresh }, {});
}

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">logout</span>(<span class="hljs-params">access_token: <span class="hljs-built_in">string</span> | <span class="hljs-literal">null</span>, refresh_token: <span class="hljs-built_in">string</span> | <span class="hljs-literal">null</span></span>): <span class="hljs-title">Promise</span>&lt;<span class="hljs-title">any</span>&gt; </span>{
  <span class="hljs-keyword">return</span> axios.post(<span class="hljs-string">"/api/logout/"</span>, { refresh_token: refresh_token },
    {
      headers: { Authorization: access_token },
    }
  );
}
</code></pre>
<p>Se ha agregado el archivo <strong>decode-token.tsx</strong>, y dentro de este la función para decodificar el token JWT, para obtener el campo <strong>user_id</strong> que viene encapsulado. Este puede ser usado para obtener más detalles del usuario.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { jwtDecode } <span class="hljs-keyword">from</span> <span class="hljs-string">'jwt-decode'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getUserIdFromDecodeToken</span>(<span class="hljs-params">access_token: <span class="hljs-built_in">string</span></span>)</span>{
  <span class="hljs-keyword">const</span> decoded = jwtDecode(access_token) <span class="hljs-keyword">as</span> { [key: <span class="hljs-built_in">string</span>]: <span class="hljs-built_in">string</span> };
  <span class="hljs-keyword">return</span> decoded.user_id;
}
</code></pre>
<p>Siguiendo, escribiremos el código para la barra de navegación en el archivo components/app-navbar.tsx.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> useAuthUser <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/hooks/useAuthUser'</span>;
<span class="hljs-keyword">import</span> { Container, Navbar } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-bootstrap'</span>
<span class="hljs-comment">// import AppNavLogout from './nav-logout';</span>
<span class="hljs-keyword">import</span> { IUserData } <span class="hljs-keyword">from</span> <span class="hljs-string">'../authentication/models'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">AppNavBar</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> auth = useAuthUser&lt;IUserData&gt;();
  <span class="hljs-keyword">return</span> (
    &lt;Navbar className=<span class="hljs-string">"bg-body-tertiary"</span>&gt;
      &lt;Container&gt;
        &lt;Navbar.Brand href=<span class="hljs-string">"/"</span>&gt;Autenticación con JWT&lt;/Navbar.Brand&gt;
        &lt;Navbar.Toggle /&gt;
        &lt;Navbar.Collapse className=<span class="hljs-string">"justify-content-end"</span>&gt;
          &lt;Navbar.Text&gt;
            Inició sesión como: 
            &lt;b&gt;{auth?.username} - {auth?.id}&lt;/b&gt;
          &lt;/Navbar.Text&gt;
        &lt;/Navbar.Collapse&gt;
        {<span class="hljs-comment">/* &lt;AppNavLogout /&gt; */</span>}
      &lt;/Container&gt;
  &lt;/Navbar&gt;
  )
}
</code></pre>
<p>Se usa <strong>useAuthUser</strong> para obtener información de estado del usuario. Se tiene una barra de navegación en donde se muestra el nombre y el id del usuario que ha iniciado sesión. La estructura de información del usuario se ha definido por la interfaz <strong>IUserData</strong> en el archivo authentication/models.tsx.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> IUserData {
    username: <span class="hljs-built_in">string</span>;
    id: <span class="hljs-built_in">string</span>;
    refreshToken: <span class="hljs-built_in">string</span>;
  };
</code></pre>
<p>Se agrega también el campo <strong>refreshToken</strong>, el cual se usará para dar de baja el token.</p>
<p>Crearemos la página Home en el archivo pages/home.tsx:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> AppNavBar <span class="hljs-keyword">from</span> <span class="hljs-string">'../components/app-navbar'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Home</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    &lt;AppNavBar /&gt;
  )
}
</code></pre>
<p>Así también crearemos una página para el Inicio de sesión en el archivo pages/login.tsx</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;
<span class="hljs-keyword">import</span> { Button, Container, Form } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-bootstrap"</span>;
<span class="hljs-keyword">import</span> { login } <span class="hljs-keyword">from</span> <span class="hljs-string">"../security/users"</span>;
<span class="hljs-keyword">import</span> useSignIn <span class="hljs-keyword">from</span> <span class="hljs-string">"react-auth-kit/hooks/useSignIn"</span>;
<span class="hljs-keyword">import</span> { getUserIdFromDecodeToken } <span class="hljs-keyword">from</span> <span class="hljs-string">"../utils/decode-token"</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Login</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [username, setUsername] = useState(<span class="hljs-string">""</span>);
  <span class="hljs-keyword">const</span> [password, setPassword] = useState(<span class="hljs-string">""</span>);
  <span class="hljs-keyword">const</span> signIn = useSignIn();

  <span class="hljs-keyword">const</span> onSubmit = <span class="hljs-keyword">async</span> (e: React.FormEvent&lt;HTMLFormElement&gt;) =&gt; {
    e.preventDefault();
    <span class="hljs-keyword">const</span> data = { username: username, password: password };

    login(data).then(<span class="hljs-function">(<span class="hljs-params">res</span>) =&gt;</span> {
      <span class="hljs-keyword">const</span> user_id = getUserIdFromDecodeToken(res.data.access);

      <span class="hljs-keyword">if</span> (res.status === <span class="hljs-number">200</span>) {
        <span class="hljs-keyword">if</span> (
          signIn({
            auth: { token: res.data.access, <span class="hljs-keyword">type</span>: <span class="hljs-string">"Bearer"</span>},
            refresh: res.data.refresh,
            userState: { username: username, id: user_id, refreshToken: res.data.refresh},
          })
        ) {
          <span class="hljs-built_in">window</span>.location.href = <span class="hljs-string">"/"</span>;
        } <span class="hljs-keyword">else</span> {
          <span class="hljs-comment">//Throw error</span>
        }
      }
    });
  };
  <span class="hljs-keyword">return</span> (
    &lt;&gt;
      &lt;Container&gt;
        &lt;h1 className=<span class="hljs-string">"text-center"</span>&gt;Iniciar sesión&lt;/h1&gt;
        &lt;Form onSubmit={onSubmit}&gt;
          &lt;Form.Group className=<span class="hljs-string">"mb-3"</span> controlId=<span class="hljs-string">"exampleForm.ControlInput1"</span>&gt;
            &lt;Form.Label&gt;Username&lt;/Form.Label&gt;
            &lt;Form.Control name=<span class="hljs-string">"username"</span> <span class="hljs-keyword">type</span>=<span class="hljs-string">"username"</span> placeholder=<span class="hljs-string">"usuario"</span> value={username} onChange={<span class="hljs-function">(<span class="hljs-params">e</span>) =&gt;</span> setUsername(e.target.value)} /&gt;
          &lt;/Form.Group&gt;
          &lt;Form.Group className=<span class="hljs-string">"mb-3"</span> controlId=<span class="hljs-string">"exampleForm.ControlInput1"</span>&gt;
            &lt;Form.Label&gt;Contraseña&lt;/Form.Label&gt;
            &lt;Form.Control name=<span class="hljs-string">"password"</span> <span class="hljs-keyword">type</span>=<span class="hljs-string">"password"</span> placeholder=<span class="hljs-string">"********"</span> value={password} onChange={<span class="hljs-function">(<span class="hljs-params">e</span>) =&gt;</span> setPassword(e.target.value)} /&gt;
          &lt;/Form.Group&gt;
          &lt;Button variant=<span class="hljs-string">"primary"</span> <span class="hljs-keyword">type</span>=<span class="hljs-string">"submit"</span>&gt;
            Iniciar sesión
          &lt;/Button&gt;
        &lt;/Form&gt;
      &lt;/Container&gt;
    &lt;/&gt;
  );
}
</code></pre>
<p>El código anterior agrega el formulario de inicio de sesión. Usa la función <strong>signIn</strong> para facilitar la implementación de procedimientos de inicio de sesión. En el parámetro <strong>userState</strong> se agrega información del estado del usuario como nombre, id. Este userState es el mismo objeto que obtuvimos usando <strong>useAuthUser</strong> para mostrar la información del usuario en el navbar.</p>
<p>Ahora tendremos que agregar las rutas en el archivo App.tsx</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { BrowserRouter, Route, Routes } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-router-dom"</span>
<span class="hljs-keyword">import</span> Login <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages/login"</span>
<span class="hljs-keyword">import</span> Home <span class="hljs-keyword">from</span> <span class="hljs-string">"./pages/home"</span>
<span class="hljs-keyword">import</span> AuthOutlet <span class="hljs-keyword">from</span> <span class="hljs-string">"@auth-kit/react-router/AuthOutlet"</span>
<span class="hljs-keyword">import</span> AuthProvider <span class="hljs-keyword">from</span> <span class="hljs-string">"react-auth-kit"</span>
<span class="hljs-keyword">import</span> { store } <span class="hljs-keyword">from</span> <span class="hljs-string">"./authentication/store"</span>


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> (
    &lt;&gt;
      &lt;AuthProvider store={store}&gt;
        &lt;BrowserRouter&gt;
          &lt;Routes&gt;
            &lt;Route path=<span class="hljs-string">"/login"</span> element={&lt;Login /&gt;} /&gt;
            &lt;Route element={&lt;AuthOutlet fallbackPath=<span class="hljs-string">'/login'</span> /&gt;}&gt;
              &lt;Route path=<span class="hljs-string">"/"</span> element={&lt;Home /&gt;} index /&gt;
            &lt;/Route&gt;
          &lt;/Routes&gt;
        &lt;/BrowserRouter&gt;
      &lt;/AuthProvider&gt;
    &lt;/&gt;
  )
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App
</code></pre>
<p>Para gestionar el estado de autenticación y de rutas usaremos la librería <a target="_blank" href="https://authkit.arkadip.dev/">React Auth Kit</a>. Para lo cual necesitamos definir <strong>AuthProvider</strong> y establecer el almacenamiento que contendrá los datos de autenticación de nuestra aplicación. Creamos el archivo authentication/store.tsx. Dentro del proveedor también definimos <strong>AuthOutlet</strong> que nos permite identificar dentro las rutas que serán privadas, usando <strong>fallbackPath</strong> identificamos la ruta a la cual redireccionarse en caso de no estar autenticado. La ruta <strong>/login</strong> es pública, por lo que la hemos dejado fuera.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> createStore <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/createStore'</span>;
<span class="hljs-keyword">import</span> { refresh } <span class="hljs-keyword">from</span> <span class="hljs-string">'./refresh'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> store = createStore({
  authName:<span class="hljs-string">'_auth'</span>,
  authType:<span class="hljs-string">'cookie'</span>,
  cookieDomain: <span class="hljs-built_in">window</span>.location.hostname,
  cookieSecure: <span class="hljs-built_in">window</span>.location.protocol === <span class="hljs-string">'https:'</span>,
  refresh: refresh
});
</code></pre>
<p><a target="_blank" href="https://authkit.arkadip.dev/reference/react-auth-kit/createStore/#parameters">Mas información</a> de los parámetros establecidos en <strong>createStore.</strong></p>
<p>Ya que los token JWT son temporales es necesario gestionar la actualización del token. Para lo cual crearemos el archivo refresh.tsx</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> createRefresh <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/createRefresh'</span>;
<span class="hljs-keyword">import</span> { refreshToken } <span class="hljs-keyword">from</span> <span class="hljs-string">'../security/users'</span>;
<span class="hljs-keyword">import</span> { getUserIdFromDecodeToken } <span class="hljs-keyword">from</span> <span class="hljs-string">'../utils/decode-token'</span>;
<span class="hljs-keyword">import</span> { IUserData } <span class="hljs-keyword">from</span> <span class="hljs-string">'./models'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> refresh = createRefresh({
  interval: <span class="hljs-number">10</span>,
  refreshApiCallback: refreshApiCallback
})

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">refreshApiCallback</span>(<span class="hljs-params">param: {authToken?: <span class="hljs-built_in">string</span>; refreshToken?: <span class="hljs-built_in">string</span>; authUserState: IUserData}</span>): <span class="hljs-title">Promise</span>&lt;<span class="hljs-title">any</span>&gt; </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'refreshing token'</span>, param)
    <span class="hljs-keyword">if</span> (!param.refreshToken) {
      <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'Refresh token is missing'</span>);
    }
    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> refreshToken(param.refreshToken)
    <span class="hljs-keyword">const</span> user_id = getUserIdFromDecodeToken(response.data.access);
    <span class="hljs-keyword">return</span> {
      isSuccess: <span class="hljs-literal">true</span>,
      newAuthToken: response.data.access,
      newAuthTokenType: <span class="hljs-string">"Bearer"</span>,
      newRefreshToken: response.data.refresh,
      newAuthUserState: {
        username: param.authUserState.username,
        id: user_id,
        refreshToken: response.data.refresh
      }
    }
  }<span class="hljs-keyword">catch</span>(error){
    <span class="hljs-built_in">console</span>.error(error)
    <span class="hljs-keyword">return</span> {
      isSuccess: <span class="hljs-literal">false</span>
    }
  }
}
</code></pre>
<p>Repasemos lo que hemos realizado, se ha declarado un intervalo y la función callback que será llamada para la actualización del token. Esta función recibe parámetros como refreshToken, el cual usa para generar nuevas credenciales de acceso. En el objeto de retorno se declaran los datos de la sesión actualizados como el nuevo token de acceso, el tipo del token (Bearer), el token usado para actualizar, y un objeto de estado del usuario que puede contener información extra.</p>
<p>Para gestionar el cierre de sesión crearemos el archivo components/nav-logout.tsx. No olvides descomentar este componente en el archivo.components/app-navbar.tsx.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> useAuthUser <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/hooks/useAuthUser'</span>;
<span class="hljs-keyword">import</span> { Nav } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-bootstrap'</span>
<span class="hljs-keyword">import</span> { IUserData } <span class="hljs-keyword">from</span> <span class="hljs-string">'../authentication/models'</span>;
<span class="hljs-keyword">import</span> useAuthHeader <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/hooks/useAuthHeader'</span>;
<span class="hljs-keyword">import</span> { logout } <span class="hljs-keyword">from</span> <span class="hljs-string">'../security/users'</span>;
<span class="hljs-keyword">import</span> useSignOut <span class="hljs-keyword">from</span> <span class="hljs-string">'react-auth-kit/hooks/useSignOut'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">AppNavLogout</span>(<span class="hljs-params"></span>) </span>{

  <span class="hljs-keyword">const</span> auth = useAuthUser&lt;IUserData&gt;();
  <span class="hljs-keyword">const</span> authHeader = useAuthHeader()

  <span class="hljs-keyword">const</span> signOut = useSignOut()
  <span class="hljs-keyword">const</span> handleSignOut = <span class="hljs-keyword">async</span> () =&gt; {
    <span class="hljs-keyword">if</span>(auth){
      <span class="hljs-keyword">await</span> logout(authHeader, auth.refreshToken)
    }
    signOut()
    <span class="hljs-built_in">window</span>.location.href = <span class="hljs-string">'/login'</span>
  }

  <span class="hljs-keyword">return</span> (
    &lt;Nav className=<span class="hljs-string">"me-auto"</span>&gt;
        &lt;Nav.Link onClick={handleSignOut} className=<span class="hljs-string">'primary'</span>&gt;| Cerrar sesión&lt;/Nav.Link&gt;
    &lt;/Nav&gt;
  )
}
</code></pre>
<p>Hemos definido un componente el cual permitirá cerrar la sesión. Al hacer clic este llamará a la función <strong>handleSignOut</strong>, en donde se usa <strong>logout</strong> para dar de baja al refresh_token. Se llama a la función <strong>signOut</strong> de react-auth-kit para borrar de la memoria el estado de la sesión. Finalmente redirecciona a la página <strong>/login</strong>.</p>
<p>Estamos en la recta final, probemos el flujo. En el navegador vayamos a <a target="_blank" href="http://localhost:5173/login">http://localhost:5173/login</a> e ingresemos el usuario y contraseña.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730607110117/455fe4b3-afdc-4ab3-a287-4dba43d2a4b4.png" alt class="image--center mx-auto" /></p>
<p>Al iniciar sesión se iniciará a la página <strong>Home</strong>, y se mostrará el nombre de usuario y su id.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730607170228/ae598139-099a-45b3-b2d5-6ec6f9d5866e.png" alt class="image--center mx-auto" /></p>
<p>Al cerrar sesión sesión dará de baja el token y borrará la sesión de la memoria local.</p>
<p>Intentemos redirigir hacia Home <a target="_blank" href="http://localhost:5173/">http://localhost:5173/</a>, y notará como automáticamente se redirigue hacia <a target="_blank" href="http://localhost:5173/">http://localhost:5173/</a>login.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730607665524/eb2a59ed-54f3-4615-9cad-61d3a7023cb8.gif" alt class="image--center mx-auto" /></p>
<p><strong>Referencias</strong></p>
<ul>
<li><a target="_blank" href="https://medium.com/@ronakchitlangya1997/jwt-authentication-with-react-js-and-django-c034aae1e60d">JWT Authentication With React JS and Django</a> por <a target="_blank" href="https://medium.com/@ronakchitlangya1997?source=post_page---byline--c034aae1e60d--------------------------------">Ronak Chitlangya</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Elimina el estrés de la negociación]]></title><description><![CDATA[Autor: Notas tomadas del video original por Kelly May, Directora de Producto @Help Scout
Hace un par de meses tuve una conversación larga con una buena amiga, me compartió recursos (libros, videos, enlaces). Uno de ellos este video.
Me sorprendió enc...]]></description><link>https://theimpostorblog.vacacela.com/elimina-el-estres-de-la-negociacion</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/elimina-el-estres-de-la-negociacion</guid><category><![CDATA[Negociacion]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 11 Aug 2024 06:45:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/TamMbr4okv4/upload/f8ae8410bf8ea42774d6ea0bbbeb82fd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Autor:</strong> Notas tomadas del <a target="_blank" href="https://www.youtube.com/watch?v=gU2ae1DPUWE">video</a> original por Kelly May, Directora de Producto @Help Scout</p>
<p>Hace un par de meses tuve una conversación larga con una buena amiga, me compartió recursos (libros, videos, enlaces). Uno de ellos este video.</p>
<p>Me sorprendió encontrarme con las siguientes estadísticas. Sólo el 39% de personas negocian en una oferta de trabajo. La mayoría de mujeres (60%) dicen que nunca han negociado con su empleador acerca del pago. Desafortunamente formo parte de este porcentaje. En mi último trabajo estuve tan contenta de que me hubieran <em>"aceptado",</em> que olvidé negociar mi salario.</p>
<p>Cuando se toma una decisión tan importante como cambiar de trabajo, no olvides el enfoque de mejora. Y sobre todo ten en mente, que el 84% de los empleadores esperan que los aplicantes al trabajo negocien por el salario durante la entrevista.</p>
<h3 id="heading-donde-empezar"><strong>¿Dónde empezar?</strong></h3>
<p><strong>Investigación y conocimiento</strong></p>
<p>Infórmate, busca referencias en la industria acerca de la posición a la que estás aplicando. Edúcate y conoce que tu lo vales.</p>
<p>Durante la entrevista, en caso de no ser abordado, pregúntales "¿<em>Cuál es el rango de salario para el rol?</em>". Si te preguntan cuánto esperas recibir, dales al reclutador un rango de salario, no le des un número exacto.</p>
<p>En caso de que te pregunten por el monto que estás ganando actualmente. Si sientes que no te están pagando lo que mereces, puedes responder algo similar...</p>
<blockquote>
<p>Una de las razones por las que estoy buscando una nueva posición es debido a que me siento infravalorada, especialmente para los estándares del mercado. ¿Cuál es el rango de pago para este rol?</p>
</blockquote>
<h3 id="heading-la-oferta-inicial"><strong>La oferta inicial</strong></h3>
<p><strong>Buenas prácticas</strong></p>
<p>No aceptes una oferta hecha por teléfono. Agradece al reclutador/manager por la oferta y la oportunidad potencial de unirte al equipo (¿Sabias que la mayoría de mujeres aceptan en una llamada?). Pensemos en algunas respuestas:</p>
<ul>
<li><p>Revisaré la oferta oficial y estaré respondiente en 2-3 días.</p>
</li>
<li><p>¿Es posible entregar mi respuesta para X fecha?</p>
</li>
</ul>
<p>Date un tiempo y espacio seguros para analizar la oferta completa.</p>
<p><strong>Revisando la oferta completa</strong></p>
<ul>
<li><p>Salario</p>
<ul>
<li>¿En qué punto del rango que mencionaste se encuentra ¿Cumple con el estándar de la industria?</li>
</ul>
</li>
<li><p>Inversiones a largo plazo</p>
<ul>
<li>Acciones, aprendizaje/educación, remuneración</li>
</ul>
</li>
<li><p>Salud</p>
</li>
<li><p>Otros beneficios</p>
<ul>
<li>Trabajo remoto, costos de cuidado de niños, bonos de comida, internet, etc.</li>
</ul>
</li>
</ul>
<h3 id="heading-la-oferta-oficial"><strong>La oferta oficial</strong></h3>
<p><strong>Análisis: corto y largo plazo</strong></p>
<ul>
<li><p>¿Cuál es el aumento salarial? ¿Me coloca en una nueva categoría impositiva?</p>
</li>
<li><p>¿Estoy renunciando a algún beneficio?</p>
</li>
<li><p>¿Qué inversiones a largo plazo estoy obteniendo?</p>
</li>
<li><p>¿Flexibilidad y felicidad?</p>
</li>
</ul>
<h3 id="heading-consultar-discutir"><strong>Consultar + discutir</strong></h3>
<p><strong>Confianza y honestidad</strong></p>
<p>Contacta a 1 - 2 personas que confíes y discute la oferta con ellos</p>
<ul>
<li><p>¿Qué perdidas/problemas ven ellos?</p>
</li>
<li><p>¿Sienten ellos que es conveniente para ti? ¿Por qué?</p>
</li>
</ul>
<h3 id="heading-autoreflexion"><strong>Autoreflexión</strong></h3>
<p><strong>Crecimiento y felicidad</strong></p>
<ul>
<li><p>¿Quieres aceptar esta oferta? ¿Qué te emociona acerca de esta oportunidad?</p>
</li>
<li><p>¿Es esta una buena opción para ti y la empresa?</p>
</li>
<li><p>¿Por qué quieres hacer este cambio? ¿Qué quieres lograr? ¿Cómo quieres crecer?</p>
</li>
</ul>
<h3 id="heading-respondiendo"><strong>Respondiendo</strong></h3>
<p><strong>Comunicación y confianza</strong></p>
<ul>
<li><p>Recuerda que ellos te ofrecieron el rol. Ellos te escogieron sobre otro candidato/s!</p>
</li>
<li><p>No tienes que justificar tus razones con detalles personales. Enfócate en la oferta, salario y beneficios.</p>
</li>
<li><p>¿Por qué esta compañía tiene la suerte de tenerte? ¿Por qué vale la pena seguir adelante?</p>
</li>
</ul>
<p>Ten confianza, ellos quisieron contratarte.</p>
<h3 id="heading-aprende-evita"><strong>Aprende + evita</strong></h3>
<ol>
<li><p>No negociar, no asumas que no deberías o que no puedes negociar. Asume que puedes!</p>
</li>
<li><p>Enfocarse sólo en el salario, revisa la oferta completa</p>
</li>
<li><p>Haz una investigación previa</p>
</li>
<li><p>Tiempo al tiempo, no te precipites en una decisión tan importante. Respira, revisa, tómate el tiempo para pensar acerca de lo que es mejor para ti.</p>
</li>
<li><p>No reveles tu posición o dejes saber al empleador tu cifra más baja aceptable.</p>
</li>
<li><p>Declinar rápidamente una oferta, comunícate y empieza a negociar.</p>
</li>
<li><p>Revisar la fecha de inicio, verificar que funcione para ti. Una buena compañía esperará por el candidato correcto.</p>
</li>
<li><p>No aceptes una oferta verbal antes de obtener una oferta oficial escrita y revisada. Necesitas revisar la oferta completa, no sólo es salario.</p>
</li>
</ol>
<h3 id="heading-tomate-el-tiempo-para-reflexionar"><strong>Tómate el tiempo para reflexionar</strong></h3>
<p>¿Adónde pretende llegar en su carrera profesional?</p>
<p>¿Este puesto le permitirá llegar hasta allí?</p>
<p>¿Es una buena decisión o paso estratégico?</p>
<h3 id="heading-repasando-las-practicas-de-negociacion"><strong>Repasando las prácticas de negociación</strong></h3>
<ul>
<li><p>Igualdad de remuneración por igual trabajo, según el mercado</p>
</li>
<li><p>Niveles y bandas salariales públicas</p>
</li>
<li><p>No preguntes cuánto gana ahora un candidato</p>
</li>
<li><p>La negociación no es una opción</p>
</li>
</ul>
<h3 id="heading-desercion-de-empleados">Deserción de empleados</h3>
<ul>
<li><p>Los empleados no tienen por qué quedarse.</p>
</li>
<li><p>Trátelos como personas.</p>
</li>
<li><p>Todos sabemos que todos los días se contacta a todo el mundo en LinkedIn.</p>
</li>
<li><p>Como empleado, comuníquese y pida lo que crea que merece.</p>
</li>
</ul>
<blockquote>
<p>Believe in people have good intentions.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Comunicación para conectar]]></title><description><![CDATA[Hace poco tomé un programa de aprendizaje para mejorar mis habilidades de comunicación. Comparto un resumen del curso.
Diseño por Andrea Puertas.]]></description><link>https://theimpostorblog.vacacela.com/comunicacion-para-conectar</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/comunicacion-para-conectar</guid><category><![CDATA[communication skills]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 23 Jun 2024 19:26:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/V5vqWC9gyEU/upload/f719d5d7f98f3738a1e8ab32eb8416b0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace poco tomé un programa de aprendizaje para mejorar mis habilidades de comunicación. Comparto un resumen del curso.</p>
<p>Diseño por Andrea Puertas.</p>
<p><a target="_blank" href="https://docs.google.com/presentation/d/e/2PACX-1vT63SbLzKKLBQz6-H9kIdyk8VNUwkSfQl64fzY3YE6tLGaFE99ub8ZH_jTyF1SQlNSVF4oMbyw22kyp/pub?start=false&amp;loop=false&amp;delayms=3000"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719175083563/9934a3e7-ba6e-4a0f-a1da-f0fcc43821bf.png" alt class="image--center mx-auto" /></a></p>
]]></content:encoded></item><item><title><![CDATA[Autoconciencia y Autoeficacia]]></title><description><![CDATA[Tomemos un minuto para responder la pregunta: ¿Qué es eso que separa a los líderes excelentes de los demás? Se tendrían muchas respuestas, por ejemplo, experticie, buena comunicación, gestión de personas, etc. No es común escuchar acerca de la autoco...]]></description><link>https://theimpostorblog.vacacela.com/autoconciencia-y-autoeficacia</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/autoconciencia-y-autoeficacia</guid><category><![CDATA[Dra Anita Sands]]></category><category><![CDATA[autoconciencia]]></category><category><![CDATA[autoeficacia]]></category><category><![CDATA[Líderes]]></category><category><![CDATA[Liderazgo positivo]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Mon, 29 Jan 2024 01:00:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/-TQUERQGUZ8/upload/3bf75132c6aa0d2b0ac780c8503e8289.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tomemos un minuto para responder la pregunta: ¿Qué es eso que separa a los líderes excelentes de los demás? Se tendrían muchas respuestas, por ejemplo, experticie, buena comunicación, gestión de personas, etc. No es común escuchar acerca de la autoconciencia. Sin embargo, los mejores líderes son increíblemente autoconcientes de sí mismos. Estrechamente relacionado a esto está la autoeficacia, que impacta la forma en la cual pensamos y sentimos de nosotros mismos.</p>
<h2 id="heading-autocoinciencia">Autocoinciencia</h2>
<blockquote>
<p>La autoconciencia es una estimación y evaluación exactas de la propia personalidad y una comprensión precisa de cómo te perciben los demás.</p>
</blockquote>
<h3 id="heading-por-que-es-importante-ser-consciente-de-uno-mismo">¿Por qué es importante ser consciente de uno mismo?</h3>
<p>La autoconciencia te permite comprender no sólo cómo te muestras en el mundo y cómo quieres mostrarte en el mundo. También te permite entender cómo te percibe la gente. Entiendes cómo te relacionas con otro ser humano. Ya sea un equipo, un conjunto de empleados o un cliente. Entiendes cómo se percibe, cómo funciona esa relación y cuál es la dinámica. Puedes leer una sala con eficacia. Cuando puedes hacerlo, empiezas a establecer relaciones significativas. Sientes empatía por la gente. Puedes conectar con la gente, puedes generar confianza y puedes comunicarte de un modo que resuene en la gente.</p>
<p>Cuando te entiendes a ti mismo, entiendes tus emociones, entiendes tus desencadenantes. Y, por lo tanto, eres capaz de controlar tus emociones antes de que tus emociones te controlen a ti. Y cuando puedes hacerlo, puedes controlarte a ti mismo. Y puedes controlar cualquier situación. Eso genera confianza en un líder.</p>
<p>Particularmente cuando hay muchas tareas, o cuando hay un momento de crisis o hay algo loco sucediendo, quieres mirar a tus líderes y decir, y saber que él o ella nos dirigue. Tiene el control, no va a perder los estribos. No va a perder la calma.</p>
<p>Tener plena fe y confianza en su liderazgo en ese momento, como podemos tenerla cualquier día. <strong>Así que sólo se llega a la cima del liderazgo si se tiene conciencia de uno mismo</strong>.</p>
<blockquote>
<p>No te descarrilas por tus debilidades, sino por una fortaleza que dejas ir al extremo.</p>
</blockquote>
<p>Entender que toda fuerza tiene un lado oscuro.</p>
<ul>
<li><p>Confianza -&gt; Arrogancia</p>
</li>
<li><p>Perfeccionista -&gt; Burnout, Procrastinar</p>
</li>
</ul>
<h3 id="heading-elementos-de-la-autoconciencia">Elementos de la autoconciencia</h3>
<ol>
<li><p><strong>Autoconciencia interna</strong>. Conocer tus puntos fuertes y débiles, pasiones, aspiraciones, valores, predisposiciones y desencadenantes.</p>
</li>
<li><p><strong>Autoconciencia externa</strong>. Entender cómo te ven los demás: cómo apareces ante mundo.</p>
</li>
<li><p><strong>Autoconciencia situacional.</strong> ¿Quién soy y cuándo? Comprensión de cómo nos afectan el contexto, el entorno y, lo que es más importante, los cambios que se producen en ellos. *Piensa en los últimos 2 años.</p>
</li>
</ol>
<blockquote>
<p>Lo que un espejo puede hacer por un individuo, la autoconciencia puede hacerlo por un líder.</p>
</blockquote>
<h3 id="heading-cultivar-la-autoconciencia">Cultivar la autoconciencia</h3>
<p>Desarrollar la conciencia de uno mismo es un viaje que dura toda la vida. No es un ejercicio de una sola vez. Es algo en lo que tenemos que trabajar continuamente cada semana, cada año. Porque cambiamos y evolucionamos.</p>
<ul>
<li><p>Piensa en ello: <strong>¿Cómo respondes y por qué?</strong></p>
</li>
<li><p>Recoge retroalimentaciones de confianza (tener compañeros)</p>
</li>
<li><p>Introspección/diarios que sean objetivos (separar los que tienen el síndrome del impostor, los que tienen que ser muy críticos consigo mismos)</p>
</li>
<li><p>Preguntar ¿Qué? en lugar de ¿Por qué?</p>
<ul>
<li><p>¿Qué podría haber hecho mejor?</p>
</li>
<li><p>¿Qué hizo bien esa persona?</p>
</li>
<li><p>¿Qué me gustó de su forma de afrontar la reunión?</p>
</li>
</ul>
</li>
<li><p>Sustituya la comparación y el autojuicio por la curiosidad</p>
</li>
</ul>
<p>Algunas de las acciones mencionadas podrían confundirse fácilmente con cambiar quién eres. No es así. Si intentas cambiar tu esencia, puede que lo consigas durante un breve periodo de tiempo, pero con el tiempo, se volverá tan agotador y tendrás que enmascarar quién eres todo el tiempo, y fracasarás. Además, todo el mundo a tu alrededor se dará cuenta de que no estás siendo una persona auténtica. La gente puede oler la falta de autenticidad a miles de kilómetros.</p>
<p>Así que el truco está en ser uno mismo, pero no en los extremos. Todos tenemos una holgura para quiénes somos y cómo nos mostramos, y todos tenemos versiones de nosotros mismos que son apropiadas para contextos particulares. Así que lo importante de ser consciente de uno mismo, una vez más, es mostrarse como la mejor versión de uno mismo para ese contexto en particular.</p>
<blockquote>
<p>Ser un líder auténtico es ser uno mismo, con habilidad.</p>
</blockquote>
<h3 id="heading-la-autoconciencia-de-un-lider-repercute-en-su-equipo">La autoconciencia de un líder repercute en su equipo</h3>
<p>Si eres consciente de tus sentimientos y tienes la capacidad de regular tus reacciones. Si puedes crear ese espacio entre el desencadenante y la respuesta, eso es lo que te da el mando. Eso es lo que te da la capacidad de dirigir a la gente, sobre todo en tiempos de desafío y en tiempos de crisis.</p>
<ul>
<li><p>La autoconciencia genera previsibilidad y confianza.</p>
</li>
<li><p>Las culturas de autoconciencia son aquellas en las que las personas pueden abordar sus tensiones de forma más abierta y sin fricciones.</p>
</li>
</ul>
<p>Cuanto más alto sea tu rol, más importante es la autoconciencia. La experiencia y el poder pueden obstaculizar tu autoconciencia.</p>
<blockquote>
<p>Reconoce y controla tus emociones, siempre puedes mandarlos al infierno mañana. Warren Buffet</p>
</blockquote>
<h3 id="heading-la-curiosidad-es-un-superpoder-del-liderazgo">La curiosidad es un superpoder del liderazgo</h3>
<ul>
<li><p>Siente curiosidad por tu comportamiento</p>
</li>
<li><p>Pregúntate qué podrías haber hecho mejor.</p>
</li>
<li><p>Siente curiosidad por saber de dónde vienen los demás (eso podría influir en la forma de escuchar su perspectiva de forma más eficaz).</p>
</li>
<li><p>Observa cómo reaccionan y se comportan los demás</p>
</li>
</ul>
<details><summary>Ejercicio</summary><div data-type="detailsContent">Piensa en quién eres en un contexto determinado. Cuando seas consciente de ti mismo, podrás controlar cómo te muestras en esos contextos.</div></details>

<h2 id="heading-autoeficacia">Autoeficacia</h2>
<blockquote>
<p>La autoeficacia es la creencia de una persona de que tendrá éxito en una situación determinada.</p>
</blockquote>
<p>La razón porque es importante tener autoeficacia, es que se puede tener una autoeficacia realmente fuerte en un área de la vida, y una autoeficacia débil en un área diferente de la vida. Así que la autoeficacia es específica en una tarea o dominio. Influye en cómo ves, cómo piensas y cómo te sientes contigo mismo. Así pues se hace evidente la conexión con la autoconciencia.</p>
<p>Y es crítico porque si no tienes una alta autoeficacia, particularmente, profesionalmente, nunca alcanzarás tu potencial. Porque puede convertirse en una filosofía que se refuerza a sí misma.</p>
<blockquote>
<p>Las habilidades no importarán si tu mentalidad es errónea.</p>
</blockquote>
<p>Y lo que vamos a intentar hacer aquí es usar la autoeficacia y la autoconciencia para poner nuestra mentalidad en el lugar correcto.</p>
<p>Por lo tanto, la baja autoeficacia puede ser un círculo vicioso. Ya que si alimentas el pensamiento "lo haré algún día, lo haré, lo haré". Si no tienes una alta autoeficacia, te estás frenando a ti mismo incluso de intentarlo. Así que si crees que nunca conseguirás un trabajo, si crees que no eres lo suficientemente bueno, adivina qué, probablemente no lo eres. Las personas con baja autoeficacia se fijan objetivos más bajos. Evitan las situaciones difíciles. Se quedan en trabajos en los que no tienen que someterse a mucha retroalimentación o crítica.</p>
<h3 id="heading-la-baja-autoeficacia-puede-ser-un-circulo-vicioso">La baja autoeficacia puede ser un círculo vicioso.</h3>
<ul>
<li><p>Puede ser una profecía autocumplida.</p>
</li>
<li><p>Las personas con baja autoeficacia se fijan metas más bajas y evitan las situaciones difíciles.</p>
</li>
<li><p>Conduce a una baja resiliencia.</p>
</li>
</ul>
<blockquote>
<p>Cómo piensas determina cómo te sientes, lo que a menudo determina cómo actúas.</p>
</blockquote>
<h3 id="heading-los-4-pilares-de-la-autoeficacia">Los 4 pilares de la autoeficacia</h3>
<ol>
<li><p><strong>Experiencias de dominio.</strong> Aprender haciendo. Busca en esas experiencias enriquecedoras, lo hice una vez, puedo volver a hacerlo.</p>
</li>
<li><p><strong>Modelado social.</strong> No puedes ser lo que no puedes ver. Lo importante de los modelos de conducta es que cuanto más te reconozcas en la persona, más impactante será ese modelo de conducta. Verás un poco de ti mismo en ellos, y los observas realizando una tarea o aprendiendo a visualizar su éxito. Y te das cuenta de que si ellos pueden hacerlo, yo también puedo.</p>
</li>
<li><p><strong>Persuasión social.</strong> Si crees que puedes, puedes... ¡y que alguien te lo diga ayuda!</p>
</li>
<li><p><strong>Respuestas psicológicas.</strong> No se trata de la intensidad de la reacción emocional o física, sino de cómo se percibe o interpreta.</p>
</li>
</ol>
<h3 id="heading-puedes-aumentar-tu-autoeficacia">Puedes aumentar tu autoeficacia</h3>
<ul>
<li><p>Celebra tus éxitos.</p>
</li>
<li><p>No desestime los cumplidos.</p>
</li>
<li><p>Crea un archivo de sonrisas. (correo electrónico, mensajes bonitos)</p>
</li>
<li><p>No caviles (en tus errores)</p>
</li>
</ul>
<p><strong>Visualiza tus éxitos.</strong> Una gran técnica también para aumentar tu autoeficacia.</p>
<p><strong>El síndrome del impostor</strong>, es cuando dudas de que tus logros sean el resultado de todo lo que te hace, de tu propia competencia, de tu propio trabajo duro, de todo. Sino porque crees que tuviste suerte o que la gente te ayudó o que tuviste un gran equipo. Como probablemente puedas ver la autoeficacia es el antídoto contra el síndrome del impostor.</p>
]]></content:encoded></item><item><title><![CDATA[Resumen Architecting the cloud (1)]]></title><description><![CDATA[Hace algún tiempo empecé mi estudio de las tecnologías de la nube. El potencial que tiene y resuelve. Sin embargo, más allá de entender cada servicio, lo que ofrece y su funcionamiento necesitaba conocer sus inicios y sobre todo encontrar una forma d...]]></description><link>https://theimpostorblog.vacacela.com/resumen-architecting-the-cloud-1</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-architecting-the-cloud-1</guid><category><![CDATA[architecting-the-cloud]]></category><category><![CDATA[Michael-j-kavis]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 17 Dec 2023 15:09:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/9BJRGlqoIUk/upload/0b0ea9a6f0a62fd9dfd0bd0efc002835.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace algún tiempo empecé mi estudio de las tecnologías de la nube. El potencial que tiene y resuelve. Sin embargo, más allá de entender cada servicio, lo que ofrece y su funcionamiento necesitaba conocer sus inicios y sobre todo encontrar una forma de explicarlo fácilmente a aquellos que están iniciando en este contexto. Este libro me ofreció esta perspectiva de entendimiento .</p>
<p>Una historia para explicar de manera sencilla cómo funciona la nube:</p>
<blockquote>
<p>Hubo un tiempo cuando cada familia, pueblo, granja o aldea tenía su propio pozo de agua. Hoy en día, los servicios públicos nos dan acceso a agua limpia, tan simple como abrir el grifo; la computación en la nube funciona de manera similar. Como el agua del grifo de la cocina, los servicios de computación en la nube pueden ser encendidos o apagados rápidamente como lo necesite. Similar a la compañía de agua, hay un equipo de profesionales dedicados a asegurar que el servicio ofrecido sea asegurado, seguro y disponible 24/7. Cuando el grifo no está abierto, no sólo ahorras agua, sino que también no estás pagando por recursos que actualmente no necesitas.</p>
<p>-- Viver Kundra, Former Federal CIO, U.S. Government</p>
</blockquote>
<p>La computación en la nube nos permite gestionar un amplio número de servicios de cómputo virtualizados. Por ejemplo se tiene un ambiente de pruebas ejecutando durante un par de horas y luego se descarta rápidamente los recursos computacionales virtuales. El costo total de la infraestructura usada para ejecutar este prototipo es de 50 centavos o $1. Luego poder pasar a la siguiente configuración de servidor e intentar otra serie de pruebas. Esto se podría hacer tres veces durante el día y acumular $3 en costos de infraestructura.</p>
<p>Comparación de ejecutar un prototipo en instalaciones locales versus la nube:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>On-premises</td><td>On-Cloud</td></tr>
</thead>
<tbody>
<tr>
<td>Compra de tres diferentes servidores a lo sumo $3000 a $5000 por cada uno, más software, envío, e instalación</td><td>El desarrollador crea tres diferentes recursos de cómputo virtuales en minutos a $0,50/hora, usando a la vez durante dos horas cada uno (total <strong>$3</strong>)</td></tr>
<tr>
<td>Tiempo transcurrido hasta la adquisición e implementación aproximadamente un rango de uno a tres meses</td><td>Pruebas completadas y toma de decisión en un día</td></tr>
<tr>
<td>Resultado: Decidir qué servidor mantener, comprar más, deshacerse de los otros dos</td><td>Resultado: Completa todo el escenario en un día de trabajo por sólo $3 más el salario de una persona. Sin despilfarrar activos</td></tr>
</tbody>
</table>
</div><p>Lo que la historia nos muestra una y otra vez es que cada innovación tecnológica se topa con resistencia. Los primeros en adoptar y asumir riesgos abrazan las nuevas tecnologías y vienen a ser los conejillos de indias para las empresas que típicamente prefieren esperar hasta que la tecnología llegue a estar madura.</p>
<p>Si bien la computación en la nube ofrece soluciones, esto podría llegar a ser un dolor de cabeza si no es usada adecuadamente. Algunos de los errores más comunes son:</p>
<ul>
<li><p><strong>Tener una percepción inadecuada de la nube.</strong> Es común tener la noción que al migrar las aplicaciones a la nube, el costo se va a reducir sustancialmente. La realidad es completamente opuesta. Son pocas las aplicaciones que son candidatas para ser migradas a la nube. Las arquitecturas cloud requieren de bajo acoplamiento. En caso de software legado, lo más probable es que tenga una alta dependencia con la infraestructura. Tratar de migrar este tipo de software tomaría más trabajo y un proceso de reingeniería mayor.</p>
<p>  Otro de los desafíos para las aplicaciones legado sean aplicaciones con estado. Los servicios de la nube son stateless, es decir que no tienen conocimiento sobre solicitudes o respuestas previas, sólo de información durante el tiempo que el servicio esté procesando.</p>
<p>  <em>Recomendación:</em> Entender las diferencias entre patrones de diseño con y sin estado. Entender si una aplicación es una buena candidata para migrar a la nube, alojamiento o si reescribir la aplicación es la mejor opción.</p>
</li>
<li><p><strong>Expectativas mal fundamentadas.</strong> No todos los problemas necesariamente serán resueltos por la computación en la nube.</p>
<p>  <em>Recomendación:</em> Tener expectativas realistas. Dividir las iniciativas de la nube en pequeños entregables de modo que permita entregar valor de negocio más rápido y permita al equipo aprender en el camino. Entender los pros y contras de cada modelo de servicio. Diseñar para optimizar, monitorear, y auditar el consumo de servicios de la nube e implementar un proceso de gobernanza para imponer patrones de consumo adecuados. La factura mensual debe ser monitoreada de cerca para asegurarse que los costos estén dentro de lo esperado.</p>
</li>
<li><p><strong>Desinformación acerca de la seguridad en la nube</strong>. Dentro de este contexto dos errores comunes convergen. El primero es el mito de creer que la computación en la nube es catastróficamente insegura y que los datos no pueden ser ubicados en una nube pública por ninguna razón. El segundo es creer que la seguridad es responsabilidad de los proveedores de la nube. Muchos de los servicios desplegados en la nube son desplegados sin tomar en cuenta las medidas de seguridad necesarias y dejando susceptibles a todo tipo de ataques.</p>
<p>  <em>Recomendación:</em> Diseñe la seguridad desde el principio. Asegurarse que los arquitectos, el equipo de producto y los profesionales de seguridad tengan un amplio entendimiento de la seguridad en la nube.</p>
</li>
<li><p><strong>Seleccionar un proveedor favorito, no un proveedor adecuado.</strong> Es un error muy común que muchas compañías no evalúan apropiadamente los proveedores de la nube y simplemente escogen al cual están más familiarizados. No dejarse llevar por preferencias y hacer una buena elección para el negocio.</p>
<p>  <em>Recomendación:</em> Entender las diferencias entre los tres modelos de servicios: IaaS, PaaS, SaaS.</p>
</li>
<li><p><strong>Interrupciones y tiempos muertos.</strong> Cuando se hace uso de servicios, debe haber la expectativa de que todo puede y va a fallar.</p>
<p>  <em>Recomendación:</em> Al escoger proveedores y servicios, entender los riesgos y puntos de falla y diseñar para evitar fallos. Entender los SLA (Service Level Agreement) del proveedor, políticas de propiedad de datos y examinar los documentos y acuerdos legales.</p>
</li>
<li><p><strong>Subestimar el impacto del cambio organizativo</strong>. Para empresas establecidas con infraestructura IT existente y con personal con limitada experiencia en la nube los impactos organizaciones no deben ser subestimados. Los cambios van más allá de sólo TI.</p>
<p>  <em>Recomendación:</em> De ser posible empiece por algo pequeño, iniciativas de bajo riesgo como candidatas de proyectos de computación en la nube. Forme y empodere al equipo, cree una visión del futuro y comunique el mensaje por toda la organización usando todos los medios posibles.</p>
</li>
<li><p><strong>Escasez de personal calificado</strong>. Intentar migrar a la nube con personas que no son expertas en arquitecturas de la nube usualmente no produce buenos resultados.</p>
<p>  <em>Recomendación:</em> Evaluar el personal e identificar las brechas basadas en los requerimientos del proyecto. Contratar personal con experiencia. Asegurarse que el personal aprenda de las personas experimentadas. Animar a los miembros del equipo a hacer cursos, leer blogs y colaborar para aprender.</p>
</li>
<li><p><strong>Malinterpretar los requerimientos del cliente.</strong> A veces los informáticos descuidan el aspecto del negocio de la ecuación y construyen una solución de la nube que es mejor para TI.</p>
<p>  <em>Recomendación:</em> Entender los requerimientos del negocio y las expectativas del cliente sobre la computación en la nube antes de seleccionar servicios de la nube y tipos de nube. Ten una lista de preguntas frecuentes a la mano, que respondan todas las dudas y preocupaciones que el cliente típico tendría cuando de una solución en la nube se trata.</p>
</li>
<li><p><strong>Costos inesperados.</strong> Una de las promesas de la computación en la nube es que el modelo pay-as-you-go reduce en gran medida el costo de infraestructura IT. Lo cual sólo aplica si el software está diseñado y gestionado de tal modo que optimice el uso de los servicios de la nube.</p>
<p>  <em>Recomendación:</em> Entender el costo de cada modelo de servicio en la nube y establecer el apropiado nivel de gobernanza y controles de software para optimizar y monitorear los costos.</p>
</li>
</ul>
<blockquote>
<p>La realidad es que implementar iniciativas de la nube puede ser mucho más desafiante de lo que la gente está dispuesta a creer. Es crítico que cada compañía entienda los pros y contras de cada modelo de servicio, y las implicaciones permanentes de las cuestiones clave como seguridad, privacidad, propiedad de datos, regularizaciones, costos, impacto del cambio en la organización y mucho más.</p>
<p>-- Michael J. Kavis</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[How to pass AWS Certified Solutions Architect Associate]]></title><description><![CDATA[My way to AWS Solutions Architect
Aiming to learn how to learn topics to become a Solutions Architect, I found this valuable information.
All credit to Trew Spires, Tech with Lucy, and Ali Abdaal
First, define the scope

Create a study plan. Read thr...]]></description><link>https://theimpostorblog.vacacela.com/how-to-pass-aws-certified-solutions-architect-associate</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/how-to-pass-aws-certified-solutions-architect-associate</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWS Solution Architect]]></category><category><![CDATA[Study ]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sat, 09 Dec 2023 15:10:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/mRMQwK513hY/upload/ce3fe84e097b8181b28368c39575849c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My way to AWS Solutions Architect</p>
<p>Aiming to learn how to learn topics to become a Solutions Architect, I found this valuable information.</p>
<p>All credit to <a target="_blank" href="https://www.youtube.com/watch?v=pmEqDqRn9V0">Trew Spires</a>, <a target="_blank" href="https://www.youtube.com/watch?v=OsKzZ7QuCaU">Tech with Lucy</a>, and <a target="_blank" href="https://www.youtube.com/watch?v=unityETmypk">Ali Abdaal</a></p>
<h2 id="heading-first-define-the-scope"><strong>First, define the scope</strong></h2>
<ul>
<li><p><strong>Create a study plan</strong>. Read through the official exam guide. It will provide you with individual weightings of the main topic areas.</p>
</li>
<li><p><strong>Choose resources to use.</strong> Udemy courses, practice exams on tutorial dojo or Udemy.</p>
</li>
<li><p><strong>Block out time to study.</strong> According to your expertise, the following could be a good plan: 5 weeks, 5 days per week, 2hsrs/day</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>0 Years Exp (Complete Noob)</td><td>1-5 Yrs Exp. (Knows a thing or two)</td><td>5+ Yrs Exp. (Knows a lot of things)</td></tr>
</thead>
<tbody>
<tr>
<td>3 Months</td><td>2 Months</td><td>1 Month</td></tr>
<tr>
<td>~2hrs per day</td><td>~2hs per day</td><td>~2hs per day</td></tr>
<tr>
<td>Lots of hands-on to reinforce unfamiliar concepts</td><td>Moderate hands-on in new concepts</td><td>Hands-on only where conceptual knowledge is lacking</td></tr>
</tbody>
</table>
</div><h2 id="heading-second-active-listening">Second, active listening</h2>
<ul>
<li><p>Watch videos from the course</p>
</li>
<li><p>Take notes of the key points</p>
</li>
</ul>
<p>This step is quite simple: watch a video, write some notes, and repeat the process. And at the end of each study session review the notes you've written to consolidate your knowledge.</p>
<h2 id="heading-third-get-hands-on">Third, get hands-on</h2>
<ul>
<li><p>Apply your knowledge through hands-on labs</p>
</li>
<li><p>Play around with AWS services</p>
</li>
</ul>
<p>Most of the recommended resources, all come with interactive tutorials that help you navigate through the AWS console and use the services.</p>
<p>Also, it recommended gaining more experience through <a target="_blank" href="https://workshops.aws/">AWS workshops</a>.</p>
<h2 id="heading-fourth-re-inforcing"><strong>Fourth, Re-inforcing</strong></h2>
<ul>
<li><p>Do practice questions/tests</p>
</li>
<li><p>Consolidate what you've learned</p>
</li>
</ul>
<p>For questions you don't answer correctly: 📖 Review them! and make sure understand them before the real exam.</p>
<h2 id="heading-resources">Resources</h2>
<ul>
<li><p><a target="_blank" href="https://skillbuilder.aws/">AWS Skill Builder</a> [Free]</p>
</li>
<li><p><a target="_blank" href="https://www.udemy.com/course/aws-certified-solutions-architect-associate-saa-c03/">Udemy Courses</a> and <a target="_blank" href="https://www.udemy.com/course/aws-certified-solutions-architect-associate-amazon-practice-exams-saa-c03">exams to practice</a></p>
</li>
<li><p><a target="_blank" href="https://learn.cantrill.io/">Adrian Cantrill</a> (Cloud &amp; Technical Training)</p>
</li>
<li><p><a target="_blank" href="https://digitalcloud.training/aws-certified-solutions-architect-associate/">Neil Davis</a> (Founder of Digital Cloud Training)</p>
</li>
<li><p>Jon Bonso/<a target="_blank" href="https://tutorialsdojo.com/">Tutorials Dojo</a></p>
</li>
<li><p>aCloudGuru Course and Labs</p>
</li>
<li><p>Go Cloud Architects (YouTube - free bootcamp)</p>
</li>
<li><p>AWS Service FAQ's</p>
</li>
<li><p>AWS Whitepapers</p>
</li>
</ul>
<h2 id="heading-study-tips">Study tips</h2>
<ul>
<li><p><strong>Find opportunities for immersion.</strong> We learn best in the environment we use that skill.</p>
</li>
<li><p><strong>Test yourself.</strong></p>
</li>
<li><p><strong>Figure out what your weak links are.</strong> Focus on knowledge gaps and which AWS services you weren't familiar with. Take a mock exam to see where the gaps are.</p>
</li>
<li><p><strong>Overlearning is not the best option.</strong> It would be better to understand the reasons behind why things are in the way they are.</p>
</li>
<li><p><strong>Teach what you're trying to learn.</strong></p>
</li>
</ul>
<h2 id="heading-closing-thoughts">Closing thoughts</h2>
<ul>
<li><p>Study hard... but not TOO hard / Study SMART, not hard</p>
</li>
<li><p>The less XP you have, the more hands-on you need</p>
</li>
<li><p>LOTS of overlap with other Associate Certs.</p>
</li>
<li><p>Be kind to yourself</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Resumen Consulting 101  (parte 3)]]></title><description><![CDATA[Hemos llegado a la parte final del libro, en donde aprenderemos algunos consejos útiles a la hora de gestionar tu carrera profesional como consultor.
Gestión de la carrera profesional
Tip #82: Empieza humilde, sigue humilde

No permita que los altos ...]]></description><link>https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-3</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-3</guid><category><![CDATA[consultoría-101]]></category><category><![CDATA[lew-sauder]]></category><category><![CDATA[consulting-101]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Mon, 04 Dec 2023 01:21:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/npxXWgQ33ZQ/upload/a77aaccd4a58ebbd8c0b61ceb89d9f61.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hemos llegado a la parte final del libro, en donde aprenderemos algunos consejos útiles a la hora de gestionar tu carrera profesional como consultor.</p>
<h3 id="heading-gestion-de-la-carrera-profesional">Gestión de la carrera profesional</h3>
<p>Tip #82: Empieza humilde, sigue humilde</p>
<ul>
<li>No permita que los altos niveles de conocimiento y confianza incrementen tu ego. Que la altitud no afecte a la actitud.</li>
</ul>
<p>Tip #83: Acepte tus fracasos</p>
<ul>
<li>Ser más tolerante con los errores, aprender de ellos y flexionar: qué se hizo mal, qué se pudo haber hecho en su lugar, qué podrías hacer en el futuro para asegurarte que no se repita.</li>
</ul>
<p>Tip #84: Trabaje en equipo</p>
<p>Tip #85: Aprenda de las críticas</p>
<ul>
<li>Un buen consultor siempre está tratando de aprender y mejorar, siendo capaz de usar la crítica como retroalimentación para tu autosuperación.</li>
</ul>
<p>Tip #86: Sea flexible</p>
<ul>
<li>La consultoría no es para todos. Esto requiere la flexibilidad para trabajar en un entorno impredecible.</li>
</ul>
<p>Tip #87: Manténgase al corriente de las tendencias empresariales actuales</p>
<p>Tip #88: Adopte mentores y acepte que no son perfectos</p>
<p>Tip #89: Organízate</p>
<ul>
<li><p>Cada día antes de salir, crea una lista de cosas por hacer, para el día siguiente. Prioriza las tareas.</p>
</li>
<li><p>Prepara las reuniones con antelación, determina que puntos necesitas traer a la mesa.</p>
</li>
</ul>
<p>Tip #90: Habla con un responsable antes de dejar la empresa</p>
<ul>
<li>Habla de hechos en vez de en términos emocionales.</li>
</ul>
<p>Tip #91: Aprenda a resumir</p>
<ul>
<li>El mejor enfoque es empezar con una visión general de alto nivel e ir profundizando. Tan pronto como llegues a un nivel de detalle con el cual se sientan cómodos para tomar una decisión, detente.</li>
</ul>
<p>Tip #92: Ofrece opciones al presentar un problema</p>
<ul>
<li>El trabajo del consultor es resolver problemas. Cuando se identifique un problema, deberías intentar identificar la mejor solución. Si el problema es complejo, trata de identificar la mayor cantidad de soluciones posibles, sus pros y sus contras. Con está información es aceptable para proceder a pedir ayuda de tu manager, colega o a alguien con el adecuado conocimiento para que te provea otros puntos de vista. Siempre presenta algunas soluciones potenciales a considerar.</li>
</ul>
<p>Tip #93: Céntrate en las soluciones, no en culpar</p>
<p>Tip #94: Céntrate en las métricas de medición adecuadas</p>
<ul>
<li>Independientemente de la estructura de incentivos de la empresa, los asesores individuales deben centrar sus esfuerzos de venta en lo que sea mejor para sus clientes. Encontrar un nuevo cliente es mucho más caro que mantener uno.</li>
</ul>
<p>Tip #95: Prepárate para largas jornadas</p>
<p>Tip #96: Los ascensos llegan cuando empiezas a rendir al siguiente nivel</p>
<ul>
<li>El ascenso en el escalafón suele producirse cuando un consultor demuestra que tiene las aptitudes, la confianza y la determinación necesarias para empezar a trabajar en el siguiente nivel antes de que se le conceda el título.</li>
</ul>
<p>Tip #97: Trabajar desde casa no es un día libre</p>
<p>Tip #98: Optimice su tiempo en la playa (mientras no estás activo en un proyecto)</p>
<p>Tip #99: Proteja la información confidencial de la empresa</p>
<p>Tip #100: Piensa dos veces antes de rechazar un proyecto</p>
<ul>
<li>Actualiza las habilidades que desarrollaste en tu proyecto presente, que tipo de trabajo te gustaría hacer, las preferencias de viajes.</li>
</ul>
<p>Tip #101: Ten pasión por lo que haces</p>
<ul>
<li><p>La consultoría no es una buena opción para las personas que desean un horario de trabajo estándar y les gusta trabajar en un entorno predecible. Sin embargo, si te gusta:</p>
<ul>
<li><p>Tener un desafío diferente cada día.</p>
</li>
<li><p>Pensar creativamente para resolver problemas complejos.</p>
</li>
<li><p>Vivir en un estado caótico frecuentemente.</p>
</li>
<li><p>Hacer lluvia de ideas y facilitar un grupo para llegar a un acuerdo sobre una solución.</p>
</li>
<li><p>Impulsarte a ti mismo y a los demás a completar un logro en un tiempo determinado.</p>
</li>
<li><p>Trabajar con personas de diferentes culturas, prioridades y personalidades.</p>
</li>
<li><p>Sentir una sensación de logro cuando has dado todo lo que tienes para completar un proyecto con éxito.</p>
</li>
</ul>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Resumen Consulting 101  (parte 2)]]></title><description><![CDATA[Continuamos con el resumen de Consultoría 101, encontrarás los mejores consejos a considerar para gestionar tu marca personal, la comunicación con el cliente, reuniones y ventas. Para conocer ejemplos reales y obtener más contexto de cada consejo sug...]]></description><link>https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-2</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-2</guid><category><![CDATA[lew-sauder]]></category><category><![CDATA[consulting-101]]></category><category><![CDATA[#resumenlibro]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sat, 02 Dec 2023 03:59:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ylveRpZ8L1s/upload/37e60531bfe14079ee6b471e611309de.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Continuamos con el resumen de Consultoría 101, encontrarás los mejores consejos a considerar para gestionar tu marca personal, la comunicación con el cliente, reuniones y ventas. Para conocer ejemplos reales y obtener más contexto de cada consejo sugiero ampliamente leer el libro completo: <a target="_blank" href="https://www.amazon.com/dp/B00IHOH0JU?ref_=cm_sw_r_kb_dp_R4TMPCGRJ49J9JHQFRJA&amp;tag=erikavacacela-21&amp;linkCode=kpe"><em>Consulting 101 de Lew Sauder</em></a>.</p>
<h3 id="heading-marca-personal">Marca personal</h3>
<p>Tip #40: Gestiona las redes sociales adecuadamente</p>
<ul>
<li>Un consultor debe asumir que todo lo que publica es de acceso público y está disponible para el cliente. Incluso usando pseudónimos.</li>
</ul>
<p>Tip #41: Muestra gratitud</p>
<ul>
<li>Día a día, incluso por lo básico: preguntas, al recibir información que sería de ayuda.</li>
</ul>
<p>Tip #42: Hazte indispensable</p>
<ul>
<li>Esto puede incluir: llegar temprano y permanecer hasta tarde; demostrar que el cliente es importante, poniendo sus preocupaciones en primer lugar; mostrar al cliente que estás enfocado en su éxito.</li>
</ul>
<p>Tip #43: Comparte tu conocimiento</p>
<ul>
<li><p>El conocimiento es nuestro producto.</p>
</li>
<li><p>Puede ser hecho usando reuniones one-on-one, sesiones lunch-and-learn, sesiones de lecciones aprendidas, publica tu conocimiento (blogs, websites, social media).</p>
</li>
</ul>
<h3 id="heading-establecimiento-de-expectativas">Establecimiento de expectativas</h3>
<p>Tip #44: Salida profesional</p>
<ul>
<li><p>Salir de un proyecto debe ser más enfocada en el cliente, que en el consultor. Es importante quedar en buenos términos y que el cliente esté en la capacidad de seguir funcionando en tu ausencia.</p>
</li>
<li><p>Algunas consideraciones: transferir el conocimiento, dejar documentación actualizada, documentar la transición (estado final de lo que trabajaste), no cortar lazos (destruir documentos o relaciones), despídete, devuelve los recursos del cliente, conectáte con tus colegas clientes a través de LinkedIn.</p>
</li>
</ul>
<p>Tip #45: Promete menos, cumple más</p>
<ul>
<li><p>Una de las claves para satisfacer las expectativas de los clientes es cumplir con lo prometido. Por lo que la entrega en el plazo previsto es fundamental para todo el calendario del proyecto.</p>
</li>
<li><p>Ten en cuenta las interfaces externas requeridas para completar la tarea; al hacer estimaciones, documenta las hipótesis; considera proveer un rango de escenarios en el mejor y en el peor de los casos.</p>
</li>
</ul>
<p>Tip #46: Verificar todos los entregables de cara al cliente</p>
<ul>
<li><p>Enviar entregables no verificados o no testeados dan la sensación de parsimonia o falta de profesionalismo.</p>
</li>
<li><p>En los documentos verificar gramática, que las oraciones sean completas, formato adecuado. Puedes ayudarte creando un listado de cosas a verificar.</p>
</li>
</ul>
<p>Tip #47: Confía pero verifica</p>
<ul>
<li>Al obtener información de un empleado del cliente, no siempre conocen todo el proceso, por lo que se recomienda contrastar la información. Incluso realizar reuniones con el equipo central para su validación.</li>
</ul>
<p>Tip #48: Conoce el propósito y el alcance del proyecto.</p>
<p>Tip #49: Déjalo todo - el cliente te necesita</p>
<ul>
<li><p>Los clientes son la savia vital de la consultoría. Ellos pagan las facturas que pagan los cheques y los bonos.</p>
</li>
<li><p>Los consultores necesitan tener una actitud de servicio al cliente, respondiendo rápidamente a cualquier solicitud y esforzándose por satisfacerlos en cada contacto.</p>
</li>
</ul>
<h3 id="heading-comunicacion">Comunicación</h3>
<p>Tip #50: Habla cuando estés enfadado y pronunciarás el más grande discurso del que siempre te arrepentirás</p>
<ul>
<li>Cuando un cliente exigente por una situación intensa causa que te enojes la mejor cosa por hacer es apartarte de la situación. Pedir cierto tiempo hasta obtener más información.</li>
</ul>
<p>Tip #51: No uses "el lenguaje del consultor" para impresionar</p>
<ul>
<li>Habla con los clientes de forma clara, con oraciones directo al punto que los informen en vez de impresionar con jerga técnica o acrónimos.</li>
</ul>
<p>Tip #52: No seas condescendiente con el cliente</p>
<ul>
<li><p>Los clientes contratan a un consultor buscando asesoría, ellos ya conocen sus procesos y aplicaciones que necesitan mejorar. No critique.</p>
</li>
<li><p>Cuando se discuta de mejoras, explíquelo en términos de beneficios para el cliente en vez de que es más nuevo a mejor que su sistema actual.</p>
</li>
<li><p>Tenemos dos orejas y una boca, por lo que deberías escuchar el doble de lo que hablas.</p>
</li>
</ul>
<p>Tip #53: Habla con un propósito</p>
<p>Tip #54: Transmite confianza</p>
<ul>
<li>El cliente necesita creer en tí. La confianza no debe confundirse con la arrogancia. Tener experiencia es una parte del show. Tienes que ser capaz de dar respuestas y presentarlas de una manera convincente que haga que el cliente compre y crea en tu recomendación.</li>
</ul>
<p>Tip #55: Ten sentido del humor, úsalo sabiamente</p>
<ul>
<li>Agregar mucho humor o inapropiado puede poner en duda tu credibilidad.</li>
</ul>
<p>Tip #56: Prepara tu mensaje antes de hacer una llamada.</p>
<p>Tip #57: Responde a los mensajes e invitaciones a reuniones en el plazo de un día laborable</p>
<p>Tip #58: Escribe correos electrónicos profesionales</p>
<p>Algunas de las consideraciones: dirígete al destinatario, revisa el correo antes de enviar, evita usar abreviaturas, evitar el uso de mayúsculas (se asocia con gritar),</p>
<p>Tip #59: El sistema de correo electrónico del cliente es para su negocio</p>
<p>Tip #60: Reenvíe los correos electrónicos con cuidado</p>
<ul>
<li>Asegúrate de que la información histórica contenida en los hilos no contenga información sensible.</li>
</ul>
<p>Tip #61: Controle los hilos de correo electrónico</p>
<h3 id="heading-reuniones">Reuniones</h3>
<p>Tip #62: La puntualidad es una señal de respeto</p>
<ul>
<li>Si quieres mostrar a tu cliente algo de respeto, establece como objetivo llegar a las reuniones uno o dos minutos antes.</li>
</ul>
<p>Tip #63: Ten una agenda</p>
<ul>
<li>Elementos a considerar: fecha, hora y localización; lista de todos los invitados; objetivo de la reunión; enumerar cada tema a ser discutido y de quién se espera que haga aportaciones al tema. Cuando se programa una reunión, la agenda debería ser enviada al menos un día antes.</li>
</ul>
<p>Tip #64: Invita sólo a las personas necesarias</p>
<ul>
<li>Tiempo en minutos que dura una reunión * número de asistentes = total de minutos perdidos en una reunión</li>
</ul>
<p>Tip #65: Estar preparado para tomar notas</p>
<p>Tip #66: Anticiparse a las preguntas del cliente</p>
<p>Tip #67: Acude a las reuniones preparado</p>
<ul>
<li>Verifica que la sala de reuniones esté disponible y que sea lo suficientemente amplia para todos los asistentes. Si usarás un computador/proyector, verifica que esté funcionando y llega con tiempo extra para configurar y resolver cualquier inconveniente.</li>
</ul>
<p>Tip #68: Apaga tu teléfono</p>
<p>Tip #69: Introduce/presenta la reunión</p>
<ul>
<li>El facilitador debería empezar indicando el propósito de la reunión y su objetivo, lo que quiere conseguir al finalizar la reunión.</li>
</ul>
<p>Tip #70: Perfeccione sus técnicas de presentación</p>
<p>Tip #71: No se duerma</p>
<p>Tip #72: Mantenga el control de la reunión</p>
<ul>
<li>En las reuniones encontrarás todo tipo de personalidades y mantenerlas bajo control.</li>
</ul>
<p>Tip #73: Mantener informados a los asistentes virtuales</p>
<ul>
<li>Anunciar a todas las personas, los sonidos de fondo pueden ser evitados usando el botón para silenciar.</li>
</ul>
<p>Tip #74: Seguimiento de acciones y problemas</p>
<ul>
<li>Cuando los debates de las reuniones generan problemas que deben resolverse, asegúrate de documentar los problemas y que la persona responsable para su resolución está identificado.</li>
</ul>
<p>Tip #75: Publicar las actas de las reuniones</p>
<ul>
<li>El moderador es responsable de que se publiquen las actas de la reunión para todos los asistentes y cualquier otra parte interesada.</li>
</ul>
<h3 id="heading-ventas">Ventas</h3>
<p>Tip #76: Conozca la oferta de servicios de su empresa</p>
<p>Tip #77: Conozca las expectativas de venta de su nivel</p>
<p>Tip #78: Crear una red eficaz</p>
<ul>
<li>Mantente en contacto con tus contactos. Ocasionalmente, ve a través de tu red y envía un correo electrónico a tres o cuatro contactos para ver cómo les va.</li>
</ul>
<p>Tip #79: Aprende del negocio del cliente</p>
<p>Tip #80: Centráte en las ventas y las horas facturables</p>
<p>Tip #81: Aprenda de las pérdidas de ventas</p>
<p>Continuará...</p>
]]></content:encoded></item><item><title><![CDATA[Essential AWS Questions]]></title><description><![CDATA[In my time learning AWS, I have come across some essential questions.
What considerations do we take into account to choose the right AWS Region?

Latency. Choosing a region that is close helps you to prevent long wait times for your customers.

Pric...]]></description><link>https://theimpostorblog.vacacela.com/essential-aws-questions</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/essential-aws-questions</guid><category><![CDATA[AWS]]></category><category><![CDATA[Solutions architecture]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 26 Nov 2023 08:07:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680232432895/b72dc281-cb90-4a61-a8cd-55896a7cc96f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my time learning AWS, I have come across some essential questions.</p>
<h3 id="heading-what-considerations-do-we-take-into-account-to-choose-the-right-aws-region">What considerations do we take into account to choose the right AWS Region?</h3>
<ul>
<li><p><strong>Latency</strong>. Choosing a region that is close helps you to prevent long wait times for your customers.</p>
</li>
<li><p><strong>Price</strong>. Due to financial factors, AWS prices vary from one region to another.</p>
</li>
<li><p><strong>Service availability</strong>. Some services might not be available in some regions.</p>
</li>
<li><p><strong>Compliance</strong>. Some data needs to be stored in a specific geographic territory to comply with regulations.</p>
</li>
</ul>
<h3 id="heading-who-is-responsible-for-securing-your-aws-environment">Who is responsible for securing your AWS environment?</h3>
<p>Security and compliance are a shared responsibility between AWS and you.</p>
<p>An analogy to understand this <em>is similar to how a construction company builds a building and it's on them to make sure that the building itself is stable and secure, then you can rent out an apartment in that building. It's up to you to lock the door to your apartment</em>.</p>
<p>For security in the cloud, the base layer is secured by AWS. It's up to you to lock the door.</p>
<p>AWS is responsable for:</p>
<ul>
<li><p>Hardware or AWS Global Infrastructure, physical infrastructure where the cloud is running.</p>
</li>
<li><p>Software, through virtualization, for example, if we created a VM EC2 instance, is on physical computing, as well as everything through the hypervisor level. If the hypervisor needs to be patched or updated that is the responsibility of AWS.</p>
</li>
</ul>
<p>You are responsible for:</p>
<ul>
<li><p>Security configuration in all your services. For example in an EC2 instance: patching the operating systems, encrypting data in transit and at rest, configuring firewalls, and controlling who has access to these resources and how much access they have.</p>
<p>  Many times, AWS offers native features you can enable o to achieve a secure solution. It's up to you to actually use them.</p>
</li>
</ul>
<h3 id="heading-what-do-we-need-to-choose-the-right-compute-option">What do we need to choose the right compute option?</h3>
<p>Three types of computing options are available: virtual machines (VMs), container services, and serverless. Choose an option, it depends on the context, the requirements, the use frequency, refactoring, high availability, etc.</p>
<p>Note: Beneath the surface, some AWS compute services use Amazon EC2 or use virtualization concepts.</p>
<h3 id="heading-what-are-the-container-orchestration-services-and-their-differences">What are the container orchestration services and their differences?</h3>
<p>To manage your computing at a large scale, you should consider the following:</p>
<ul>
<li><p>How to place your containers on your instances</p>
</li>
<li><p>What happens if your container fails</p>
</li>
<li><p>What happens if your instance fails</p>
</li>
<li><p>How to monitor deployments of your containers</p>
</li>
</ul>
<p>This coordination is handled by a container orchestration service. AWS offers two container orchestration services:</p>
<ul>
<li><p>Amazon Elastic Container Service (Amazon ECS)</p>
</li>
<li><p>Amazon Elastic Kubernetes Service (Amazon EKS)</p>
</li>
</ul>
<p>Amazon EKS is conceptually similar to Amazon ECS, but with the following differences:</p>
<ul>
<li><p>In Amazon ECS, the machine that runs the containers is an EC2 instance that has an ECS agent installed and configured to run and manage your containers. This instance is called a container instance. In Amazon EKS, the machine that runs the containers is called a worker node or Kubernetes node.</p>
</li>
<li><p>An ECS container is called a task. An EKS container is called a pod.</p>
</li>
<li><p>Amazon ECS runs on AWS native technology. Amazon EKS runs on Kubernetes.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Manejo de situaciones difíciles en el servicio al cliente]]></title><description><![CDATA[Resumen:
En el día a día de servicio al cliente, es común enfrentarse a situaciones difíciles. Al tratar con personas, nos enfrentamos a seres emocionales, con diferentes contextos y antecedentes. Saber que más allá de la situación presente, existen ...]]></description><link>https://theimpostorblog.vacacela.com/manejo-de-situaciones-dificiles-en-el-servicio-al-cliente</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/manejo-de-situaciones-dificiles-en-el-servicio-al-cliente</guid><category><![CDATA[servicio al cliente]]></category><category><![CDATA[escucha activa]]></category><category><![CDATA[empatía]]></category><category><![CDATA[manejo de situaciones difíciles]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sun, 26 Nov 2023 05:00:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1700975332015/c9122e8a-57a1-43f8-a5cb-d67d30a40675.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><em>Resumen:</em></strong></p>
<p>En el día a día de servicio al cliente, es común enfrentarse a situaciones difíciles. Al tratar con personas, nos enfrentamos a seres emocionales, con diferentes contextos y antecedentes. Saber que más allá de la situación presente, existen eventos pasados que pudo llevar a una persona a comportarse agresivamente, o molesta nos ayudará a comprender mejor a la persona. No busquemos conocer todo el contexto.</p>
<p>Entonces, busquemos no catalogarlos como "clientes difíciles", más bien como clientes con dificultades. Esto nos ayudará a ver a la persona como un ser humano, que más allá de la emoción fuerte que mostró, necesita de nuestro servicio, y es merecedor de nuestro respeto y empatía. Catalogar al cliente como difícil nos predispone de manera negativa. El lenguaje que usemos nos ayudará a abrir nuestra mente y estar predispuestos a un mejor servicio. La situación no debe tomarse como algo personal.</p>
<p>La actitud y predisposición que mostremos a nuestros clientes siempre hará la diferencia. En términos de cifras, aproximadamente un 86% de los clientes que deciden dejar de usar un servicio, lo han hecho debido a la mala experiencia de servicio recibida.</p>
<p>La preparación para situaciones difíciles es necesaria, ya que estos eventos surgen inesperadamente y parte de nuestro rol es estar preparados. <em>Estas situaciones ponen a prueba al máximo las habilidades de servicio y fortaleza personal, pues desgastan física y emocionalmente.</em> Veamos esto por etapas: antes, durante y después de un servicio dirigido a un cliente con dificultates.</p>
<p>En el siguiente diagrama se muestran las competencias esenciales para manejar clientes molestos y situaciones difíciles:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700963178324/4d1f6086-262d-4a39-bd06-ea988d72067c.png" alt class="image--center mx-auto" /></p>
<p>Durante: pasos para manejar efectivamente situaciones difíiles en el servicio.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700966220727/683d86e0-d870-4306-8aed-8740317b9a42.png" alt class="image--center mx-auto" /></p>
<p>Después: listos para continuar brindando el mejor servicio.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700967369851/88d625b4-1cd8-4bf2-aa31-f8097b415fc6.png" alt class="image--center mx-auto" /></p>
<p>Ejemplos de declaraciones positivas:</p>
<ul>
<li><p>Soy lo mejor que puedo ser</p>
</li>
<li><p>Sé lo que estoy haciendo</p>
</li>
<li><p>No me quedaré atrás</p>
</li>
<li><p>Puedo superar cualquier cosa</p>
</li>
<li><p>Conozco a mis clientes</p>
</li>
<li><p>Yo soy un líder</p>
</li>
<li><p>Me esfuerzo por aprender algo nuevo cada día</p>
</li>
</ul>
<p>Sugerencias:</p>
<ul>
<li><p>En la mañana visualiza un día sintiéndote confortable.</p>
</li>
<li><p>Al despertar da Gracias.</p>
</li>
<li><p>Analiza tus diálogos internos.</p>
</li>
<li><p>Respira conscientemente en situaciones que te generen stress.</p>
</li>
<li><p>Realiza estiramientos musculares cuando finalices la jornada.</p>
</li>
<li><p>Realiza actividades sociales para desconectarte.</p>
</li>
<li><p>Practica buenos hábitos de alimentación.</p>
</li>
<li><p>Descansa adecuadamente (duerme entre 7/8 horas)</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Resumen de El derecho a decir que NO]]></title><description><![CDATA[En este libro se desarrolla la importancia de la asertividad.
Pero... ¿qué es la asertividad? 🤔
La asertividad, es la capacidad de ejercer y defender nuestros derechos personales sin violar los ajenos. Como decir "No", expresar desacuerdos, dar una ...]]></description><link>https://theimpostorblog.vacacela.com/resumen-de-el-derecho-a-decir-que-no</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-de-el-derecho-a-decir-que-no</guid><category><![CDATA[#walter riso]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Sat, 18 Nov 2023 02:54:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1700315887363/1d391b69-27fd-46be-9731-52d504df56be.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En <a target="_blank" href="https://a.co/d/gQW7FJ3">este libro</a> se desarrolla la importancia de la asertividad.</p>
<p>Pero... ¿qué es la asertividad? 🤔</p>
<p>La <strong>asertividad</strong>, es la capacidad de ejercer y defender nuestros derechos personales sin violar los ajenos. Como decir "No", expresar desacuerdos, dar una opinión contrario y/o expresar sentimientos negativos sin dejarse manipular, y sin manipular ni violar los derechos de los demás.</p>
<p><strong>Ni sumisión ni agresión: asertividad</strong></p>
<p>Algunos pensamientos de personas no asertivas:</p>
<ul>
<li><p>Los derechos de los demás son más importantes que los míos.</p>
</li>
<li><p>No debo herir los sentimientos de los demás ni ofenderlos, aunque yo tenga la razón y me perjudique.</p>
</li>
<li><p>Si expreso mis opiniones seré criticado o rechazado.</p>
</li>
<li><p>No sé qué decir ni cómo decirlo. No soy hábil para expresar mis emociones.</p>
</li>
</ul>
<p><strong>Frases</strong></p>
<blockquote>
<ul>
<li><p><em>No hay peor traición que traicionarse a sí mismo.</em></p>
</li>
<li><p><em>Yo soy el último juez de mi conducta.</em></p>
</li>
</ul>
</blockquote>
<p>Esto esta intrínsecamente relacionado con el <strong>autorespeto</strong>, que se define como la ética personal que separa lo negociable de lo no negociable, el punto del no retorno.</p>
<p>Entonces... <strong>¿Qué significa ser asertivo?</strong></p>
<p>Decimos que una persona es asertiva cuando es capaz de <em>ejercer y/o defender</em> sus derechos personales, como decir "no", expresar desacuerdos, dar una opinión contraria y/o expresar sentimientos negativos sin dejarse manipular, como lo hace un sumiso, y sin manipular ni violar los derechos de los demás, como hace el agresivo.</p>
<p><strong>¿Cuando no es recomendable no es ser asertivo?</strong></p>
<ul>
<li><p>Cuando la integridad física puede verse afectada.</p>
</li>
<li><p>Cuando se puede lastimar innecesariamente a una persona.</p>
</li>
<li><p>Cuando haya un costo social significado.</p>
</li>
</ul>
<p><strong>¿Por qué es bueno ser asertivo?</strong></p>
<ol>
<li><strong>La asertividad fortalece el amor propio y la dignidad.</strong></li>
</ol>
<p>Para exigir respeto debo empezar por respetarme a mí mismo y reconocer aquello que me hace particularmente valioso, es decir: <em>debo quererme y sentirme digno de amor.</em> La dignidad personal es el <strong>reconocimiento de que somos merecedores de lo mejor</strong>.</p>
<p>Dignidad humana siguiendo a Savater (Las preguntas de la vida)</p>
<ul>
<li><p>No ser un instrumento para otros fines distintos a los propios.</p>
</li>
<li><p>Ser autónomo en las propias decisiones.</p>
</li>
<li><p>Ser tratado de acuerdo con sus méritos y no con circunstancias aleatorias como raza, etnia, clase social o preferencia sexual, es decir no ser discriminado por esas razones.</p>
</li>
<li><p>No ser abandonado, despreciado o rechazado afectivamente.</p>
</li>
</ul>
<p>La resistencia paciente del budista no es pasividad sino una estrategia para que los pensamientos y las emociones negativas no se apoderen de la mente y alteren el comportamiento. La asertividad, además de proteger nuestro amor propio, nos permite modular la violencia interior, para acceder a la dignidad de una manera inteligente.</p>
<ol>
<li><strong>La asertividad permite una mejor defensa psicológica y nos hace más seguros</strong></li>
</ol>
<p>Cuando somos asertivos se reduce la discrepancia entre el <strong>yo real y el yo ideal</strong>.</p>
<p>Cada vez que ejercemos el derecho a expresar nuestras opiniones y sentimientos, el yo real crece, se afianza y se descubre a sí mismo, se asombra de sus capacidades. Y, entonces, el yo ideal no se ve tan lejos.</p>
<ol>
<li><strong>La asertividad facilita la libertad emocional y el autoconocimiento</strong></li>
</ol>
<p>Cuando expreso lo que pienso y siento, liberó de la mente y sano mi cuerpo.</p>
<ol>
<li><strong>La asertividad ayuda a resolver problemas y a mejorar la comunicación</strong></li>
</ol>
<p>La asertividad permite relaciones más funcionales, más directas y auténticas. Es un método de comunicación por excelencia donde la honradez y la transparencia  son determinantes.</p>
<h3 id="heading-los-derechos-asertivos"><strong>Los derechos asertivos</strong></h3>
<p>Para reconocer los derechos asertivos personales: imaginarse a uno mismo en una situación conflictiva y/o autoobservarse en las relaciones interpersonales cotidianas para detectar <em>cuándo y cómo</em> aflora la <strong>indignación</strong>.</p>
<p>La <strong>indignación</strong> puede definirse como un <em>sentimiento de cólera ante la injusticia</em>.</p>
<p><strong>Los derechos son valores</strong>. Los valores son motivaciones esenciales, intereses radicales y extremos  que irremediablemente nos impulsan a comportarnos en concordancia con ellos y a defenderlos.</p>
<p>Algunos derechos asertivos:</p>
<ol>
<li><p>El derecho a ser tratado con dignidad y respeto.</p>
</li>
<li><p>El derecho a experimentar y a expresar sentimientos.</p>
</li>
<li><p>El derecho a tener y expresar opiniones y creencias.</p>
</li>
<li><p>El derecho a decidir qué hacer con mi propio tiempo, cuerpo y propiedad.</p>
</li>
<li><p>El derecho a cambiar de opinión.</p>
</li>
<li><p>El derecho a decidir sin presiones.</p>
</li>
<li><p>El derecho a cometer errores y a ser responsable de ellos.</p>
</li>
<li><p>El derecho a ser independiente.</p>
</li>
<li><p>El derecho a pedir información.</p>
</li>
<li><p>El derecho a ser escuchado y tomado en serio.</p>
</li>
<li><p>El derecho a tener éxito y a fracasar.</p>
</li>
<li><p>El derecho a estar solo.</p>
</li>
<li><p>El derecho a estar contento</p>
</li>
<li><p>El derecho a no ser lógico</p>
</li>
<li><p>El derecho a decir: "No lo sé"</p>
</li>
<li><p>El derecho a hacer cualquier cosa sin violar los derechos de los demás</p>
</li>
<li><p>El derecho a no ser asertivo.</p>
</li>
</ol>
<p><strong>Los derechos no pueden desligarse de los deberes</strong></p>
<blockquote>
<p><em>No hagas lo que no quieres que te hagan</em></p>
</blockquote>
<p>Cuando ejecuto una conducta de cualquier tipo, especialmente si los demás pueden verse afectados, debería detenerme un instante y pensar dos cosas:</p>
<ol>
<li><p>Cómo sería una sociedad regida por el principio que me guía a actuar?</p>
</li>
<li><p>¿Qué pasaría si todos actuaran como yo, sería mejor o peor?</p>
</li>
</ol>
<p><strong>El derecho se hace evidente cuando alguien traspasa el límite de nuestros principios</strong></p>
<h3 id="heading-la-culpa-y-el-autosacrificio-irracional">La culpa y el autosacrificio irracional</h3>
<p>Credo humanista de Fromm:</p>
<blockquote>
<p><em>Creo que la igualdad se siente cuando, al descubrirse uno mismo por completo, se reconoce igual a otros y se identifica con ellos. Todo individuo lleva la humanidad en su interior. La condición humana es única e igual en todos los hombres a pesar de las inevitables diferencias de inteligencia, talento, estatura, color, etc.</em></p>
<p><em>Creo que la igualdad entre los hombres se debe recordar especialmente para evitar que uno se convierta en instrumento de otro.</em></p>
</blockquote>
<p>Una <strong>segunda</strong> fuente de reflexión fue el análisis de siete preguntas, que ella debía responderse a sí misma para cuestionar si la culpa que sentía era fundamentada o no.</p>
<ol>
<li><p>Estoy violando algún derecho ajeno?</p>
</li>
<li><p>Estoy lastimando <em>objetivamente</em> a alguien por descuido o irresponsabilidad?</p>
</li>
<li><p>Al actuar asertivamente, mi motivación es honesta?</p>
</li>
<li><p>Al actuar asertivamente, mi intención es hacer daño?</p>
</li>
<li><p>Estoy obrando impulsado e irracionalmente?</p>
</li>
<li><p>He deliberado seriamente sobre mi comportamiento antes de actuar?</p>
</li>
<li><p>¿No será que en realidad no es mi comportamiento lo que está lastimando <em>directamente</em> a la persona, sino su incapacidad para renunciar a un privilegio o aceptar un "no"?</p>
</li>
</ol>
<p>Si las respuestas son: NO, NO, SI, NO, NO, SÍ, SÍ ⇒ No debería sentirse culpable</p>
]]></content:encoded></item><item><title><![CDATA[Resumen de cómo ganar amigos e influir sobre las personas]]></title><description><![CDATA[Ideas extraídas del libro How To Win Friends And Influence People de Dale Carnegie.
Primera parte. Técnicas fundamentales para tratar con el prójimo
Regla 1. No critique, no condene, ni se queje
La crítica es peligrosa, porque lastima el orgullo, tan...]]></description><link>https://theimpostorblog.vacacela.com/resumen-de-como-ganar-amigos-e-influir-sobre-las-personas</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-de-como-ganar-amigos-e-influir-sobre-las-personas</guid><category><![CDATA[dale carnegie]]></category><category><![CDATA[#resumenlibro]]></category><category><![CDATA[normas-comportamiento]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Fri, 17 Nov 2023 08:10:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1700316279803/0e3043cd-9830-49ab-a781-5d3f00a0efdf.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ideas extraídas del libro <a target="_blank" href="https://www.amazon.com/dp/B00EAXXNGG?ref_=cm_sw_p_kb_dp&amp;tag=erikavacacela-21&amp;linkCode=kpe"><em>How To Win Friends And Influence People</em> de Dale Carnegie</a>.</p>
<h2 id="heading-primera-parte-tecnicas-fundamentales-para-tratar-con-el-projimo">Primera parte. Técnicas fundamentales para tratar con el prójimo</h2>
<h3 id="heading-regla-1-no-critique-no-condene-ni-se-queje">Regla 1. No critique, no condene, ni se queje</h3>
<p>La crítica es peligrosa, porque lastima el orgullo, tan precioso de la persona, hiere su sentido de la importancia, y despierta su resentimiento. Cuando tratamos con la gente debemos recordar que no tratamos con criaturas lógicas. Tratamos con criaturas emotivas, criaturas erizadas de prejuicios e impulsadas por el orgullo y la vanidad.</p>
<p>Cualquier tonto puede criticar, censurar y quejarse, y casi todos los tontos lo hacen. Pero se necesita carácter y dominio de sí mismo para ser comprensivo y capaz de perdonar. En lugar de censurar a la gente, tratemos de comprenderla. Tratemos de imaginarnos por qué hacen lo que hacen. Eso es mucho más provechoso y más interesante que la crítica; y de ello surge la simpatía, la tolerancia y la bondad. Saberlo todo es perdonarlo todo.</p>
<p><strong>Frases célebres</strong></p>
<blockquote>
<p><em>Si quieres recoger miel, no des puntapiés a la colmena.</em></p>
<p><em>Es una tontería regañar a los demás, bastante tengo con mis propias limitaciones.</em></p>
<p><em>No juzgues si no quieres ser juzgado.</em></p>
<p><em>No te quejes de la nieve en el techo del vecino, cuando también cubre el umbral de tu casa. -Confucio</em></p>
<p><em>No hablaré mal de hombre alguno y de todos diré todo lo bueno que sepa. -Benjamin Franklin</em></p>
</blockquote>
<h3 id="heading-regla-2-demuestre-aprecio-honrado-y-sincero">Regla 2. Demuestre aprecio honrado y sincero</h3>
<p>Sólo hay un medio para conseguir que alguien haga algo. Y es de hacer que el prójimo <strong><em>quiera</em></strong> hacerlo.</p>
<p>Hace unos años se hizo un estudio sociológico entre esposas que habían abandonado sus hogares, ¿y cuál creen que fue la razón principal que dieron para haber tomado su decisión? <strong><em>"Falta de aprecio"</em></strong>. Se llegó a la misma conclusión en un estudio similar a los hombres. <strong><em>Con frecuencia damos tan por sentada la presencia de nuestro cónyuge, que nunca le manifestamos nuestro aprecio.</em></strong></p>
<p><strong>Apreciación vs adulación</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Apreciación</td><td>Adulación</td></tr>
</thead>
<tbody>
<tr>
<td>Es sincera</td><td>No es sincera</td></tr>
<tr>
<td>Procede del corazón</td><td>Sale de la boca</td></tr>
<tr>
<td>Es altruista</td><td>Es egoísta</td></tr>
<tr>
<td>Despierta admiración universal</td><td>Es universalmente condenada</td></tr>
</tbody>
</table>
</div><p>Si dejamos de pensar en nosotros mismos por un rato y comenzamos a pensar en las buenas cualidades del prójimo, no tendremos que recurrir a la adulación, tan barata y tan falsa que se la conoce apenas sale de los labios. Una de las virtudes más descuidadas de nuestra existencia cotidiana es la apreciación.</p>
<p><strong>Frases célebres</strong></p>
<blockquote>
<p><em>El impulso más profundo de la naturaleza humana es "el deseo de ser importante". -Dr. John Dewey</em></p>
<p><em>Considero que el mayor bien que poseo es mi capacidad para despertar entusiasmo entre los hombres, y que la forma de desarrollar lo mejor que hay en el hombre es por medio del aprecio y el aliento. - Charles Schwab</em></p>
<p><em>Aquí yace un hombre que supo como rodearse de hombres más hábiles que él. -Dale Carnegie</em></p>
<p><em>No hay que yo necesite tanto como alimento para mi propia estima. -Alfred Lunt</em></p>
<p><em>No temas a los enemigos que te atacan. Teme a los amigos que te adulan. -General Obregón</em></p>
<p><em>Pasaré una sola vez por este camino; de modo que cualquier bien que pueda hacer o cualquier cortesía que pueda tener para con cualquier ser humano, que sea ahora. No la dejaré para mañana, ni la olvidaré, porque nunca más volveré a pasar por aquí.</em></p>
<p><em>Todo hombre que conozco es superior a mí en algún sentido. En ese sentido, aprendo de él. -Emerson</em></p>
</blockquote>
<h3 id="heading-regla-3-despierte-en-los-demas-un-deseo-vehemente">Regla 3. Despierte en los demás un deseo vehemente</h3>
<p>¿Por qué hablar de lo que necesitamos o deseamos? Eso es infantil. Absurdo. Pero a nadie más le interesa. Los demás son como usted o como yo: les interesa lo que ellos desean o necesitan.</p>
<p>De modo que el único medio de que disponemos para influir sobre el prójimo es hablar acerca de lo que él quiere, y demostrarle cómo conseguirlo.</p>
<p>Mañana querrá usted persuadir a alguien de que haga algo. Antes de hablar, haga una pausa y pregúntese: "¿Cómo puedo lograr que quiera hacerlo?".</p>
<p>El mundo está lleno de personas egoístas, aprovechadas. De manera que los pocos individuos que sin egoísmo tratan de servir a los demás tienen enormes ventajas.</p>
<p>Ver desde el punto de vista de la otra persona, y despertar en esa persona un deseo ferviente de algo, no debe confundirse con manipular a esa persona de modo que haga algo en detrimento de sus propios intereses. Ambos partidos deben salir ganando en la negociación.</p>
<h4 id="heading-frases-celebres">Frases célebres</h4>
<blockquote>
<p><em>Si hay un secreto del éxito reside en la capacidad para apreciar el punto de vista del prójimo y ver las cosas desde ese punto de vista así como del propio. -Henry Ford</em></p>
<p><em>El hombre que se puede poner en el lugar de los demás, que puede comprender el funcionamiento de la mente ajena, no tiene por qué preocuparse por el futuro. -Owen D. Young</em></p>
</blockquote>
<h2 id="heading-segunda-parte-seis-maneras-de-agradar-a-los-demas">Segunda parte. Seis maneras de agradar a los demás</h2>
<h3 id="heading-regla-1-interesese-sinceramente-por-los-demas">Regla 1. Interésese sinceramente por los demás.</h3>
<blockquote>
<p><em>Nos interesan los demás cuando se interesan por nosotros. -Publilio Syro</em></p>
</blockquote>
<p>Se pueden ganar más amigos en dos meses si se interesa uno en los demás, que los que se ganarían en dos años si se hace que los demás se interesen por uno.</p>
<p>El individuo que no se interesa por sus semejantes es quien tiene las mayores dificultades en la vida y causa las mayores heridas a los demás. De esos individuos surgen todos los fracasos humanos.</p>
<p>Thurston, el decano de los magos, mostraba verdadero interés por el público, cada vez que entraba al escenario se decía: "Estoy agradecido a toda esta gente que ha venido a verme. Son ellos quienes me permiten ganarme la vida en forma tan agradable. Por ellos haré esta noche todo lo mejor que pueda".</p>
<p>Si queremos obtener amigos, dediquémonos a hacer cosas para los demás, cosas que requieren tiempo, energía, altruismo.</p>
<h3 id="heading-regla-2-sonria">Regla 2. Sonría</h3>
<p>Una manera sencilla de causar una buena primera impresión =&gt; Sonría.</p>
<p>Las acciones dicen más que las palabras, y una sonrisa expresa: "Me gusta usted. Me causa felicidad. Me alegro tanto de verlo".</p>
<p>¿Una sonrisa poco sincera? No. A nadie engañaremos. Sabemos que es una cosa mecánica y nos causa enojo. Hablo de una verdadera sonrisa, que alegre el corazón, que venga de adentro, que valga buen precio en el mercado.</p>
<p>William James lo expresó de la siguiente manera: La acción parece seguir al sentimiento, pero en realidad la acción y el sentimiento van juntos; y si se regula la acción, que está bajo el control más directo de la voluntad, podemos regular el sentimiento, que no lo está. De tal manera, el camino voluntario y soberano hacia la alegría, actuar y hablar con alegría, como si esa alegría estuviera ya con nosotros.</p>
<p>Todo el mundo busca la felicidad, y hay un medio seguro para encontrarla. Consiste en controlar nuestros pensamientos. La felicidad no depende de condiciones externas, depende de condiciones internas. No es lo que tenemos o lo que somos o donde estamos o lo que realizamos, nada de eso, lo que nos hace felices o desgraciados. Es lo que pensamos acerca de ello.</p>
<p>Cada vez que salga al aire libre, retraiga el mentón, lleva erguida la cabeza y llene los pulmones hasta que no pueda más; beba el sol; salude a sus amigos con una sonrisa, y ponga el alma en cada apretón de manos.</p>
<p>Su sonrisa es una mensajera de bondad. Su sonrisa ilumina la vida de aquellos que la ven.</p>
<h4 id="heading-frases-celebres-1">Frases célebres</h4>
<blockquote>
<p><em>Nada es bueno o malo, sino que el pensamiento es lo que hace que las cosas sean buenas o malas. -Shakespeare</em></p>
<p><em>Casi todas las personas son tan felices como deciden serlo. -Abraham Lincoln.</em></p>
<p><em>Pensar bien es crear</em></p>
<p><em>El hombre cuya cara no sonríe no debe abrir una tienda. -Proverbio Chino</em></p>
</blockquote>
<h3 id="heading-regla-3-recuerde-que-para-toda-persona-su-nombre-es-el-sonido-mas-dulce-e-importante-en-cualquier-idioma">Regla 3. Recuerde que para toda persona, su nombre es el sonido más dulce e importante en cualquier idioma</h3>
<p>Jim Farley descubrió al principio de su vida que el común de los hombres se interesa más por su propio nombre que por todos los demás de la tierra.</p>
<p>Franklin D. Roosevelent sabia que uno de los medios más sencillos, más evidentes y más importantes para conquistar buena voluntad es el de recordar nombres y hacer que los demás se sientan importantes.</p>
<h3 id="heading-regla-4-sea-un-buen-oyente-anime-a-los-demas-a-que-hablen-de-si-mismos">Regla 4. Sea un buen oyente. Anime a los demás a que hablen de sí mismos</h3>
<p>Fácil manera de convertirse en un buen conversador.</p>
<p>Escuchar con atención es uno de los más altos cumplimientos que se puede rendir. Muchas personas no logran causar una impresión favorable porque no escuchan con atención. "Están tan preocupados por lo que van a decir, que no escuchan nada... Hombres famosos me han dicho que prefieren ser buenos oyentes a buenos conversadores, pero que la habilidad para escuchar parece más rara que cualquier otra cualidad humana."</p>
<p>Si quiere usted que la gente lo eluda y se ría de usted apenas le vuelve la espalda, y hasta lo desprecie, aquí la receta: jamás escucha mientras hablen los demás. Hable incesantemente de usted mismo. Si se le ocurre una idea cuando su interlocutor está hablando, no lo deje terminar. No es tan vivo como usted. ¿Por qué ha de perder el tiempo escuchando su estúpida charla? Interrúmpalo en medio de una frase.</p>
<p>Si aspira usted a ser un buen conversador, sea un oyente atento. Para ser interesante, hay que interesarse. Pregunte cosas que su interlocutor se complacerá en responder. Aliéntelo a hablar de sí mismo y de sus experiencias.</p>
<h3 id="heading-regla-5-hable-siempre-de-lo-que-interese-a-los-demas">Regla 5. Hable siempre de lo que interese a los demás</h3>
<p>Interésese por los temas que a los demás les interesa, aquello que despierta su entusiasmo. Hablar en términos de los intereses de la otra persona es beneficioso para las dos partes.</p>
<h3 id="heading-regla-6-haga-que-la-otra-persona-se-sienta-importante-y-hagalo-sinceramente">Regla 6. Haga que la otra persona se sienta importante y hágalo sinceramente</h3>
<p>Si somos tan despreciables, por egoístas, que no podemos irradiar algo de felicidad y rendir un elogio honrado, sin tratar de obtener algo a cambio; si nuestras almas son de tal pequeñez, iremos al fracaso, a un fracaso merecido.</p>
<p>Hay una ley de suma importancia en la conducta humana. Si la obedecemos, obtendremos incontables amigos y constante felicidad: Trate siempre de que la persona se sienta importante.</p>
<p>Frases insignificantes, como "Lamento molestarlo", "Tendría usted la bondad de...", "Quiere hacer el favor de...", "Tendría usted la gentileza" o "Gracias"; pequeñas cortesías como éstas sirven para aceitar las ruedas del monótono mecanismo de la vida diaria y, de paso, son la seña de la buena educación.</p>
<h4 id="heading-frases-celebres-2">Frases célebres</h4>
<blockquote>
<p><em>El principio más profundo en el carácter humano es el anhelo de ser apreciaado. William James</em></p>
<p><em>Haz al prójimo lo que quierass que el prójimo te haga a ti</em></p>
<p><em>Hábleles a las personas de ellas mismas, y lo escucharán por horas. -Disraeli (uno de los hombres más astutos que han gobernado el Imperio Británico)</em></p>
</blockquote>
<p>Próximamente la tercera parte...</p>
]]></content:encoded></item><item><title><![CDATA[Resumen Consulting 101  (parte 1)]]></title><description><![CDATA[Si estás iniciando tu camino como consultor o quieres aprender algunos tips relacionados con este rol, aquí te traigo algunas ideas extraídas del libro Consulting 101 de Lew Sauder.
Empezando
Tip #1: Determina por qué quieres ser un consultor

Disfru...]]></description><link>https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-1</link><guid isPermaLink="true">https://theimpostorblog.vacacela.com/resumen-consulting-101-parte-1</guid><category><![CDATA[tips]]></category><category><![CDATA[consultor]]></category><dc:creator><![CDATA[The impostor]]></dc:creator><pubDate>Fri, 17 Nov 2023 07:39:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1700341622505/5015e411-ded0-441d-83dd-3c4da4c6afe5.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Si estás iniciando tu camino como consultor o quieres aprender algunos tips relacionados con este rol, aquí te traigo algunas ideas extraídas del libro <a target="_blank" href="https://www.amazon.com/dp/B00IHOH0JU?ref_=cm_sw_r_kb_dp_R4TMPCGRJ49J9JHQFRJA&amp;tag=erikavacacela-21&amp;linkCode=kpe"><em>Consulting 101 de Lew Sauder</em></a><em>.</em></p>
<h3 id="heading-empezando">Empezando</h3>
<p>Tip #1: Determina por qué quieres ser un consultor</p>
<ul>
<li>Disfrutas resolver problemas, trabajar en equipo, te consideras un buen líder.</li>
</ul>
<p>Tip #2: Determina el tipo de empresa al que quieres unirte</p>
<p>Tip #3: Prepárate para una entrevista</p>
<ul>
<li><p>Pensar bajo presión, pensar lógicamente, resolver problemas sin llegar a estar nervioso o frustrado.</p>
</li>
<li><p>Posibles preguntas, asumir premisas.</p>
</li>
</ul>
<p>Tip #4: Enfócate en el trabajo, no en la compensación</p>
<ul>
<li><p>La estrategia detrás de esto es tener todos los datos posibles, que la empresa se interese en tí. De modo que seas tú el que tome la decisión de aceptar o no el trabajo. Enfócate en preguntar acerca del negocio, procesos, cultura, etc.</p>
</li>
<li><p>Si te enfocas en preguntar sobre el salario, beneficios, lo más probable es que la persona que está contratando se decepcione y no te haga una propuesta.</p>
</li>
</ul>
<p>Tip 5#: Véndete a ti mismo</p>
<ul>
<li>En vez de enfocarte en las tareas que hiciste, enfócate en los beneficios que éstas generaron. Si es posible en términos medibles.</li>
</ul>
<p>Tip #6: Haz tu tarea</p>
<ul>
<li>Antes de una entrevista, es muy importante hacer una investigación de la empresa, que puede incluir: el sitio web, reporte anual, simple búsqueda en Google. Tomo notas de lo que encuentres, y lleva preguntas inteligentes.</li>
</ul>
<p>Tip # 7: Un viaje de negocio no es un viaje de placer</p>
<ul>
<li>Si te preguntan por tu experiencia en viajes de negocios, no te enfoques en tus experiencias personales (turismo, cenas, etc).</li>
</ul>
<h3 id="heading-relaciones-con-el-cliente">Relaciones con el cliente</h3>
<p>Tip #8: Determina cuál es la definición de éxito del cliente</p>
<ul>
<li>Qué es importante para el cliente. Cuál es su visión de éxito. Muchas veces un consultor determina el éxito en base a sus propias métricas que benefician a su empresa: no salir del presupuesto, finalizar a tiempo sin importar que.</li>
</ul>
<p>Tip #9: Enfócate en los intereses del cliente</p>
<ul>
<li>Pensar a largo plazo, teniendo en cuenta los mejores intereses del cliente, en el éxito del cliente. A largo plazo asegura una satisfactoria relación para ambos, el cliente y la empresa.</li>
</ul>
<p>Tip #10: Tu eres un consultor, no el cliente</p>
<ul>
<li>Gran parte del desarrollo de una relación fuerte con el cliente viene dada de muchas pequeñas cosas que un consultor hace en su comportamiento básico diario. Incluso si el cliente muestra una actitud perezosa, el consultor no puede tener el mismo mind-set.</li>
</ul>
<p>Tip #11: Desarrolla una piel gruesa</p>
<ul>
<li><p>No tomarse nada de manera personal (críticas, enojos). Al ser consultor, a veces puede llegar a ser el chivo expiatorio por algo que el cliente no hizo o hizo mal.</p>
</li>
<li><p>Si este tipo de situaciones llegan a ser abusivas, se debe acudir con la empresa que respalda al consultor.</p>
</li>
</ul>
<p>Tip #12: Ten cuidado con los saboteadores silenciosos</p>
<ul>
<li>Identificar si un cliente está teniendo comportamientos que retracen al proyecto, intencional o no intencionalmente.</li>
</ul>
<p>Tip #13: Aprende de los problemas de los clientes antes de resolverlos</p>
<ul>
<li><p>Enfócate en conocer al cliente y su problema sobre mostrar tu experiencia o habilidades.</p>
</li>
<li><p>Un consultor que entiende el problema, puede formular una solución adecuada para el cliente. El cliente gana al conseguir una solución a su problema, y el consultor gana un cliente leal que lo ve como un asesor confiable.</p>
</li>
</ul>
<p>Tip #14: Considérate un forastero</p>
<ul>
<li>Los eventos y actividades de la compañía del cliente a veces pueden incluir a los consultores, pero esto no debe ser asumido. No eres un empleado interno, y no asumas que compartes los mismos beneficios. Asegúrate siempre de conocer tu lugar.</li>
</ul>
<p>Tip #15: No haga quedar mal a la empresa</p>
<ul>
<li>Facilitar la decisión del cliente. Evitar contradicciones, tomar una decisión grupal previamente, y de no llegar a una decisión el miembro con más experiencia decidirá.</li>
</ul>
<p>Tip #16: Podrías ser visto como el enemigo</p>
<ul>
<li>Muchos factores pueden motivar a esto, miedo al cambio, cambios en el negocio, despidos, etc. Un consultor debe ser consciente que estas son preocupaciones del cliente y enfocarse en los beneficios que les traerán los cambios.</li>
</ul>
<p>Tip #17: No te sientas como en casa</p>
<ul>
<li>Actúa como un invitado en la casa del cliente: mantén la voz baja, evita conversaciones polémicas, evitar conversaciones personales (otro ambiente como almuerzo), evitar comer en áreas que no tienen este fin, nunca criticar el negocio del cliente.</li>
</ul>
<p>Tip #18: Evitar el uso de internet para fines personales</p>
<ul>
<li>Hoy más que nunca las empresas monitorean el uso de internet, bloqueando contenido inadecuado. Usa el internet del cliente para propósitos legítimos del negocio.</li>
</ul>
<p>Tip #19: Evitar actividades personales</p>
<p>Tip #20: No usar los recursos del cliente para usos personales</p>
<p>Tip #21: Los empleados de los clientes tienen sus propios trabajos que hacer</p>
<ul>
<li>Se respetuoso con el tiempo de los involucrados. Evitar reuniones que involucre a todo el equipo de no ser necesario, proveer una agenda y proveer información de los miembros que son críticos.</li>
</ul>
<p>Tip #22: Mantén informada a la dirección del cliente</p>
<ul>
<li>Establecer expectativas al inicio del proyecto. Definir el nivel de involucramiento que el cliente tendrá en cada etapa del proyecto, asistencia a reuniones, aprobación de agendas, etc.</li>
</ul>
<p>Tip #23: No alardee de los gastos de los clientes</p>
<p>Tip #24: Pierde la batalla, gana la guerra</p>
<ul>
<li><p>Cuando de malos entendidos se trata, es mejor dar un paso atrás y ver el cuadro completo, y determinar cuáles son los efectos a largo plazo. El jefe del proyecto te puede dar una mejor perspectiva del tiempo y recursos que tomará arreglar un problema.</p>
</li>
<li><p>Ser terco rara vez te ayuda a ganar una discusión o a mejorar la relación con el cliente.</p>
</li>
</ul>
<p>Tip #25: Conozca la política de regalos del cliente</p>
<ul>
<li>La mayoría de empresas tiene políticas de regalos, como no aceptar regalos desde cierto umbral o ninguno en absoluto.</li>
</ul>
<p>Tip #26: Proteja la confidencialidad del cliente</p>
<ul>
<li>La mejor práctica es asumir que toda la información del cliente es secreta, a menos que la veas en su sitio web.</li>
</ul>
<p>Tip #27: Balancea los estándares de consultoría y los del cliente</p>
<ul>
<li>Las consultorías tienen sus metodologías, estándares y templates para proveer un mejor servicio a los clientes. Sin embargo, los clientes tienen sus recursos propios. Los recursos podrían necesitar modificarse para cumplir con las especificaciones del cliente.</li>
</ul>
<p>Tip #28: Respeta el horario de trabajo del cliente</p>
<p>Tip #29: Mantener la calma incluso cuando el cliente no</p>
<ul>
<li>No dejarse contagiar por la tensión o la emoción. Intentar difuminar la situación en vez de intercambiar gritos o insultos. Enfóquese con una actitud de resolvedor de problemas.</li>
</ul>
<p>Tip #30: No alardees de las ventajas de la consultoría</p>
<p>Tip #31: Considerate un líder, deja que otros usen esa etiqueta</p>
<p>Tip #32: Sea consciente de los efectos de su imagen pública</p>
<ul>
<li>Ser consciente que al exponer públicamente ideas controversiales, sus clientes serán testigos de ello.</li>
</ul>
<p>Tip #33: Vestir de acuerdo con las normas del cliente o superarlas</p>
<p>Tip #34: Comprender los matices de la percepción del cliente</p>
<ul>
<li><p>Un gran componente de la consultoría no es tanto lo que dices, sino cómo lo dices y cómo es percibido por el cliente.</p>
</li>
<li><p>Cuando las cosas vayan mal, enfócate en los pasos siguientes a tomar para resolver el problema en vez de insistir en éste o a quién culpar.</p>
</li>
</ul>
<p>Tip 35#: Controla tus emociones</p>
<ul>
<li>Las empresas de consultoría reclutan personas con ciertas habilidades y teniendo expectativas de las mismas, como: aprender conceptos complejos rápidamente, que perseveren, incluyendo la habilidad de lidiar con problemas personales sin que éstos interfieran en las responsabilidades de consultoría.</li>
</ul>
<p>Tip 36#: Cualquier cosa que hagas puede afectar tu imagen con el cliente</p>
<ul>
<li>No preocuparse por lo que piensen los demás no aplica en consultoría. Hacer una actividad de trabajo de manera muy informal puede dar la impresión de que el cliente está pagando por actividades que no agregan valor.</li>
</ul>
<p>Tip 37#: Representa a la consultora en cada encuentro con el cliente</p>
<ul>
<li>Evita soltar la lengua cuando haya encuentros con el cliente fuera de horario. O cuando se desarrolla una amistad.</li>
</ul>
<p>Tip 38#: Promociónate dentro de la empresa (consultora)</p>
<ul>
<li>Si tienes un buen historial de entrega de proyectos, asegúrate de que tus capacidades sean conocidas por el personal que asigna miembros a nuevos proyectos.</li>
</ul>
<p>Tip 39#: Desarrolla múltiples competencias complementarias</p>
<ul>
<li>Relacionadas con el proyecto, de modo que sea más fácil entender términos y procesos.</li>
</ul>
<p>Hasta aquí el resumen de la primera parte.</p>
]]></content:encoded></item></channel></rss>