CINXE.COM
Raphael Amorim — Raphael Amorim
<!doctype html> <html lang="en"> <head> <title>Raphael Amorim — Raphael Amorim</title> <!-- Meta --> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="description" content="I am Raphael Amorim. Software Developer Engineer. I love Japanese culture (親日), 70s/80s songs and a lot of 8bit art." /> <meta name="keywords" content="raphael, amorim, developer, open, javascript, python, clojure, source"> <!-- Facebook --> <meta property="og:title" content="Raphael Amorim - Raphael Amorim"/> <meta property="og:type" content="blog"/> <meta property="og:url" content="https://raphamorim.io/"/> <meta property="og:image" content="https://raphamorim.io/assets/images/rapha.jpg"/> <meta property="og:site_name" content="Raphamorim"/> <meta property="og:description" content="I am Raphael Amorim. Software Developer Engineer. I love Japanese culture (親日), 70s/80s songs and a lot of 8bit art."/> <meta property="fb:admins" content="100001780434348" /> <link rel="canonical" href="https://raphamorim.io/" /> <!-- Twitter Cards --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Raphael Amorim - Raphael Amorim"> <meta name="twitter:description" content="I am Raphael Amorim. Software Developer Engineer. I love Japanese culture (親日), 70s/80s songs and a lot of 8bit art."> <meta name="twitter:url" content="https://raphamorim.io/"> <meta name="twitter:image" content="https://raphamorim.io/assets/images/rapha.jpg"/> <!-- Favicon --> <!-- <link rel="shortcut icon" href="../assets/images/favicon.png" type="image/x-icon" /> --> <link rel="icon" href="../assets/images/favicon-32x32.png" type="image/png"> <!-- <link rel="stylesheet" href="../assets/css/base.css" type="text/css" /> --> <link rel="stylesheet" href="../assets/css/base.min.css" type="text/css" /> </head> <body class="about"> <nav> <div class="container"> <a href="/" class="bar-link"> <div class="logo"> <div class="dot"></div> <div class="dot"></div> <div class="dot"></div> </div> </a> <div class="bar-menu"> <ul class="pagenav"> <!-- <a href="/about"><li>About</li></a> --> <!-- <a href="/music"><li>Music</li></a> --> <a href="/articles"><li>Articles</li></a> <a target="_blank" href="https://twitter.com/raphamorims"><li>Twitter</li></a> <a target="_blank" href="https://bsky.app/profile/mustache.bsky.social"><li>Bsky</li></a> <a target="_blank" href="https://github.com/raphamorim"><li>Github</li></a> <!-- <a href="/talks"><li>Talks</li></a> --> <a href="/raphacast"><li>Podcast</li></a> </ul> </div> <div class="nav-toggle"><span/></div> </div> <div id="bar-mobile-menu"> <ul class="pagenav"> <!-- <a href="/about"><li>About</li></a> --> <!-- <a href="/music"><li>Music</li></a> --> <a href="/articles"><li>Articles</li></a> <a target="_blank" href="https://twitter.com/raphamorims"><li>Twitter</li></a> <a target="_blank" href="https://bsky.app/profile/mustache.bsky.social"><li>Bsky</li></a> <a target="_blank" href="https://github.com/raphamorim"><li>Github</li></a> <!-- <a href="/talks"><li>Talks</li></a> --> <a href="/raphacast"><li>Podcast</li></a> </ul> </div> </nav> <div class='main'> <div class="container space"> <div class="container-dialog"> <h2 id="olá--hello--hej-">Olá • Hello • Hej •</h2> <p>My name is Raphael Amorim.</p> <p>Currently, I am working at <a href="https://charm.sh/">Charm</a> to make the command line glamorous. I am also developing a code editor called <a href="https://raphamorim.io/why-am-i-creating-a-new-code-editor">Boo</a> and maintaining the <a href="https://github.com/raphamorim/rio">Rio</a> terminal emulator.</p> <p>Previously, I worked at companies like Viaplay, Spotify, GoDaddy, and Globo.com. I have been a speaker at a few conferences.</p> <p>I was responsible for Viaplay’s adoption of the Rust language. I built the starter infrastructure, released the first service for production, and actively worked on developing a Rust culture, which led to the language’s adoption in the upcoming years, along with many other feats. <a href="https://www.linkedin.com/posts/hugoraphael_i-dont-post-very-often-in-the-linkedin-but-activity-6975346956734738432-Csqi">See when it all started</a>.</p> <p>I wrote <a href="https://www.casadocodigo.com.br/products/livro-webassembly">a book about WebAssembly in Portuguese</a>.</p> <!-- ## Employment <div class="sections"> <div class="section"> <div class="experience">Jan 2021 – Present</div> <div class="project-info"> <strong>Viaplay</strong>, <i>Senior Software Engineer</i><br/> Stockholm, Sweden<br/> Currently working on creating tooling and infrastructure ready for Rust in Viaplay, teaching the language in internal workshops and creating the first Rust microservices in the company.<br/> </div> </div> <div class="section"> <div class="experience">Aug 2020 – Dec 2020</div> <div class="project-info"> <strong>Spotify</strong>, <i>Software Engineer III</i><br/> Stockholm, Sweden<br/> Core developer of an editor for music publishers and internal content editors.<br/> </div> </div> <div class="section"> <div class="experience">Feb 2018 – May 2020</div> <div class="project-info"> <strong>GoDaddy</strong>, <i>Software Development Engineer III</i><br/> USA - Remote<br/> Core developer of GoCentral Website Builder.<br/> </div> </div> <div class="section"> <div class="experience">Jul 2016 – Feb 2018</div> <div class="project-info"> <strong>Globo.com</strong>, <i>Software Developer</i><br/> Rio de Janeiro, Brazil<br/> In the first few months, I worked on topics related to performance, monitoring and metrics. Getting good results, we reduced the latency/time of the TTFB (time to first byte), domContentLoaded and render time. The rendering time was from 14 to 6 seconds. We reduced the bundle file weight by more than half, also we rewrite all old code to work based on asynchronous architecture to help with the rendering time (in this meantime I created a script loader, used even by other companies: https://github.com/raphamorim/nautilus.js).<br/><br/> After working with client-side performance, we started to address work to performance at the server layer (golang and nodejs). From there, began a meticulous job. Profiling code focusing in reduce server response time. We obtained interesting results, finding several memory leaks created by goroutines. We've worked on a server side render where you deliver critical content for rendering only and then asynchronously serves the rest.<br/><br/> In the monitoring sides, we incorporate in several microservices metric on processing, memory, CPU usage and measure of processes queues.<br/><br/> After these works, I went to work on the Webmedia division of Globo.com. Where I became responsible for the cross product video experience componentization.<br/> </div> </div> <div class="section"> <div class="experience">Oct 2015 – Jun 2016</div> <div class="project-info"> <strong>FLAGCX</strong>, <i>Freelance Software Developer</i><br/> Rio de Janeiro, Brazil<br/> As a startup inside a big company, our small team design, build and maintain products that support Business Intelligence teams automating operational tasks, creating metrics and using data visualization techniques to get business insights.<br/> </div> </div> <div class="section"> <div class="experience">Feb 2015 – Oct 2015</div> <div class="project-info"> <strong>Mobdiq</strong>, <i>Backend Nodejs Developer</i><br/> Rio de Janeiro, Brazil<br/> Mobdiq is an indication platform. Focused on mobile devices and large-scale usage. My mission was to create a stable, tested and scalable API using technologies such as nodejs and MongoDB.<br/><br/> We developed the entire architecture based on distributed queues and workers to do different tasks. During the development phase in the project, a lot of internal logic became distributed open modules (tested and versioned) to serve other developers.<br/> </div> </div> <div class="section"> <div class="experience">Oct 2014 - Feb 2015</div> <div class="project-info"> <strong>ONYO</strong>, <i>Fullstack Developer</i><br/> Rio de Janeiro, Brazil<br/> Acting as fullstack developer, working using python in API design. After working in the client-side layer, using technologies such as HTML5 and JavaScript.<br/> </div> </div> <div class="section"> <div class="experience">Oct 2013 - Sep 2014 </div> <div class="project-info"> <strong>Videolog.tv</strong>, <i>Junior Developer</i><br/> Rio de Janeiro, Brazil<br/> Videolog is a Brazilian version of Youtube, it was born before the famous video portal but have not achieved the same success.<br/><br/> The scenario was full of challenges, there was no automated tests, Git repositories used to be a huge mess, there were thousands of useless lines of code, serious security issues, some core parts of the systems were so coupled that testing them in a development environment became very difficult, and so on. In seven months working hard with the team, we were able to:<br/><br/> • Stop using Git as it was SVN and adopt a simplified version of Git Flow;<br/> • Start to develop a new REST API 100% covered by tests;<br/> • Deploy the first version of an in-house video encoder that was delayed for more than one year;<br/> • Increase the uptime of the main product from 82% to 99%; • Deploy another MVP: http://puffer.tv;<br/> • Write setup scripts for almost all projects;<br/> • Automatize a bunch of small tasks.<br/><br/> We use Javascript (node.js) and PHP as main languages, Ruby in one little Rails app and in deploy scripts, MySQL and MongoDB as databases, all deployed on Amazon infrastructure. </div> </div> <div class="section"> <div class="experience">Jul 2013 - Oct 2013</div> <div class="project-info"> <strong>Xgo Servicos Empresariais</strong>, <i>Software Developer Internship</i><br/> Rio de Janeiro, Brazil<br/> Working as a frontend developer (HTML5, CSS3, JS) and backend developer (Java and PHP).<br/> </div> </div> </div> --> <h2 id="talks">Talks</h2> <div class="sections"> <div class="section"> <div class="date">Nov 2023</div> <div class="title"><a href="https://www.youtube.com/watch?v=wvccOkvpbY0">Bring Gameboy alive in the Web with Rust and WebAssembly</a> - RustLab Italy</div> </div> <div class="section"> <div class="date">Jul 2019</div> <div class="title"><a href="https://www.youtube.com/watch?v=0--wKsxl-i4">UI Engineering with WebAssembly and React</a> - Front In Sampa</div> </div> <div class="section"> <div class="date">Nov 2018</div> <div class="title"><a href="https://www.youtube.com/watch?v=Hz_WTWb3sV4">Writing Your Own React Renderer</a> - React Day Berlin</div> </div> <div class="section"> <div class="date">Oct 2018</div> <div class="title"><a href="https://www.youtube.com/watch?v=Hz_WTWb3sV4">Writing Your Own React Renderer</a> - React Conf Brazil</div> </div> <div class="section"> <div class="date">Sep 2017</div> <div class="title"><a href="https://www.youtube.com/watch?v=QYHL7xxwGCM">Understanding Memory Behavior on NodeJS</a> - The Conf</div> </div> <div class="section"> <div class="date">Nov 2016</div> <div class="title"><a href="https://www.youtube.com/watch?v=BuSP89XOTro">Using Canvas Components</a> - Graphical Web UK</div> </div> <div class="section"> <div class="date">Oct 2016</div> <div class="title"><a href="https://www.youtube.com/watch?v=1Mr1hgUsTTA">500 Days of Open Source</a> - Python Brazil</div> </div> <div class="section"> <div class="date">Jul 2016</div> <div class="title">The Mighty WebGL - Free Software International Forum</div> </div> <div class="section"> <div class="date">Aug 2015</div> <div class="title"><a href="https://www.youtube.com/watch?v=toCdZ2e9Dh4">500 Days of Open Source</a> - BrazilJs</div> </div> </div> <!-- ## Projects Escapades in research and development, ranging from serious research projects to one-off diversions. <div class="sections"> <div class="section"> <div class="project">Rio</div> <div class="project-info">I wrote a terminal called Rio, which is built over WebGPU, WebAssembly and Rust. The WebGPU API makes it suitable for general purpose graphics and compute on the GPU.<br/><br/> Rio terminal is largely used by many developers nowadays, having featured multiple times into Github's trending projects.<br/><br/> Github: <a href="https://github.com/raphamorim/rio">https://github.com/raphamorim/rio</a><br/> Website: <a href="https://raphamorim.io/rio/">https://raphamorim.io/rio</a><br/> Hacker News: <a href="https://news.ycombinator.com/item?id=36057687">https://news.ycombinator.com/item?id=36057687</a><br/> Product Hunt: <a href="https://www.producthunt.com/posts/rio-terminal">https://www.producthunt.com/posts/rio-terminal</a><br/> <br/> </div> </div> <div class="section"> <div class="project">React TV</div> <div class="project-info">React TV is an ecosystem for TV based React applications (from the renderer to CLI for pack/build applications).<br/><br/> The development of React TV has stopped and the project is not longer maintained however has been responsible for few hundreds of applications releases for TVs. React TV has also featured on Github trending worldwide project list.<br/><br/> Github: <a href="https://github.com/raphamorim/react-tv">https://github.com/raphamorim/react-tv</a><br/> Medium: <a href="https://medium.com/@raphamorim/developing-for-tvs-with-react-tv-b5b5204964ef">https://medium.com/@raphamorim/developing-for-tvs-with-react-tv-b5b5204964ef</a><br/> </div> </div> <br/> <div class="section"> <div class="project">React Ape</div> <div class="project-info">React Ape tries to solve same problem that React TV target to fix but uses a different approach. React Ape does not use <i>Document Object Model</i> for rendering, instead uses <i>HTML5 Canvas</i> and WebGL.<br/><br/> The reason behind React Ape choices is that craft a high-performance TV user interface based on <i>DOM</i> is a real challenge, because of limited graphics acceleration, single core <i>CPUs</i> and high memory usage for a common TV App. These restrictions make any user experience targetting 60 <i>frames per second</i> quite tricky on the development side. The strategy is step in the renderer based on a hardware-accelerated canvas.<br/><br/> Github: <a href="https://github.com/raphamorim/react-ape">https://github.com/raphamorim/react-ape</a><br/> Hacker News: <a href="https://news.ycombinator.com/item?id=31492028">https://news.ycombinator.com/item?id=31492028</a> </div> </div> </div> Worth mentioning other projects that I have created: Lucario - *A color scheme/theme with more than one million downloads, Github: [github.com/raphamorim/lucario](https://github.com/raphamorim/lucario/)*. Native-CSS - *A conversor of pure CSS to javascript literal objects or React Style objects. It was used by Google in few projects for many years. Github: [github.com/raphamorim/native-css](https://github.com/raphamorim/native-css)*. Origamijs - *Lightweight Library to create using HTML5 Canvas. Origamijs was used by Mozilla and other code schools to teach programming for kids. Github [github.com/raphamorim/origami.js](https://github.com/raphamorim/origami.js)*. <br/> --> <!-- ## Volunteering <div class="sections"> <div class="section"> <div class="project">Teacher</div> <div class="project-info"> Django Girls (2015-2017) <p>Django Girls is a non-profit organization that empowers and helps women to organize free, one-day programming workshops by providing tools, resources and support.</p><br/><br/></div> </div> <div class="section"> <div class="project">Teacher</div> <div class="project-info"> Mozilla (2015-2016) <p>The Rio Mozilla Club was a social project that seeks to transform Lan Centers in multidisciplinary areas of informal learning and exchange of experience in digital culture. We want to make web users in content producers and not just consumers of media.</p> <p>We believe digital skills are essential for participation in the 21 century and everyone can take more advantage about the knowledge in the many areas of Internet, Web and content creation.<br/><br/></p> </div> </div> </div> --> </div> </div> </div> <script src="https://raphamorim.io/assets/js/app.js" async></script> </body> </html>