<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.0">Jekyll</generator><link href="https://adrianmato.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://adrianmato.com/" rel="alternate" type="text/html" /><updated>2026-08-28T22:54:55-07:00</updated><id>https://adrianmato.com/feed.xml</id><title type="html">Adrián Mato – Designer at XBOX, leading developer &amp;amp; creator tools</title><subtitle>Designing &amp; building tools for developers at XBOX. Startup investor.</subtitle><author><name>Adrián Mato</name></author><entry><title type="html">Teaching my agents to work alongside me</title><link href="https://adrianmato.com/blog/agents/teaching-my-agents-to-work-alongside-me/" rel="alternate" type="text/html" title="Teaching my agents to work alongside me" /><published>2026-08-26T06:06:00-07:00</published><updated>2026-08-26T06:06:00-07:00</updated><id>https://adrianmato.com/blog/agents/teaching-my-agents-to-work-alongside-me</id><content type="html" xml:base="https://adrianmato.com/blog/agents/teaching-my-agents-to-work-alongside-me/">&lt;p&gt;Most of the conversation around agents is still about making more, faster.&lt;/p&gt;

&lt;p&gt;I’m more interested in something slower: teaching my own agents how I work, so I can stay close to more of the work without lowering the bar.&lt;/p&gt;

&lt;p&gt;That’s the idea I’m interested in: &lt;strong&gt;reach without dilution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Yesterday I watched a &lt;a href=&quot;https://x.com/0xCodez/status/2091980766372639135&quot;&gt;great presentation&lt;/a&gt; by &lt;a href=&quot;https://x.com/poteto&quot;&gt;@poteto&lt;/a&gt; where they compared building a team of agents to running an engineering team. That analogy stuck with me.&lt;/p&gt;

&lt;p&gt;A team doesn’t become autonomous because you keep handing people tasks. In my experience leading teams, people gradually absorb what the work is for, what good looks like, and what you refuse to compromise on. They understand not just what you want, but why.&lt;/p&gt;

&lt;p&gt;Looking through &lt;a href=&quot;https://github.com/cursor/plugins/tree/main/pstack&quot;&gt;pstack&lt;/a&gt;, what struck me wasn’t really the automation. It was seeing one person’s way of building made explicit enough for an agent to actually use.&lt;/p&gt;

&lt;p&gt;This is also why I’m skeptical of blindly downloading someone else’s giant pile of skills, pretending it’ll just work, and calling it a day.&lt;/p&gt;

&lt;p&gt;The interesting part of &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/poteto-mode&lt;/code&gt;&lt;/strong&gt; isn’t the pile of skills. It’s the work behind it: someone gradually making their instincts, standards, and way of building understandable to agents.&lt;/p&gt;

&lt;p&gt;Borrowing those skills can help. But using them as a substitute for figuring out my own way of working? Not super inspiring.&lt;/p&gt;

&lt;p&gt;That work is slow, but it compounds.&lt;/p&gt;

&lt;p&gt;I have a bad habit of thinking I need to do everything myself. Partly because doing the work is satisfying. Partly because the sense of progression is addictive. And partly because every handoff feels like something might get lost.&lt;/p&gt;

&lt;p&gt;Most of the time I know pretty clearly what I want to make. The problem is the hundred small obstacles between the idea and the thing. They eat attention. Sometimes I end up making the idea smaller or lowering the bar simply because I can’t hold everything at once.&lt;/p&gt;

&lt;p&gt;Maybe the real constraint isn’t output. It’s how much of the work I can stay close enough to care about.&lt;/p&gt;

&lt;p&gt;That’s why I don’t want agents to detach me from the work and manufacture more stuff. It’s literally the opposite.&lt;/p&gt;

&lt;p&gt;I’m interested in whether they can remove some of that friction without pulling me away from the decisions and details I care about.&lt;/p&gt;

&lt;p&gt;I don’t really think of them as minions. More like partners I’m gradually teaching how to work with me.&lt;/p&gt;

&lt;p&gt;The funny thing is, teaching them forces me to understand myself better too.&lt;/p&gt;

&lt;p&gt;Things that used to live vaguely in my head suddenly need words. I have to explain why something feels wrong, why one choice is better, and where the quality bar actually is. In doing that, I end up questioning and sharpening my own taste.&lt;/p&gt;

&lt;p&gt;I have no interest in shipping more slop faster. I’d rather ship less, with more ambition and care, while being able to shape parts of the work I simply couldn’t reach before.&lt;/p&gt;

&lt;p&gt;None of this happens overnight. I get things wrong, correct them, and try again. Eventually, hopefully, they start getting more of what I mean without me having to explain every little thing.&lt;/p&gt;

&lt;p&gt;Maybe that’s the promise of agents I’m most excited about: more room to be ambitious about the things only I would make, while the work still feels like mine.&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="agents" /><summary type="html">Most of the conversation around agents is still about making more, faster.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/teaching-my-agents-to-work-alongside-me.png?v=90ee93d2" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/teaching-my-agents-to-work-alongside-me.png?v=90ee93d2" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Remote work is a blessing and a competitive edge</title><link href="https://adrianmato.com/blog/design/hiring/startups/remote/remote-work-is-blessing-competitive-edge/" rel="alternate" type="text/html" title="Remote work is a blessing and a competitive edge" /><published>2025-01-31T01:30:00-08:00</published><updated>2025-01-31T01:30:00-08:00</updated><id>https://adrianmato.com/blog/design/hiring/startups/remote/remote-work-is-blessing-competitive-edge</id><content type="html" xml:base="https://adrianmato.com/blog/design/hiring/startups/remote/remote-work-is-blessing-competitive-edge/">&lt;p&gt;&lt;strong&gt;Talent is everywhere. Opportunity is not.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As we welcome our &lt;a href=&quot;https://bsky.app/profile/did:plc:fwjnjhsdebcvhstqd2ab2z7c/post/3lgy5ckbznc22&quot;&gt;newest Design Engineer&lt;/a&gt; to the &lt;a href=&quot;https://github.com/features/copilot&quot;&gt;Copilot&lt;/a&gt; Design team, I’ve noticed a trend—the last four hires have all been from Europe. Many of GitHub’s most talented designers are overseas, complementing a widely distributed North American workforce across timezones.&lt;/p&gt;

&lt;p&gt;In contrast, &lt;strong&gt;many CEOs continue pushing for office returns, insisting that AI and innovation can only thrive in San Francisco&lt;/strong&gt;. This coordinated narrative makes me question the real motivation behind it. Is it truly about productivity, or is it more about keeping office landlords, VCs, and gatekeepers happy?&lt;/p&gt;

&lt;p&gt;Funny enough, &lt;strong&gt;DeepSeek&lt;/strong&gt; caught everyone off guard &lt;a href=&quot;https://api-docs.deepseek.com/news/news250120&quot;&gt;this week&lt;/a&gt;, proving once again that innovation and creativity aren’t exclusive to a limited group of people nor region—and that great things can happen anywhere in the world.&lt;/p&gt;

&lt;p&gt;Many startups, including my current employer &lt;a href=&quot;https://github.com&quot;&gt;GitHub&lt;/a&gt;, thrived on remote work. Yet, many remote-friendly companies are pulling back—not because remote work failed, but because they have failed to &lt;a href=&quot;https://adrianmato.com/blog/industry/opinion/bigger-isnt-better-companies-scale-dilemma/&quot;&gt;scale&lt;/a&gt; effectively. When a startup grows from 100 to thousands, bureaucracy creeps in, and efficiency crumbles. The trust that fueled innovation erodes, and leadership fears losing oversight. In that scenario, remote workers seem less convenient than chair-warmers at the office.&lt;/p&gt;

&lt;p&gt;However, most modern work is already remote. Teams sit in offices wearing noise-canceling headphones, joining video calls with peers in the same building. &lt;strong&gt;If it was this simple, companies wouldn’t struggle to ship while their offices are full&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Don’t get me wrong, I love in-person collaboration. I love grabbing a piece of paper and a pencil, a marker and a whiteboard, and have deep discussions. My early days at GitHub were filled with camaraderie and valuable spontaneous conversations at the office. Most of this is replicable with async video walkthroughs, iPad sketch sharing, and other remote collaboration tools. In fact, most of us are building those tools to foster collaboration.&lt;/p&gt;

&lt;p&gt;Companies that are able to see past trends, and find a hybrid model to allow them to identify, attract, and retain talent will outcompete those stuck in the 20th-century. Back in the day job-hopping wasn’t as common, but forcing relocation in a hyper-connected world is backward. People have family, friends, and a community that made them who they are today.&lt;/p&gt;

&lt;p&gt;Remote work isn’t for everyone. It demands proactivity, clear communication, and strong independence— qualities that matter anywhere remotely or at the office.&lt;/p&gt;

&lt;p&gt;Many of the world’s brightest minds have come to the U.S., made significant contributions, grew, and then left—driven away by visa barriers, personal priorities, or simply a different lifestyle. Meanwhile, hidden talent in small towns worldwide keeps refining their craft, waiting for a chance. I write this from a privileged perspective—as a Spaniard who moved to the U.S., built a career in tech, and helped shape one of the most successful AI-driven products. I know firsthand how hard it is to break in and how many obstacles stand in the way. There’s nothing better than finding someone in the middle of nowhere doing their best work.&lt;/p&gt;

&lt;p&gt;Focus on output, not attendance. The best teams aren’t built by location. They’re built by &lt;strong&gt;finding the best minds, wherever they are&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talent wins. Attract it. Build the best team possible. Win.&lt;/strong&gt;&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="design" /><category term="hiring" /><category term="startups" /><category term="remote" /><summary type="html">Talent is everywhere. Opportunity is not.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/remote-work-is-blessing-competitive-edge.png?v=8da70f84" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/remote-work-is-blessing-competitive-edge.png?v=8da70f84" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Podcast interview: designing GitHub Copilot with Software Engineering Daily</title><link href="https://adrianmato.com/blog/design/interview/software-engineering-daily-interview-github-copilot/" rel="alternate" type="text/html" title="Podcast interview: designing GitHub Copilot with Software Engineering Daily" /><published>2024-03-14T06:00:00-07:00</published><updated>2024-03-14T06:00:00-07:00</updated><id>https://adrianmato.com/blog/design/interview/software-engineering-daily-interview-github-copilot</id><content type="html" xml:base="https://adrianmato.com/blog/design/interview/software-engineering-daily-interview-github-copilot/">&lt;p&gt;I’m thrilled to share that I recently made my first-ever podcast appearance, and what a better way to kick things off than on the &lt;a href=&quot;https://softwareengineeringdaily.com/2024/03/14/design-at-github-copilot-with-adrian-mato-gondelle/&quot;&gt;Software Engineering Daily podcast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/software-engineering-interview.png&quot; alt=&quot;Software Engineering Daily podcast interview&quot; /&gt;&lt;/p&gt;

&lt;p&gt;During the episode, I had the pleasure of speaking with &lt;a href=&quot;https://twitter.com/JordiMonPMM&quot;&gt;Jordi Mon&lt;/a&gt; about the challenges and trade-offs involved in designing GitHub Copilot for scale. Looking back on what felt like cutting-edge technology in mid-2023, before GitHub Universe, it now brings both a smile to my face and a touch of embarrassment 😅.&lt;/p&gt;

&lt;p&gt;Feel free to listen to the &lt;a href=&quot;https://softwareengineeringdaily.com/2024/03/14/design-at-github-copilot-with-adrian-mato-gondelle/&quot;&gt;&lt;strong&gt;full interview here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to Jordi and the team for having me!&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="design" /><category term="interview" /><summary type="html">I’m thrilled to share that I recently made my first-ever podcast appearance, and what a better way to kick things off than on the Software Engineering Daily podcast.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/software-engineering-daily-interview-github-copilot.png?v=74cecaca" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/software-engineering-daily-interview-github-copilot.png?v=74cecaca" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bigger isn’t better: the companies scale dilemma</title><link href="https://adrianmato.com/blog/industry/opinion/bigger-isnt-better-companies-scale-dilemma/" rel="alternate" type="text/html" title="Bigger isn’t better: the companies scale dilemma" /><published>2023-09-14T10:34:00-07:00</published><updated>2023-09-14T10:34:00-07:00</updated><id>https://adrianmato.com/blog/industry/opinion/bigger-isnt-better-companies-scale-dilemma</id><content type="html" xml:base="https://adrianmato.com/blog/industry/opinion/bigger-isnt-better-companies-scale-dilemma/">&lt;p&gt;We need more companies &lt;strong&gt;doing fewer things&lt;/strong&gt;, fewer features, and requiring fewer employees. Building high-quality software is fun when you have focus and a tight team.&lt;/p&gt;

&lt;p&gt;The current scale of most teams and the absurd financial goals make a large portion of this industry unbearable.&lt;/p&gt;

&lt;p&gt;Redistributing the workforce among a broader spectrum of companies will generate more competition and ownership. The ultimate beneficiaries? End-users who enjoy better products and solutions.&lt;/p&gt;

&lt;p&gt;The scale pushes us to generate intermediate layers of tech, processes, middle management, and other fat, distracting us from creating better products.&lt;/p&gt;

&lt;p&gt;Simply downsizing and flattening organizations isn’t the answer. Companies need to reduce commitments and laser-focus on genuine value delivery.&lt;/p&gt;

&lt;p&gt;Most of these problems have been auto-infringed. It’s puzzling to see hyper-growth startups sprinting into the scale issue as soon as they raise some money. Rather than benefiting from focus and competitive advantage, they jump right into the fire with the rest of the companies.&lt;/p&gt;

&lt;p&gt;But here’s the truth: introducing more processes and trying to generate order in a bloated, stressful system that’s overly ambitious won’t work; it will burn out most of your team.&lt;/p&gt;

&lt;p&gt;These distractions divert our focus from crafting delightful products and building sustainable teams. Let’s recalibrate and aspire to do better.&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="industry" /><category term="opinion" /><summary type="html">We need more companies doing fewer things, fewer features, and requiring fewer employees. Building high-quality software is fun when you have focus and a tight team.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/bigger-isnt-better-companies-scale-dilemma.png?v=0a82aa00" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/bigger-isnt-better-companies-scale-dilemma.png?v=0a82aa00" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Speeding up the TypeScript development flow for instant feedback</title><link href="https://adrianmato.com/blog/coding/speeding-up-typescript-development-flow-instant-feedback/" rel="alternate" type="text/html" title="Speeding up the TypeScript development flow for instant feedback" /><published>2021-09-05T14:00:00-07:00</published><updated>2021-09-05T14:00:00-07:00</updated><id>https://adrianmato.com/blog/coding/speeding-up-typescript-development-flow-instant-feedback</id><content type="html" xml:base="https://adrianmato.com/blog/coding/speeding-up-typescript-development-flow-instant-feedback/">&lt;p&gt;I recently started porting &lt;a href=&quot;/blog/worklog/github-pewpew-cli-delete-github-unnecessary-repositories/&quot;&gt;github-pewpew&lt;/a&gt; to TypeScript. I enjoy using types, but I struggle with the developer velocity due to compilation times.&lt;/p&gt;

&lt;p&gt;I tried enabling a &lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/configuring-watch.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--watch&lt;/code&gt;&lt;/a&gt; implementation so that my project will compile on the fly. That way, I have it ready to go when running my application. While the experience has improved, it’s still slow when I need instant feedback on my changes. I also tried turning on the &lt;a href=&quot;https://www.typescriptlang.org/tsconfig#incremental&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--incremental&lt;/code&gt;&lt;/a&gt; flag decreasing times by 200ms to 300ms.&lt;/p&gt;

&lt;p&gt;I’m not alone, the community is &lt;a href=&quot;https://github.com/microsoft/TypeScript/issues/29651&quot;&gt;discussing about it&lt;/a&gt;. The biggest advantage is to transpile skipping  types checking, but it’s not supported. This is where the &lt;a href=&quot;https://swc.rs&quot;&gt;&lt;strong&gt;SWC compiler&lt;/strong&gt;&lt;/a&gt; comes in.&lt;/p&gt;

&lt;h2 id=&quot;aiming-for-instant-feedback-with-swc&quot;&gt;Aiming for instant feedback with SWC&lt;/h2&gt;

&lt;p&gt;SWC is a typescript / javascript compiler written in Rust that’s blazingly fast. They claim to be “&lt;i&gt;20x faster than babel on single thread, and 70x faster on 4 core benchmark&lt;/i&gt;”.&lt;/p&gt;

&lt;p&gt;Here’s the comparison between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;swc&lt;/code&gt; transpiling a project with three simple files:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2021/tsc-vs-swc.gif&quot; alt=&quot;Preview comparison between tsc and swc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The left side is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsc&lt;/code&gt;; the right side is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;swc&lt;/code&gt;. SWC finishes way faster even when I run the command later. It’s almost &lt;strong&gt;1.5 seconds faster&lt;/strong&gt; compiling just three files.&lt;/p&gt;

&lt;p&gt;Setting up SWC it’s pretty straightforward. I installed it as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependency&lt;/code&gt;, and added some commands in my &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;&lt;/strong&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;clean&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rm -rf dist&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;prebuild&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;npm run clean&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tsc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;npm run build --silent &amp;amp;&amp;amp; node dist/index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node node_modules/@swc/cli/bin/swc src --out-dir dist --delete-dir-on-start --quiet &amp;amp;&amp;amp; node dist/index&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dev&lt;/code&gt; command calls &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;swc&lt;/code&gt;, sets up the output folder, and makes sure previous builds are deleted before starting.&lt;/p&gt;

&lt;p&gt;It’s even more noticeable when working in more complex projects. Here’s another comparison running both at the same time using pipes:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2021/tsc-vs-swc-pipes.gif&quot; alt=&quot;Preview comparison between tsc and swc run at the same time&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;whats-the-trick&quot;&gt;What’s the trick?&lt;/h2&gt;

&lt;p&gt;Rust always gets a lot of praise for its speed, but it’s not just that: it’s skipping the types checking to go even faster. This is not something you want when building your final build to distribute. That’s why I keep a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build&lt;/code&gt; command using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsc&lt;/code&gt; to build the final version of my application.&lt;/p&gt;

&lt;p&gt;Does this mean I’m not taking advantage of type checking while developing? Not at all; VSCode TypeScript support will still throw errors and warnings in real-time.&lt;/p&gt;

&lt;p&gt;The trade-off here is we need to maintain aligned two configuration files &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsconfig.json&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.swcrc&lt;/code&gt;. They don’t share the same properties, but it’s easy to guess because naming it’s self-explanatory.&lt;/p&gt;

&lt;p&gt;Here’s an example of my &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.swcrc&lt;/code&gt;&lt;/strong&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;jsc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;parser&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;decorators&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;dynamicImport&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;syntax&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;typescript&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;transform&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;decoratorMetadata&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;legacyDecorator&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;keepClassNames&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;loose&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;es2018&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;module&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;lazy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;noInterop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;strict&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;strictMode&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;commonjs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;sourceMaps&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;inline&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And here’s the &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tsconfig.json&lt;/code&gt;&lt;/strong&gt; file:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;compilerOptions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;allowJs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;esModuleInterop&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;incremental&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;module&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;commonjs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;moduleResolution&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;outDir&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;./dist&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;resolveJsonModule&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;rootDir&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;src&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;skipLibCheck&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;strict&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ES2015&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;looking-forward-to-a-faster-cycle&quot;&gt;Looking forward to a faster cycle&lt;/h2&gt;

&lt;p&gt;The worst and best part of the JavaScript community is how fast is changing every day. I’ve already seen &lt;a href=&quot;https://twitter.com/jarredsumner/status/1390084458724741121?lang=en&quot;&gt;other folks&lt;/a&gt; in the community working on faster alternatives. I can’t wait to see what comes next to ease our developer experience!&lt;/p&gt;

&lt;h2 id=&quot;do-you-have-any-tips&quot;&gt;Do you have any tips?&lt;/h2&gt;

&lt;p&gt;I’d love to know if you are using SWC or something else to speed up your developer velocity. Hit me up on &lt;a href=&quot;https://twitter.com/adrianmg&quot;&gt;Twitter&lt;/a&gt; at any time.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://luciagm.net&quot;&gt;Lucia&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/tylosan&quot;&gt;Jorge&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/sergiou87&quot;&gt;Sergio&lt;/a&gt; for the feedback before publishing this article.&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="coding" /><summary type="html">I recently started porting github-pewpew to TypeScript. I enjoy using types, but I struggle with the developer velocity due to compilation times.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/speeding-up-typescript-development-flow-instant-feedback.png?v=cc1f6bb7" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/speeding-up-typescript-development-flow-instant-feedback.png?v=cc1f6bb7" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">github-pewpew: a CLI tool to clean up and remove unnecessary GitHub repositories. 🔫 Pew pew!</title><link href="https://adrianmato.com/blog/worklog/github-pewpew-cli-delete-github-unnecessary-repositories/" rel="alternate" type="text/html" title="github-pewpew: a CLI tool to clean up and remove unnecessary GitHub repositories. 🔫 Pew pew!" /><published>2021-08-11T06:56:00-07:00</published><updated>2021-08-11T06:56:00-07:00</updated><id>https://adrianmato.com/blog/worklog/github-pewpew-cli-delete-github-unnecessary-repositories</id><content type="html" xml:base="https://adrianmato.com/blog/worklog/github-pewpew-cli-delete-github-unnecessary-repositories/">&lt;p&gt;&lt;a href=&quot;https://badge.fury.io/js/github-pewpew&quot;&gt;&lt;img src=&quot;https://badge.fury.io/js/github-pewpew.svg&quot; alt=&quot;npm version&quot; height=&quot;18&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2021/github-pewpew.gif&quot; alt=&quot;github-pewpew preview&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;
&lt;p&gt;Have you ever had too much fun with the GitHub API and ended up creating too many dummy repos? Me too 😅!&lt;/p&gt;

&lt;p&gt;I made this little CLI tool to clean up repositories quickly. I’m planning to add some flags and regexp to delete in bulk in the future. &lt;a href=&quot;http://twitter.com/adrianmg&quot;&gt;Let me know&lt;/a&gt; if that sounds interesting to you.&lt;/p&gt;

&lt;p&gt;Get the &lt;a href=&quot;https://www.npmjs.com/package/github-pewpew/&quot;&gt;latest version&lt;/a&gt; published in npm. It’s &lt;a href=&quot;https://github.com/adrianmg/github-pewpew&quot;&gt;open-sourced on GitHub&lt;/a&gt; under MIT license.&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;-github-pewpew-v122-on-april-5-2022&quot;&gt;📦 github-pewpew v1.2.2 on April 5, 2022&lt;/h3&gt;

&lt;p&gt;A new &lt;a href=&quot;https://www.npmjs.com/package/github-pewpew/v/1.2.2&quot;&gt;version 1.2.2&lt;/a&gt; has been published to npm. It’s a minor update, but it’s a special one: we are launching a brand &lt;a href=&quot;/pewpew&quot;&gt;new website&lt;/a&gt; and logo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2022/github-pewpew-1.png&quot; alt=&quot;github-pewpew preview&quot; /&gt;&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;-github-pewpew-v120-on-august-24-2021&quot;&gt;📦 github-pewpew v1.2.0 on August 24, 2021&lt;/h3&gt;

&lt;p&gt;I published version &lt;a href=&quot;https://www.npmjs.com/package/github-pewpew/v/1.2.0&quot;&gt;github-pewpew v 1.2.0&lt;/a&gt; to npm. A much-needed refactor after v1.1.0 that improves the overall stability of the app. You can now get more than 100 results, as there was no pagination in prior versions.&lt;/p&gt;

&lt;p&gt;Many bugs have been fixed, and the authentication process is now more robust when tokens get invalidated in different scenarios. I’ve also added some &lt;a href=&quot;https://github.com/adrianmg/github-pewpew/blob/main/test/test.js&quot;&gt;testing using Mocha&lt;/a&gt; to cover the authentication flow.&lt;/p&gt;

&lt;p&gt;Next, I’m porting everything to TypeScript. I hope you like it, and thanks for the feedback!&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;-github-pewpew-v113-on-august-14-2021&quot;&gt;📦 github-pewpew v1.1.3 on August 14, 2021&lt;/h3&gt;

&lt;p&gt;A new version &lt;a href=&quot;https://www.npmjs.com/package/github-pewpew/v/1.1.3&quot;&gt;github-pewpew v 1.1.3&lt;/a&gt; is published in npm. It’s an important update as it’s making it way easier to use than before. It’s also lighter in size.&lt;/p&gt;

&lt;p&gt;The auth solution wasn’t too friendly, so I re-implemented it using &lt;a href=&quot;https://github.com/octokit/octokit.js#oauth&quot;&gt;&lt;strong&gt;OAuth&lt;/strong&gt;&lt;/a&gt;, and it’s working like a charm. Plus, it doesn’t need to ask for the username. You automatically get a validation code copied to your clipboard, paste it, and you are good to go! Kudos to &lt;a href=&quot;https://twitter.com/mamuso&quot;&gt;@mamuso&lt;/a&gt; for suggesting me this mechanism I never used before.&lt;/p&gt;

&lt;p&gt;I also added &lt;strong&gt;persistent configuration&lt;/strong&gt;. There’s no more need to sign in every time you run the command. During this implementation, I learned about &lt;a href=&quot;https://nodejs.org/api/os.html#os_os_homedir&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os.homedir()&lt;/code&gt;&lt;/a&gt;, the differences between operating systems, and how they store user configuration files.&lt;/p&gt;

&lt;p&gt;Here’s how it works:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;getConfigDir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;homeDir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;configDir&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;homeDir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;platform&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;win32&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;AppData&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Roaming&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;PACKAGE_AUTHOR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;PACKAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Library&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`com.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PACKAGE_AUTHOR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PACKAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;configDir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Windows: adrianmg\AppData\Roaming\adrianmg\github-pewpew&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// macOS/UNIX: /Users/adrianmg/Library/com.adrianmg.github-pewpew&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The win32 solution won’t work for systems older than Windows Vista. I guess that’s OK in 2021? Some npm packages provide a robust solution covering all the different platforms, but it felt like a waste of weight for such a small tool. Plus, I’m learning a few things along the way.&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;-github-pewpew-v100-on-august-11-2021&quot;&gt;📦 github-pewpew v1.0.0 on August 11, 2021&lt;/h3&gt;

&lt;p&gt;The first public version, &lt;a href=&quot;https://www.npmjs.com/package/github-pewpew/v/1.0.0&quot;&gt;github-pewpew v 1.0.0&lt;/a&gt; released on npm. The authentification is relying on both e-mail and PAT (Personal Acess Token) with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repo_delete&lt;/code&gt; scope. Although it works, it’s adding too much friction as the user must constantly copy and paste the value to get permissions to delete repositories.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2021/github-pewpew-1.gif&quot; alt=&quot;github-pewpew preview&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’m planning to reduce friction via a refactor that will use OAuth as the mechanism to get permissions.&lt;/p&gt;

&lt;h2 id=&quot;questions-ideas-bugs&quot;&gt;Questions? Ideas? Bugs?&lt;/h2&gt;

&lt;p&gt;If you run into any issues or you’d like to share your thoughts, feel free to &lt;a href=&quot;https://github.com/adrianmg/github-pewpew/issues&quot;&gt;open an issue&lt;/a&gt; in this repository or hit me up on &lt;a href=&quot;https://twitter.com/adrianmg&quot;&gt;Twitter&lt;/a&gt;.&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="worklog" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/github-pewpew-cli-delete-github-unnecessary-repositories.png?v=8ca68154" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/github-pewpew-cli-delete-github-unnecessary-repositories.png?v=8ca68154" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Improving the experience of GitHub Actions Logs</title><link href="https://adrianmato.com/blog/design/improving-experience-github-actions-logs/" rel="alternate" type="text/html" title="Improving the experience of GitHub Actions Logs" /><published>2020-12-03T10:00:00-08:00</published><updated>2020-12-03T10:00:00-08:00</updated><id>https://adrianmato.com/blog/design/improving-experience-github-actions-logs</id><content type="html" xml:base="https://adrianmato.com/blog/design/improving-experience-github-actions-logs/">&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/cover.png&quot; alt=&quot;GitHub Logs improvements&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s now even easier to review logs from your GitHub Actions workflow runs. We’ve introduced several improvements to make the experience more performant, precise, and pleasing to use.&lt;/p&gt;

&lt;h2 id=&quot;why-these-changes-matter&quot;&gt;Why these changes matter&lt;/h2&gt;

&lt;p&gt;When we think about successful automation, we aim to spend the least amount of time looking at what’s automated, so we can focus our attention on what’s relevant. But sometimes things don’t go as planned, and we are required to review what happened. That debugging process can be frustrating; that’s why we’re introducing a series of changes that will improve both performance and user experience:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Simplified the &lt;strong&gt;layout structure&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Introduced a &lt;strong&gt;single and faster virtualized scrolling&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The &lt;strong&gt;search&lt;/strong&gt; is now more responsive&lt;/li&gt;
  &lt;li&gt;Better ANSI, 8-bit, and 24-bit &lt;strong&gt;color support&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;URLs&lt;/strong&gt; are now interactive&lt;/li&gt;
  &lt;li&gt;A new &lt;strong&gt;full-screen view&lt;/strong&gt; mode&lt;/li&gt;
  &lt;li&gt;A &lt;strong&gt;refreshed UI&lt;/strong&gt; that improves readability and overall interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because a picture is worth a thousand words, here’s an overview of the changes:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-01.png&quot; class=&quot;test&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-01.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;super-charging-the-debugging-process&quot;&gt;Super-charging the debugging process&lt;/h2&gt;

&lt;p&gt;The performance gains will make your logs &lt;strong&gt;load faster&lt;/strong&gt; and &lt;strong&gt;smoother when scrolling&lt;/strong&gt;. It’s more apparent in logs with thousands of lines. We also felt it was an excellent time to improve the overall experience, putting a particular emphasis on readability and the interactions to make the UI more responsive and precise.&lt;/p&gt;

&lt;p&gt;Let’s dive into these changes.&lt;/p&gt;

&lt;h3 id=&quot;layout-structure-and-a-single-scroll&quot;&gt;Layout structure and a single scroll&lt;/h3&gt;

&lt;p&gt;We have established a clear layout structure that enables a quick way to navigate between the jobs while keeping the context of the currently debugging step.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-02-full.png&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-02.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is especially relevant when logs are dense. We want users to still be able to easily navigate between the different search results while keeping track of the step they are currently focused on.&lt;/p&gt;

&lt;h3 id=&quot;improving-readability-and-interactions&quot;&gt;Improving readability and interactions&lt;/h3&gt;

&lt;p&gt;All of the elements in the logs now have improved contrast, alignment, accessibility, and overall desktop and mobile interactions.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-04.png&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-04.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These additions result in a better reading experience, letting users scan through the logs’ content quickly and find what they are looking for.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;search&lt;/strong&gt; also received minor visual updates and interaction design updates. Additionally, we’ve improved the &lt;strong&gt;performance&lt;/strong&gt; by defining a threshold that will prevent the system from querying unintentional matches. These gains are especially apparent in content-heavy logs.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-06.png&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-06.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Color&lt;/strong&gt; is a powerful visual resource, and we wanted to be more mindful of using it to guide you to the right place, so we have redesigned how we use color in our log output. If things go as expected, your logs will look largely the same. If items are in progress, waiting for your input, or even failing, you’ll now be able to quickly locate the item that needs attention and start taking action on your next task.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-05.png&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-05.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;opening-the-door-to-a-more-colorful-experience&quot;&gt;Opening the door to a more colorful experience&lt;/h3&gt;

&lt;p&gt;We want to be more mindful about color usage, which means we also need to acknowledge that people build their own scripts, commands, and tools to output useful information.&lt;/p&gt;

&lt;p&gt;That’s why we are increasing the color support, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ANSI colors&lt;/li&gt;
  &lt;li&gt;8-bit colors&lt;/li&gt;
  &lt;li&gt;24-bit colors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This enables richer content and better integration when rendering information coming from third-party sources. Here’s a sneak preview of how some of them will look like:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/posts/2020/github-logs/logs-03.png&quot;&gt;&lt;img src=&quot;/assets/images/posts/2020/github-logs/logs-03.png&quot; alt=&quot;GitHub Logs UI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;idd-love-to-hear-your-thoughts&quot;&gt;Id’d love to hear your thoughts!&lt;/h2&gt;

&lt;p&gt;I enjoy a conversation about design. I would love to hear any feedback you have—share your questions and comments, &lt;a href=&quot;https://twitter.com/adrianmg&quot;&gt;find me on Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="design" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/improving-experience-github-actions-logs.png?v=36d204bb" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/improving-experience-github-actions-logs.png?v=36d204bb" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Worklog: Sharing your process and work in progress</title><link href="https://adrianmato.com/blog/worklog/peeking-at-worklog/" rel="alternate" type="text/html" title="Worklog: Sharing your process and work in progress" /><published>2019-12-12T14:30:00-08:00</published><updated>2019-12-12T14:30:00-08:00</updated><id>https://adrianmato.com/blog/worklog/peeking-at-worklog</id><content type="html" xml:base="https://adrianmato.com/blog/worklog/peeking-at-worklog/">&lt;h3 class=&quot;anchor&quot; id=&quot;december-16-2019-at-2230&quot;&gt;December 16, 2019 at 22:30&lt;/h3&gt;

&lt;p&gt;I just arrived in my hometown with a terrible jet lag, so I managed to put together a first working version of the new login system using &lt;a href=&quot;http://www.passportjs.org/docs/twitter/&quot;&gt;passport-twitter&lt;/a&gt;. I spent a decent amount of time debugging a token session error while using &lt;a href=&quot;https://www.npmjs.com/package/cookie-session&quot;&gt;cookie-session&lt;/a&gt;. It turns out using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sameSite: strict&lt;/code&gt; won’t work and it will throw some token errors when running the app in a local environment.&lt;/p&gt;

&lt;p&gt;The next steps are figuring out the data retrieved from Twitter and hook it up properly with the data model in the database.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2019/peekingat-02.png&quot; alt=&quot;Prisma Query explorer&quot; /&gt;&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;december-12-2019-at-2230&quot;&gt;December 12, 2019 at 22:30&lt;/h3&gt;

&lt;p&gt;After eight years working together, &lt;a href=&quot;http://mamuso.net&quot;&gt;mamuso&lt;/a&gt; and I thought it was time to build something together out of work, so here we are. We have a specific goal: to improve the sharing of process, work in progress, and feedback for creators. We are trying to limit the technical complexity by relying on a &lt;a href=&quot;https://github.com/nice-boys/product-boilerplate&quot;&gt;JavaScript boilerplate&lt;/a&gt; that &lt;a href=&quot;https://mobile.twitter.com/mxstbr/&quot;&gt;Max&lt;/a&gt; and &lt;a href=&quot;https://mobile.twitter.com/brian_lovin&quot;&gt;Brian&lt;/a&gt; have put together.&lt;/p&gt;

&lt;p&gt;We got login sessions working via Google Auth, but I’m currently working on a &lt;a href=&quot;http://passportjs.org&quot;&gt;Passport Twitter Strategy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2019/peekingat-01.png&quot; alt=&quot;Prisma GraphQL&quot; /&gt;&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="worklog" /><summary type="html">December 16, 2019 at 22:30</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/peeking-at-worklog.png?v=6e1536fe" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/peeking-at-worklog.png?v=6e1536fe" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Saying goodbye to a great 2018!</title><link href="https://adrianmato.com/blog/personal/2018-great-year/" rel="alternate" type="text/html" title="Saying goodbye to a great 2018!" /><published>2019-01-01T08:00:00-08:00</published><updated>2019-01-01T08:00:00-08:00</updated><id>https://adrianmato.com/blog/personal/2018-great-year</id><content type="html" xml:base="https://adrianmato.com/blog/personal/2018-great-year/">&lt;p&gt;The past year has been an amazing one, but before getting into the details, I’d love to share some thoughts on 2017 as I have been struggling to talk about it for quite a while.&lt;/p&gt;

&lt;h3 id=&quot;coming-from-a-tough-2017&quot;&gt;Coming from a tough 2017&lt;/h3&gt;

&lt;p&gt;On February 2017, we moved to San Francisco as it seemed to be a great professional opportunity for both me and Lucia. It turned out to be one of the most challenging years:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://luciagm.net&quot;&gt;Lucia&lt;/a&gt; gave up her job in London and couldn’t find anything good&lt;/li&gt;
  &lt;li&gt;Our dog &lt;a href=&quot;https://www.instagram.com/p/BGtZevCLPL4/&quot;&gt;Coco&lt;/a&gt; passed away (we miss him so much)&lt;/li&gt;
  &lt;li&gt;Timezones and distance with family and friends&lt;/li&gt;
  &lt;li&gt;I wasn’t as happy as before at my job&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The transition between Madrid and London was so smooth that I think we overestimated how difficult it would be to move to a different continent, country, and city.&lt;/p&gt;

&lt;p&gt;We almost gave up, every week we would sit down and discuss moving back. We were so contaminated that we couldn’t enjoy anything, even the good news. I still feel guilty for asking Lucia to move with me giving up her job.&lt;/p&gt;

&lt;p&gt;When things couldn’t get worse, we did a hard reset. We forced ourselves to be more &lt;strong&gt;positive&lt;/strong&gt;, to &lt;strong&gt;give it a try&lt;/strong&gt;, and things started (slowly) to feel better. I know it sounds like bullshit, but sometimes looking at the same problems with &lt;strong&gt;different eyes&lt;/strong&gt; is a good first step towards a better situation.&lt;/p&gt;

&lt;h3 id=&quot;its-been-an-amazing-2018&quot;&gt;It’s been an amazing 2018!&lt;/h3&gt;

&lt;p&gt;The past 2018 was arguably one of the best years of my life. It was the first time I’ve managed not just to accomplish my own goals, but also helped others to achieve theirs. After all we have gone through, I feel we deserved it.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Helped&lt;/strong&gt; Lucia with a career change &lt;a href=&quot;https://blog.udacity.com/2018/12/lucia-gonzalez-nanodegree-powered-career-change.html&quot;&gt;into Front-End Development&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Changed jobs&lt;/strong&gt; and joined Microsoft &lt;a href=&quot;https://azure.microsoft.com/en-us/services/devops/&quot;&gt;Azure DevOps&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Run&lt;/strong&gt; my &lt;a href=&quot;https://www.instagram.com/p/Bl00FpfltWM/&quot;&gt;first marathon&lt;/a&gt; and a total of 670 Km&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Traveled&lt;/strong&gt; more: Yosemite, Death Valley, Joshua Tree, Vegas, Mexico, Seattle, Raleigh…&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shot&lt;/strong&gt; a lot of &lt;a href=&quot;https://500px.com/adrianmg&quot;&gt;photos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt; and launched &lt;a href=&quot;http://adrianmato.com&quot;&gt;my website&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Got promoted&lt;/strong&gt; at Microsoft (finally?)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sold&lt;/strong&gt; &lt;a href=&quot;https://techcrunch.com/2018/03/12/spotahome-acquires-erasmusu/&quot;&gt;my first company, Erasmusu&lt;/a&gt; (excellent job, Javi, Emilio, and Ivan!)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Modeled&lt;/strong&gt; more 3D stuff&lt;/li&gt;
  &lt;li&gt;Failed at reading more books&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best thing happened at the end of the year, after an entire year studying on her own on a full-time basis, &lt;strong&gt;Lucia landed her first job&lt;/strong&gt; as a &lt;a href=&quot;https://www.linkedin.com/in/lucia-gonzalez-moscoso/&quot;&gt;Front-End Developer&lt;/a&gt;. There are no words to describe how happy and accomplished we both felt after this entire year of tireless effort. &lt;strong&gt;Being able to share and enjoy some common goals with other people has been the most significant learning from this year&lt;/strong&gt;. I’d love to do more of that during 2019.&lt;/p&gt;

&lt;p&gt;Because one picture is worth a thousand words… here are a few summarizing my year 🙂.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2019/marathon.jpg&quot; srcset=&quot;/assets/images/posts/2019/marathon.jpg 1x, /assets/images/posts/2019/marathon.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/photos.jpg&quot; srcset=&quot;/assets/images/posts/2019/photos.jpg 1x, /assets/images/posts/2019/photos.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/friends-2.jpg&quot; srcset=&quot;/assets/images/posts/2019/friends-2.jpg 1x, /assets/images/posts/2019/friends-2.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/friends-3.jpg&quot; srcset=&quot;/assets/images/posts/2019/friends-3.jpg 1x, /assets/images/posts/2019/friends-3.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/lucia.jpg&quot; srcset=&quot;/assets/images/posts/2019/lucia.jpg 1x, /assets/images/posts/2019/lucia.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/us.jpg&quot; srcset=&quot;/assets/images/posts/2019/us.jpg 1x, /assets/images/posts/2019/us.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/me.jpg&quot; srcset=&quot;/assets/images/posts/2019/me.jpg 1x, /assets/images/posts/2019/me.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/3d.jpg&quot; srcset=&quot;/assets/images/posts/2019/3d.jpg 1x, /assets/images/posts/2019/3d.jpg 2x&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/3d-mushroom.jpg&quot; srcset=&quot;/assets/images/posts/2019/3d-mushroom.jpg 1x, /assets/images/posts/2019/3d-mushroom.jpg 2x&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thanks to everyone that helped to make a fantastic year. I’m planning to share my goals for 2019 in an upcoming post. Until then, Happy New Year to everyone! 🙂&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="personal" /><summary type="html">The past year has been an amazing one, but before getting into the details, I’d love to share some thoughts on 2017 as I have been struggling to talk about it for quite a while.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/2018-great-year.png?v=906923fd" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/2018-great-year.png?v=906923fd" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Worklog: Small tool for servers to be figured out yet</title><link href="https://adrianmato.com/blog/worklog/server-status/" rel="alternate" type="text/html" title="Worklog: Small tool for servers to be figured out yet" /><published>2018-11-24T13:40:00-08:00</published><updated>2018-11-24T13:40:00-08:00</updated><id>https://adrianmato.com/blog/worklog/server-status</id><content type="html" xml:base="https://adrianmato.com/blog/worklog/server-status/">&lt;h3 class=&quot;anchor&quot; id=&quot;march-29-2019-at-751&quot;&gt;March 29, 2019 at 7:51&lt;/h3&gt;
&lt;p&gt;Some news, &lt;a href=&quot;http://ivanguardado.com&quot;&gt;Iván&lt;/a&gt; has paired up with me helping to improve the business logic, and making the code a bit more robust for future steps. I’m trying to put together a template to generate the first version of the front-end. Basically we will be able to serve all the data we’re collecting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2019/server-status-03.png&quot; alt=&quot;UI components race calculator&quot; /&gt;
&lt;img src=&quot;/assets/images/posts/2019/server-status-04.png&quot; alt=&quot;UI components race calculator&quot; /&gt;&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;november-25-2018-at-1605&quot;&gt;November 25, 2018 at 16:05&lt;/h3&gt;

&lt;p&gt;I’ve refactored and added long polling to the &lt;strong&gt;nodejs&lt;/strong&gt; application so now I can control how often the date is going to be retrieved. I also set up a simple docker container that allows me to deploy the app to &lt;strong&gt;now/zeit&lt;/strong&gt; continuously.&lt;/p&gt;

&lt;p&gt;Here’s a preview of the app running while updating the real-time database from &lt;strong&gt;firebase&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2018/server-status-02.gif&quot; alt=&quot;UI components race calculator&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’m going to leave this up and running for a few days as I keep making progress on the client side. Hopefully, it doesn’t crash 😅.&lt;/p&gt;

&lt;h3 class=&quot;anchor&quot; id=&quot;november-24-2018-at-2145&quot;&gt;November 24, 2018 at 21:45&lt;/h3&gt;

&lt;p&gt;I’m still not sure where this is going to, but I’ve managed to put some hours to code the first part of it. I’ve started with a &lt;strong&gt;nodejs&lt;/strong&gt; client that pulls information from a list of endpoints and write all that data into a Firebase real-time database.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2018/server-status-01.gif&quot; alt=&quot;UI components race calculator&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Stay tuned, I think it’s going to be useful. I’m going to invest the next few days working on a React client that would read all this information and give it some structure to make this more useful.&lt;/p&gt;</content><author><name>Adrián Mato</name></author><category term="blog" /><category term="worklog" /><summary type="html">March 29, 2019 at 7:51 Some news, Iván has paired up with me helping to improve the business logic, and making the code a bit more robust for future steps. I’m trying to put together a template to generate the first version of the front-end. Basically we will be able to serve all the data we’re collecting.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adrianmato.com/assets/og/posts/server-status.png?v=50d16e74" /><media:content medium="image" url="https://adrianmato.com/assets/og/posts/server-status.png?v=50d16e74" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>