<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
                        <id>https://jok3r.site/feed</id>
                                <link href="https://jok3r.site/feed"></link>
                                <title><![CDATA[Todos los post de mi blog]]></title>
                                <description></description>
                                <language>es-MX</language>
                                <updated>Wed, 22 May 2024 14:24:05 -0600</updated>
                        <entry>
            <title><![CDATA[Configurando mi terminal en Macbook Pro]]></title>
            <link rel="alternate" href="https://jok3r.site/post/configurando-mi-terminal-en-macbook-pro" />
            <id>https://jok3r.site/10</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<div>Hace unos días, adquirí una nueva MacBook Pro con M3 Pro y actualmente estoy inmerso en el proceso de configuración. Mientras navego por esta configuración, me encuentro reflexionando sobre si las cosas se están volviendo más sencillas debido a la creciente prevalencia de la virtualización y los servicios en la nube.</div><div><br></div><div>Recuerdo vívidamente los días en que configurar un entorno de desarrollo implicaba instalar versiones específicas de PHP, lidiar con las complejidades de gestionar múltiples versiones y luchar con las bases de datos. Avanzamos rápidamente hasta hoy, y es tan simple como descargar una imagen de Docker, ya sea PHP 7, PHP 8, Python o cualquier otro lenguaje de tu elección, todo ordenadamente empaquetado en un hermoso contenedor.</div><div><br></div><div>Sin embargo, en medio de este panorama en constante evolución, hay algo que permanece constante en mi caso: mi terminal. Aunque reconozco que los usuarios de IDE, como aquellos que confían en VSCode o PhpStorm, tienen sus terminales integradas, aún encuentro consuelo en la familiaridad de mi terminal independiente, con sus colores y su personalización.</div><div><br></div><div>Pero basta de recordar el pasado; concentrémonos en el presente.</div><div><br></div><blockquote class="blockquote"><b>Mi Viaje de Configuración: Manteniéndolo Sencillo</b></blockquote><div><br></div><div>Para comenzar, el primer paso en mi configuración es instalar Homebrew:</div><div><br></div><pre>xcode-select --install</pre><div><pre>/bin/bash -c "$(curl -fsSL <a href="https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;" target="_blank">https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</a></pre></div><div><br></div><div>Homebrew, el administrador de paquetes para macOS, es una herramienta fundamental que agiliza el proceso de instalación, actualización y gestión de software. Con Homebrew en su lugar, estoy listo para emprender una experiencia de desarrollo eficiente y simplificada en mi nueva MacBook Pro.</div><div><br></div><div>* ProTip: recuerda instalar el <b>XCode desde el AppStore</b></div><div><br></div><div>Y ahora toca instalar el iTerm2:</div><div><br></div><pre>brew install --cask iterm2</pre><br><blockquote class="blockquote"><p><b>ZHS y Oh My ZSH</b></p></blockquote><div><div>Ahora que hemos decidido mejorar nuestra experiencia en la terminal, el siguiente paso es instalar ZSH y Oh My Zsh. Si eres como yo, y en algún momento te preguntaste "¿Qué es todo este alboroto sobre ZSH y Oh My Zsh?", permíteme explicarte de manera concisa.</div></div><div><br></div><div>ZSH, que significa Z Shell, es un potente shell de Unix que lleva las características del shell más común, Bash, a un nivel superior. ¿Por qué deberías considerar usar ZSH? Ofrece mejoras significativas en autocompletación, manipulación de archivos y otras funcionalidades que hacen que la interacción con la terminal sea mucho más eficiente.</div><div><br></div><div>Oh My Zsh, por otro lado, es como el mejor amigo de ZSH. Es un marco de configuración diseñado para hacer que la configuración de ZSH sea fácil y agradable. Piénsalo como la cereza del pastel de tu terminal. <br>Ahorra tiempo y esfuerzo al proporcionar una serie de configuraciones predeterminadas y mejoras adicionales que pueden ser personalizadas según tus necesidades.</div><div><br></div><div>La instalación, que es más fácil de lo que podrías pensar. Aquí tienes los comandos para instalar tanto ZSH como Oh My Zsh:</div><div><br></div><pre>brew install zsh</pre><pre>sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"&nbsp;</pre><div><br></div><blockquote class="blockquote"><b>¡Felicidades por llegar a la fase de tuneo de tu terminal! </b></blockquote><div><br></div><div>Aquí es donde realmente puedes hacer que tu espacio de trabajo sea único y refleje tu estilo. A continuación, te proporcionaré algunas sugerencias para fuentes, colores y plugins que pueden llevar tu configuración al siguiente nivel.</div><div><br></div><div>Para un toque profesional y lleno de iconos, te recomiendo usar <a href="https://www.nerdfonts.com/" target="_blank">Nerd Fonts</a>. Estas fuentes están parchadas para incluir una amplia variedad de iconos que pueden mejorar tu experiencia en la terminal. Aquí tienes cómo instalarlo:</div><div><br></div><pre>brew tap homebrew/cask-fonts</pre><pre>brew install font-{nombre-de-la-fuente}</pre><div>Luego, abre iTerm2, y accede a las preferencias presionando <span style="background-color: rgb(247, 247, 247);"><b>"cmd+,"</b></span> , selecciona <span style="background-color: rgb(247, 247, 247);">&gt; Profile</span>, y dentro de <span style="background-color: rgb(247, 247, 247);">&gt; Text</span>, elige tu nueva fuente y ¡Voilà!</div><div><br></div><div>Para personalizar los colores de tu terminal, <a href="https://gogh-co.github.io/Gogh/" target="_blank">Gogh</a> es una excelente opción. Visita su web y elige el esquema de colores que más te guste recuerda el nombre. Luego, ejecuta el siguiente comando:</div><div><br></div><pre>bash -c&nbsp; "$(curl -sLo- https://git.io/vQgMr)"&nbsp;</pre><div>Te mostrará una lista con el id, seguido del nombre, solo introduce el número del que quieres y da enter. </div><div>Y ahora vuelve a abrir las preferencias de&nbsp;iTerm2 y ve a&nbsp;<span style="background-color: rgb(247, 247, 247);"><b> Profiles &gt; Colors &gt; Color Presets...</b></span></div><div><br></div><blockquote class="blockquote"><b>Plugins y Configuraciones Adicionales</b></blockquote><div><br></div><div>Ahora es el momento de añadir algunos plugins para mejorar la funcionalidad de tu terminal. Puedes explorar opciones como <b><a href="https://github.com/zsh-users/zsh-syntax-highlighting" target="_blank">zsh-syntax-highlighting</a></b> para resaltar la sintaxis y <a href="https://github.com/wting/autojump" target="_blank"><b>autojump</b></a> para navegar rápidamente entre directorios.</div><div><br></div><div>¡Y eso es todo! Ahora tu terminal esta pimpeada y lista para impresionar. ¡No olvides compartir capturas de pantalla en los comentarios y mostrar tu configuración única! Si tienes alguna pregunta, ¡estoy aquí para ayudar!</div><div><br></div><div><img src="https://admin.jok3r.site/storage/post/10/txt680Osl7yh5PZo2vChjtzRHWmgq562j6mtDtau.png" style="width: 100%;"><br></div>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Mon, 25 Dec 2023 12:54:09 -0600</updated>
        </entry>
            <entry>
            <title><![CDATA[SetUp Android Studio en Apple Silicon A.K.A M1]]></title>
            <link rel="alternate" href="https://jok3r.site/post/setup-android-studio-en-apple-silicon-aka-m1" />
            <id>https://jok3r.site/9</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pues hoy es 31 de Diciembre del 2021, a unos minutos de que termine el año y pasemos al 2022, me dio por querer aprender kotlin y hacer apps para android, por qué? ... Buena pregunta, no sé solo me llamo la atención, quiero ser un dev más full stack 😛, y a veces en proyectos personales o freelances me gustaría poder armar todo el ciclo por mi mismo.&nbsp;</p><p>Bueno vamos a los pasos que he seguido para poder ejecutar el Hola Mundo con un emulador de Android en mi Mac M1.</p><p><b><span style="font-family: &quot;Lucida Grande&quot;;">#Paso I&nbsp;</span></b></p><p>Pues descargar el android studio, en un curso de kotlin básico que ando tomando me han recomendado bajar el&nbsp;IntelliJ IDEA community, pero la verdad para poder ejecutar el emulador lo hice con android studio y pss básicamente es lo mismo. Puedes descargar <a href="https://developer.android.com/studio?hl=es-419" target="_blank">aquí</a>.</p><p><b><span style="font-family: &quot;Lucida Grande&quot;;">#Paso II</span></b></p><p>La típica&nbsp;<i>apple installation</i>, y luego el <i>next, next finish</i>, deberán ver una pantalla como esta.&nbsp;</p><p><img src="https://admin.jok3r.site/storage/post/9/0cOEbA2OE3WOU3Bl7aBJvuGBY0uvLlAjpLEn63wv.png" style="display: block; margin-left: auto; margin-right: auto; width: 50%;"><b><span style="font-family: &quot;Lucida Grande&quot;;">#Paso III</span></b></p><p>Ahora para probar y hacer jalar lo del emulador, le damos en &gt;New Project, y yo elegí el ejemplo de&nbsp;Bottom Navigation Activity, le damos al Next.&nbsp;<br>Y en la siguiente pantalla verificamos que el Language sea <b>Kotlin</b> y en el Minium SDK : <b>API 30 Android 11</b>, en caso que no tuvieran un sdk instalado les mostrará un pop-up para que instalen. Y le damos al finish.</p><p>Deberían ver algo similar a esto.&nbsp;</p><p><img src="https://admin.jok3r.site/storage/post/9/I4EXJLxPJbszdTn4fzQ2b7ZiJmtgAC2ItEb0mF9I.png" style="display: block; margin-left: auto; margin-right: auto; width: 50%;"><br></p><p>Ahora en la esquina superior izquierdo centro, hay una pequeña como martillo, que es para compilar, le picamos, puede que les marque error como a mí, algo así.&nbsp;</p><p><img src="https://admin.jok3r.site/storage/post/9/zK8s39sI2K33GrpnxmhJBWr7NZGD7PEPbrMRDMf7.png" style="display: block; margin-left: auto; margin-right: auto; width: 50%;"><br></p><p>So, habrá que ir al menú <i>Tools</i> &gt; <i>SDK Manager</i>.&nbsp;<br>Ahí elegir el correspondiente (aka lo importante por que me paso es que yo puse primero el x86, y deben elegir el de arquitectura arm64)</p><p><img src="https://admin.jok3r.site/storage/post/9/07MA5fVq0audi4TuhTXuyiYh2nJIiwrOICZGwbCc.png" style="display: block; margin-left: auto; margin-right: auto; width: 50%;"></p><p>Y con esto básicamente estamos <i>ready</i>, vuelven a darle al botón de compilar y todo debería ir viento en popa, y por ultimo le pican al triangulito verde, que es como de <i>play</i>, y <i>voila</i>.</p><p><img src="https://admin.jok3r.site/storage/post/9/8qchJt4EGZ1bBJ0Q5M7PgdopuSbs2dCHQPq1u2A6.png" style="display: block; margin-left: auto; margin-right: auto; width: 681px;"><br></p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Wed, 22 May 2024 14:24:05 -0600</updated>
        </entry>
            <entry>
            <title><![CDATA[¡Errors, Links e Included!]]></title>
            <link rel="alternate" href="https://jok3r.site/post/errors-links-e-included" />
            <id>https://jok3r.site/8</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>En este apartado, supondré que claramente ya saben que es la especificación <a href="https://jok3r.site/post/una-especificacion-para-construir-apis?ref=thirdPost" target="_blank">JSON:API</a> y&nbsp; conocen el <a href="https://jok3r.site/post/jsonapi-el-objeto-data?ref=thirdPost" target="_blank">objeto data</a>. Así que si no lo han hecho deberían hacerlo!. Sin más en este ultimo post analizaremos los objetos faltantes siendo:&nbsp;</p><blockquote class="blockquote">Errors<br>Links<br>Included</blockquote><h3 style="font-family: Poppins, sans-serif; color: rgb(0, 0, 0);">#Errors</h3><p>Posiblemente el segundo miembro más importante después de data, es <i>errors</i>. Ya que contiene como su nombre lo indica, todos los objetos de error y debe ser un array.</p><p><img src="https://admin.jok3r.site/storage/post/8/ibq755l0AuNwLZtKmMaYFQFX5JXaWuso3bQxftor.jpeg" style="width: 100%;"><br></p><p>Como observamos en la imagen la estructura, seré breve explicado cada uno de los key's, empezando por:&nbsp;</p><p><b>status</b> se recomienda usar un status http que haga referencia a el <b>title</b> del error, si no saben todos los estatus http, denle click&nbsp;<a href="https://httpstatuses.com/" target="_blank">a.k.a.&nbsp;</a></p><p>El <b>detail</b> puede ser una breve descripción de qué causa el error y el <b>source</b> que es un objeto que apunta al lugar dentro del documento que contiene dicho error.&nbsp;</p><p>De igual manera se puede utilizar otros miembros como <i>links</i>, meta, pero nunca data cuando se devuelve <i>errors</i>.</p><h3 style="font-family: Poppins, sans-serif; color: rgb(0, 0, 0);">#Links</h3><p>Por lo general este contiene los enlaces de una paginación, y es común complementar con el objeto meta para enviar más info relevante.</p><p><img src="https://admin.jok3r.site/storage/post/8/wwEynBZr8I8vhUutUFjsvWkY7ycqpJ27EB0dFeby.png" style="width: 100%;"><br></p><h3 style="font-family: Poppins, sans-serif; color: rgb(0, 0, 0);">#Includes</h3><p>Como recordaran dentro del Resources Object, en <a href="https://jok3r.site/post/jsonapi-el-objeto-data#relationships" target="_blank">relationships</a>&nbsp;si mostramos el miembro <i>links</i> sería para conocer los url para manipular la relación y acceder a los datos de la misma, si quisiéramos incluir los datos y/o atributos de la relación es dónde usamos <b>included</b>, el cual contiene todos los <i>Resources Object</i>, que están relacionados con los datos primarios, y se le conoce como <i>Compound Document</i>.</p><p><img src="https://admin.jok3r.site/storage/post/8/qVbRWSeqdOFiO0ohQ7PyuXkMi6j62b0hQOXP3vkL.jpeg" style="width: 100%;"><br></p><p>Esto es una breve explicación de los elementos que forman parte de una respuesta con la especificación JSON:API, si tienen dudas comentarios, dejen sus comentarios, igual siempre es bueno consultar la documentación oficial.&nbsp;</p><p>~Happy Coding</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Sat, 20 Jun 2020 08:16:37 -0500</updated>
        </entry>
            <entry>
            <title><![CDATA[JSON:API, el objeto data]]></title>
            <link rel="alternate" href="https://jok3r.site/post/jsonapi-el-objeto-data" />
            <id>https://jok3r.site/7</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p></p><p>Para leer este post el único requisito es que lean mi post anterior, ya que esto es la continuación de. Les dejo aquí el <a href="https://jok3r.site/post/una-especificacion-para-construir-apis" target="_blank">link</a>.</p><p>Bien, pues sin más rodeo continuemos, el elemento por el que empezaremos en <b>Data</b>, ya que es el más importante pues contiene la información principal del documento.</p><p><img src="https://admin.jok3r.site/storage/post/7/aRq2R96KItvKzwQXqipu4TUrT6tF7hsMw01hy13X.png" style="width: 100%;"></p><p>En caso de tener 1 solo registro puede ser un objeto o un array de objetos si se obtienen varios registros. O bien según sea el caso puede ser <i>null</i> o un <i>array</i> vacío.</p><p>A cada uno de estos objetos se le conoce como <i>Resource Object</i>, y lo que debe contener cómo se aprecia en la imagen es un tipo y un identificador por mínimo y ambos valores deben ser <i>strings</i>. Si solo contiene lo mínimo requerido, se le conoce como un&nbsp;<i>Resource <b>Identifier</b> Object</i>, ya que solo sabemos que es el <i>customer</i> con id 1. Adicionalmente puede contener:&nbsp;</p><blockquote class="blockquote">attributes<br>relationships<br>links<br>meta</blockquote><p>Veamos cómo se forma cada uno.</p><h3>#Attributes</h3><p><img src="https://admin.jok3r.site/storage/post/7/krt8M0256y4wrb7sftpUqoCXCGB8KCgYzxoEbOMV.png" style="width: 100%;"></p>El campo <i>attribute</i> debe ser un objeto con los atributos del recurso.<p></p><p></p><h3><a id="relationships">#Relationships</a></h3><p><img src="https://admin.jok3r.site/storage/post/7/lKBB7to7C8iwxJY7c2de7vH62FuU1tZhw6x4Jpd3.png" style="width: 100%;"></p><p>El campo <i>relationships</i> que contiene las relaciones, y cómo podemos ver cada elemento es el tipo de recurso y dentro debe existir al menos uno de los 3 elementos. </p><p>En <i><b>data</b></i> tenemos los objetos identificadores de recurso, pero no tenemos los atributos, esto con el fin de mantener el peso de las respuesta y si el cliente necesita esos recursos, ya sabrá cual es el id.<br><i><b>Links</b></i> es un objeto que contiene al menos uno de estos elementos, <i>self</i> / <i>related</i>. <i>Self</i> es un enlace para la relación en si, este permite manipular directamente la relación. <i>Related</i> es el enlace al recurso relacionado, nos devolverá dentro del elemento <i>data</i> el <i>resource object</i> de <i>Address</i>, en este caso.<br>Por último <i><b>Meta</b></i> es cualquier información adicional que se quiera dar.</p><p><img src="https://admin.jok3r.site/storage/post/7/t4pAzBGZ3lpHw6B7OhFVzdtTDsRu0lGs9EjjHmiz.png" style="width: 100%;"><br></p><p>Recapitulando, este es el resource object y los elementos que puede contener, recordemos que <b>obligatorios</b> solo son el <b>type</b> y el <b>id</b> y el resto son opcionales.</p><p>Listo, hemos visto la estructura de <i>Data</i>, en el post pasada les hable de <i>meta</i> y <i>jsonapi</i> que son bastante sencillos. Así que veamos <i>links</i>.&nbsp; En el siguiente post por que esto ya se extendió.</p><p>~Happy Coding</p><p></p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Tue, 18 Jan 2022 21:52:51 -0600</updated>
        </entry>
            <entry>
            <title><![CDATA[Una especificación para construir API&#039;s]]></title>
            <link rel="alternate" href="https://jok3r.site/post/una-especificacion-para-construir-apis" />
            <id>https://jok3r.site/6</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><i>Ma boys 'n girls</i>, hoy les quiero hablar de <strike>nuestro Elohim</strike>, perdón canal equivocado, quiero escribir sobre la especificación <a href="https://jsonapi.org/" target="_blank">JSON:API</a>.&nbsp;</p><h3>¿Qué es JSON:API Spec?</h3><p>Es una especificación de cómo un cliente debe solicitar que se busquen o modifiquen recursos, y cómo un servidor debe responder a estas peticiones. Esto con el fin de mantener un estándar.&nbsp;</p><h3>Pero, ¿Por qué utilizarlo?</h3><p>Empecemos por un caso que estoy viviendo en mi trabajo actual, es un caos, como hay servicios que aún se están desarrollando, la respuesta no mantiene la estructura, no hay un estándar, el front no sabe que esperar, todo lo malo es un 400 y todo lo bueno es un 200. </p><p>Aquí van algunos puntos de por qué la vida sería más fácil al usar esta especificación.</p><ul><li>Convención<ul><li>Al tener reglas preestablecidas, tanto front como back se pueden desarrollar en paralelo. Ya que estamos seguros de que formato tendrán las peticiones y las respuestas.</li></ul></li><li>Eficacia en el desarrollo<ul><li>Al no tener que crear tu propia convención, solo queda enfocarse en la lógica de negocio.</li></ul></li><li>Herramientas<ul><li>Existen muchas que nos facilitan el&nbsp;adherirnos a la especificación tanto para consumir como para crear. <a href="https://jsonapi.org/implementations/" target="_blank">Aquí </a>&nbsp;puedes checar las implementaciones en diferentes lenguajes y frameworks.</li></ul></li></ul><p>Todo esto ayuda a tener buenas prácticas y claro un software de mejor calidad.</p><p>Pero bueno, dejemos de tanto dato duro, y veamos la estructura de un documento. Como documento sabe' que me refiero al cuerpo de una petición o respuesta no? 😜</p><p><img src="https://admin.jok3r.site/storage/post/6/BWEWD7ce7kgRyaNBJxmPhdwwTipJKi5BABXqp8Qx.png" alt="JSON:API estructura" style="width: 100%;"><br></p><p>Tanto el API con el cliente debe ignorar cualquier otro miembro que no se contemplen aquí. Sin embargo esto no quiere decir que siempre deban existir todas estas llaves en el documento.
</p><p><img src="https://admin.jok3r.site/storage/post/6/IKf0u7IatZouJRlRB0EcAJu3Wm4mdwu14CYYLvKf.png" alt="JSON:API estructura requerida" style="width: 100%;"><br></p><p>Esto es bastante claro, si la respuesta es correcta se devuelve <i>'<b>data</b>'</i>, si por el contrario contienen errores entonces traerá <i>'<b>errors</b>'</i>, pero nunca ambas al mismo tiempo.&nbsp;</p><p>El miembro <i>'<b>meta</b>'</i>, básicamente es para cualquier información adicional que deseemos incluir.<br>'<b>jsonapi</b>' es un objeto que contiene la versión del API, si no se envía se asume que es la versión es la 1.0</p><p>Aún queda explicar el resto de llaves, y profundizar en data, ya que este es el miembro más importante por que contiene la información principal del documento. Y otros detalles, pero para no extenderme más lo escribiré en un segundo y posible tercer post.&nbsp;</p><p>Si ustedes son impacientes lean la especificación JSON:API y comenten sus experiencias si ya han usado esta o las complicaciones que han vivido al no usar algún estándar.</p><p>~Happy Coding</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Wed, 10 Jun 2020 20:57:58 -0500</updated>
        </entry>
            <entry>
            <title><![CDATA[Inicializar proyecto con Blueprint]]></title>
            <link rel="alternate" href="https://jok3r.site/post/inicializar-proyecto-con-blueprint" />
            <id>https://jok3r.site/5</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Hace ya varios años que llevo usando laravel como framework PHP preferido y la verdad es que siempre aprendo algo nuevo con este. Hoy me encuentro desarrollando un API más y conocí un nuevo paquete que me a ayudado a facilitar más las cosas.&nbsp;</p><p><a href="https://github.com/laravel-shift/blueprint" target="_blank">Blueprint</a>&nbsp;es una herramienta que nos ayudará a generar múltiples componentes de Laravel a partir de un archivo legible por cualquier hobbit de nuestra comarca.</p><p>Instalar este paquete es muy sencillo, una vez en nuestro proyecto de laravel, en terminal ejecutamos:&nbsp;<br></p><pre>$ <span style="color: rgb(231, 99, 99);">composer</span> <span style="color: rgb(107, 165, 74);">require</span> <span style="color: rgb(107, 173, 222);">laravel-shift/blueprint --dev</span><br>$ <span style="color: rgb(231, 99, 99);">php</span> <span style="color: rgb(107, 165, 74);">artisan</span> <span style="color: rgb(107, 173, 222);">vendor:publish</span>&nbsp;</pre><p>Explico brevemente, el primero es para agregar el paquete a nuestro proyecto solo cuando estamos en desarrollo, el segundo es para publicar la configuración de paquetes, (nos agregar un archivo dentro de la carpeta config); en este paso hay que elegir el paquete del que queremos la configuración vean mi captura de pantalla.</p><p><img src="https://admin.jok3r.site/storage/post/5/SQHDpNvcbAezZrvBVmpiWSCuldqSFm84hV5FNtfG.png" style="width: 100%;"></p><p>Cómo pueden observar al ejecutar el <i>vendor:publish</i> podremos elegir en este caso la 10 es la de blueprint.</p><p>Ahora editamos el archivo que nos creo en config, blueprint.php con los siguientes valores.</p><blockquote class="blockquote">'models_namespaces' =&gt; 'Models<span style="font-size: 0.9em; display: inline !important;">'<br>'use_constraints' =&gt; true<br>'use_guarded' =&gt; true</span><br></blockquote><p>Ahora explico rápido, el <i>models_namespaces</i> es opcional, para este caso en mi proyecto si quiero tener los modelos dentro de un folder.&nbsp;</p><p>El <i>constraints</i> es creo lógico sirve para que si nos agregue los&nbsp;<span style="font-size: 14.4px; display: inline !important;"><i>constraints</i> de las llaves foraneas. Y el <i>guarded</i> para que al crear los modelos la propiedad sea un array&nbsp;</span><span style="display: inline !important; font-size: 14.4px;"><font color="#555555">vacío.</font></span></p><p><span style="display: inline !important; font-size: 14.4px;"><font color="#555555">Ahora sí viene lo chedo! Blueprint es tan sencillo de usar como crear un archivo en la raíz de nuestro proyecto llamado draft.yaml.</font></span></p><p><span style="display: inline !important; font-size: 14.4px;"><font color="#555555">Les dejo un ejemplo en este <a href="https://gist.github.com/jok3rcito0/f182d771bdc51435188534d55a569314" target="_blank">link</a> para que se lo puedan bajar, revisar.&nbsp;Creo que será muy fácil de entender. Una vez que lo tengan listo pueden ejecutar el siguiente comando&nbsp;</font></span></p><pre><span style="display: inline !important; font-size: 14.4px;"><font color="#555555">$ </font><span style="color: rgb(231, 99, 99);">php</span><font color="#555555"> </font><span style="color: rgb(107, 165, 74);">artisan</span><font color="#555555"> </font><span style="color: rgb(107, 173, 222);">blueprint:build</span></span></pre><p>Y como por arte de magia,</p><p><img src="https://admin.jok3r.site/storage/post/5/EWYij6STDo95HrN4Fby67ipAKnL0ukPomBe47nvH.png" style="width: 100%;"><br></p><p>se genera todo, como podrán observar en el yaml que les deje, en los id no es necesario especificar que son llave&nbsp; foranea por que cambiamos el constraint a true en el config.</p>Listo, recuerden que podemos crear tambien el este archivo los controladores y cada metodo con reglas de validación, o crear el resource completo, les recomiendo lean la <a href="https://blueprint.laravelshift.com/" target="_blank">documentación del paquete</a> y cualquier duda pueden dejarla en los comentarios y espero poder ayudar.<p>
</p><blockquote class="blockquote">Pro tip usen phpstorm vayan al modelo User, click derecho &gt; Refactor &gt; move class y listo elegimos la carpeta models, checamos que esten marcados los checkboxes y le damos a &lt;do refactor &gt;</blockquote><p></p><p>~Happy coding</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Wed, 10 Jun 2020 05:49:04 -0500</updated>
        </entry>
            <entry>
            <title><![CDATA[Crear alias en la terminal]]></title>
            <link rel="alternate" href="https://jok3r.site/post/crear-alias-en-la-terminal" />
            <id>https://jok3r.site/4</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Hace unos días empece un nuevo proyecto, donde estoy creando un API con las especificación&nbsp;<a href="https://jsonapi.org/" target="_blank">JSON:API</a>&nbsp;en laravel. Y si ustedes son un poco como yo, usan lo más que se pueda la terminal, por qué nos hace ver más pro que usar las&nbsp;<i>gui</i>, no?&nbsp;</p><p>Pero a veces recordar muchos comandos con sus parámetros puede ser tedioso, entonces para agilizar la ejecución de algunos comandos recurrentes hice lo siguiente.</p><p>Recuerden que para esta receta, necesitan una terminal y que su OS este basado en <a href="https://es.wikipedia.org/wiki/Unix" target="_blank">unix</a>.&nbsp;</p><p>Primer paso abrimos la terminal y vamos a nuestra carpeta raíz [<span style="font-size: 0.9em; display: inline !important;"><b>cd&nbsp; ~/</b>], ahora creamos un archivo llamado .bash_profile (este muy seguramente no existe).&nbsp; Dentro de este creamos con la siguiente estructura tantos alias como queramos.</span></p><p><b>alias [alias_del_comando]='[comando]'</b></p><blockquote class="blockquote">alias es la palabra reservada, y lo que viene en corchetes es lo que remplazaremos.&nbsp;</blockquote><p>Ya que terminamos de agregar nuestros alias, guardamos y ejecutamos</p><pre>$&nbsp;<span style="color: rgb(231, 99, 99);">source</span> <span style="color: rgb(107, 173, 222);">.bash_profile</span></pre><p>Para poder ver los efectos de nuestros alias, o cierren y abran la terminal 😝.&nbsp;</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Sun, 24 May 2020 03:17:14 -0500</updated>
        </entry>
            <entry>
            <title><![CDATA[Capturas de pantallas en MacOs]]></title>
            <link rel="alternate" href="https://jok3r.site/post/capturas-de-pantallas-en-macos" />
            <id>https://jok3r.site/3</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Amigos les cuento que esta cuarentena me a hecho tomar más <i>screenshots</i> de las que me gustaría, lo que le quita protagonismo a mis geniales fondos de pantalla. Y eso no me gusta, ustedes no sienten como que el desorden provoca flojera?&nbsp;</p><p>Bueno hoy si usan MacOs les mostraré el cómo cambiar el nombre por defecto las capturas de pantalla y elegir otra destino que no sea el escritorio, obvio de una manera pro, utilizando nuestra terminal.&nbsp;</p><pre>$ <span style="color: rgb(231, 99, 99);">defaults</span> <span style="color: rgb(107, 165, 74);">write</span> <span style="color: rgb(255, 231, 156);">com</span><span style="color: rgb(231, 99, 99);">.apple.screencapture</span> <span style="color: rgb(255, 231, 156);">name</span> <span style="color: rgb(107, 173, 222);">"capture"</span><br></pre><p>El primer comando lo que hará es cambiar el nombre a capture, en versión actuales de MacOS el sufijo de fecha se quedará.&nbsp;</p><p>Ahora para mover a otra carpeta hice el siguiente movimiento.</p><pre>$ <span style="color: rgb(231, 99, 99);">mkdir</span> <span style="color: rgb(107, 173, 222);">~/Pictures/screens</span> <br>$ <span style="color: rgb(231, 99, 99);">defaults</span> <span style="color: rgb(107, 165, 74);">write</span> <span style="color: rgb(255, 231, 156);">com</span><span style="color: rgb(231, 99, 99); background-color: inherit;">.apple.screencapture</span> <span style="color: rgb(255, 231, 156);">location</span> <span style="color: rgb(107, 173, 222);">~/Pictures/screens&nbsp;</span></pre><p>No olvides reiniciar el UI, para que todo lo anterior tenga efecto</p><pre style="font-size: 14px;">$ <span style="color: rgb(231, 99, 99);">killall</span> <span style="color: rgb(255, 231, 156);">SystemUIServer</span></pre><p>Y listo con eso ahora mi escritorio luce más limpio.&nbsp;</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Sun, 24 Dec 2023 23:46:16 -0600</updated>
        </entry>
            <entry>
            <title><![CDATA[Se potencia el trabajo remoto?]]></title>
            <link rel="alternate" href="https://jok3r.site/post/se-potencia-el-trabajo-remoto" />
            <id>https://jok3r.site/2</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p></p><p>La pandemia ha traído muchos cambios a nuestra forma de vivir e interactuar, uno de ellos es el trabajo remoto. </p><p>

Si bien, trabajar de manera remota no representa una novedad, el confinamiento ha presentado una oportunidad única para probar su validez en ciertas áreas donde es viable y no se requiere de presencia física. </p><p>Hoy tras dos meses de trabajo remoto el CEO de <a href="https://twitter.com/" target="_blank">twitter</a> Jack Dorsey, anunció que sus trabajadores podrán seguir trabajando desde casa si así lo desean, incluso después de que finalice el confinamiento y se pueda volver a las oficinas. [<a href="https://blog.twitter.com/en_us/topics/company/2020/keeping-our-employees-and-partners-safe-during-coronavirus.html" target="_blank">Ver original</a>]</p><p>No es la primera vez que Jack Dorsey deja ver algo por el estilo. En febrero de este año precisamente comentó que concentrar a sus trabajadores en las oficinas de San Francisco ya no les era útil.&nbsp;</p><h3 style="text-align: center; ">¡Otras empresas que ya habían dado el paso!</h3><span style="color: rgb(85, 85, 85); font-size: 14.4px; display: inline !important;"></span>
<p></p><p>Si bien este movimiento de Twitter es un gran paso para el <i>home office</i>, no es empresa pionera en ello.</p><p>Empresas como <b>WordPress</b>, los cuales cerraron sus oficinas en 2017 para trabajar completamente en remoto. Otras empresas como <b>Gitlab</b> y <b>Basecamp</b>, además de que todo el mundo trabaja remotamente, promueven encarecidamente este método de trabajo.&nbsp;<br></p><p>Si no me creen, chequen este libro de Basecamp <a href="https://basecamp.com/books/remote" target="_blank">REMOTE: Office Not Required.&nbsp;</a></p><p>Ustedes que opinan, creen que cada vez esto sea más común?</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Mon, 18 May 2020 12:40:00 -0500</updated>
        </entry>
            <entry>
            <title><![CDATA[Laracon Online 2020]]></title>
            <link rel="alternate" href="https://jok3r.site/post/laracon-online-2020" />
            <id>https://jok3r.site/1</id>
            <author>
                <name> <![CDATA[Juan Herrera]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Como la mayoría de ustedes saben,&nbsp;<i>Laracon US 2020</i>&nbsp;se canceló debido a COVID-19 y las restricciones de viaje en todo el mundo. Como se insinuó durante la cancelación, ¡<i>Laracon 2020</i>&nbsp;será un evento en línea, lleno de increíbles oradores y los últimos anuncios de Laravel!</p><p>Ahora tenemos más detalles, junto a un hermoso y actualizado&nbsp;<a href="https://laracon.net/" target="_blank">sitio web</a>.</p><p>Taylor anunció en el blog de laravel,&nbsp;</p><blockquote class="blockquote"><p>Por lo general, hago los principales anuncios del año en vivo en el escenario en Laracon US. Este es un momento increíblemente emocionante, pero me molesta que muchas personas en todo el mundo nunca tengan la oportunidad de experimentar esos anuncios en vivo.</p></blockquote><p>La misma línea de oradores planeada para&nbsp;<i>Laracon 2020 US</i>&nbsp;permanece en su lugar, con más anuncios de oradores por venir.</p><h4 style="font-family: Poppins, sans-serif; color: rgb(0, 0, 0); text-align: center;">¿Qué significa esto para el evento actual de Laracon Online?</h4><p><span style="font-size: 0.9em; display: inline !important;">El evento en línea de Laracon que ocurre cada año alrededor de febrero contará con un nuevo formato para diferenciarlo del evento de verano, pero los detalles exactos aún están por llegar.</span></p><h4 style="font-family: Poppins, sans-serif; color: rgb(0, 0, 0); text-align: center;"><span style="display: inline !important;">¿Qué significa esto para futuros eventos de Laracon en Estados Unidos?</span></h4><p>Taylor mencionó en su anuncio que un evento en vivo y en persona es posible en 2021 y que "... el evento probablemente tendrá un énfasis en profundizar en los detalles esenciales de los anuncios de características realizados durante nuestro evento en línea".</p><p>¡Sin más recuerden que pueden comprar boletos ahora en el&nbsp;<a href="https://laracon.net/pay" target="_blank">sitio web de Laracon</a>&nbsp;por $29 usd !</p>]]>
            </summary>
                        <category type="html">
                <![CDATA[]]>
            </category>
            <updated>Tue, 05 May 2020 02:55:49 -0500</updated>
        </entry>
    </feed>
