<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daiu Szwimer</title>
    <description>The latest articles on DEV Community by Daiu Szwimer (@daianaszwimer).</description>
    <link>https://dev.to/daianaszwimer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F561337%2F77b62c00-7046-4ca8-8459-0549bccc929b.jpeg</url>
      <title>DEV Community: Daiu Szwimer</title>
      <link>https://dev.to/daianaszwimer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daianaszwimer"/>
    <language>en</language>
    <item>
      <title>¿Cómo iniciar en la programación?</title>
      <dc:creator>Daiu Szwimer</dc:creator>
      <pubDate>Sat, 16 Oct 2021 13:01:19 +0000</pubDate>
      <link>https://dev.to/daianaszwimer/como-iniciar-en-la-programacion-jcc</link>
      <guid>https://dev.to/daianaszwimer/como-iniciar-en-la-programacion-jcc</guid>
      <description>&lt;p&gt;Esta pregunta la escucho muy seguido cuando doy mentorías en FrontendCafé, y nunca sé bien del todo como responderla.&lt;br&gt;
El mundo de la programación es muy grande y hay de todo para todos los gustos. Incluso hay muchos recursos en internet, algunos que son basura y otros que son excelentes, gratuitos y pagos, videos y cursos, blogs y tutoriales, y una mezcla de los anteriores también.&lt;br&gt;
Hoy les voy a compartir una lista de recursos que me parece importante que toda persona que desea aprender programación - de manera gratuita por su cuenta - debe conocer&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción al rubro
&lt;/h2&gt;

&lt;p&gt;Antes que nada hay que entender en qué nos estamos metiendo, y qué camino vamos a querer elegir, para esto siempre me gusta recomendar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://youtu.be/zULelxw4U5A"&gt;Cuál es el mejor camino para aprender programación&lt;/a&gt;: charla de nerdearla muy interesante&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/"&gt;Roadmap&lt;/a&gt;: nos muestra los distintos caminos que podemos tomar para aprender según el rubro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto nos va a ayudar a saber dónde estamos parados y hacia dónde queremos ir, es un paso clave.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;p&gt;Estos recursos te van a servir independientemente de lo que quieras estudiar siempre y cuando sea programación:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/"&gt;FreeCodeCamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sindresorhus/awesome"&gt;Un repositorio &lt;strong&gt;repleto&lt;/strong&gt; de links de los temas que se te puedan ocurrir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.edx.org/search"&gt;Cursos edX&lt;/a&gt;: tiene cursos gratis muy copados&lt;/li&gt;
&lt;li&gt;&lt;a href="https://egghead.io/"&gt;EggHead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://devhints.io/"&gt;DevHints&lt;/a&gt;: un conjunto de "cheatsheets" de temas variados&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://teloexplicocongatitos.com/"&gt;Te Lo Explico Con Gatitos&lt;/a&gt;: explicaciones con gatitos🥰&lt;/li&gt;
&lt;li&gt;&lt;a href="https://losapuntesdemajo.vercel.app/"&gt;Los famosos Apuntes de Majo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recursos de frontend
&lt;/h3&gt;

&lt;p&gt;Si deseás estudiar frontend, te recomiendo los siguientes recursos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn"&gt;Tutorial de MDN&lt;/a&gt;: explica HTML, CSS y JavaScript, acá somos fans de la página de MDN&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://frontendhelp.vercel.app/"&gt;Frontend Help&lt;/a&gt;: un conjunto de recursos de frontend&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cssgrid.io/"&gt;CSS Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://egghead.io/courses/the-beginner-s-guide-to-react"&gt;Un curso de React muy bueno de KCD&lt;/a&gt; (para gente que ya sabe programar) &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comunidades
&lt;/h2&gt;

&lt;p&gt;Otra cosa que me parece muy importante destacar también, es &lt;strong&gt;participar de las comunidades de sistemas&lt;/strong&gt;, siempre insisto mucho con esto. Yo por ejemplo participo de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/wwcodeba"&gt;WWCBA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://frontend.cafe/"&gt;FrontendCafé&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meetupjs.com.ar/"&gt;Meetup.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Búsquedas laborales
&lt;/h2&gt;

&lt;p&gt;Una vez que te sientas seguro/a de lo que sabés y quieras buscar tu primer trabajo, &lt;a href="https://twitter.com/asaditojs"&gt;@asaditojs&lt;/a&gt; en Twitter comparte búsquedas para gente con poca o nula experiencia. Si querés leer más sobre el tema de búsqueda laboral, tengo un &lt;a href="https://dev.to/daianaszwimer/busqueda-laboral-remoto-4n6p"&gt;posteo sobre cómo buscar trabajo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideas de proyectos para practicar
&lt;/h2&gt;

&lt;p&gt;Todo muy lindo pero sin la práctica la teoría no nos sirve de nada. Es muy importante ir practicando a medida que uno aprende los conceptos para reforzarlos y saber si los entendimos o no.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://leonidasesteban.com/proyectos/todos"&gt;Proyectos de Leonidas Esteban&lt;/a&gt;: Un montón de proyectos que se pueden filtrar por nivel de dificultad&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.frontendmentor.io/"&gt;FrontEnd Mentor&lt;/a&gt;: Esta no la probé pero sé que algunos mentees la han usado&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Extra
&lt;/h2&gt;

&lt;p&gt;Y por último, para poder crecer y destacar más, esta lectura me parece genial sin importar tu seniority:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.swyx.io/learn-in-public/"&gt;Learn In Public&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A medida que vaya encontrando más recursos los iré agregando&lt;/p&gt;

&lt;p&gt;Eso es todo! Espero que les sirva ;)&lt;br&gt;
Cualquier duda/feedback/etc me pueden encontrar en:&lt;br&gt;
&lt;a href="https://twitter.com/uhhdai"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/daiana-szwimer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@daiuszw"&gt;Tik Tok&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.twitch.tv/daiuszw"&gt;O Twitch&lt;/a&gt; (no muy seguido)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Crypto 101</title>
      <dc:creator>Daiu Szwimer</dc:creator>
      <pubDate>Thu, 24 Jun 2021 16:35:36 +0000</pubDate>
      <link>https://dev.to/daianaszwimer/crypto-101-4i2h</link>
      <guid>https://dev.to/daianaszwimer/crypto-101-4i2h</guid>
      <description>&lt;h1&gt;
  
  
  Crypto 101
&lt;/h1&gt;

&lt;p&gt;Interrumpimos la programación habitual (Three.js) para hablar un ratito sobre conceptos básicos de crypto&lt;/p&gt;

&lt;p&gt;(No te preocupes, voy a seguir subiendo información sobre Three.js!)&lt;/p&gt;

&lt;p&gt;La idea de esto es simplemente dar un gran pantallazo a la gente que quiere entrar al mundo de crypto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Me vas a dar consejos financieros?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;No&lt;/strong&gt;, no es mi idea, este posteo &lt;strong&gt;no es consejo financiero&lt;/strong&gt;. Esto es como la lotería, no se sabe qué va a pasar, lo que vos hagas es bajo &lt;strong&gt;tu&lt;/strong&gt; responsabilidad&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Voy a terminar siendo un/a experto/a después de leer esto?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Acaso sos una experta en crypto?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tampoco!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Podemos dejar de joder con las preguntas e ir a lo que nos interesa?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bueno, dale&lt;/p&gt;

&lt;h2&gt;
  
  
  Quiero invertir en Crypto y ser millonario
&lt;/h2&gt;

&lt;p&gt;Oh boy, tengo malas noticias para vos... It doesn't work that way. Voy a dejar en claro unos conceptos:&lt;/p&gt;

&lt;p&gt;1- No pongas plata que no estás dispuesto a perder o plata que no tengas. No te endeudes para poder comprar BTC solo porque estás leyendo en el diario que Fulanito recuperó 3 veces lo que invirtió y ahora vive de rentas. Es como ir al casino o jugar a la lotería. No escuches a los que te digan que saben que &lt;code&gt;X&lt;/code&gt; moneda va a estar &lt;code&gt;Y&lt;/code&gt; precio para &lt;code&gt;Z&lt;/code&gt; fecha, porque no hay manera de saberlo, sino serían millonarios&lt;/p&gt;

&lt;p&gt;2- Hay varios tipos de crypto monedas: alt coins y stable coins. Las primeras varían &lt;strong&gt;constantemente&lt;/strong&gt; (si no me creen, &lt;a href="https://es.tradingview.com/symbols/ETHUSDC/"&gt;miren cómo se mueven los últimos dígitos de la cotización del ETH respecto del dólar&lt;/a&gt;) y no se sabe cuánto van valer. En cambio, las stable coins son monedas que tienen el valor atado al del dólar, es decir, la relación es de 1-1 (por ejemplo la moneda DAI vale 1 USD siempre)&lt;/p&gt;

&lt;p&gt;3- &lt;a href="https://www.youtube.com/watch?v=gB4wrX2iICA&amp;amp;ab_channel=TinyCryptoBlog"&gt;Not your keys, not your coins&lt;/a&gt; si vos no tenés acceso a la clave privada, no son tus monedas del todo. JAMÁS de los jamases compartas tu private key con alguien, es como entregarle la billetera a otra persona. La clave privada es como la llave a una billetera digital donde uno tiene sus monedas ahí. Repetí conmigo: &lt;strong&gt;no se comparte la clave privada con nadie&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4- &lt;a href="https://academy.binance.com/en/glossary/do-your-own-research"&gt;DYOR: do your own research&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- OJO con las shitcoins!! Y ojo con las que son &lt;strong&gt;scam&lt;/strong&gt;. Acá algunos ejemplos: &lt;a href="https://www.reddit.com/r/CryptoCurrency/comments/kkv71v/can_someone_eli5_why_xrp_is_a_scam/"&gt;XRP&lt;/a&gt;, DOGE, USDT, etc.&lt;/p&gt;

&lt;p&gt;6- Si quieren entender algunos conceptos más técnicos, les dejo algunas palabras claves para que investiguen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blockchain&lt;/li&gt;
&lt;li&gt;DeFi&lt;/li&gt;
&lt;li&gt;Smart Contracts&lt;/li&gt;
&lt;li&gt;Clave privada y pública&lt;/li&gt;
&lt;li&gt;Market cap. Acá tienen una lista &lt;a href="https://coinmarketcap.com/es/"&gt;https://coinmarketcap.com/es/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bear market/Bull market&lt;/li&gt;
&lt;li&gt;Fiat currency&lt;/li&gt;
&lt;li&gt;P2P (peer to peer)&lt;/li&gt;
&lt;li&gt;Crypto Address&lt;/li&gt;
&lt;li&gt;Staking&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bitcoin y alt-coins
&lt;/h2&gt;

&lt;p&gt;BTC fue la primer crypto moneda, si quieren leer más sobre la historia podés &lt;a href="https://es.wikipedia.org/wiki/Satoshi_Nakamoto"&gt;leer sobre Satoshi Nakamoto en Wikipedia&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por eso se dice que Bitcoin es la madre de todas las crypto monedas. Después están las alt-coins que son ETH, ADA, entre otras. En general, cada moneda tiene como un "proyecto", es por esto que es importante investigar y entender en qué están invirtiendo&lt;/p&gt;

&lt;p&gt;De acá no quiero profundizar mucho más, en internet hay muchos recursos. Les recomiendo evitar youtubers con carteles llamativos y cara de sorpresa en los thumbnails. A mí personalmente me gusta mucho &lt;a href="https://www.youtube.com/channel/UCRvqjQPSeaWn-uEx-w0XOIg"&gt;el canal de Benjamin Cowen&lt;/a&gt; para tener un análisis técnico del mercado y una perspectiva poco sensacionalista&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo compro?
&lt;/h2&gt;

&lt;p&gt;Las compras se hacen mediante &lt;a href="https://www.youtube.com/watch?v=RnWlacmV2-E"&gt;exchanges&lt;/a&gt; por ejemplo Binance o ripio&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Mis monedas están seguras en un exchange?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emm... Más o menos&lt;/p&gt;

&lt;p&gt;Como les mencioné más arriba en el punto 3, hay una frase muy conocida que es "not your keys, not your coins". Es decir, si no tenés la clave privada, no son 100% tus monedas&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿¿¿Cómo que no son mis monedas??? ¿Voy corriendo a sacar la plata del exchange?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pará, tranquilo/a. Cuando vos dejás tus monedas en un exchange, lo único que tenés es la "promesa" del exchange de que las monedas son tuyas, nada más. O sea, si el día de mañana hackean la plataforma y roban las claves privadas... fuiste. Esto no es muy común que suceda dado que al tratarse de un exchange, tienen en cuenta todas estas cosas (o deberían) y usan las medidas de seguridad que corresponden (o deberían).&lt;br&gt;
Por ejemplo, hace poco salió la &lt;a href="https://www.infobae.com/economia/2021/04/22/fraude-multimillonario-en-el-mundo-bitcoin-una-plataforma-de-venta-de-criptomonedas-se-desvanecio-y-su-dueno-huyo-del-pais/"&gt;historia de cómo en Turquía el dueño de un exchange desapareció y dejó a muchísima gente sin acceso a sus monedas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es raro que pase, pero no imposible. Yo duermo mejor de noche sabiendo que tengo casi todas mis monedas en una wallet, por ejemplo, &lt;a href="https://www.exodus.com/"&gt;Exodus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creo que eso es todo por ahora, si van surgiendo más dudas iré agregando más cosas&lt;/p&gt;

&lt;p&gt;Esto es solo un pantallazo, el mundo de crypto es muy interesante y divertido siempre y cuando uno sepa lo que está haciendo.&lt;br&gt;
Les recomiendo que investiguen, lean, se informen y hagan las cosas a conciencia&lt;/p&gt;

&lt;p&gt;Pueden verme en &lt;a href="https://www.twitch.tv/daiuszw"&gt;Twitch&lt;/a&gt; o leerme en &lt;a href="https://twitter.com/uhhdai"&gt;Twitter&lt;/a&gt;&lt;br&gt;
esto&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Three.js] Basics parte I</title>
      <dc:creator>Daiu Szwimer</dc:creator>
      <pubDate>Thu, 24 Jun 2021 16:34:44 +0000</pubDate>
      <link>https://dev.to/daianaszwimer/three-js-basics-parte-i-3k20</link>
      <guid>https://dev.to/daianaszwimer/three-js-basics-parte-i-3k20</guid>
      <description>&lt;h1&gt;
  
  
  Bienvenidos y bienvenidas!
&lt;/h1&gt;

&lt;p&gt;La idea de este blog es ir volcando resúmenes de lo que voy aprendiendo en el curso de &lt;a href="https://threejs-journey.xyz/" rel="noopener noreferrer"&gt;Three.js de Bruno Simon&lt;/a&gt; para hacerlo un poco más accesible para todos y todas y que puedan aprender sobre animaciones. Mientras tanto, también pueden ver contenido &lt;em&gt;teórico&lt;/em&gt; sobre animaciones en el &lt;a href="https://www.youtube.com/user/tgcentregas" rel="noopener noreferrer"&gt;canal de youtube de la materia Técnicas de Gráficos por Computadora de la UTN FRBA&lt;/a&gt; donde soy ayudante 😄&lt;/p&gt;

&lt;p&gt;Ahora si, vamos a lo que nos incumbe&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://threejs.org/" rel="noopener noreferrer"&gt;Three.js&lt;/a&gt; es una librería de javascript que se encuentra por encima de &lt;a href="https://developer.mozilla.org/es/docs/Web/API/WebGL_API" rel="noopener noreferrer"&gt;WebGL&lt;/a&gt; y es open source! Pueden ver el código &lt;a href="https://github.com/mrdoob/three.js" rel="noopener noreferrer"&gt;acá&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También se puede usar con CSS y SVG pero no es lo que nos interesa por ahora&lt;/p&gt;

&lt;p&gt;Acá se pueden ver paginas hechas con Three.js😍:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bruno-simon.com" rel="noopener noreferrer"&gt;https://bruno-simon.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go.pioneer.com/cornrevolution" rel="noopener noreferrer"&gt;https://go.pioneer.com/cornrevolution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://richardmattka.com" rel="noopener noreferrer"&gt;https://richardmattka.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lusion.co" rel="noopener noreferrer"&gt;https://lusion.co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oculus.com/medal-of-honor/" rel="noopener noreferrer"&gt;https://www.oculus.com/medal-of-honor/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://letsplay.ouigo.com" rel="noopener noreferrer"&gt;http://letsplay.ouigo.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zen.ly" rel="noopener noreferrer"&gt;https://zen.ly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prior.co.jp/discover" rel="noopener noreferrer"&gt;https://prior.co.jp/discover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.midwam.com" rel="noopener noreferrer"&gt;https://www.midwam.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://heraclosgame.com" rel="noopener noreferrer"&gt;https://heraclosgame.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chartogne-taillet.com" rel="noopener noreferrer"&gt;https://chartogne-taillet.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://live.vanmoof.com/site" rel="noopener noreferrer"&gt;https://live.vanmoof.com/site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bueno pero, que es WebGL exactamente?
&lt;/h3&gt;

&lt;p&gt;Es una API de javascript que renderiza triángulos en un &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; de una manera increíblemente veloz, dado que usa la placa de video (la GPU) y hace operaciones en paralelo&lt;/p&gt;

&lt;p&gt;La GPU dibuja triángulos, y para hacerlo, necesita saber dónde se encuentran posicionados. Esta información se encuentra en los shaders, que tienen la posición de los vertices y el color de los triángulos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manos a la obra!
&lt;/h2&gt;

&lt;p&gt;Lo primero que vamos a hacer es crear una escena bien básica con un cubo rojo en el centro.&lt;/p&gt;

&lt;p&gt;Antes que nada, necesitamos descargarnos Three.js en nuestra compu: entran acá &lt;a href="https://threejs.org/" rel="noopener noreferrer"&gt;https://threejs.org/&lt;/a&gt; y van a donde dice &lt;code&gt;download&lt;/code&gt;. Se les va a descargar un zip, lo extraen y el archivo que vamos a usar es el que se llama &lt;code&gt;three.min.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Necesitamos crear 2 archivos: &lt;code&gt;index.html&lt;/code&gt; y &lt;code&gt;script.js&lt;/code&gt;. En el primero lo único que hacemos es lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;03 - Basic Scene&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"webgl"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"three.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ahora nada raro, simplemente ponemos en el body el canvas que les mencioné anteriormente y cargamos Three.js y el código javascript.&lt;/p&gt;

&lt;p&gt;Ahora en &lt;code&gt;script.js&lt;/code&gt; podemos usar el objeto &lt;code&gt;THREE&lt;/code&gt; y acceder a los métodos y clases que nos provee la librería.&lt;/p&gt;

&lt;p&gt;Si no me creen, escriban en &lt;code&gt;script.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y pueden ver en la consola del navegador todo lo que tiene &lt;code&gt;THREE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para crear una escena necesitamos 4 elementos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Objetos&lt;/li&gt;
&lt;li&gt;Una escena que contiene los objetos&lt;/li&gt;
&lt;li&gt;Una cámara&lt;/li&gt;
&lt;li&gt;Un renderer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Escena
&lt;/h3&gt;

&lt;p&gt;Una escena es como un container. Ahí es donde vamos a poner todos los objetos que queremos mostrar en el browser, para luego renderizarlo.&lt;/p&gt;

&lt;p&gt;Para instanciar una escena, el código es:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Scene&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Objetos
&lt;/h3&gt;

&lt;p&gt;En este ejemplo nuestro objeto va a ser un cubo rojo.&lt;/p&gt;

&lt;p&gt;Para crear el cubo necesitamos un &lt;code&gt;mesh&lt;/code&gt;. Un &lt;a href="https://threejs.org/docs/#api/en/objects/Mesh" rel="noopener noreferrer"&gt;Mesh&lt;/a&gt; es una combinación de una geometría (figura) y un material (cómo se ve)&lt;br&gt;
Como queremos hacer un cubo rojo, vamos a usar &lt;a href="https://threejs.org/docs/?q=boxgeo#api/en/geometries/BoxGeometry" rel="noopener noreferrer"&gt;BoxGeometry&lt;/a&gt; para la geometría y &lt;a href="https://threejs.org/docs/?q=mesh#api/en/materials/MeshBasicMaterial" rel="noopener noreferrer"&gt;MeshBasicMaterial&lt;/a&gt; para el material.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y para instanciar el material le pasamos como parámetro un objeto que tiene el color que queremos que tenga el material (se pueden pasar más pero en este caso solo nos interesa el color)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xff0000&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como pueden observar, le pasamos &lt;code&gt;0x&lt;/code&gt; seguido del color en hexadecimal. El color se puede setear de muchas maneras: &lt;a href="https://threejs.org/docs/?q=mesh#api/en/math/Color" rel="noopener noreferrer"&gt;https://threejs.org/docs/?q=mesh#api/en/math/Color&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora sí podemos crear nuestro mesh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xff0000&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mesh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;geometry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y lo agregamos a nuestra escena (muy importante! Si no no se va a ver)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cámara
&lt;/h3&gt;

&lt;p&gt;La cámara no es algo que nosotros vemos, sino que es el punto de vista desde donde se ve la escena. Podemos usar varias cámaras pero en general se usa una&lt;/p&gt;

&lt;p&gt;Para setear la cámara, instanciamos una clase de &lt;a href="https://threejs.org/docs/index.html#api/en/cameras/PerspectiveCamera" rel="noopener noreferrer"&gt;PerspectiveCamera&lt;/a&gt; a la que le pasamos dos parámetros: el FOV (field of view) que es el ángulo de visión en grados, en este caso vamos a usar &lt;code&gt;75&lt;/code&gt;. El segundo parámetro es el aspect ratio que es lo que el ancho del canvas / el alto.&lt;br&gt;
Recuerden al final agregar la cámara a la escena.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sizes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PerspectiveCamera&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Renderer
&lt;/h3&gt;

&lt;p&gt;El renderer se encarga de hacer el render. Vamos a instanciar un &lt;a href="https://threejs.org/docs/index.html#api/en/renderers/WebGLRenderer" rel="noopener noreferrer"&gt;WebGLRenderer&lt;/a&gt; y le pasaremos como parámetro un objeto que tiene el canvas que pusimos en el HTML más arriba.&lt;br&gt;
También tenemos que setearle el tamaño que va a ser el mismo que usamos para el aspect ratio 😉&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;canvas.webgl&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;renderer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;WebGLRenderer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora llegó el momento de renderizar. Para eso, hacemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si abren &lt;code&gt;index.html&lt;/code&gt;, van a notar que solo se ve un cuadrado negro. Esto es porque la cámara está adentro del cubo. Para poder verlo, necesitamos alejar la cámara de este y para eso hacemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AxesHelper
&lt;/h3&gt;

&lt;p&gt;Algo que nos puede ayudar mucho a saber dónde están los ejes es la clase &lt;a href="https://threejs.org/docs/#api/en/helpers/AxesHelper" rel="noopener noreferrer"&gt;AxesHelper&lt;/a&gt;&lt;br&gt;
Cuando lo agregamos a la escena, vamos a ver en color verde el eje &lt;code&gt;y&lt;/code&gt; positivo, en color rojo el &lt;code&gt;x&lt;/code&gt; positivo, y en color azul el eje &lt;code&gt;z&lt;/code&gt; positivo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axesHelper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AxesHelper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;axesHelper&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El parámetro que se manda al instanciar esta clase, es el largo de los ejes (si queremos que se vean más grandes o más chicos)&lt;/p&gt;

&lt;h2&gt;
  
  
  Transformaciones
&lt;/h2&gt;

&lt;p&gt;Los &lt;a href="https://threejs.org/docs/#api/en/core/Object3D" rel="noopener noreferrer"&gt;objetos&lt;/a&gt; que usamos en las escenas tienen 4 atributos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;position&lt;/code&gt; (para moverlo)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scale&lt;/code&gt; (para cambiar el tamaño)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rotation&lt;/code&gt; (para rotarlo)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;quaternion&lt;/code&gt; (para rotarlo - luego vamos a profundizar sobre esto)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;position&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Tiene 3 propiedades esenciales, que son &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt; y &lt;code&gt;z&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para mover un objeto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a la derecha =&amp;gt; asignamos un valor &amp;gt; 0 en &lt;code&gt;x&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;a la izquierda =&amp;gt; asignamos un valor &amp;lt; 0 en &lt;code&gt;x&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hacia arriba =&amp;gt; asignamos un valor &amp;gt; 0 en &lt;code&gt;y&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hacia abajo =&amp;gt; asignamos un valor &amp;lt; 0 en &lt;code&gt;y&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hacia adelante (o sea hacia nosotros) =&amp;gt; asignamos un valor &amp;gt; 0 en &lt;code&gt;z&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hacia atrás (o sea alejado de nosotros) =&amp;gt; asignamos un valor &amp;lt; 0 en &lt;code&gt;z&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tengan en cuenta que tienen que mover al objeto &lt;em&gt;antes&lt;/em&gt; de renderizarlo&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;position&lt;/code&gt; es una instancia de &lt;a href="https://threejs.org/docs/#api/en/math/Vector3" rel="noopener noreferrer"&gt;Vector3&lt;/a&gt;, por lo tanto tiene los siguientes métodos heredados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;distanceTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// distancia a otro Vector3&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// normaliza un vector, o sea, hace que su módulo (tamaño) sea 1&lt;/span&gt;
&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// setea los atributos x, y, z&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;scale&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Al igual que &lt;code&gt;position&lt;/code&gt;, &lt;code&gt;scale&lt;/code&gt; es una instancia de &lt;a href="https://threejs.org/docs/#api/en/math/Vector3" rel="noopener noreferrer"&gt;Vector3&lt;/a&gt;. Se usa para setear en cuántas veces querés setear el tamaño del objeto. Por ejemplo, si ponemos 0.5, va a ser la mitad de chico; y si ponemos 2, va a ser el doble de grande.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PD: ojo! no usen números negativos.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;rotation&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;A diferencia de &lt;code&gt;position&lt;/code&gt; y &lt;code&gt;scale&lt;/code&gt;, &lt;code&gt;rotation&lt;/code&gt; &lt;em&gt;no&lt;/em&gt; es un Vector3, sino que es un &lt;a href="https://threejs.org/docs/index.html#api/en/math/Euler" rel="noopener noreferrer"&gt;Euler&lt;/a&gt;. Según el eje que cambiemos, es sobre el eje que va a rotar el objeto. Por ejemplo, si cambiamos el &lt;code&gt;y&lt;/code&gt;, va a rotar como una calesita.&lt;/p&gt;

&lt;p&gt;Los valores de &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt; y &lt;code&gt;z&lt;/code&gt; están expresados en &lt;a href="https://es.wikipedia.org/wiki/Radi%C3%A1n" rel="noopener noreferrer"&gt;radianes&lt;/a&gt;, esto implica que si queremos que rote media vuelta, tenemos que asignarle π. Esto en javascript se logra usando la constante &lt;code&gt;Math.PI&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Peeeero tenemos un problemilla: Esta clase de rotaciones nos puede traer problemas dependiendo en qué orden se aplican las rotaciones. Este problema se llama gimbal lock y nos saca un grado de libertad. Si quieren leer más sobre eso pueden leer una &lt;a href="http://www.math.umd.edu/~immortal/MATH431/lecturenotes/ch_gimballock.pdf" rel="noopener noreferrer"&gt;explicación matemática&lt;/a&gt;. Para ayudarnos con este problema, vienen los quaterniones al rescate!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;quaternion&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Como dijimos antes, los quaterniones se usan para las rotaciones. En esta parte del curso no profundiza sobre quaterniones así que no vamos a ahondar sobre el tema.&lt;/p&gt;

&lt;p&gt;Tengan en cuenta que al actualizar el atributo de &lt;code&gt;rotation&lt;/code&gt;, se actualizan los valores de &lt;code&gt;quaternion&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Combinando transformaciones
&lt;/h2&gt;

&lt;p&gt;Se pueden combinar la posición, la rotación (ya sea de Euler o quaternión) y la escala en cualquier tipo de orden. El resultado será el mismo&lt;/p&gt;

&lt;h3&gt;
  
  
  Hi, I'm Mr. Meeseeks, look at me!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2Fa4%2F4c%2Fb7%2Fa44cb7324810ce345d14ff00c5d51fdb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.pinimg.com%2Foriginals%2Fa4%2F4c%2Fb7%2Fa44cb7324810ce345d14ff00c5d51fdb.jpg" alt="Mr. Meeseeks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todas las instancias de Object3D tienen un método que se llama &lt;code&gt;lookAt()&lt;/code&gt; que recibe como argumento un Vector3. Podemos hacer, por ejemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lookAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Grupos
&lt;/h2&gt;

&lt;p&gt;Muchas veces vamos a querer mover un conjunto de objetos de la misma manera. Por ejemplo, estamos armando un auto, con las ruedas y puertas y queremos que sea más chico. Si quisiéramos achicar el auto, tendriámos que achicar cada parte por separado, o sea, un bajón 😔&lt;br&gt;
Una solución a esto son los &lt;a href="https://threejs.org/docs/#api/en/objects/Group" rel="noopener noreferrer"&gt;Group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para usarlo, lo instanciamos y lo agregamos a la escena para luego agregarle los objetos que querramos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Group&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cube1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xff0000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;cube1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cube1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cube2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xff0000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;cube2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cube2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cube3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xff0000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;cube3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cube3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tengan en cuenta que &lt;code&gt;group&lt;/code&gt; hereda de &lt;code&gt;Object3D&lt;/code&gt;, por lo tanto, tiene los atributos y clases que mencioné más arriba.&lt;/p&gt;

&lt;h2&gt;
  
  
  Animaciones
&lt;/h2&gt;

&lt;p&gt;Cada vez que hacemos &lt;code&gt;renderer.render(...)&lt;/code&gt; es como sacarle una "foto" a la escena. Las animaciones no son nada más ni nada menos que muchas fotos consecutivas de la escena, como si fuera un stop-motion.&lt;/p&gt;

&lt;p&gt;La pantalla que uno ve corre a determinados FPS (frames per second), que en general suele ser 60FPS.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;requestAnimationFrame&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;window.requestAnimationFrame()&lt;/code&gt; es un método que recibe como argumento una función que ejecutará en el próximo render. En el 99% de los casos vamos a usar esta función de manera recursiva ya que queremos que nuestra función que anima a los objetos se ejecute todo el tiempo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El código de arriba crea una función y la guarda en la variable &lt;code&gt;loop&lt;/code&gt;. Adentro de la función se invoca a &lt;code&gt;window.requestAnimationFrame&lt;/code&gt; que hace justamente lo que queremos: ejecuta &lt;code&gt;loop&lt;/code&gt; en el próximo render. No se olviden de llamar &lt;code&gt;loop&lt;/code&gt; por primera vez porque sino no se ejecuta nuestra función y no podremos ver nuestras bellas animaciones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pero tenemos un problema:
&lt;/h3&gt;

&lt;p&gt;Si yo corro este código en una computadora con mejor GPU y en otra con peor, vamos a ver las animaciones a distintas velocidades porque tendremos distintos FPS.&lt;/p&gt;

&lt;p&gt;La solución? Que la animación (en este caso, la rotación) dependa del tiempo entre cada render.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deltaTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;deltaTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Solución de Three.js
&lt;/h4&gt;

&lt;p&gt;Three.js tiene una clase que se llama &lt;code&gt;Clock&lt;/code&gt; que hace por nosotros el código escrito anteriormente mediante la función &lt;code&gt;getElapsedTime()&lt;/code&gt;, que nos retorna cuántos segundos pasaron desde que se instanció la clase &lt;code&gt;Clock&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Clock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;elapsedTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElapsedTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;elapsedTime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Volviendo a las animaciones
&lt;/h2&gt;

&lt;p&gt;Acá es donde uno se pone creativo: podemos usar, por ejemplo, la función seno que oscila entre el -1 y 1 para hacer que nuestro cubo se mueva en el eje &lt;code&gt;y&lt;/code&gt; entre -1 y 1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Clock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;elapsedTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElapsedTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elapsedTime&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y si queremos que el cubo haga la trayectoria de un círculo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Clock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;elapsedTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElapsedTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elapsedTime&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elapsedTime&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ta-da!&lt;/p&gt;

&lt;h3&gt;
  
  
  Usando GSAP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://greensock.com/gsap/" rel="noopener noreferrer"&gt;GSAP&lt;/a&gt; es una librería, por lo tanto tenemos que agregarla a nuestro proyecto. Al igual que la mayoría de las librerías, su objetivo es simplificarnos las cosas, con ella es más simple generar animaciones&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mesh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acá le decimos a &lt;code&gt;gsap&lt;/code&gt; que cambie la &lt;em&gt;posición&lt;/em&gt; del mesh, que se mueva 2 unidades en el eje x, que tarde un segundo en empezar y que dure un segundo&lt;/p&gt;

&lt;p&gt;PD: ojo! A &lt;code&gt;gsap&lt;/code&gt; le pasamos la &lt;code&gt;position&lt;/code&gt;, no todo el &lt;code&gt;mesh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hinative.com%2Fattached_images%2F481981%2F9c7d491417c87206f1cefcfd47670972fb2ff202%2Flarge.jpg%3F1562691680" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hinative.com%2Fattached_images%2F481981%2F9c7d491417c87206f1cefcfd47670972fb2ff202%2Flarge.jpg%3F1562691680" alt="That's all folks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all folks! Si llegaron hasta acá, gracias por leer🥰&lt;br&gt;
A medida que vaya viendo los otros módulos voy a ir subiendo los resúmenes acá.&lt;br&gt;
Mientras tanto, pueden verme en &lt;a href="https://www.twitch.tv/daiuszw" rel="noopener noreferrer"&gt;Twitch&lt;/a&gt; o leerme en &lt;a href="https://twitter.com/uhhdai" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta la próxima!!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Búsqueda trabajo remoto😎</title>
      <dc:creator>Daiu Szwimer</dc:creator>
      <pubDate>Sun, 17 Jan 2021 04:33:06 +0000</pubDate>
      <link>https://dev.to/daianaszwimer/busqueda-laboral-remoto-4n6p</link>
      <guid>https://dev.to/daianaszwimer/busqueda-laboral-remoto-4n6p</guid>
      <description>&lt;p&gt;Hay muchísimo posts relacionados a este tema, acá dejo mis consejos basada en &lt;strong&gt;mi experiencia personal&lt;/strong&gt; luego de llevar varios meses haciendo búsquedas y leyendo posts similares a este 🔍&lt;br&gt;&lt;br&gt;
Este post en particular está orientado a búsquedas en el exterior pero hay cosas que aplican a búsquedas en Argentina también&lt;/p&gt;

&lt;h2&gt;
  
  
  Buscar un trabajo es un trabajo 🥵
&lt;/h2&gt;

&lt;p&gt;Dependiendo de las tecnologías y/o experiencia, hay muchísima demanda, lo cual generalmente es bueno. En mi experiencia personal esto termina siendo bastante estresante y abrumador. Es por esto que hay que saber organizarse, filtrar y no dejarse llevar por la ansiedad (re-fácil, no?🙃)  &lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde buscar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;En la mayoría de los Discord/Slack de las &lt;strong&gt;comunidades&lt;/strong&gt; de sistemas, hay un canal específicamente para esto, llamado "jobs". Fun fact: así conseguí mi laburo actual&lt;/li&gt;
&lt;li&gt;Si donde querés aplicar no hay ofertas que coincidan con tu perfil podés hacer dos cosas:

&lt;ol&gt;
&lt;li&gt;Seguir a la empresa/CEO/CTO/etc en las redes sociales. A veces publican ofertas ahí y está bueno porque uno/a se suele enterar ni bien lo publican&lt;/li&gt;
&lt;li&gt;Algunas empresas ofrecen a aplicar a una especie de &lt;em&gt;comodín&lt;/em&gt; donde vos mandás tu CV y si en el futuro surge un rol que matchea con vos, te llaman&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Otra cosa que hago &lt;em&gt;yo&lt;/em&gt; (no sé si es un buen approach o no, simplemente lo hago) es fijarme donde trabaja alguien que admiro/es grosa. Chusmeo la empresa y si me interesa me fijo si están buscando gente.&lt;/li&gt;
&lt;li&gt;Páginas web (últimamente no uso LinkedIn porque me da la sensación que hay mucho ruido en la plataforma)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.womenwhocode.com/jobs?query=Remote" rel="noopener noreferrer"&gt;Women Who Code Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://weworkremotely.com" rel="noopener noreferrer"&gt;We Work Remotely&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://remoteok.io" rel="noopener noreferrer"&gt;Remote OK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://remote.co/remote-jobs/" rel="noopener noreferrer"&gt;Remote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nocsok.com/" rel="noopener noreferrer"&gt;No CS OK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jobspresso.co/" rel="noopener noreferrer"&gt;JobSpresso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;&lt;a href="https://www.flexjobs.com/jobs" rel="noopener noreferrer"&gt;Flex Jobs&lt;/a&gt;&lt;/del&gt; Es paga&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://knack.io/" rel="noopener noreferrer"&gt;Knack&lt;/a&gt; (requiere loguearse)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dice.com/" rel="noopener noreferrer"&gt;Dice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/jobs" rel="noopener noreferrer"&gt;Stack Overflow Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.diversifytech.co/" rel="noopener noreferrer"&gt;Diversify Tech&lt;/a&gt;: si bien no es exclusivamente de trabajo remoto, la plataforma está buena porque te indica cuántas mujeres, gente de color y/o miembros de la comunidad LGBTQIA+ hay trabajando en la compañía en sistemas&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jobs.github.com/positions" rel="noopener noreferrer"&gt;GitHub Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://remotive.io/" rel="noopener noreferrer"&gt;Remotive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Y muchas más (si me acuerdo de otras las agregaré)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Red y green flags 🟥 🟩
&lt;/h2&gt;

&lt;p&gt;Personalmente cuando busco laburo (siempre y cuando tenga laburo o pueda llegar a fin de mes) soy bastante exquisita. Hay un par de cosas básicas que &lt;strong&gt;siempre&lt;/strong&gt; busco:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cosas que sí:
Esto es muy importante a tener en cuenta porque es algo que damos por hecho: los feriados argentinos! Claramente si trabajamos para EEUU y faltamos el 25 de mayo, no van a entender nada. Entonces, cómo hacemos para disfrutar de los feriados?

&lt;ul&gt;
&lt;li&gt;Muchos lugares ofrecen &lt;strong&gt;flexible/unlimited PTO&lt;/strong&gt; (paid time off). Avisás con tiempo que ese día te lo tomás y problema resuelto
&lt;/li&gt;
&lt;li&gt;Lo bueno de trabajar remoto es que rara vez ofrecen beneficios que no son beneficios (por ejemplo fruta en la oficina, aunque hoy leí una empresa que ofrecía como beneficio un emoji custom de Slack con tu cara -entre otros-)
&lt;/li&gt;
&lt;li&gt;Ese es el único beneficio que necesito sí o sí, más que nada para poder pedirme día de estudio y estar tranquila cuando rindo. Hay &lt;strong&gt;millones de beneficios&lt;/strong&gt; y varían mucho según la empresa, algunos son: viajes con la empresa para que el equipo se conozca, un bono la primera vez que te tomás vacaciones, $$ para armarte tu setup en tu casa, acciones de la empresa, horas laborables por semana que podés invertir en OSS/proyectos personales, cursos pagos y muchísimo más! Hay beneficios que realmente están buenos&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Cosas que no:
Trabajar bajo presión y/o los fines de semanas, mal balance vida/trabajo, herramientas para trackearte 24/7, etc. Cuando hay una red flag hay una vocecita dentro nuestro que nos dice: &lt;em&gt;Salí de ahí maravilla!&lt;/em&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;Acá es donde te podés destacar. En el CV no hay mucho lugar para la creatividad porque corrés el riesgo de que sea difícil de leer o que herramientas de AI lo descarten.&lt;br&gt;&lt;br&gt;
He visto portfolios muuuy copados como &lt;a href="https://bruno-simon.com/" rel="noopener noreferrer"&gt;este&lt;/a&gt; que si bien se ven muy lindos, &lt;em&gt;mi opinión personal&lt;/em&gt; es que terminan distrayendo a la persona que los ve y se desvía el foco de atención: &lt;strong&gt;vos y tus habilidades&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
En mi caso particular, intento que la información esté visible sin la necesidad de hacer ningún click y lo mismo con la información de contacto.&lt;br&gt;&lt;br&gt;
(Lo que tiene ese portfolio en particular es que lo vi hace años y aún lo recuerdo, así que algo bien hizo ese dev 🥰)&lt;/p&gt;

&lt;h2&gt;
  
  
  Cover Letter
&lt;/h2&gt;

&lt;p&gt;Lo suelen pedir muchas empresas, algunas inclusive como &lt;em&gt;obligatorio&lt;/em&gt;. Es como una carta de presentación de vos a la empresa, suele incluir cosas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Por qué te interesa el puesto&lt;/li&gt;
&lt;li&gt;Qué podés aportar a la compañía&lt;/li&gt;
&lt;li&gt;Por qué sos el/la candidato/a ideal para ellos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo que &lt;em&gt;yo&lt;/em&gt; suelo hacer es tener un &lt;a href="https://github.com/cassidoo/getting-a-gig#your-cover-letter" rel="noopener noreferrer"&gt;template&lt;/a&gt; a mano donde voy cambiando el nombre de la empresa, a menos que esté aplicando a mi ✨dream job✨, en ese caso me puedo esmerar un poco más. El motivo por el cual hago esto es porque cuando estoy en búsqueda activa, mando unos 10 CVs por día (no lo recomiendo, es agotador) y no tengo el tiempo &lt;del&gt;ni las ganas&lt;/del&gt; para dedicarme a hacer eso&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faz505806.vo.msecnd.net%2Fcms%2Fdbd81454-cd85-4694-a25d-41f8c7b96904%2F70007456-bb6f-45d6-9598-29df51d364eb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faz505806.vo.msecnd.net%2Fcms%2Fdbd81454-cd85-4694-a25d-41f8c7b96904%2F70007456-bb6f-45d6-9598-29df51d364eb.jpg" title="Cover Letter Meme" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Saber qué querés
&lt;/h2&gt;

&lt;p&gt;Cosas a tener en cuenta a la hora de elegir una empresa (más allá de si hablamos de remoto o no):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software Factory vs Empresa de Producto&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.investopedia.com/articles/personal-finance/102015/series-b-c-funding-what-it-all-means-and-how-it-works.asp" rel="noopener noreferrer"&gt;Funding&lt;/a&gt;, pueden buscar a la empresa en &lt;a href="https://www.crunchbase.com/" rel="noopener noreferrer"&gt;CrunchBase&lt;/a&gt; - Para guiarme un poco en este tema leí &lt;a href="https://collectednotes.com/alejandro/tips-para-elegir-en-que-startups-trabajar-desde-argentina" rel="noopener noreferrer"&gt;este posteo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Rubro (herramientas para devs, e-commerce, fintech, educación, etc)&lt;/li&gt;
&lt;li&gt;Tecnologías que me gustaría usar, procesos de desarrollo con los que me siento cómodo/a&lt;/li&gt;
&lt;li&gt;Que no me gusta (nos va a servir para filtrar)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Organizate
&lt;/h2&gt;

&lt;p&gt;Me pasó muchas veces de aplicar a unos 30 puestos y después ni saber a dónde apliqué ni qué pedían. Veía una oferta y tenía que buscar el mail de agradecimiento para saber si ya había enviado o no mi CV. &lt;br&gt;
Hace poco descubrí &lt;a href="https://huntr.co/" rel="noopener noreferrer"&gt;esta herramienta&lt;/a&gt; que es lo mejor que encontré hasta el momento.&lt;br&gt;
Tiene una extensión de chrome y cuando entrás a una JD (job description) te ofrece guardarla automáticamente. Cada JD que guardás tiene un estado (como si fuera un ticket, algo del estilo To-do/In progress/Done pero traducido al mundo de ofertas laborales)&lt;/p&gt;

&lt;h2&gt;
  
  
  Timezones
&lt;/h2&gt;

&lt;p&gt;Ojo con esto! Muchas veces nos suelen pedir trabajar en cierto rango horario, que no nos tome de sorpresa. En algunas JD incluso piden como requisito encontrarse en cierto timezone&lt;/p&gt;

&lt;h2&gt;
  
  
  Conocé la empresa
&lt;/h2&gt;

&lt;p&gt;Herramientas como &lt;a href="https://www.glassdoor.com.ar/" rel="noopener noreferrer"&gt;Glassdoor&lt;/a&gt; nos ayudan mucho a conocer la empresa, sueldos y procesos desde el punto de vista del/la empleado.&lt;br&gt;
(Tip: registrate con una cuenta y no verifiques el mail porque si lo hacés te obligan a subir una review con un mensaje muy molesto e invasivo (¿por qué hacen esto?). Una vez que lo hiciste, donde dice "seguir leyendo", inspeccionás el elemento y pum, leés desde la consola del navegador. Te podés registrar con &lt;code&gt;cualquier@tipo-de-mail.com&lt;/code&gt;)&lt;br&gt;
Para las empresas argentinas, una muy buena opción es buscarlas en &lt;a href="https://www.openqube.io/" rel="noopener noreferrer"&gt;openqube&lt;/a&gt;.&lt;br&gt;
Ojo que hay muchas reviews falsas en ambos lugares!&lt;/p&gt;

&lt;p&gt;Otra opción recomendada (que aún no he probado) es contactarse con gente que trabaja en esa empresa (fácil de hacer con LinkedIn) y preguntarle, por ejemplo, si está contento/a con la decisión de trabajar ahí.&lt;br&gt;&lt;br&gt;
Tengan en cuenta que también hay que conocer los objetivos y productos de la empresa. ¿Por qué? Primero para saber dónde te estás metiendo, segundo, para poder hacer las preguntas correctas en las entrevistas (uno/a suele quedar bien parado/a)&lt;/p&gt;

&lt;h2&gt;
  
  
  Entrevistas
&lt;/h2&gt;

&lt;p&gt;Muchos lugares en la JD informan cómo es el proceso de entrevistas o bien te lo comentan en la primer entrevista. &lt;em&gt;En general&lt;/em&gt; suele ser algo así&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Entrevista para conocerse/introducción:&lt;br&gt;
La empresa te comenta sobre sus objetivos y el rol. El/La entrevistador/a te hace preguntas sobre tu experiencia, expectativas, etc. Este momento me parece un buen espacio para &lt;a href="https://github.com/viraptor/reverse-interview" rel="noopener noreferrer"&gt;despejar dudas&lt;/a&gt; de la empresa o el rol si es que tenés; también podés preguntar sobre la remuneración - si es que no estaba en la JD - de esta manera si el sueldo no es el que esperabas, no le hacés perder tiempo a la empresa y, más importante, vos no perdés tiempo (a menos que estés en el proceso para practicar y no porque te interesa el puesto/cambiar de laburo)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Entrevista/s técnicas: esta es la parte donde generalmente peor la pasamos 🤯. Hay distintos tipos: &lt;a href="https://softwareengineering.stackexchange.com/questions/16769/whiteboard-testing-during-an-interview-legitimate-way-to-back-up-your-whiteb" rel="noopener noreferrer"&gt;whiteboard&lt;/a&gt;, take home challenge, pair programming, code review, preguntas técnicas/teóricas, etc. No hay una receta mágica sobre cuál es el mejor approach. En serio, &lt;a href="https://www.reddit.com/r/webdev/comments/g266of/coding_interviews_are_broken/" rel="noopener noreferrer"&gt;la mayoría de las empresas no saben cómo hacer para decidir si una persona es apta para un rol o no&lt;/a&gt; (hay mucho contenido en relación a esto)&lt;br&gt;&lt;br&gt;
Si tienen el tiempo y las ganas, además de practicar con los distintos recursos que hay online, pueden aplicar a empresas que no les interesan y pasar por la entrevista técnica. Esto está bueno porque, generalmente, al no interesarnos pasar, rendimos mejor porque no nos ponemos nerviosos/as y después estamos mejor parados cuando nos toca pasar por esa situación en la entrevista donde sí nos interesa aprobar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Y si todo va bien... oferta 💰: otro tema polémico, la plata. Al final del día por más que amemos programar, no hacemos esto por amor al arte (o sí), entonces negociar es la clave. Muchas personas en la comunidad de MeetupJS recomiendan &lt;a href="https://www.goodreads.com/book/show/26156469-never-split-the-difference" rel="noopener noreferrer"&gt;este libro&lt;/a&gt; que aún tengo pendiente para leer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Les recomiendo fuertemente investigar el mercado a la hora de pedir $. Algunas empresas tienen los datos públicos, otras pagan según la locación y otras no, etc&lt;/li&gt;
&lt;li&gt;Tener en cuenta que en muuuchos lugares cuando te informan la compensación, te pasan el valor anual (no te van a pagar 20k USD el mes xD) (bah, ojalá)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Thank you for applying! Unfortunately...
&lt;/h2&gt;

&lt;p&gt;News just in gente, a todos alguna vez nos rechazaron. Es algo que pasa, pasó y seguirá pasando, así que tenemos que amigarnos con los mails que nos informan que decidieron no continuar con el proceso&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; lo tomes personal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; te define como profesional ni como persona&lt;/li&gt;
&lt;li&gt;A veces es cuestión de suerte (o metieron al hijo del CEO en ese puesto que tanto querías (? )&lt;/li&gt;
&lt;li&gt;Simplemente significa que en ese momento, para ese puesto, avanzaron con otra persona. &lt;strong&gt;No&lt;/strong&gt; significa que en el futuro no puedas volver a aplicar o, quién dice, quizás trabajar ahí&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Otros tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Esto es algo que hago SIEMPRE: responder amablemente a recruiters &lt;iframe class="tweet-embed" id="tweet-1348969006036885504-334" src="https://platform.twitter.com/embed/Tweet.html?id=1348969006036885504"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1348969006036885504-334');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1348969006036885504&amp;amp;theme=dark"
  }




No solo hay que hacerlo porque el día de mañana podemos cruzarnos con ese mismo recruiter o estar del otro lado, sino porque son &lt;strong&gt;personas&lt;/strong&gt;. Al final del día, todos somos seres humanos con sentimientos tratando de hacer lo mejor que podemos, seamos más tolerantes ❤️&lt;/li&gt;
&lt;li&gt;No poner foto en el CV &lt;iframe class="tweet-embed" id="tweet-1350203464194936833-183" src="https://platform.twitter.com/embed/Tweet.html?id=1350203464194936833"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1350203464194936833-183');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1350203464194936833&amp;amp;theme=dark"
  }



&lt;/li&gt;
&lt;li&gt;Leer bien la job description antes de aplicar: algunos lugares piden cosas específicas en el cover letter o CV (me ha pasado de aplicar y luego darme cuenta que tenía que aclarar X cosa😣)&lt;/li&gt;
&lt;li&gt;El networking es clave! En general se le suele dar mucha bola a los referidos. Hacen networking =&amp;gt; conocen gente =&amp;gt; conocen a alguien que trabaja donde quieren aplicar =&amp;gt; te refiere. No se sientan "mal" por pedir que los refieran, en el 99% de las compañías hay un bono por referido, es un win-win.&lt;/li&gt;
&lt;li&gt;Aplicá a pesar de no cumplir al 100% con los requerimientos. En varias JD incentivan a que hagas esto, además, el "no" ya lo tenés&lt;/li&gt;
&lt;li&gt;Ser parte de comunidades ayuda mucho! Mucha data de acá la tengo porque participo de ellas&lt;/li&gt;
&lt;li&gt;Amoldá tu CV a la JD: a veces hay roles muy específicos que, por ejemplo, ponen que es un bonus si tenés experiencia trabajando con video players. Cuando es así (o sea, la JD pide cosas que sabés pero no aclarás en el CV porque en gral no tienen mucho sentido) está bueno agregar esa información para "demostrar" que cumplís con el perfil y suma mucho. Recordá que estás "vendiendo" tu tiempo! Hay que saber venderse 😉&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eso es todo amigos! Sé que es mucha información así que tranqui, no se abrumen y vayan absorviendo de a poco. Somos parte de un rubro muy divertido y competitivo, eso tiene sus cosas buenas y sus cosas malas.&lt;br&gt;
Recuerden que todo lo que escribí es &lt;strong&gt;mi opinión personal&lt;/strong&gt;, les puede servir como no.&lt;br&gt;&lt;br&gt;
Éxitos en las búsquedas! Cualquier duda/feedback/etc me pueden encontrar en:&lt;br&gt;
&lt;a href="https://twitter.com/uhhdai" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/daiana-szwimer" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@daiuszw" rel="noopener noreferrer"&gt;Tik Tok subiendo videos enseñando Javascript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.twitch.tv/daiuszw" rel="noopener noreferrer"&gt;O Twitch&lt;/a&gt; (no muy seguido)&lt;/p&gt;

&lt;p&gt;Fuentes (recomiendo leerlas cuando puedan):&lt;br&gt;
&lt;a href="https://github.com/cassidoo/getting-a-gig" rel="noopener noreferrer"&gt;Getting a Gig&lt;/a&gt; &lt;br&gt;
&lt;a href="https://alejandrocrosa.com/como-entrevistarse-para-un-trabajo-en-tecnologia" rel="noopener noreferrer"&gt;Cómo entrevistarse para un trabajo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://collectednotes.com/alejandro/tips-para-elegir-en-que-startups-trabajar-desde-argentina" rel="noopener noreferrer"&gt;Tips para elegir en qué startups trabajar desde Arg&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/justinnoel/job-hunting-advice-for-developers-5dlp"&gt;Job Hunting Advice For Developers&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hbr.org/2020/09/how-to-get-your-resume-noticed-and-out-of-the-trash-bin" rel="noopener noreferrer"&gt;How To Get Your Resume Noticed And Out Of The Trash Bin&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/yanirs/established-remote" rel="noopener noreferrer"&gt;Established Remote Companies&lt;/a&gt;&lt;br&gt;
&lt;a href="https://gist.github.com/marbiano/66b183bf79b6824d2fff644a41420ab1" rel="noopener noreferrer"&gt;Más lugares donde buscar trabajo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://justjake.substack.com/p/a-hackers-guide-to-job-hunting" rel="noopener noreferrer"&gt;A Hackers Guide To Job Hunting&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/viraptor/reverse-interview" rel="noopener noreferrer"&gt;Reverse Interview&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
