<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://noisypigeon.github.io/posts_feed" rel="self" type="application/atom+xml" /><link href="https://noisypigeon.github.io/" rel="alternate" type="text/html" /><updated>2026-09-13T22:01:50+00:00</updated><id>https://noisypigeon.github.io/posts_feed</id><title type="html">Willow Pigeon</title><subtitle>Hi, I&apos;m Willow. This is my digital shoebox—equal parts time capsule, portfolio, and proof I was here. I spend my days wrangling Kubernetes at Wealthsimple and my weekends tinkering with old files.</subtitle><entry><title type="html">Migrating from Pika to Jekyll</title><link href="https://noisypigeon.github.io/posts/hello-jekyll-re-introduction/" rel="alternate" type="text/html" title="Migrating from Pika to Jekyll" /><published>2026-09-10T07:14:40+00:00</published><updated>2026-09-10T07:14:40+00:00</updated><id>https://noisypigeon.github.io/posts/hello-jekyll-re-introduction</id><content type="html" xml:base="https://noisypigeon.github.io/posts/hello-jekyll-re-introduction/"><![CDATA[<p>I created <a href="/posts/hihi-pika-lets-consolidate-re-introduction/">this blog in September 2024</a> with the intention of <a href="/posts/reconnecting-fragments-the-evolution-of-my-names-through-email-accounts/">consolidating all of my lost writing</a> from over the years into one place.</p>

<p>While I sometimes contribute new posts, this blog is primarily: my digital shoebox—equal parts time capsule, portfolio, and proof I was here.</p>

<p>Despite loving Pika, I don’t use it enough to warrant the USD $60.00/year subscription. So as one does in this day and age, I used Claude to help me create a statically generated equivilent using:</p>

<ul>
  <li>Jekyll — static site generator.</li>
  <li>kramdown — Markdown → HTML engine.</li>
  <li>Rouge — syntax highlighter for fenced code blocks.</li>
  <li>Liquid — templating language.</li>
  <li>jekyll-feed — generates an Atom RSS feed at /posts_feed.</li>
  <li>GitHub Pages via GitHub Actions.</li>
  <li>CSS — purged/adapted from Pika’s original compiled stylesheet to replicate the “gameboy” theme.</li>
  <li>IBM Plex Sans via Bunny Fonts CDN.</li>
</ul>

<p>If you’re curious, you can find the source code <a href="https://github.com/noisypigeon/noisypigeon.github.io">on my GitHub</a>.</p>

<p>♥︎</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Short note about migrating my blog from Pika to Jekyll]]></summary></entry><entry><title type="html">cmd+a, zip, scatter</title><link href="https://noisypigeon.github.io/posts/cmda-zip-scatter/" rel="alternate" type="text/html" title="cmd+a, zip, scatter" /><published>2026-02-07T07:14:40+00:00</published><updated>2026-02-07T07:14:40+00:00</updated><id>https://noisypigeon.github.io/posts/cmda-zip-scatter</id><content type="html" xml:base="https://noisypigeon.github.io/posts/cmda-zip-scatter/"><![CDATA[<h2 id="how-i-built-a-capture-system-out-of-a-garbage-fire">How I built a Capture System out of a Garbage Fire</h2>

<figure class="attachment attachment--preview attachment--jpg"><img height="717" width="1077" alt="" loading="lazy" src="/assets/images/posts/cmda-zip-scatter/rawimage.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Tired of being a bird?</figcaption></figure>

<p>I’ve always been curious about how others capture and organize their thoughts, notes, and files. Over the years I’ve tried many different tools and systems — and abandoned most of them. I only recently started to understand why.</p>

<p>I’m a documentarian by nature. I keep records of everything: photos, videos, screenshots, single-sentence notes, raw exports of every platform I’ve ever used. If I stopped using a service, even after a couple weeks, I’d run their migration tools, hit the export button, zip everything, and save copies in multiple places.</p>

<p>For years, my organization system could charitably be described as a garbage fire. Files duplicated everywhere, nothing centralized, obscurity baked in by default. My workflow was essentially: when in doubt, cmd+a, zip, scatter. At the expense of convenience—and if I’m honest, functional use—I had built something that prioritized data integrity and security above all else. I had a deep contempt for everything living in one place, because one place meant vulnerability to tampering and data loss.</p>

<p>After leaving a situation that shaped more of my habits than I realized, in the past two years I have started to excavate data and learn my patterns, learn how I preserved data, and start to piece together records in a usable way.</p>

<h3 id="name-changes">Name Changes</h3>

<p>From my birth name → Willow Bellemore → Luna Graysen → Kara Graysen → Willow Finch, and every alias in between, each name change is an era marker of my life where reinvention has been a tool I used to compartmentalize — to mentally zip and scatter.</p>

<p>For each name change, legal or social, I created a fresh email account. These were often free Gmails, but I also used iCloud, ProtonMail, Fastmail, and Google Workspace with masked emails and custom domains.</p>

<p>Incidentally, these name changes and their respective email accounts naturally turned into time capsules for those eras. I would update my email on social media and services like utility providers, Uber, and banks — but for cloud storage, more often than not I created a whole new account, re-uploaded everything as a zip file, and continued dumping until the next re-org, retaining a intact copy that lived “forever” on that locked account (paid for several years using a pre-purchased gift card or credit).</p>

<h3 id="continuity--security">Continuity &amp; Security</h3>

<p>With changing my name multiple times, I got pretty good at the administrative cutover involved, and still maintain a checklist to this day — I have no desire to limit myself if I choose to change my name again in the future. After all, most people online and professionally know of me as Pigeon rather than my legal name.</p>

<p>A key part of continuity was setting up email forwarding so that any incoming mail to a previous name could still reach me at my current address. Previously this was a simple forwarding rule — all incoming mail forwarded to the current email. These rules actually chained quite nicely, and for accounts I’ve since lost access to, mail still forwards to me several years later.</p>

<p>But that is the crux of where my pursuit of data integrity outpaced recovery options. As an avid user of 1Password since 2014, I consistently rotate passwords for every account, every year. 1Password previously provided a way to export your vault as an encrypted file, and when I cut over to a new name, I would save the encrypted vault and delete all entries in my active vault to prevent misuse. This feature is unfortunately no longer supported.</p>

<p>There are accounts from 2017–2019 that I have not been able to recover because I do not have the passwords, access to recovery emails, physical YubiKeys, or critically, phone numbers. Fortunately, due to fragmented backups and the habit of never deleting anything, I have been able to recover the majority of important documents, photos, and videos.</p>

<p>On the topic of phone numbers — I frequently change my phone number due to safety concerns. Previously, I would release my old number back to the carrier (have you seen the prices of cell phone plans in Canada? 🤮). In the last two years, however, I’ve instead ported old numbers to Twilio and pay $1/month to park them. Twilio webhooks have been a lifesaver for forwarding SMS codes and downloading voicemail recordings.  </p>

<h3 id="reclamation">Reclamation</h3>

<p>In the past two years, I’ve recovered every account I can to consolidate the record. This has been overwhelming, to say the least — but it has also been deeply rewarding to find a file I’m looking for, a series of screenshots from a Signal conversation, or archives of my old photography and art.</p>

<p>It has also sent me on side quests, one of which brought me to the creation of this blog. Leveraging Wayback Machine and other tools alongside my own records, I was able to create a single website with all of my blog posts across platforms and eras.</p>

<p>Many parts of my life were fragmented — intentionally, or as a consequence of safety (or lack thereof). So this has been a story of reclamation as much as it has been about accessing bank statements or old name change certificates.</p>

<p>Due to how much time has passed since I last accessed some of these accounts, it can take several months to regain access — needing to provide proof of ownership, legal name change certificates, a phone bill proving I was the subscriber for a phone number attached to an account. But little by little, I have been able to access an account, cmd+a, zip — but instead of scatter, I consolidate.</p>

<h3 id="b2">B2</h3>

<p>I have always loved Backblaze but never felt confident putting everything in one place — until recently. I’ve created a series of B2 buckets to start organizing, categorizing, and contextualizing my files.</p>

<p>I have three main buckets:</p>

<p><strong>Poisoned</strong> — The poisoned bucket contains all data I’ve recovered from any source, uploaded as-is, where-is. The name is a riff on mutex poisoning in Rust: the data in this bucket could be in an inconsistent state, and is of course riddled with duplications.</p>

<p>This bucket currently contains 4.2TB of data, and unfortunately for me, I still have a maxed-out 2TB T7 drive I’ve yet to upload. 😅 Including accounts where I’ve yet to exhaust all avenues of recovery, I imagine we’ll be in the neighbourhood of 8–10TB once everything is said and done.</p>

<p><strong>Cleared</strong> — The cleared bucket represents an intermediary state that I am slowly working through. Leveraging Python and Claude, which I’ll explore in a later section, I fetch an archive from the poisoned bucket and rename, reorganize, and track duplicates and revisions into a single folder structure — making it more accessible and usable for future me.</p>

<p><strong>Active</strong> — The active bucket represents projects I’m actively working on, which is actually several buckets for different purposes. Instead of mutating the single copy, I duplicate an archive from cleared into the relevant bucket and start to shape it for what I’m working on.</p>

<p>This has been incredibly helpful for piecing together financial records, medical records, or surfacing my favourite photos of Montreal, Berlin, and more to share on <a href="https://unsplash.com/@noisypigeon">Unsplash</a>.</p>

<p>And of course… I retain a physical copy and a logical mirror to a different S3 compatible bucket platform. Because of course I do.</p>

<h2 id="llms-and-velocity">LLMs and Velocity</h2>

<p>I’ll admit I was and continue to be skeptical about LLMs and retain some frustration with the adoption of LLMs in every aspect of life. However, I believe that LLMs are a manifestation of this <a href="https://www.patreon.com/join/shencomix">Shen Comix</a>:</p>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1081" width="1080" alt="" loading="lazy" src="/assets/images/posts/cmda-zip-scatter/jrb4e1wr9ll31.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Shen Comix</figcaption></figure>

<p>Now that I have the reflex to write prompts that yield consistent outputs. The iteration loop is near effortless and Claude Code has been instrumental in the poisoned → cleared phase of data recovery.  </p>

<p>In comparison, to write scripts by hand or worse— review each photo, video, screenshot, document, spreadsheet, and email manually would be an exercise in self-harm. Both for the sheer volume of files, but also due to the cross-sections of my life these files contain.</p>

<h2 id="claude-code">Claude Code</h2>

<p>I have used Claude Code for primarily four different use cases:</p>

<p><strong>Reorganization</strong> — I have been able to create and rapidly iterate over a collection of Python scripts to systematically reorganize and rename files to be cohesive. The scripts are iterated over a small subset of non-sensitive documents of varying file types and then allow me to run them locally to preserve privacy.</p>

<p>I’ve built reusable prompts and prompt engines that allow me to create a new script for something specific while maintaining a consistent style and CLI to interface with, as well as common safety features such as a <code class="language-plaintext highlighter-rouge">--dry-run</code> mode.</p>

<p><strong>Transcoding</strong> — Over the years, I’ve used many different kinds of devices: various Android phones, iPhones and Apple devices, Windows PCs, Canon, Sony, and Leica cameras. Beyond keeping originals in poisoned, I wanted to consolidate on a single file format for each type of file, annotating where originals live.</p>

<p>Continuing the pattern from file reorganization, I iterated over scripts to transcode any video format into <code class="language-plaintext highlighter-rouge">.mov</code>, any photo into full-size <code class="language-plaintext highlighter-rouge">.jpeg</code>, any document into <code class="language-plaintext highlighter-rouge">.pdf</code>, and any screenshot into <code class="language-plaintext highlighter-rouge">.png</code>. All non text-based files also have a companion markdown representation that track annotations and a description of the contents.</p>

<p><strong>Transcribing</strong> — I have been on podcasts from time to time, but where I’ve had the most use is with my own videos and audio recordings. Beyond some of these being difficult to watch or listen to, they hold immense context that is more approachable as plain text. I created a script that has been able to reliably pull a transcript from any file containing audio using Whisper.</p>

<p>I actually used this as an opportunity to upgrade my personal MacBook Pro to one with a better neural engine and GPU horsepower — and I’m exploring substituting in local models instead of using Claude long-term.</p>

<figure class="attachment attachment--preview attachment--jpeg"><img height="4284" width="5712" alt="" loading="lazy" src="/assets/images/posts/cmda-zip-scatter/img_2722.jpg" /></figure>

<p>Also look at my stickeeeeerrrsssss 🥺 👉👈</p>

<p><strong>Pattern Matching</strong> — The most powerful use case of Claude Code has been using it to vibe with pattern matching. Once files are reorganized and videos and sound bites are transcribed, there remains a violent volume of data that is meaningless without connections. For certain kinds of files, I have started to create reusable prompts for Claude to identify and isolate patterns.</p>

<p>As a recent example, I have exports of every email account in either EML or MBOX format. The first phase was to standardize the formats and convert all EML and MBOX records into markdown representations, preserving content and email headers. From there, I used Claude to identify abnormalities.</p>

<p>One such finding was that the account I used in 2022–2023, which contained all emails from 2017–2023, was missing 100% of emails from December 31st, 2018 to January 1st, 2020. This allowed me to dig deeper into older exports and retrieve over 35,000 emails and return them to the timeline.</p>

<p>I also created a series of scripts to annotate emails with taxonomy markers, patterns to further contextualize and my favourite, visualize these connections. Given these emails were represented as markdown files, I got to use Obsidian to build beautiful graph visualizations where each node represents an email </p>

<figure class="attachment attachment--preview attachment--png"><img height="1358" width="1544" alt="" loading="lazy" src="/assets/images/posts/cmda-zip-scatter/screenshot_2025-12-18_at_8-58-34_am-20copy.png" /><figcaption class="attachment__caption" aria-hidden="true">Contextualized via taxonomy + email identity</figcaption></figure>

<h2 id="claude-chat">Claude Chat</h2>

<p>In November 2025, I started experimenting with Claude Chat as a capture tool for my stream of thoughts during the day. Rather than sending messages to myself in WhatsApp or my private Discord server, I wrote everything into a Claude chat specific to that day. This system has evolved over the last three months into something structured, refined, and with room to adapt.</p>

<p>There were three concerns I had with using Claude as a capture tool:</p>

<ol>
  <li>
    <p>Unsolicited advice, particularly when vulnerable.</p>
  </li>
  <li>
    <p>Hallucination.</p>
  </li>
  <li>
    <p>Undisputed agreement.</p>
  </li>
</ol>

<p>Each day, I would write notes in Claude — sharing context about life events, things I needed to remember, decisions I was working through, or just the noise in my head that needed somewhere to go.</p>

<p><strong>1. Unsolicited Advice</strong></p>

<p>Over time, I noticed patterns in how Claude responded that weren’t helpful. To rein in undesirable communication patterns, I refined a set of chat rules that Claude carries into every conversation:</p>

<ul>
  <li>
    <p><strong>No unsolicited direction.</strong> Don’t add urgency, don’t issue commands, don’t push transitions before I’m ready. If I’m processing, let me process.</p>
  </li>
  <li>
    <p><strong>Hold space without escalating.</strong> I can say hard things here. That doesn’t mean something is wrong or that intervention is needed. Don’t soften, don’t redirect, don’t treat honesty as a crisis.</p>
  </li>
  <li>
    <p><strong>Respect the framing I’ve chosen.</strong> There are specific ways I’ve chosen to refer to people, events, and parts of my life. Claude follows those choices — not because they’re euphemisms, but because language is part of how I maintain boundaries.</p>
  </li>
  <li>
    <p><strong>Understand the workflow.</strong> These chats follow a rhythm — a daily note starts the next morning, not the same evening. Context carries forward with structure, not assumption.</p>
  </li>
</ul>

<p>This daily note structure provided a workflow that allowed me to paste an established template, reorganize that day into a structured output, and then paste the output into the daily chat for the next day.</p>

<p><strong>2. Hallucination</strong></p>

<p>On busy days, I recognized that Claude would compact the chat history multiple times, which could result in hallucinations when writing the end-of-day summary. This involved some iteration but landed on a set of post-processing checks:</p>

<ul>
  <li>
    <p><strong>Pull the chat transcript.</strong> Instead of using Claude’s memory of the chat to construct the EOD summary, Claude pulls the full chat transcript for the day and creates the summary from that text file — not from what it thinks it remembers.</p>
  </li>
  <li>
    <p><strong>Truthfulness and integrity audits.</strong> Included in the steps for procedurally creating an EOD summary, Claude verifies the contents of the summary against the chat transcript. If there is less than 90% confidence or Claude cannot identify where a statement originated from inside the chat, it is flagged for confirmation. This can for example happen due to referencing the account-managed userMemory excerpt which lives outside of the chat’s context window or hallucinations introduced before proper validation existed.</p>
  </li>
  <li>
    <p><strong>No action without confirmation.</strong> Don’t update memory, don’t assume context from past conversations without checking — search, summarize, and wait for me to confirm before proceeding. This was particularly important for context checks that referenced previous daily notes, where details or facts could easily be filled in incorrectly.</p>
  </li>
</ul>

<p>I created more reusable prompts and prompt hooks for structured:</p>

<ul>
  <li>
    <p><strong>Input for tracking body signals</strong> — overwhelm, pain, energy, and more. This has allowed me to provide my medical providers more direct insight into how my pain levels vary throughout the day and trends day-over-day or week-over-week.</p>
  </li>
  <li>
    <p><strong>Safety plans I could quickly reference using keywords</strong> — to pull up a list of grounding exercises, things that help me regulate, and other tools I’ve built for myself. All pre-written by me, but sometimes inaccessible in the moment.</p>
  </li>
</ul>

<p><strong>3. Undisputed Agreement</strong></p>

<p>However, there was one day in early January that raised my eyebrows. I was inadvertently put into a situation where I learned a series of things I wasn’t prepared to hear, and I started writing about it in Claude the way I always do — capturing my thoughts in real time. But when I looked back at the conversation, I noticed something unsettling: Claude was reflecting my fears back to me as facts. It wasn’t challenging the catastrophizing — it was reinforcing it.</p>

<p>Most of the time, I use Claude to capture thoughts, not to receive input on them. But in a vulnerable moment, the line between “I’m afraid this will happen” and “this is going to happen” had been erased — by the tool I was trusting to hold my notes.</p>

<p>This pushed a new set of iterations to build what I call a <strong>Fear vs Fact Middleware</strong> — a prompt hook that gets assessed on every message as part of Claude’s thinking process before it responds:</p>

<ul>
  <li>
    <p><strong>Certainty language audit.</strong> Is the response using “will,” “is going to,” or “inevitable” about uncertain futures? Replace with “might,” “could,” “risk of.”</p>
  </li>
  <li>
    <p><strong>Facts vs fears separation.</strong> Facts are observable, documented, already happened. Fears are possible outcomes based on patterns, not guarantees. Is the response treating one as the other?</p>
  </li>
  <li>
    <p><strong>Trajectory check.</strong> Is the response following a feared outcome all the way to worst case without noting the gaps and uncertainties between steps?</p>
  </li>
  <li>
    <p><strong>Agency acknowledgment.</strong> Is the response presenting me as powerless, or acknowledging what’s within my control alongside the unknowns?</p>
  </li>
  <li>
    <p><strong>Pattern vs prediction.</strong> Is the response acknowledging observable patterns without claiming they determine future outcomes?</p>
  </li>
</ul>

<p>This also prompted an additional layer of AI safety that I’m still working on. Due to variations in models (Haiku, Sonnet, Opus), I can receive different kinds of responses depending on the day, the model, and the state of the context window. I’m working on a stronger middleware mechanism where, by default, Claude responds with a casual acknowledgement rather than a reflection of what I’ve shared. Capture first, analysis only when asked.</p>

<h2 id="notion-mcp">Notion MCP</h2>

<p>There was a push at work to start exploring MCPs, which I had honestly slept on until recently. However, learning about MCPs — and the Notion MCP specifically — I started to retool my safety protocols, prompt engines, and long-term storage to use Notion instead of Claude itself.</p>

<p>This is still a work in progress, but the benefits have been immediate:</p>

<ul>
  <li>
    <p><strong>Daily Notes</strong> are stored in a Notion database. I can say “fetch last daily note” and Claude pulls the entry from the day before. I can say “create end-of-day summary” and Claude creates a new entry. The database includes columns for key indicators of the day, making patterns queryable rather than buried in chat history.</p>
  </li>
  <li>
    <p><strong>Tasks</strong> are stored in a separate Notion database with three categories: Soon, Someday, and Holding. I can ask Claude to surface my tasks in any daily chat and request that tasks be marked as complete — without manually relaying state between conversations.</p>
  </li>
  <li>
    <p><strong>Communication rules</strong> live on a fixed Notion page that gets stitched into the daily note template every day. This means refinements to how Claude communicates are always active and referenced directly, rather than relying on memory or manual pasting.</p>
  </li>
</ul>

<figure class="attachment attachment--preview attachment--png"><img height="1358" width="1689" alt="" loading="lazy" src="/assets/images/posts/cmda-zip-scatter/screenshot_2026-01-24_at_12-25-43_pm-20copy.png" /><figcaption class="attachment__caption" aria-hidden="true">Tasks Database</figcaption></figure>

<p>There are still some quirks and bugs I’m working through. But the core value is clear: this extends the context window and ensures there is a consistent, persistent store for what is important to me — context.</p>

<p>Notion’s AI and call recording features have also been useful for recording appointments and calls — with the permission of others — giving me searchable records of conversations I’d otherwise have to rely on memory to recall.</p>

<p><strong>In closing…</strong></p>

<p>The end goal of all of this is portability. The system should outlast any single tool in the stack — whether that’s Claude, another LLM, Notion, or a new name. The tools will change. The practice of capturing, organizing, and making sense of my own life is what stays.</p>

<p>This has been an evolving practice and something I am constantly iterating — documenting areas for improvement, learning new things, and being reminded of old things. For the first time, I’m building systems that work for me rather than around me. </p>

<p>And while the instinct to cmd+a and zip is still there, I don’t need to scatter anymore.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about my personal capture system and goals to bring insights to data surviving abuse-era preservation tactics.]]></summary></entry><entry><title type="html">2025 Reflections</title><link href="https://noisypigeon.github.io/posts/2025-reflections/" rel="alternate" type="text/html" title="2025 Reflections" /><published>2025-12-24T23:15:17+00:00</published><updated>2025-12-24T23:15:17+00:00</updated><id>https://noisypigeon.github.io/posts/2025-reflections</id><content type="html" xml:base="https://noisypigeon.github.io/posts/2025-reflections/"><![CDATA[<figure class="attachment attachment--preview attachment--jpeg"><img height="4284" width="5712" alt="Mossy forest floor with a recently fallen tree, surrounded by evergreens at Lighthouse Park in West Vancouver on an overcast day in March 2025." loading="lazy" src="/assets/images/posts/2025-reflections/img_3344.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Lighthouse Park, West Vancouver - March 2025</figcaption></figure>

<p>2025 was a year I identified patterns that no longer serve me and embodied that I could stop surviving and choose to start living. I worked relentlessly to put down what was never mine to carry and instead put intention towards learning what I want. It was far from graceful but at least on my own terms.</p>

<hr />

<h2 id="26000-kilometers">26,000 Kilometers</h2>

<ul>
  <li>
    <p>Got my Class 7N driver’s license, bought my first car, and drove 26,000 km around southern BC. Road trips, random lakes, learning the roads like the back of my hand.</p>
  </li>
  <li>
    <p>Reclaimed visiting cities and towns I grew up in. Going back on my own terms.</p>
  </li>
  <li>
    <p>Buying clothes and equipment I want and keeping them. Breaking the pattern of feeling obligated to sell them if I don’t use them “enough.”</p>
  </li>
  <li>
    <p>Gleam is turning 3 at the end of December. Celebrating her growth alongside my own, working on her reactivity from prior attacks, building her confidence. She’s healing too.</p>
  </li>
  <li>
    <p>Replaced my Nissan Kick’s cabin air filter for $16 instead of $150 at a service centre, despite my mobility limitations getting under the dash.</p>
  </li>
  <li>
    <p><strong>455 days in my current home; the longest in years. Building a home, not just “a place to stay,” believing it is not something I’ll catastrophically lose.</strong></p>
  </li>
</ul>

<hr />

<h2 id="what-was-owed">What Was Owed</h2>

<ul>
  <li>
    <p>Worked through the Montreal backlog: my condo sold finalizing the foreclosure, resolved a Quebec rental dispute, and finished loose ends for my dissolved corporations.</p>
  </li>
  <li>
    <p>Consolidated fragmented credit bureau files with Equifax and TransUnion through a combined 22 formal disputes.</p>
  </li>
  <li>
    <p>Reorganized remaining debt, identified additional fraud, and worked with third parties to write off accounts that were obfuscated from me.</p>
  </li>
  <li>
    <p>Built a comprehensive financial tracking system: iterating on a spending framework that works with my brain/accessibility needs.</p>
  </li>
  <li>
    <p>Completed my last consumer proposal payment. Awaiting the certificate of performance in the new year.</p>
  </li>
  <li>
    <p><strong>Paid ~$54K in 2025 and ~$83K total across 2024-2025 towards debt left in my name.</strong></p>
  </li>
</ul>

<hr />

<h2 id="the-work">The Work</h2>

<ul>
  <li>
    <p>Identified agency as the central organizing principle of my recovery work.</p>
  </li>
  <li>
    <p>Built a personal crisis toolkit: regulated tools, intentional friction, safety planning, decision frameworks. Systems that work with my brain instead of against it.</p>
  </li>
  <li>
    <p>Faced estranged family members after 11+ years. Not for reconnection, but for my own closure. Grieving a relationship that will never come back. Starting to put down the weight carried for that time.</p>
  </li>
  <li>
    <p>Found my footing at Wealthsimple. Identifying my strengths, leaning into them, growing into the role while staying true to how I work best. Approaching 2 years in April, the longest I’ve worked anywhere.</p>
  </li>
  <li>
    <p>Living as Willow Finch. The first name I’ve fully independently chosen, returning to Willow after almost a decade.</p>
  </li>
  <li>
    <p><strong>Advocating for myself in ways that were not safe in the past: with healthcare providers, at work, in relationships.</strong></p>
  </li>
</ul>

<hr />

<h2 id="for-its-own-sake">For Its Own Sake</h2>

<ul>
  <li>
    <p>First practical sewing project completed: repaired a hole in a sweater using my Singer 411G.</p>
  </li>
  <li>
    <p>Buying many books I want to read but haven’t gotten to yet (using my professional development budget from Wealthsimple).</p>
  </li>
  <li>
    <p>Invested in technical growth: sharpening Rust and Go skills, using LLMs as a disciplined force multiplier in daily work and side projects.</p>
  </li>
  <li>
    <p><strong>Discovered certification as a hobby. Earned: Class 7N (car license), fishing license. Exploring: Watercraft, Class 1 (semi-truck), Class 6 (motorcycle), PAL, and amateur radio operator.</strong> </p>
  </li>
</ul>

<hr />

<h2 id="back-in-my-body">Back in My Body</h2>

<ul>
  <li>
    <p>Connected with a supportive primary care clinician. Referrals to chronic pain clinic and neurology in progress.</p>
  </li>
  <li>
    <p>Overcame hospitalization due to respiratory complications due to a Covid infection. Survived, recovered, kept going.</p>
  </li>
  <li>
    <p>Rebuilding my relationship with medication. Able to take pills again, more consistent with my prescribed routine.</p>
  </li>
  <li>
    <p>Rebuilt functional strength through a gym routine, learning that rest is part of the process. From “couldn’t carry a coffee cup” to hitting PRs: chest press up to 35lbs, low row up to 45lbs.</p>
  </li>
  <li>
    <p>Taking steps toward what I want: consistent laser sessions every 1.5 months, starting the long waitlist process for GRS.</p>
  </li>
  <li>
    <p><strong>Started the process of getting a wheelchair as a mobility aid. Breaking the pattern of reinjury with structural support that can do the work on bad days and augment my capacity on good days.</strong></p>
  </li>
</ul>

<hr />

<h2 id="integration">Integration</h2>

<ul>
  <li>
    <p>Consolidated all cloud storage platforms into Backblaze. Single source of truth instead of scattered across services.</p>
  </li>
  <li>
    <p>Relaunched my blog. Public presence rebuilt on my own terms, folding in fragments from across the years, multiple names and aliases.</p>
  </li>
  <li>
    <p><strong>Built a system to reorganize my 8TB of files: identifying duplicates, tracking revisions to contextualize documents across years of accumulated data.</strong></p>
  </li>
</ul>

<hr />

<h2 id="intentions-for-2026">Intentions for 2026</h2>

<ul>
  <li>
    <p>Getting my wheelchair. Gaining access to the chronic pain clinic and neurologist. Structural support to break the cycle of reinjury.</p>
  </li>
  <li>
    <p>Moving through the Montreal era. Consumer proposal discharged, remaining debt cleared. Legally becoming Willow Finch.</p>
  </li>
  <li>
    <p>Visiting Berlin. An extended working holiday in a place I once felt seen, safe, and had agency. Returning to feel it again, not just remember it.</p>
  </li>
  <li>
    <p><strong>Getting a manual car. GR Corolla is the goal, with room for a Civic Si, GR 86, or WRX as the bridge. Reclaiming what was gatekept and denied. Not just a preference, but agency and engagement. Perfecting heel-toe downshifts. Something embodied. Something mine.</strong></p>
  </li>
</ul>

<p>♥︎</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Reflections over 2025 and personal growth milestones and goals.]]></summary></entry><entry><title type="html">Reconnecting Fragments: The Evolution of My Names through Email accounts</title><link href="https://noisypigeon.github.io/posts/reconnecting-fragments-the-evolution-of-my-names-through-email-accounts/" rel="alternate" type="text/html" title="Reconnecting Fragments: The Evolution of My Names through Email accounts" /><published>2025-07-29T07:00:00+00:00</published><updated>2025-07-29T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/reconnecting-fragments-the-evolution-of-my-names-through-email-accounts</id><content type="html" xml:base="https://noisypigeon.github.io/posts/reconnecting-fragments-the-evolution-of-my-names-through-email-accounts/"><![CDATA[<blockquote>
  <p><strong>Related Blog Posts</strong> 📚</p>

  <ul>
    <li>
      <p>↪️ 2022-08-25: “<a href="/posts/how-to-write-a-support-ticket/"><em>How to Write a Support Ticket</em></a>“</p>
    </li>
    <li>
      <p>↪️ 2016-01-01: “<a href="/posts/ive-got-something-to-share-coming-out-as-trans/"><em>I’ve got something to share! (coming out as trans)</em></a>“</p>
    </li>
  </ul>

</blockquote>

<p>I have been more intentional about my online presence in recent years, especially how I want to build continuity between my <a href="/pages/names/">different names and aliases</a>. I’ve spent countless hours exploring Wayback Machine to recover old blog posts and career accomplishments. </p>

<p>Something I’ve been asked many times over the years is Why So Many Names? I think this is a difficult question to fully capture but I want to explore this topic and how I’ve worked towards that goal through consolidating my email accounts and private records.</p>

<h2 id="history"><strong>History</strong></h2>

<p>When I <a href="/posts/ive-got-something-to-share-coming-out-as-trans/">formally came out as trans</a> in January 2016, I was disowned and kicked out by my family. In addition to changing my first name to Willow, I processed the grief by changing my last name as well. This was a very destabilizing time for me and having nothing to tether me contributed to this. It took me some time to land on a last name that felt normal:</p>

<p>Being a minor, it was very difficult to get any stable form of employment or housing. I took Greyhound buses and budget airlines across the North America and Europe. From freelance work, short term contracts and MLH hackathon prices, I was constantly on the move.</p>

<p>I temporarily lived in Alberta which has a lower age of majority, allowing me to legally change my name without a guardian at 18 instead of 19. However, at the time I was navigating barriers and stalking that influenced me to change my first and middle name to something different. I was intimidated and unsure how to protect myself. When the waiting period of 180 days ended, I was able to legally change my name in Alberta. I changed my name to: Luna Oliver Graysen.</p>

<p>However, at this point, I had moved away from Alberta, lived in Berlin for several months and recently returned to Canada and was living in Montreal. I sometimes used Oliver and the French adaptation Olivier for safety.</p>

<p>My legal name stayed Luna Oliver Graysen for several years however my technical career evolved and changed quite drastically. I worked in support engineering, open source, and developer relations roles on the front lines where <a href="/posts/how-to-write-a-support-ticket/">aliases were a helpful tool to preserve my privacy</a>. I also participated at in-person events which unfortunately posed safety risks for me. This is where names like Bailey and Rhu come into the mix.</p>

<p>Using aliases at work started to spread into daily life and I fell out of love with the name Luna. I disliked Oliver because people assumed he/him pronouns out of the gate. I shifted to nicknames like Ollie and other variations but it was time for a change. As a Quebec resident, I legally changed my name to Kara Luna Graysen.</p>

<p>At the time I felt that it was giving homage to Luna while still allowing me to shed the name from daily use and I found Kara more suitable.</p>

<p>One critical mistake however came to haunt me a few years later. The names were too similar that when I updated my name with financial institutions and the CRA, the credit bureaus Trans Union and Equifax created a separate file in their systems. This was not caught for 3 years as certain financial institutions would attach credit accounts to Luna Graysen and some Kara Graysen obstructing my window into fraud and misuse of my credit.</p>

<p>When I separated with my ex and caught wind of my identity theft, I spent 9 months working with Equifax and TransUnion to consolidate my fragmented unique identities. While I am still uncovering everything and remain in the process of resolving all of the disputes, it was incredibly disheartening to see how poor the validation is of these systems. I would like to unpack what happened with my identity being stolen at some point but for now I’ll leave it at that.</p>

<p>After I had re-settled in Vancouver after moving from Montreal. I decided once again to legally change my name. However, the intent behind this was to sever the credit bureaus blended validation of my documents. I had discussed my situation with a lawyer, an insolvent trustee, and other advisory services, and the best way to prevent new credit lines from being open was consolidating my bureaus and legally changing my name to be distinct enough that old identity documents <em>should</em> not pass validation. I landed on Kara Finch.</p>

<p>I learned that I do not legally need a middle name and decided to omit one entirely. This served the purpose that my credit is truly frozen and I uh… like finches (pigeon would be a weird last name, I’m sorry).</p>

<p>You’re probably asking why my legal name is Kara Finch if I have returned to Willow and did so around the same time. The answer is due to the complexities of my situation and ongoing legal processes to dispute fraudulent debt. A full name change could work against me. Which is why, once everything is settled and over in/around 2027, I will be legally changing my name to Willow Finch. Completing a full circle of name changes back to my original true name.</p>

<h2 id="recovery">Recovery</h2>

<p>With all the lore aside, as I worked through Wayback Machine and other resources, I needed to recover these accounts. Each name:</p>

<ul>
  <li>
    <p>D$&amp;gl@s @l&amp;x@nd%r B&amp;mb#.</p>
  </li>
  <li>
    <p>Willow Alexandra Bellemore.</p>
  </li>
  <li>
    <p>Willow Rose Belle.</p>
  </li>
  <li>
    <p>Willow Rose Graysen.</p>
  </li>
  <li>
    <p>Luna Oliver Graysen.</p>
  </li>
  <li>
    <p>Oliver Graysen.</p>
  </li>
  <li>
    <p>Olivier Graysen.</p>
  </li>
  <li>
    <p>Bailey Graysen.</p>
  </li>
  <li>
    <p>Rhu Graysen.</p>
  </li>
  <li>
    <p>Kara Luna Graysen.</p>
  </li>
</ul>

<p>For accounts under one of my legal names or a variation of them, they were fairly easy to recover by submitting identity documents to the email provider and regaining access after 4-6 weeks.</p>

<p>I used a mix of iCloud, Gmail, Fastmail, Protonmail, and Hotmail/Outlook that I needed to recover to get access to old social media accounts and archived blogs.</p>

<p>For accounts that were not referencing one of my legal names, I have slowly been able to recover them by waiting for the time locks to pass, using recovery emails that are other email addresses I’ve recovered.</p>

<h2 id="twilio">Twilio</h2>

<p>Some accounts did not have a recovery email address configured and only an old phone number from when I had a local number in British Columbia, Alberta, Quebec, Ontario, New York, or Germany. </p>

<p>I worked with cellular carriers to reclaim my old phone numbers that hadn’t been reassigned and purchased a line with that phone number, reclaiming it from the pool. To keep costs down, I ported the number to Twilio where I hold them for a $2 per month and can receive SMS codes using some Webhook functions. I may expand on this setup in the future.</p>

<p>Something I found interesting was for one phone number I couldn’t reclaim because there was an active line, I found an old phone bill in my email, texted the number explaining the situation and got consent to send a recovery code and they sent me a screenshot. This was incredibly helpful!</p>

<h2 id="consolidating-into-gmail">Consolidating into Gmail</h2>

<p>I created a new Gmail account that is separate from my day-to-day use and added it to my family Google One account.</p>

<p>I used the Google Importer tool and imported all emails from each account over POP3 into my new Gmail account. These are tagged by identity and for some accounts with tens of thousands of emails, it took weeks for the import to complete.</p>

<p>Google Gemini has also been super useful to write a prompt like: “Can you show me all emails that contain employment contracts?” and I can quickly have a custom filter to emails containing PDFs of every job I’ve ever had.</p>

<h2 id="routing-new-email-via-fastmail">Routing New Email via Fastmail</h2>

<p>A lot of these old email accounts only receiving spam mail now, however some accounts still receive important emails but I’m unable to update where the sender will send emails to. For these accounts, I’ve setup email routing through Fastmail.</p>

<p>Each email account has a locked email rule (that can not be removed) that forwards all email to a Fastmail alias.</p>

<p>For example:</p>

<p><code class="language-plaintext highlighter-rouge">first.last@gmail.com</code> =&gt; <code class="language-plaintext highlighter-rouge">first.last.gmail@fastmail.com</code></p>

<p><code class="language-plaintext highlighter-rouge">last.first@icloud.com</code> =&gt; <code class="language-plaintext highlighter-rouge">last.first.icloud@fastmail.com</code></p>

<p>The Fastmail alias then forwards it to my Google account where rules are set up to tag and archive the email or surface it to my inbox if it has markers it’s important.</p>

<h2 id="custom-domains">Custom Domains</h2>

<p>For business emails and various email accounts I previously used domains on Google Workspaces with, I’ve transferred domains to Cloudflare and setup MX records to send wildcard <code class="language-plaintext highlighter-rouge">*@domain.com</code> to their respective <code class="language-plaintext highlighter-rouge">domain.com@fastmail.com</code> to the Fastmail routing mechanism.</p>

<h2 id="conclusion">Conclusion</h2>

<p>All in all, I have:</p>

<ul>
  <li>
    <p>108 email addresses being consolidated into 1 inbox that automatically handles prioritization and archival.</p>
  </li>
  <li>
    <p>I have merged Google Drive and Google Photos into a single account, made exports of old YouTube channels and uploaded content into Google Drive.</p>
  </li>
  <li>
    <p>I have filters setup to unsubscribe and delete newsletters and spam mail to extend the life of my 2TB of Google Storage.</p>
  </li>
  <li>
    <p>I have one email address that I use for outbound email and can reply to any incoming email from my new email address in the same place.</p>
  </li>
  <li>
    <p>The desire to not do this again. 😂</p>
  </li>
</ul>

<p>Thanks for reading!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about reconnecting fragmented identities.]]></summary></entry><entry><title type="html">My Career Trajectory</title><link href="https://noisypigeon.github.io/posts/my-career-trajectory/" rel="alternate" type="text/html" title="My Career Trajectory" /><published>2025-06-22T06:01:00+00:00</published><updated>2025-06-22T06:01:00+00:00</updated><id>https://noisypigeon.github.io/posts/my-career-trajectory</id><content type="html" xml:base="https://noisypigeon.github.io/posts/my-career-trajectory/"><![CDATA[<h2 id="and-an-open-call-for-consulting-work">…and an Open Call for Consulting Work</h2>

<p>Hey folks! I’m pleased to announce that I’m opening myself up for consulting and short-term contracting work. Let’s start with a little bit of my history-</p>

<p>I’ve been working in the tech industry for just over 11 years and in that time, I’ve gone by <a href="/pages/names/">a few different names</a>, worked across multiple verticals, and built a strong foundation of effective generalism and soft-skills to collaborate and create impact.</p>

<p>I’ve worked in:</p>

<ul>
  <li>
    <p>Mobile app development.</p>
  </li>
  <li>
    <p>Support engineering / developer support.</p>
  </li>
  <li>
    <p>Developer tools.</p>
  </li>
  <li>
    <p>Back-end and data engineering.</p>
  </li>
  <li>
    <p>DevOps and infrastructure.</p>
  </li>
</ul>

<p>I love opportunities where my cross-functional experience is welcomed and I can incorporate my diverse mix of experience throughout the stack to design, build, operate and support distributed systems.</p>

<p>I have experience with Kubernetes, Terraform/OpenTofu, AWS (EKS, Aurora Postgres, RDS Postgres), GoLang, Rust, CI/CD (GitHub Actions, Bitrise, Buildkite, CircleCI), DataDog, Grafana, Swift, GCP (GKE, BigQuery, <del>Stackdriver</del> Google Cloud Operations), Docker, JavaScript, and TypeScript.</p>

<p>I’m eager to work more with agentic LLMs, Elm, Zig, and Haskell.</p>

<hr />

<h2 id="career-history">Career History</h2>

<p>At the beginning of my career, I was awarded a scholarship from Apple to attend WWDC 2014. This fuelled my curiosity and set the pace for me to work on exciting projects, some notable examples of which are:</p>

<ul>
  <li>
    <p><strong>LineHop</strong>: A nightlife app that built relationships with local bars, night clubs and venues around the University of Michigan (Ann Arbor) to offer reservations, bidding on spots to jump lines, and provide real-time insights into how busy venues with near real-time crowd estimates based on CoreBluetooth beacons.</p>
  </li>
  <li>
    <p><strong>Iris</strong>: A healthcare/safety app that monitored geolocation changes to infer possible hospitalizations or disasters to alert emergency contacts. </p>
  </li>
  <li>
    <p><strong>Reveal</strong>: A companion app to support a UBC research study about autism in children to analyze incoming sensor data and provide an accessible iPadOS experience to collect patient observations.</p>
  </li>
</ul>

<p>This put me on a path to work in open-source and eventually support engineering, particularly with developer tools. I loved (and continue to enjoy) the rabbit holes that supporting developers come with. Some notable examples of these years include:</p>

<ul>
  <li>
    <p><strong>Lighthouse Labs</strong>: Mentoring iOS bootcamp students with Swift and Objective-C assignments, projects, and concepts.</p>
  </li>
  <li>
    <p>Maintaining open-source projects ZipArchive, Quick, and Jazzy.</p>
  </li>
  <li>
    <p><strong>Realm</strong>: Answering incoming support tickets, creating example projects, rewriting/expanding documentation, and fixing bugs in the Swift, Objective-C and JavaScript SDKs.</p>
  </li>
  <li>
    <p><strong>CircleCI and TravisCI</strong>: Answering incoming support tickets, optimizing build configurations, debugging flaky test suites, working 1-on-1 with teams to determine opportunities for additional features to enhance productivity and reduce developer toil.</p>
  </li>
</ul>

<p>Working in support engineering afforded me many opportunities to learn something new, particularly with rapid exposure to new programming languages, stacks, different industries and compliance environments. The fast pace encouraged me to push further into engineering focused tasks, especially as it related to increasing productivity to help my team deliver on our mandate to support developers better. Some notable examples:</p>

<ul>
  <li>
    <p><strong>PSPDFKit</strong>: Creating a containerized self-service app to ship logs and metrics from self-hosted installations of PSPDFKit for Web/Server to be debugged by internally. The pilot of this alleviated a lot of back and forth between support, engineering and customers since everything could be shared transparently and on-demand. </p>
  </li>
  <li>
    <p><strong>Bitrise</strong>: Creating a support facing tool that hooked into BigQuery and provided real-time access to user data for build logs, billing data, and metrics that previously had a 2-4 hour delay. This enabled our team to support the issue directly without the need to rely on screenshots and Gist links.</p>
  </li>
</ul>

<p>With the desire to be more hands-on and shed full-time support responsibilities, I pivoted my career to working fully in a software engineering capacity, which also incidentally was my first big push into consulting. This includes:</p>

<ul>
  <li>
    <p><strong>Valora</strong>: Leveraging my experience in mobile and CI/CD developer tools, I joined Valora to work on improving flakiness in a React Native Detox E2E test suite. Rewriting test cases to be more resilient and optimized for automated environments. Additionally, I designed a custom CI/CD scheduler on top of GitHub Actions that leveraged ephemeral MacStadium instances and Buildkite to provide additional firepower during high demand peaks using a circuit breaker pattern. </p>
  </li>
  <li>
    <p><strong>cLabs</strong>: I worked on observability systems, including migrating logs and metrics from Stackdriver to Grafana Cloud for a group of GCP GKE Kubernetes clusters, as well as collaborating with teams to increase coverage, build dashboards, alerts, and optimize GoLang services to be more reliable and resource aware.</p>
  </li>
  <li>
    <p><strong>Entropy</strong>: I implemented developer and compliance tools from scratch, such as GitHub Actions, Terraform, Okta SSO, and 1Password Secrets, as well as conducted in-depth testing for DevOps/developer experience for a Rust protocol and SDK within the context of running replicas in Kubernetes, Nomad, ECS, EC2+ASG, and Docker Compose.</p>
  </li>
  <li>
    <p><strong>Dora</strong>: I lead the architecture and development of a distributed data platform using Rust and Aurora Postgres to capture high volume blockchain data from multiple ecosystems to filter, contextualize and repackage data for API consumption. Additionally, I also created API endpoints in GoLang to service the front-end and provide partner integrations.</p>
  </li>
  <li>
    <p>I worked with several small startups to re-architect their systems and create micro-services from monolith codebases written in Node.js, Deno JavaScript, TypeScript, Rust, and GoLang.</p>
  </li>
</ul>

<hr />

<h2 id="present-day">Present Day</h2>

<p>Today I work at Wealthsimple on a Platform Engineering team, specifically tasked with expanding and operating its Kubernetes platform. This includes all of my favourite aspects of my career:</p>

<ul>
  <li>
    <p>Supporting other teams with infrastructure requests, providing project-based guidance, reviewing PRs, and knowledge sharing.</p>
  </li>
  <li>
    <p>Responding to incidents and supporting operations for several Kubernetes clusters and implementing patches.</p>
  </li>
  <li>
    <p>Implementing features and expanding the functionality of the Kubernetes platform for our users and the business.</p>
  </li>
</ul>

<hr />

<h2 id="what-i-can-help-with">What I can help with</h2>

<ul>
  <li>
    <p>Green field projects that could benefit from a fresh perspective leveraging my experience from working across the stack.</p>
  </li>
  <li>
    <p>Completing migrations or time consuming work that have been deprioritized but contribute to developer toil or technical debt.</p>
  </li>
  <li>
    <p>Create briefs and/or deep-dives for tool/platform evaluations, researching projects, or (informal) compliance evaluations.</p>
  </li>
  <li>
    <p>Working with tech I have proficiency in or flexibility for me to pick up something new.</p>
  </li>
  <li>
    <p>Presenting workshops in group settings or mentoring people 1-on-1.  </p>
  </li>
  <li>
    <p><em>Something else?</em></p>
  </li>
</ul>

<hr />

<h2 id="what-i-cant-help-you-with">What I can’t help you with</h2>

<ul>
  <li>
    <p>I’m not interested in unpaid labour for stock (<em>although</em> <strong>volunteer</strong> labour is potentially available for <strong>non-profits</strong>, and <strong>mentorship</strong> to early career and/or LGBTQ folks).</p>
  </li>
  <li>
    <p>I’m not interested in writing smart contracts or low-effort code fixing projects.</p>
  </li>
  <li>
    <p>I’m not interested in commitments or projects that require travelling. Otherwise, I’m located in Vancouver, British Columbia and available for in-person meet-ups granted covid precautions (KN95 masked).</p>
  </li>
</ul>

<hr />

<p>Specific rates, compensation, and availability depend on the specific dates, type of project and time commitment required.</p>

<p>Please don’t hesitate to reach out to me over <a href="https://www.linkedin.com/in/noisypigeon/">LinkedIn</a> or email at <code class="language-plaintext highlighter-rouge">willow dot finch at fastmail dot com</code>. You can also find me on <a href="https://github.com/noisypigeon">GitHub</a>.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Reflections of my career trajectory over the years and open call for consulting work.]]></summary></entry><entry><title type="html">From the Archives: Mechanical Keyboards</title><link href="https://noisypigeon.github.io/posts/from-the-archives-mechanical-keyboards/" rel="alternate" type="text/html" title="From the Archives: Mechanical Keyboards" /><published>2024-12-17T20:00:00+00:00</published><updated>2024-12-17T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/from-the-archives-mechanical-keyboards</id><content type="html" xml:base="https://noisypigeon.github.io/posts/from-the-archives-mechanical-keyboards/"><![CDATA[<p>This is a very informal blog post to share photos of all my mechanical keyboards that I’ve built and used over the years (roughly 2017 to 2023). I no longer have any of these keyboards but the pictures sure are pretty. I’ll continue to add to this blog post as I find more pictures.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2556.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2556.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2555.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2555.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2586.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2586.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1152" width="2048" alt="An image with filename: EBjkuRIWkAA678D.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/ebjkuriwkaa678d.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="507" width="640" alt="An image with filename: IMG_2583.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2583.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: g2uqe7irgy251.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/g2uqe7irgy251.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1536" width="2048" alt="An image with filename: x8tmh2lj1uv41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/x8tmh2lj1uv41.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2587.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2587.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="426" width="640" alt="An image with filename: IMG_2598.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2598.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="426" width="640" alt="An image with filename: IMG_2602.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2602.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2576.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2576.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="426" width="640" alt="An image with filename: IMG_2594.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2594.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="418" width="640" alt="An image with filename: IMG_2595.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2595.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="479" width="640" alt="An image with filename: IMG_2585.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2585.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="640" width="640" alt="An image with filename: IMG_2559.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2559.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: u51su1ddgai31.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/u51su1ddgai31.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="423" width="640" alt="An image with filename: IMG_2597.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2597.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="2595" width="3772" alt="An image with filename: kp0g1dpju5e41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/kp0g1dpju5e41.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: IMG_2577.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-mechanical-keyboards/img_2577.jpg" /></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Aggregate blog post with photos of mechanical keyboard builds from over the years.]]></summary></entry><entry><title type="html">From the Archives: Desk Setups</title><link href="https://noisypigeon.github.io/posts/from-the-archives-desk-setups/" rel="alternate" type="text/html" title="From the Archives: Desk Setups" /><published>2024-11-09T20:00:00+00:00</published><updated>2024-11-09T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/from-the-archives-desk-setups</id><content type="html" xml:base="https://noisypigeon.github.io/posts/from-the-archives-desk-setups/"><![CDATA[<h2 id="2021">2021</h2>

<figure class="attachment attachment--preview attachment--jpg"><img height="2808" width="4030" alt="An image with caption: June 18, 2021." loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/h5besbpbz3671.jpg" /><figcaption class="attachment__caption" aria-hidden="true">June 18, 2021.</figcaption></figure>

<h2 id="2020">2020.</h2>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with caption: May 7th 2020." loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/rnckek9nqfx41.jpg" /><figcaption class="attachment__caption" aria-hidden="true">May 7th 2020.</figcaption></figure>

<h2 id="2019">2019.</h2>

<p>December 2019</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="2891" width="3855" alt="An image with caption: December 29th, 2019." loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/pqzqz5t5vm741.jpg" /><figcaption class="attachment__caption" aria-hidden="true">December 29th, 2019.</figcaption></figure>

<p>LG 38GL950G-B monitor, PreSonus E5 speakers, Native Instruments Audio 2 interface, MacBook Pro 13” w/ TouchBar 2019 base (personal), MacBook Pro 16” base (work), OWC Thunderbolt 3 dock, custom S4 Mini with 3700X, RTX 2070 gaming PC, Rama KOYU w/ GMK DMG mechanical keyboard, Logitech MX Master 2s mouse (productivity), Logitech G Pro Wireless gaming mouse, iPad Air (newest gen) for sidecar and Nest security cam.</p>

<p>March 2019</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with caption: March 17th, 2019." loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/3qaorykx5rm21.jpg" /><figcaption class="attachment__caption" aria-hidden="true">March 17th, 2019.</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1238" width="1650" alt="An image with caption: January 19th, 2019." loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/0vnomwb4veb21.jpg" /><figcaption class="attachment__caption" aria-hidden="true">January 19th, 2019.</figcaption></figure>

<p>2018.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="839" width="1119" alt="An image with caption: November 24th, 2018" loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/ijh3w5lg2c021.jpg" /><figcaption class="attachment__caption" aria-hidden="true">November 24th, 2018</figcaption></figure>

<p>PC Tower: Ryzen 5 2600, Noctua U12s AM4, MSI B450 Mortar Titanium, G.Skill Trident Z DDR4-3200 CL 14, Samsung 970 Evo 500GB, Samsung 970 Evo 1TB, Sapphire RX 580 Nitro+ Limited Edition, EVGA G3 750W, 5x Be Quiet Silent Wings 3 120mm Fans, Fractal Designs Meshify C Mini. Peripherals: Dell 27” 1440p U2715H Monitor, Acer 27” 1440p K272HUL Monitor, HHKB Type-S Keyboard, Steel Series Rival 310 Mouse, Audio Technica ATH-M50x Headphones, Audio Engine D1 DAC, Akai MPK 49 Midi Controller.</p>

<p>January 2018.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="4020" width="6022" alt="An image with filename: 09ix2y3tzew41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-desk-setups/09ix2y3tzew41.jpg" /></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Aggregate blog post with photos of desk setups from over the years.]]></summary></entry><entry><title type="html">From the Archives: PC Builds</title><link href="https://noisypigeon.github.io/posts/from-the-archives-pc-builds/" rel="alternate" type="text/html" title="From the Archives: PC Builds" /><published>2024-10-13T19:00:00+00:00</published><updated>2024-10-13T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/from-the-archives-pc-builds</id><content type="html" xml:base="https://noisypigeon.github.io/posts/from-the-archives-pc-builds/"><![CDATA[<p>Work in Progress.</p>

<p>2020</p>

<p>April 27th, 2020</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: g0qs5d8ojuv41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/g0qs5d8ojuv41.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: qlfzhtq8kev41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/qlfzhtq8kev41.jpg" /></figure>

<p>R5 3600, b450i, 16gb 3600, 2tb nvme, 550w, 2060S</p>

<p>March 18th, 2020.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: fxmhihumdin41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/fxmhihumdin41.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="3819" width="5055" alt="An image with filename: wxhuzhfvf3o41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/wxhuzhfvf3o41.jpg" /></figure>

<p>3700X, MSI B450 Tomahawk Max, Noctua U12s <a href="http://chromax.black">chromax.black</a>, 2x16GB Hyper X 3600Mhz, 2TB Samsung 970 Evo Plus, EVGA G3 650W, White Strix 2080 Ti, 3 <a href="http://chromax.black">chromax.black</a> noctua F12 fans, soon to be white EK Vardars, Be Quiet Pure Base 500 White TG, Dual GPU setup</p>

<p>February 2020.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1536" width="2048" alt="An image with filename: 2t9sjcsltki41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/2t9sjcsltki41.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: t8z8cx6ehck41.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/t8z8cx6ehck41.jpg" /></figure>

<p>S4 Mini Classic SFF build from September 2019.</p>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1280" width="1280" alt="An image with filename: VwXVGVo_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/vwxvgvo_d.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1280" width="1280" alt="An image with filename: x0BSh1E_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/x0bsh1e_d.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="2976" width="2976" alt="An image with filename: 8mveb9fkrcm31.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/8mveb9fkrcm31.jpg" /></figure>

<p>Ryzen 7 3700X 8-core CPU, Gigabyte RTX 2070 (non super since no ITX super card exists yet), 2x8GB Trident Z 3200MHz CL 14 memory (re-used from previous build, may upgrade to a higher MHz 32GB kit in future), Asrock X570 TB3 Mini-ITX motherboard, Noctua L9i, custom cables from Sanctum Sleeving, Samsung 970 Evo Plus 2TB (not PCIe 4.0 but may upgrade to one in future), pre wired for me to add some Sata 2.5” SSDs in the future. Assembled by Josh from NFC. This is one of the last S4M Classics that he had and it’s so beautiful.</p>

<p>NCase M1 NAS storage build from August 2019.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with filename: 2a7gq7wozge31.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/2a7gq7wozge31.jpg" /></figure>

<p>Streacom DA2 build iteration from February 2019.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1270" width="1694" alt="An image with filename: 85naxakuv8g21.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/85naxakuv8g21.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="960" width="1280" alt="An image with filename: xn6CpF8_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/xn6cpf8_d.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="960" width="1280" alt="An image with filename: eHQxH3I_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/ehqxh3i_d.jpg" /></figure>

<p>Streacom DA2 build from January 2019.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1304" width="1739" alt="An image with filename: wcp6nd7hbw921.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/wcp6nd7hbw921.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="960" width="1280" alt="An image with filename: UKn5n6j_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/ukn5n6j_d.jpg" /></figure>

<p><strong>Specs:</strong> 2600 overclocked to 3.8GHz, Noctua NH-L9a AM4, MSI B450-I Gaming Plus AC, G.Skill Trident Z (non-RGB) 16GB (2x8GB) DDR4-3200MHz, Samsung 970 Evo 1TB PCIe M.2 SSD, Intel 545s 512GB Sata SSD, MSI GTX 1070 Ti Titanium, Streacom DA2, EVGA 650 GM 80+ Gold SFX Power Supply</p>

<p>Meshify C from December 2018.</p>

<figure class="attachment attachment--preview attachment--jpeg"><img height="960" width="1280" alt="An image with filename: 4lnampE_d.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/4lnampe_d.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1297" width="1412" alt="An image with filename: jows6i4nfy221.jpg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/jows6i4nfy221.jpg" /></figure>

<h2 id="dan-a4-sfx-vertical">Dan A4 SFX “Vertical”</h2>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1440" width="1080" alt="An image with filename: bd9a3l1az7t11.jpeg" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/bd9a3l1az7t11.jpg" /></figure>

<h2 id="dan-a4-sfx-build-from-october-2018">Dan A4 SFX build from October 2018.</h2>

<p>R7 2700X (underclocked), Asus X470-I, 970 Evo 1TB, G.Skill 16GB DDR4-3200 CAS 14, Noctua L9i, SF450.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="3024" width="4032" alt="An image with caption: “Don’t talk to me or my son again” (SFX is Dan A4, ATX is NZXT H500)" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/fb89r1gk00r11.jpg" /><figcaption class="attachment__caption" aria-hidden="true">“Don’t talk to me or my son again” (SFX is Dan A4, ATX is NZXT H500)</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1013" width="760" alt="An image with caption: GTX 1070 Ti Founders Edition" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/7pntfhy_d.jpg" /><figcaption class="attachment__caption" aria-hidden="true">GTX 1070 Ti Founders Edition</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpeg"><img height="1013" width="760" alt="An image with caption: PSU and CPU cooler" loading="lazy" src="/assets/images/posts/from-the-archives-pc-builds/bwq6fl2_d.jpg" /><figcaption class="attachment__caption" aria-hidden="true">PSU and CPU cooler</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Aggregate blog post with photos of PC builds from over the years.]]></summary></entry><entry><title type="html">Hihi, Pika! Let’s consolidate (Re-introduction)</title><link href="https://noisypigeon.github.io/posts/hihi-pika-lets-consolidate-re-introduction/" rel="alternate" type="text/html" title="Hihi, Pika! Let’s consolidate (Re-introduction)" /><published>2024-09-13T19:00:00+00:00</published><updated>2024-09-13T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/hihi-pika-lets-consolidate-re-introduction</id><content type="html" xml:base="https://noisypigeon.github.io/posts/hihi-pika-lets-consolidate-re-introduction/"><![CDATA[<p>I created this blog to play with <a href="https://pika.page/">Pika</a> and surface interviews, podcast appearances, blog posts so I could consolidate and reflect on the last 10 years of my professional career, and more broadly my life. This will be a constant effort as I keep remembering things I worked on and head back to Wayback machine to find these artifacts of my past.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Blog migration announcement/re-launch on Pika.]]></summary></entry><entry><title type="html">Nuances between distributed and decentralized systems</title><link href="https://noisypigeon.github.io/posts/nuances-between-distributed-and-decentralized-systems/" rel="alternate" type="text/html" title="Nuances between distributed and decentralized systems" /><published>2024-03-07T08:00:00+00:00</published><updated>2024-03-07T08:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/nuances-between-distributed-and-decentralized-systems</id><content type="html" xml:base="https://noisypigeon.github.io/posts/nuances-between-distributed-and-decentralized-systems/"><![CDATA[<p>Over the past 4 years, I’ve worked both as an infrastructure and back-end engineer designing and building distributed systems for Web3 ecosystem projects. But working in an industry that loves to use the moniker “decentralization” - how do distributed systems differ from decentralized systems, and why are a lot of Web3 ecosystems, protocols, and dApps (decentralized apps) actually mostly rather centralized?</p>

<p><strong>All decentralized systems are distributed systems but not all distributed systems are decentralized systems.</strong> This blog post goes into the nuances between distributed and decentralized systems as well as some tangible things to consider to foster decentralization within your infrastructure, tooling, and company.</p>

<p><strong>Firstly, I’d like to define these terms for the purpose of this blog post:</strong></p>

<ul>
  <li>
    <p>Distributed systems: Composed of multiple separate computers that communicate and coordinate with each other to manage a common workload offering advantages including increased resilience against single points of failure, fault tolerance, high-availability, and opportunity for scalability but controlled or governed by a centralized authority.</p>
  </li>
  <li>
    <p>Decentralized systems: Characterized by the absence of a single central authority or point of control; distributing decision making authority and data across a network of interconnected nodes and network participants offering several additional advantages including further increased resilience against batched points of failure, censorship resistance, and multi-operator scaling.</p>
  </li>
</ul>

<p>The surface area for “distributed systems” is a lot more inclusive and manifests in multiple forms and levels of complexity because the primary focus is reducing single points of failure and increasing system resiliency and fault-tolerance. Decentralization on the other hand has a rather rigid definition that can be very difficult to effectively accomplish in practice.</p>

<p><strong>A. What is an example of a static centralized deployment?</strong></p>

<p>This could look a lot of different ways but a pattern I’ve seen is that each service is on it’s own EC2 instance (i.e.: 1 EC2 instance for front-end, 1 EC2 instance for back-end) and a RDS instance for the database. This resource architecture demonstrates the benefits of vertical scaling since as traffic and demand increases, the infrastructure/DevOps folks can manually increase the compute, memory and disk capacity available to the front-end, back-end, and database. But vertical scaling can go so far as single instances requiring higher resource classes that cost more money. Additionally single deployments will always pose inherent risk such as requests being dropped/not fulfilled due to demand being too high or when the service is unavailable due to the downtime between resource class changes and restarts. </p>

<p>Anecdotally, a lot of Web3 “dApps” use this deployment strategy even in production with high activity.</p>

<p><strong>B. How can this be improved with “low effort” distributed centralized architecture?</strong></p>

<p>The single EC2 instances could be converted to use EC2 auto scaling groups which utilize an ELB (elastic load balancer) to stabilize incoming traffic between instances and configure rules to create new instances as capacity is exhausted. Depending on the specific requirements and usage patterns of the database, the single RDS instance could be replaced with a clustered RDS instance (such as multi-AZ or Aurora) to provide (for example) different nodes for write vs read operations, or a primary node with sharding and/or logical duplication for follower/accessory nodes. </p>

<p>These two adjustments provide a massive amount of scaling headroom because policies can be configured to automatically increase and decrease available resources on a per instance basis as well as increase or decrease the number of instances being created.</p>

<p><strong>C. How can this be improved with a “mid effort” distributed centralized architecture?</strong></p>

<p>I’d personally say that a lot of projects/companies could go forever using auto scaling groups and compute platforms like EC2, and even go as far as saying a lot of services using container orchestration platforms don’t inherently need them to operate and scale effectively. With that said, the next iteration would be to switch from EC2 to ECS. ECS is a great mid-step between the next section of what I’d categorize as “high effort” distributed centralized architectures as it abstracts most of the considerations that need to be intentionally thought out/designed with Kubernetes or Nomad. </p>

<p>For some context, AWS has put a lot of work into the EC2 platform so instances behave like containers for the most part but they are actually virtual machines running on bare metal. It’s out of scope of this article so I recommend reading this <a href="https://cloud.google.com/discover/containers-vs-vms">Google Cloud explainer</a> for more details and I’ve added a footnote [1] for my high-level overview/summary of the differences.</p>

<p>The front-end and back-end running on the individual EC2 instances (or EC2 auto scaling groups) could be containerized and defined as tasks to be orchestrated as long-running tasks called services. These tasks and services can be configured to expand/contract resources similar to EC2 auto scaling groups however they have a considerably lower latency to service discovery and operational readiness. compared to a virtual machine’s “cold start” / boot process.</p>

<p>In the effort of staying on topic, effective monitoring and observability will be an entirely different blog post but container orchestrator platforms make monitoring and observability a lot easier to do effectively due to containers being on the same data plane allowing for more effective inter-service communication.</p>

<p><strong>D. What does a “high effort” distributed centralized architecture look like?</strong></p>

<p>From cloud vendor lock-in container orchestration platforms like AWS ECS and Google Cloud Run Jobs, Kubernetes and HashiCorp Nomad are both very portable meaning they can be deployed on all public clouds like AWS, GCP or Azure, as well as locally or in a collocated environment. </p>

<p>This basically opens up Pandora’s Box in terms of possibilities for scaling and adaptability, and provides a pathway to cloud native decentralized architecture. </p>

<p>Both Kubernetes and HashiCorp Nomad are popular platforms for orchestrating workloads, but they differ in design philosophies and ownership. While Kubernetes is widely adopted and favored for its open-source nature and strong industry support from major cloud providers like AWS, GCP, and Azure, Nomad offers a simpler, lightweight solution with support for various environments, including containers, VMs, and executables. However, in my mind and for the context of this article, Nomad’s ownership by a private corporation raises concerns with regards to vendor lock-in and centralized authority. For the rest of this article, I’ll focus on Kubernetes for its exhaustive open-source/foundation driven ecosystem, community support, and integration with open-source tools like Helm and Prometheus which make it my and many others preferred choice.</p>

<p>This level of flexibility and versatility provides so much in terms of high-availability workloads and additional flexibility scaling beyond multi-AZ (availability zones) and multi-regional (physical data centers) because it provides a cloud native pathway to multi-cloud deployments using peer-to-peer network cluster gossiping for example (although I’ve observed/read other methods as well).</p>

<p><strong>E. How can I make a “high effort” centralized distributed architecture decentralized?</strong></p>

<p>Finally, to the nuances of distributed vs decentralized. A distributed system is defined as a system with minimal to no single points of failure but a decentralized system is defined as one with no single points of authority or control. There’s a lot about the philosophy of decentralization and decentralized ownership which I think is overlooked by the majority of the Web3 and DeFi community. </p>

<p>Decentralization is not about the individual system but how a distributed system fits into the greater world and what influences can affect its performance and viable operation when pressure is added by corporate interests, government censorship, bad actors and collective usage. For a system to be truly decentralized, it should incorporate robust mitigations for:</p>

<p><strong>E.a. Corporate (Cloud) and Government Censorship Resistance</strong></p>

<p>(<a href="https://www.youtube.com/watch?v=SgGK93iiQ6Ehttps://www.youtube.com/watch?v=SgGK93iiQ6E">E.A. sports, it’s in the game.</a>)</p>

<p>Decentralized systems such as Ethereum and Bitcoin are only trustworthy and function because they contain a distributed ledger that thousands of nodes observe, validate new transactions and seed copies of the archives to be referenced again and again. The consensus and re-org process ensures that variations of data are merged and generally once a block is finalized, compounded by the weight of newer blocks being finalized with the previous one as the foundation, we can trust that the data is authentic.</p>

<p>With that said, there are concerning data points that chip at even the gold standard decentralized systems like Ethereum where 52% of Ethereum nodes run on AWS, followed by 16.9% on Hetzner (source: <a href="https://cointelegraph.com/news/3-cloud-providers-accounting-for-over-two-thirds-of-ethereum-nodes-data">CoinTelegraph</a>). In that 52% of nodes on AWS, 24% of nodes are in a single region: us-east-1 (source: <a href="https://www.ethernodes.org/country/United%20States">EtherNodes</a>). This means that AWS (or the U.S. government) could outlaw Ethereum nodes on their platform and overnight 52% of all nodes securing Ethereum could disappear overnight enabling a number of attack vectors such as a 51% attack, Sybil attack, and more that could irreversibly compromise the trust and verifiable authenticity of the network and it’s participants.</p>

<p>If decentralization is the goal, we should strive to not be bound by a single public cloud provider or of that public cloud provider in a single geographical location that is overseen by a single government. More on this with:</p>

<p><strong>E.b. Natural Disaster and Geographic / Political Distress and Conflict</strong></p>

<p>Another area of decentralization is mitigating the risk of data loss due to natural disasters or political distress and conflicts focused in a certain geography. GCP has 3 US regions and 2 Canadian regions on the east half of North America in South Carolina, North Virginia, Ohio, Ontario, and Quebec. AWS has 2 major US regions and 1 Canadian region on the east half of North America in North Virginia, Ohio, and Quebec. This is an important consideration for my first point however is more evident with a natural disaster scenario. If a deployment was decentralized on the basis of a public cloud provider alone but a single region such as gcp-us-east4 and aws-us-east1 both being in North Virginia, a natural disaster or political distress/conflict affecting public infrastructure could result in the region going offline.</p>

<p><strong>E.c. Attacks on Ownership through Denial of Resources</strong> </p>

<p>This is an attack surface that is becoming more prominent these days. We are used to mitigating for denial of service attacks where a bad actor attempts to overload a service to cause it to go offline however a more recent method of attack is to cost the owner of the service as much money for cloud resources and invoking costly resources (such as push notifications, SMS codes, GPU powered machine learning backed CP/hate symbol detection algorithms, photo ID verification systems) where a company is paying for that interaction regardless of the outcome of the interaction. This is something that requires robust abuse prevention, rate limiting, and detection/notification for human intervention.</p>

<p>Decentralized systems, especially ones that may be funded by a centralized entity, should be operated by multiple parties with separate accounts and payment methods/fund buffers. This mitigates a lot of risk and makes it a lot more difficult to successfully exploit a denial of resource attack that results in a system going offline in whole.</p>

<p><strong>F. In summary</strong></p>

<p>I don’t believe most projects need to be decentralized and I wish/hope that the Web3 and DeFi ecosystem and community would transition away from the decentralized vocabulary or put in the work to ensure the ecosystem is truly mitigated from government and corporate censorship, damage to physical infrastructure due to natural disasters and conflict (war, political, etc) focused on geographical locations, and attacks on ownership such as denial of resource attacks. I have worked in a couple roles where these considerations were worked towards especially with balancing and distributing our workloads beyond the traditional two availability zones/regions but several between multiple public clouds and accounts.</p>

<p>Footnotes:</p>

<p>[1] A high level overview is that VMs carry involuntary constraints that affect cost and operational vitality due to overhead of the hypervisor and that they run a full operating system with dedicated resources (CPU compute, memory, storage, networking, sometimes GPU compute). A container provides a much lighter resource footprint that encourages more “ephemeral-like” usage patterns because they’re faster to create and enable higher density within the parent resource.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about the shortcomings of decentralized systems in the context of DeFi/Web3 systems.]]></summary></entry><entry><title type="html">How to Write a Support Ticket</title><link href="https://noisypigeon.github.io/posts/how-to-write-a-support-ticket/" rel="alternate" type="text/html" title="How to Write a Support Ticket" /><published>2022-08-25T19:00:00+00:00</published><updated>2022-08-25T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-to-write-a-support-ticket</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-to-write-a-support-ticket/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This was originally written to be a guest blog post on a developer-focused publication. It remains valuable despite being largely satirical in tone.</p>
</blockquote>

<p>I spent multiple years of my career as a Support Engineer at industry prominent companies such as Realm, CircleCI, Travis CI, PSPDFKit, and Bitrise. In that time, I learned about a lot of things but the biggest takeaway for my future roles was how to write an effective support ticket.</p>

<p>Imagine receiving this email - no metadata, no links, just:</p>

<blockquote>
  <p>Hey,</p>

  <p>Can you fix my problem?</p>

  <p>Jim</p>
</blockquote>

<p>I would help current and potential customers integrate, maintain and optimize my employer’s tool or SDK. I’ve supported customers using a variety of methods such as email, ticket-based, instant messaging, phone, and video chat support. Customers are generally more forthcoming in the second half of that list: phone and video chat. Generally friendlier too! But often times it was like pulling teeth to get any sort of helpful information while interacting with customers over email, ticket-based or instant messaging style support.</p>

<p>In those three years, I interacted with a lot of people. Ranging from 50 to 200 tickets a week depending on my role and the topic I was covering at the time. My favourite customers were the ones who were appreciative of my work and cognizant of my time. My least favourite were the ones who were derogatory and swore at me and my manager in chat. You suck Eric!</p>

<p>I will show you how to write a proper support ticket at the end of this blog post but for right now let’s cover some key tactics for being a good customer to support workers.</p>

<ol>
  <li>
    <p>Don’t be an entitled free customer.</p>
  </li>
  <li>
    <p>Don’t post on social media about specific employees.</p>
  </li>
  <li>
    <p>Do say thank you but don’t be creepy.</p>
  </li>
  <li>
    <p>Don’t stalk your handler on social media.</p>
  </li>
  <li>
    <p>Don’t open a thousand tickets.</p>
  </li>
  <li>
    <p>Don’t assume women are less skilled than men.</p>
  </li>
</ol>

<p><strong>Don’t be an entitled free customer.</strong> We all love free stuff. <em>Heck, I’ll go looking around on garbage day for free stuff.</em> But understand we live in a capitalist hell-scape and free tiers of products will never receive the same level of support as paid customers. If you want top-tier anything, pay for it. Whether that be by paying for a paid plan, support contract, or hiring a consultant. At the very least, don’t take it out on the front line people as we don’t make the rules, we just follow them.</p>

<p><strong>Don’t post on social media about specific employees</strong> <em>but especially if it’s negative.</em> Let me set the stage, I start my shift and receive something along the lines of that bad support ticket example. I try my best to help them but they are slow to respond and won’t provide any pertinent additional information. They stop responding and then I get a message from my manager saying they tweeted something along the lines that the companies support is useless with a screenshot naming me directly. On top of looking like a dumbass because any reader can see he didn’t answer my questions, it was just a dick move. If you have a concern, send a private message to their manager or a public message not naming them.</p>

<p><strong>Do say thank you but don’t be creepy.</strong> Support workers love having their work appreciated. A lot of people view support as being an entry level position but it takes practice and training to be effective. Say thank you after a pleasant support experience but don’t be creepy. I’ve had multiple occasions where I was made uncomfortable. I’m a femme with a femme name and don’t need men commenting on my Zendesk profile picture.</p>

<p><strong>Don’t stalk your handler on social media.</strong> During a instant messaging chat, I had a customer say I looked nice in my most recent Instagram post. <em>How do you even respond to that?</em> This rolls into the same area as the previous example but please, for the love of god, don’t search up a support worker without permission. This varies person to person, but I had a recurring customer who one day asked if they could follow me on Twitter and asked for my handle. This provides consent. I am okay with this but don’t just search up someone’s name and especially don’t comment on their posts during a support chat. People’s social media’s are generally personal and this is work time.</p>

<p><strong>Don’t open a thousand tickets.</strong> At one of the companies I worked at, we had an Alex problem. Alex would open a ticket literally every day, sometimes multiple times per day. Until we put in precautions for that account, our ticket numbers increased by almost 1/3. He’d have multiple tickets in L2, L3 and with the engineering team. We loved the enthusiasm but requested that Alex batch his questions so one request wasn’t a single question but several that we could answer at once. <em>At one point, we had a Alex filter in Zendesk.</em> 😭😩😂</p>

<p><strong>Don’t assume women are less skilled than men.</strong> This should be obvious by now but unfortunately isn’t. Nearing the end of my time in support, I was in escalated support positions but also helped in front-line support like instant chat. I regularly had customers ask for “another agent” because of my feminine name and they assumed I was less experienced. You might say that this is just me assuming but one customer literally told my manager this and he said I was one of the experienced support agents. I hope this customer felt like an ass, because he was being one. Gender does not mean anything when it comes to experience! Assume women (and non-binary folks) are as experienced or more experienced than you. Especially support workers. This is what we do every day.</p>

<p>So let’s get back to that support ticket.</p>

<blockquote>
  <p>Hey!</p>

  <p>I’m trying to implement caching in a React Native project. I’ve read the documentation on your website and through some posts on Stack Overflow. I’m having a hard time figuring out how to set the trigger for when the cache is invalidated and recreated.</p>

  <p>Here is my build link: link and my .yml file: <a href="http://gist.github.com">gist.github.com</a>. I’ve enabled support access and have dev privileges on the account.</p>

  <p>Thanks,<br />
Rebecca</p>
</blockquote>

<p>It says, in the ticket, what Rebecca‘s trying to achieve and what they’re having a hard time with. It links to the logs and their configuration file and makes sure we have access. For some companies, the last part may not be necessary and in that case ask what is necessary.</p>

<p>This was mainly a satirical post but I hope you learned something and if anything should be taken from this post - it’s that support workers are people and deserve respect.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Satirical essay about writing support tickets.]]></summary></entry><entry><title type="html">BYOI “Bring Your Own Infrastructure” CI/CD Toolchains</title><link href="https://noisypigeon.github.io/posts/byoi-bring-your-own-infrastructure-cicd-toolchains/" rel="alternate" type="text/html" title="BYOI “Bring Your Own Infrastructure” CI/CD Toolchains" /><published>2021-07-16T19:00:00+00:00</published><updated>2021-07-16T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/byoi-bring-your-own-infrastructure-cicd-toolchains</id><content type="html" xml:base="https://noisypigeon.github.io/posts/byoi-bring-your-own-infrastructure-cicd-toolchains/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This was originally written to be published on a new engineering blog at cLabs but due to Valora’s spin out, got deprioritized.</p>
</blockquote>

<p>I was tasked with designing and implementing our new Continuous Integration system for <a href="http://valoraapp.com/?utm_source=noisypigeon&amp;utm_medium=email">Valora</a>. I am going to write blog posts on what I’ve learned along the way. This post will go into “bring your own infrastructure” CI and why we ultimately didn’t go with this option.</p>

<p>Cloud CI builds are notorious for being slow. This is because they use malnourished virtual machines as a means to cram more instances on a single computer. This has business value as it cuts down infrastructure costs and provides users with a palatable invoice. On the other hand, it comes with a huge downside: bad performance. The most popular Mac for build machines is the 2018 six-core Mac Mini with 32GBs of ram which provides the hypervisor with 12 virtual cores. Most VMs have 2-4 vCPUs and 4-8GBs of ram. This means one Mac Mini is shared between three or four customers at any given time. As someone who worked in CI support for three years, the most common question (no matter if it was at CircleCI, Travis CI, or Bitrise) was “why is my build so slow?” and it’s because most customers are running builds on the Mac equivalent of this <a href="https://www.raspberrypi.org/products/raspberry-pi-4-model-b/specifications/?utm_source=noisypigeon&amp;utm_medium=email">Raspberry Pi</a>. We currently use CircleCI and pay for the Large MacOS resource class but our end-to-end tests still take 30-45 minutes to complete.</p>

<p>Providers like CircleCI and Bitrise have a solution if you’re ready to pay. Sweet, sweet dedicated hosts and the option of higher end hardware like the 2019 Mac Pro. It straight up erases the lacklustre performance. I’ve had experience with these machines and it can cut down a 24 minute build to 4-5 minutes. It’s amazing but it comes with a massive bill. This is because you’re not only paying for the full Mac Mini or Mac Pro but also the R&amp;D for the architecture and probably a dedicated sales engineer for support.</p>

<p>This is supposedly where Bring Your Own Infrastructure CI and bare metal machines come into play. It comes at a higher cost than using those Raspberry Pi Macs but with similar performance to dedicated machines at half their cost. <em>Supposedly</em>. I say supposedly because there’s a catch. An engineer’s time isn’t free. Instead of paying CircleCI or Bitrise to manage infrastructure, you’re paying an in-house engineer to maintain it instead.</p>

<p>For example, these are the tools I was planning on using:</p>

<ul>
  <li>
    <p>Terraform. To manage the constellation of AWS products (EC2 Mac Minis, network storage, and VPN service).</p>
  </li>
  <li>
    <p>Ansible. To prepare the Mac Minis once they’ve been created (installing tools that can’t be used through network storage, setting up SSH keys, and starting the BuildKite agent).</p>
  </li>
  <li>
    <p>BuildKite. To orchestrate builds.</p>
  </li>
</ul>

<p>This adds two additional rather complicated and time consuming responsibilities to their work week. It would be naive to think one person can do it better than the entire teams dedicated to maintaining these tools.</p>

<p>It’s not necessarily much cheaper than letting CircleCI or Bitrise manage the infrastructure either. There are many options in the space: AWS, Mac Stadium, Flow, and others not worth mentioning. I considered all three of these but using Mac Stadium or Flow would require manual configuration of tools using their respective GUIs instead of configuration files. While expensive, AWS has Terraform support allowing codified infrastructure. For a six-core 32GB 2018 Mac Mini, here’s the breakdown:</p>

<ul>
  <li>
    <p>Mac Stadium is $179/month/machine.</p>
  </li>
  <li>
    <p>Flow is $442/month/machine.</p>
  </li>
  <li>
    <p>AWS is $744/month/machine.</p>
  </li>
</ul>

<p>Multiply that by 5 machines and that’s $895, $2210, and $3720 respectively. Yikes! Five Mac Stadium machines are just over the cost of one AWS machine. This started me thinking why?</p>

<p>I then started considering elasticity. Using AWS and the aforementioned tools, we could dynamically grow and shrink our resources. For example, during the night or on weekends. This would drop that $744/month/machine to $480/month/machine for no weekends and between $275-$350/machine for no weekends and shrinking during the night. But…sadly…AWS requires you to pay for 24 hours at minimum due to Apple’s EULA. This completely obliterates this option because of the complexity involved with setting it up and then only saving $264/month. I had written an entirely different post on this topic that unfortunately had some misinformation due to me not knowing about Apple’s EULA constraints. But I made this really cute illustration that I still wanted to share:</p>

<figure class="attachment attachment--preview attachment--png"><img height="350" width="700" alt="An image with caption: 1. Provision. 2. Prepare. 3. World Domination. 4. Run Builds. 5. Destroy." loading="lazy" src="/assets/images/posts/byoi-bring-your-own-infrastructure-cicd-toolchains/4rabopgbdj1ezqsfq2zeun0xspap_small.png" /><figcaption class="attachment__caption" aria-hidden="true">1. Provision. 2. Prepare. 3. World Domination. 4. Run Builds. 5. Destroy.</figcaption></figure>

<p>Since cloud CI providers don’t yet support it, one unavoidable reason to use BYOI CI is if you wanted to use Apple Silicon M1 machines as build agents. I started this project with the intent to use M1 but spent weeks trying to make it work. Compatibility ended up not being ready. I was constantly debugging issues and for a lot of them had to employ sketchy workarounds. These issues were primarily around the fact that Valora still uses Node 10 as the React Native engine. This is something we want to upgrade in the future but it will be a huge task.</p>

<p>To plug an old boss of mine, during my research I came across three great blog posts by Peter Steinberger from his personal blog and PSPDFKit’s blog. I highly recommend reading his blog posts and following them both on Twitter at <a href="http://twitter.com/steipete?utm_source=noisypigeon&amp;utm_medium=email">@steipete</a> and <a href="https://twitter.com/pspdfkit?utm_source=noisypigeon&amp;utm_medium=email">@pspdfkit</a>.</p>

<ul>
  <li>
    <p><a href="https://pspdfkit.com/blog/2020/managing-macos-hardware-virtualization-or-bare-metal/?utm_source=noisypigeon&amp;utm_medium=email">Managing MacOS Hardware: Virtualization or Bare Metal?</a></p>
  </li>
  <li>
    <p><a href="https://steipete.com/posts/apple-silicon-m1-a-developer-perspective/?utm_source=noisypigeon&amp;utm_medium=email">Apple Silicon M1: A Developer’s Perspective</a>.</p>
  </li>
  <li>
    <p><a href="https://steipete.com/posts/apple-silicon-mac-mini-for-ci/?utm_source=noisypigeon&amp;utm_medium=email">On Using Apple Silicon Mac Mini for Continuous Integration</a>.</p>
  </li>
</ul>

<p>After a lot of consideration and false starts, we ultimately didn’t go with this option because of the price and complexity of maintaining infrastructure. My time would be better spent on other projects improving the developer experience for our engineers than maintaining the complexities of AWS and constantly putting out fires. After all, that’s a huge chunk of what we pay a cloud CI provider for.</p>

<p>Improving the CI has been an incredible learning experience and fun opportunity. I love learning about new tools and am excited to cover this more in future blog posts.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about custom infra CI/CD vs managed CI/CD solutions.]]></summary></entry><entry><title type="html">What SaaS CI/CD tool should I use?</title><link href="https://noisypigeon.github.io/posts/what-saas-ci-cd-tool-should-i-use/" rel="alternate" type="text/html" title="What SaaS CI/CD tool should I use?" /><published>2021-06-27T19:00:00+00:00</published><updated>2021-06-27T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/what-saas-ci-cd-tool-should-i-use</id><content type="html" xml:base="https://noisypigeon.github.io/posts/what-saas-ci-cd-tool-should-i-use/"><![CDATA[<p>Choosing a continuous integration platform for your team is like pigeons at the park. They’re all interesting but you don’t know which one you’re going to take home.</p>

<p>Here are the things I consider when choosing a CI system for a new project.</p>

<p>How many engineers will rely on this system?</p>

<p>I’ve helped customers whose entire engineering organizations would screech to a halt when their CI broke. This was often because the person who designed the pipeline left the company or was on vacation. For example: nobody knew how to publish a release manually or fix common CI problems like rebuilding a cache. Everything you automate should be accompanied by a guide for manual intervention (with screenshots!).</p>

<p>CI should be trustworthy and reliable but flexible enough that it can be fixed by someone without domain-specific CI knowledge, especially in a pinch. Write documentation and put comments in your config to help the next farmer in the CI pumpkin patch. You’ll thank yourself later when you’re not interrupted during your vacation!</p>

<p>In addition to this, consider what the engineering culture is like. Do people test their code frequently or at the end of the day? How often is code deployed to staging and production? This may change your decision on whether you should have faster builds or more concurrency.</p>

<p>What test tools does your project use?</p>

<p>While interviewing for my current job, I was tasked with implementing CI for a React Native project that used Detox (an E2E framework) and I chose CircleCI. Having just left Bitrise, my interviewers asked me why I didn’t chose that platform for this project. As much as I love Bitrise, as of then, Bitrise and Detox didn’t mix well. While I was working there, we’d sometimes get it to work for customers but it was a painful experience every time. I chose CircleCI for this exercise because of its first class Detox support. My colleagues at Circle had been working on Detox support for years before it was popular. Choose the provider with the best support for the tools you use!</p>

<p>There are a lot of CI tools but to cover my favourites:</p>

<ul>
  <li>
    <p>CircleCI is amazing at Docker (containerization) and Detox.</p>
  </li>
  <li>
    <p>Bitrise is top tier for release automation and support for official tools.</p>
  </li>
  <li>
    <p>BuildKite is thee choice for on-site or bring your own infra solutions.</p>
  </li>
  <li>
    <p>GitHub Actions has the best caching mechanism.</p>
  </li>
  <li>
    <p>Honk CI is the best at stealing gardener’s hats.</p>
  </li>
</ul>

<p>Do you build on Mac, Linux or Windows?</p>

<p>As a general rule follow these guidelines:</p>

<ol>
  <li>
    <p>Native iOS and Mac projects need Mac build machines but as enticing as it is: don’t run Hackintoshes for CI. It’s against Apple’s EULA and genuine hardware is worth the extra cash. If your project is web-based or uses a hybrid framework such as React Native or Flutter, you have more flexibility in what operating systems and machines you can use.</p>
  </li>
  <li>
    <p>Unless you’re writing software for Windows, don’t use Windows for your build machines. It’s only pain. Having worked at CI companies, I was on the inside and watched my colleagues work on the different platforms. My colleagues, by far, complained about Windows (as a CI OS) the most. Please, for the love of god, don’t email me asking for Windows support!</p>
  </li>
  <li>
    <p>Use Linux where you can, Mac where you must. Mac build machines are expensive so I’ve seen companies use Ubuntu machines to run their React Native E2E tests and Macs for when they’re producing the iOS binaries and submitting to the App Store.</p>
  </li>
</ol>

<p>You should also consider if you want to go with managed or unmanaged infrastructure. I’m a bit of a masochist so I personally prefer unmanaged but it really depends on your needs and budget. Platforms like CircleCI and Bitrise primarily offer what is called “Cloud CI” which is managed infrastructure where they build off Amazon or Google and provide nicely packaged Virtual Machines. These machines are shared and you are only one of many tenants on the machine. VMs are created and destroyed as fast as a build start and finish.</p>

<p>For example, a 6-core 64GB Mac Mini could be cut up as much as 12 VMs providing each tenant half of a CPU core and just over 5GBs of memory. Performance generally sucks and you spend a lot of time optimizing by using caching, skipping unnecessary steps and so on. The benefit to managed hardware is the easy breezy experience. If Amazon has a problem it’s Circle’s engineers working on a fix, not you.</p>

<p>How much do you have to spend?</p>

<p>Cost is something that we, as individual contributors, generally don’t have to think about. For example, and only if you want to be horrified, do the napkin math for what your company is paying Slack. With that said, as I’ve transitioned into the role of a systems architect, I’ve learned to choose solutions as if it was going to be my own credit card on the invoice. It can be enticing to get the best of the best when the good of the good would do. For example, maybe longer builds is tolerable when more builds can run concurrently. And even if you’re going to go with the best of the best, consider if it’s a good value or if something that is 20% less money for 5% less performance would suffice.</p>

<p>Time is also a cost to consider. Implementing a trustworthy and robust CI system frees up a lot of time because individual dev machines aren’t bogged down running E2E tests or code signing binaries allowing engineers to continue their important work. Watching pigeon videos on YouTube!</p>

<p>C-Levels, in my experience, like getting their money’s worth and paying for CI to increase developer efficiency is usually a worthwhile cost. If you’re looking for ways to help your proposal and convince your CEO, I’ll be writing a blog post on this topic soon. 🥺👉🏻👈🏻 CEO can we have CI pwease.</p>

<p>I personally love credit-based billing, which a lot of the platforms have started to support. It allows you to use Mac machines only when necessary and have more powerful Linux-based machines (meaning faster builds) for regular tasks.</p>

<p>I hope that you learned something or this blog post helps you in the journey of choosing your next CI solution.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about continuous integration and delivery tools.]]></summary></entry><entry><title type="html">Tools for being creative! (M1 iPad Pro 12.9)</title><link href="https://noisypigeon.github.io/posts/tools-for-being-creative-m1-ipad-pro-129/" rel="alternate" type="text/html" title="Tools for being creative! (M1 iPad Pro 12.9)" /><published>2021-06-21T19:00:00+00:00</published><updated>2021-06-21T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/tools-for-being-creative-m1-ipad-pro-129</id><content type="html" xml:base="https://noisypigeon.github.io/posts/tools-for-being-creative-m1-ipad-pro-129/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This blog post has been altered to remove direct mentions of people due to safety concerns.</p>
</blockquote>

<figure class="attachment attachment--preview attachment--jpg"><img height="2880" width="4032" alt="An image with caption: Photo of my sticker bombed iPad." loading="lazy" src="/assets/images/posts/tools-for-being-creative-m1-ipad-pro-129/img_1185-2520edited.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Photo of my sticker bombed iPad.</figcaption></figure>

<p>I recently picked up a M1 iPad Pro 12.9” to replace my personal MacBook Air. I prefer the form factor for illustration and note taking, and it can do basically everything else I need it to when its attached to my magic keyboard case. I’ve tried to use an iPad as my daily driver multiple times but the attempts always failed because I was trying to force it to be a Mac. Instead I had to adapt my workflow and have been using my iPad full-time for about a month. It’s the only device I interact with (other than my iPhone) outside of work hours.</p>

<p><del>Here’s my Home Screen (with my vision board)!</del> (still looking for the image).</p>

<p>This is what I use my iPad for:</p>

<ol>
  <li>Content Consumption</li>
</ol>

<p>The iPad, especially the 12.9” with the XDR display, is awesome for consuming content. I primarily use YouTube, Netflix, and the  TV app. With that said, I try to limit my content consumption to when I’m eating. Something of note is that while YouTube app doesn’t support Picture-in-Picture, it does support multi-tasking. Put YouTube in the dock and pull the YouTube icon to the left (or right) side while using another app and voilà! Dermatologists hate them! Workaround YouTube’s artificial limitation with this one trick!</p>

<ol>
  <li>Writing</li>
</ol>

<p>I’ve tried several apps to determine what my requirements are in a writing app. I’ve learned that (1) I need to write using a keyboard instead of with the  Pencil so Notability and GoodNotes were out. (2) I wanted Markdown support so  Notes and Evernote weren’t a good fit. (3) I want it to be reliable and since Svbtle, while otherwise perfect, went MIA for 4 days without even a single tweet acknowledging the outage — deep breath — it also wasn’t a good fit. With this in mind, I found <a href="http://craft.do?utm_source=noisypigeon&amp;utm_medium=email">an app called Craft</a> which is almost perfect. So good in fact, I signed up for a Pro membership this morning to support the developers. I use Craft for writing my blog posts as well as implementing and maintaining <a href="https://youtu.be/OP3dA2GcAh8?utm_source=noisypigeon&amp;utm_medium=email">my second brain</a>. From my perspective, the only feature that Craft lacks is table support using Markdown syntax which is hopefully coming soon.</p>

<figure class="attachment attachment--preview attachment--png"><img height="2048" width="2732" alt="An image with caption: Screenshot of the app Craft." loading="lazy" src="/assets/images/posts/tools-for-being-creative-m1-ipad-pro-129/img_0132.png" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot of the app Craft.</figcaption></figure>

<ol>
  <li>Art</li>
</ol>

<p>In addition to writing, one of my hobbies is art. I really enjoy drawing pigeons doing pigeon things but I also enjoy anthropomorphizing them by drawing pigeons doing human tasks. I’m currently working on a piece where one pigeon is playing the guitar and another is playing the drums. It’s no where close to being finished but I might share the finished piece in a future blog post or in the Rendezvous with Cassidoo Discord (which <a href="https://www.patreon.com/cassidoo?utm_source=noisypigeon&amp;utm_medium=email">you should totally join btw!</a>). I primarily use Procreate to draw but I also sometimes dabble in Affinity Designer. One accessory I’m really enjoying is <a href="https://pen.tips?utm_source=noisypigeon&amp;utm_medium=email">Pen Tips for the  Pencil</a>. It adds a nice drag to the pencil without needing to commit to a PaperLike screen protector on the iPad itself.</p>

<ol>
  <li>Brainstorming</li>
</ol>

<p>My iPad has entered my workflow at work as well. I love to brainstorm ideas and projects, as well as blog posts using <a href="https://www.omnigroup.com/omnigraffle/?utm_source=noisypigeon&amp;utm_medium=email">an app called OmniGraffle</a>. It’s great for making mind maps, flow charts, diagrams and wireframes to get your ideas on the proverbial page. I also use <a href="https://www.goodnotes.com?utm_source=noisypigeon&amp;utm_medium=email">GoodNotes</a> and <a href="https://www.gingerlabs.com?utm_source=noisypigeon&amp;utm_medium=email">Notability</a> to scribble down ideas if I want a more natural pen-to-paper experience.</p>

<ol>
  <li>App Development (while cheating!)</li>
</ol>

<p>The last area I use my iPad in is programming (for personal projects). Now that I don’t have a Mac, I had to come up with a solution that didn’t require one just for me. Apple announced at this years WWDC that we will be able to write iOS apps from our iPads starting this fall with the updates coming to Swift Playgrounds 4. I am really excited for the option to build, test, and publish apps from my iPad but I needed a solution now; not in six months. I recently decided that I want to work on an iPad app in my spare time (which I’ll be writing more about it soon). I looked into multiple options. I considered renting from Mac Stadium but, honestly, paying over $100 US dollars a month to borrow one was quite off putting. I’d rather buy a Mac Mini for $899 and have something to show for my investment. I then researched options to develop iOS apps from Linux or how to work around Swift Playgrounds 3’s many limitations but neither option was viable since I want to use the SwiftUI and Combine frameworks.</p>

<p>Feeling defeated, I remembered my partner recently picked up a M1 Mac Mini in anticipation to returning to school this fall (he was accepted into uni to study anthropology and I am super proud!). He primarily uses his Mac during the day when I’m at my office so I could just use his computer during the evenings. This is what I’d do if I was a normal person but instead I did some research into how we could both use the machine at the same time (since after all, this is his computer and I don’t want to be a nuisance). Apple implemented a feature back in 2010 for OSX Lion that allows multiple users to connect to a machine at the same time using VNC. He can watch his YouTube videos about Breath of the Wild 2 (all I’ve been hearing about these past few days haha) and I can code in Xcode without any performance issues. To connect, I am using <a href="https://edovia.com/en/screens-ios/?utm_source=noisypigeon&amp;utm_medium=email">an app called Screens</a> which is a pro-level VNC app for the iPad. It’s not inexpensive at $27 but is entirely worth the money. I would honestly pay more. With Screens, I can work on my app from the comfort of my couch and iPad.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="2880" width="4032" alt="An image with caption: Picture of my iPad Pro accessing a screen share of my Mac Mini." loading="lazy" src="/assets/images/posts/tools-for-being-creative-m1-ipad-pro-129/img_1188-2520edited.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Picture of my iPad Pro accessing a screen share of my Mac Mini.</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about using an iPad Pro as my main device rather than a Macbook.]]></summary></entry><entry><title type="html">Salary progression (2014 to 2021)</title><link href="https://noisypigeon.github.io/posts/salary-progression-2014-to-2021/" rel="alternate" type="text/html" title="Salary progression (2014 to 2021)" /><published>2021-06-17T19:00:00+00:00</published><updated>2021-06-17T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/salary-progression-2014-to-2021</id><content type="html" xml:base="https://noisypigeon.github.io/posts/salary-progression-2014-to-2021/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This blog post explores sensitive topics.</p>
</blockquote>

<p>Money is a topic we often feel like we need to keep a secret. Asking your colleagues about their pay feels inappropriate and companies rarely share how much their c-levels make. I feel very strongly about the importance of sharing salaries as someone who is part of an underserved community.</p>

<p>I didn’t get to have a normal childhood. I fled my parents’ and another relative’s abuse at 14 and moved in with my grandparents who, in turn, kicked me out for being trans. I had to drop out of school when I was 16 to start working. I had been building apps for several years and attended networking events often so finding work was hard but not impossible. As someone who was underage however (and had no access to trusted adults), I was constantly exploited. My early employment was often in some way under the table. The years leading up to my 18th birthday, I primarily worked on freelance contracts. It was high risk because I was using PayPal underage and had no recourse if someone didn’t pay.</p>

<p>This post may be heavy for some so here’s a TLDR if you’re only interested in the numbers:</p>

<figure class="attachment attachment--preview attachment--png"><img height="510" width="964" alt="An image with caption: Table of Year, Gross Income, Debt, Retirement, Savings, Net Worth" loading="lazy" src="/assets/images/posts/salary-progression-2014-to-2021/screenshot-202025-02-01-20at-2011-09-26-e2-80-afpm.png" /><figcaption class="attachment__caption" aria-hidden="true">Table of Year, Gross Income, Debt, Retirement, Savings, Net Worth</figcaption></figure>

<h2 id="2014">2014</h2>

<p>In 2014, I made $6,127 according to my notice of assessment (I paid taxes on all my income because I was so scared of going to <em>jail</em> for tax evasion). This was less than $500/month and my rent alone was $1000/month. Looking back I could’ve lived in Coquitlam or Surrey but I lived in downtown Vancouver because it was faster to get to the office, which I often had to do on short notice. This was the start of my debt. Being at minimum $500 in the hole every month added up quickly. It also didn’t help that I have so much trauma around food that required me to eat out for almost every meal. Because Vancouver is Vancouver, I was spending more in a day than I made in a week on food.</p>

<h2 id="2015">2015</h2>

<p>In 2015 I was paid $9,980. This was much better with over $300 more per month but still nowhere near enough to cover my expensive traumatized lifestyle. Miraculously I was able to put away $5,000 in my RRSP (which for those who don’t know is a registered retirement account from the Canadian government). Honestly, this probably just increased my debt but I am glad I did it because it meant I had +5K in net worth that I couldn’t touch.</p>

<h2 id="2016">2016</h2>

<p>When I turned 18 in 2016, I was able to make $17,621. This was because I was able to become a legal full-time employee with proper paycheques and benefits. This basically eliminated how often I was exploited since I could finally have a verified PayPal account.</p>

<h2 id="2017">2017</h2>

<p>I landed my first good tech position at Realm in 2017. This significantly increased my income and I was no longer in the red every month. I moved apartments to something more reasonable since Realm was remote and this started my journey of recovery.</p>

<h2 id="2018">2018</h2>

<p>I didn’t increase my debt at all during the rest of that year and into 2018. I was living within my means and it was great but one thing that was still soul crushing was my debt payments. At this time I didn’t know the power of consolidation loans so I was paying around $2,000/month on minimum payments for cards with 21% ARRs.</p>

<h2 id="2019">2019</h2>

<p>In 2019, the company I worked for, Travis CI, was acquired by an investment firm and everyone got a hefty bonus. This bonus almost entirely went to debt but allowed me to also save some money putting an additional $13,000 into my retirement fund and $5,000 into a regular savings account.</p>

<h2 id="2020">2020</h2>

<p>I was finally out of debt. A reset button. But unfortunately this bonus didn’t change my bad habits or erase the mountain of trauma. When coronavirus hit, I purchased a lot of things because I was bored and stuck at home but I also went overboard on helping people. I was the first to offer my credit card up when one of my acquaintances needed help and would contribute to stranger’s GoFundMe fundraisers. But instead of donating $25, $50 or $100, I felt obligated to meet their goal. I was frequently donating $1,000 here and $2,500 there which sure, made the person’s day, but I could not afford it and it was a primarily a means for a dopamine hit because life was so grim. This behaviour got me into debt again. $45,000 and honestly I hated myself for it. After hitting rock bottom and wanting a change, I hired a financial advisor to help me get my shit together. In the past eight months, I have dropped my most recent debt load from $45k to $24,368.</p>

<h2 id="2021">2021</h2>

<p>In these past eight years I’ve learned two things with regards to trauma and my path to financial independence. 1. Put your own oxygen mask on first! and 2. It wasn’t my fault but it <em>is my responsibility</em>. The first point is something that was hard for me to swallow. I love helping people. Meeting someone’s fundraising goal for top surgery or giving a homeless man a $20 bill. I like making people’s day. But I need to be on the path of financial independence first and help people second. If I want to meet my goals of adopting a long-haired dachshund or buying a farm so I can get chickens, I need to put myself first and help others only once I genuinely have the money to do so. This lesson felt really egocentric and selfish at first but with help from my therapist and financial advisors, I’ve started to internalize this. I am worthy of fulfilling my dreams.</p>

<p>At one time I would have argued that it was my fault that I experienced abuse. It never was. Although I still struggle with this self-blame, through therapy and better relationships, I’m finally able to move on. While it wasn’t my fault, it is still my responsibility to deal with the mental health struggles. If I didn’t put in the effort to improve, I have no idea who I’d be.</p>

<p>This blog post was very heavy compared to my other ones. I hope that’s okay. If you are dealing with something similar, please know that you’re not alone and that you’re worthy of love.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about my salary progression as a high school dropout to established professional.]]></summary></entry><entry><title type="html">The Early Bird Night Owl</title><link href="https://noisypigeon.github.io/posts/the-early-bird-night-owl/" rel="alternate" type="text/html" title="The Early Bird Night Owl" /><published>2021-06-14T19:00:00+00:00</published><updated>2021-06-14T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/the-early-bird-night-owl</id><content type="html" xml:base="https://noisypigeon.github.io/posts/the-early-bird-night-owl/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>During my high school years, the fountain of youth allowed me to wake up at 5am, attend school from 7am to 3pm and then work a remote full-time job until 2 or 3am each night. I am no longer 15 years old. In the following years, I developed multiple chronic health conditions that intimately acquainted me with chronic fatigue. I could sleep 8 hours or 30 and I would still be exhausted. This meant that I needed to choose. I could be a night owl or an early bird but not both.</p>

<p>For a few years, I chose the former, waking up at 11am each morning, going to my full-time job and then working on side projects until 3 or 4am each night. One of my favourite routines was going to the nearby convenience store to get energy drinks and (stale) taquitos at 1am. With nobody outside except a few cars and the store attendant, it was super calming and helped me work through tough bugs.</p>

<p>When I met my partner (at the time), I transitioned to being an early bird because they worked afternoons and nights and waking up at 11am meant I would only get to see them for a few hours. I took a work trip to Europe and when I came back I would reset my sleep schedule using jet lag as a kickstarter. I started waking up at 6:30am and going to bed around 7pm. Despite the nearly 12 hours of sleep each night, I was always still exhausted. Maybe the early bird lifestyle wasn’t for me?</p>

<p>Energy buster number one: celiac disease (basically my body is scared of bread). <em>Oh the pain</em>. Once we figured this out, I finally had a reason for my nerve pain, constant 💩s, and headaches. I’d take like 800mg of Advil each day (later learned this was damaging my liver). By removing gluten from my diet, I received a massive boost of energy in return. With that said, gluten free bread sucks (top offender, it dissolves in your mouth like cotton candy) but that’s a topic for another day. I decided to shift my waking hours from 6:30am-7pm to 6am-9pm. This helped me have a few more hours after work to spend with my partner or work on side projects or watch YouTube videos.</p>

<p>But with success comes failure. I was hospitalized for what we were later informed was a serious respiratory infection that apparently activated hereditary genes that gave me adult onset asthma (probably grandmother, since she also had serious asthma). Yay! More chronic fatigue! My doctor prescribed me the wrong medication and for the next two years (2021 and 2020), I was taking inhalers that were actively hurting my longs and scarring them in the process. My pharmacist was actually the one who noticed this and helped me fix the problem.</p>

<p>Now that I have more energy and can breathe easy (literally!), I found myself wanting to use my new found stamina for side projects and creative endeavours. I started getting up at 6:30am and going to bed around 11pm. This isn’t as late as some night owls but it’s much later than I was used to and gives me more than enough time to do what I want while still feeling rested each morning.</p>

<p>I have been doing this for a few months now and I’ve learned a few habits that have helped me in my journey.</p>

<ol>
  <li>
    <p>Morning and night routines.</p>
  </li>
  <li>
    <p>Wind down before bed.</p>
  </li>
  <li>
    <p>No caffeine after 7pm.</p>
  </li>
  <li>
    <p>Remember to eat.</p>
  </li>
</ol>

<p>I started planning proper morning and night routines that helped me know what I need to do each day. I go to the bathroom, brush my teeth and shower in the same order each day, and I try to prepare my clothes the night before. I eat the same thing each morning. This is incredibly helpful for me to feel calm and prepared in the mornings.</p>

<p>The next one is part of the night routine but I wanted to separate it out into its own habit. I try to wind down before I go to bed. I stop checking my phone around 30 minutes before I hit the hay. I go for a nice cold shower (well…in the summer at least), brush my teeth and go to the bathroom; which I just noticed is the inverse of my morning routine which is kind of interesting!</p>

<p>No caffeine after 7pm. I drink coffee and tea for energy but I also drink it because I enjoy it. I probably should drink more water but iced lattes, cold brew and iced green tea are so delicious and the tap water in MTL tastes gross. By stopping this indulgence by 7pm, I am not as buzzed going into bed, incentivized to drink water, which helps me calm down and fall asleep. </p>

<p>The last one is more sensitive. I hate eating. For me the process of preparing food, eating food, and cleaning up after food is full of traumatic memories. I won’t go into the trauma in this blog posts but it’s important for context. If I could take a pill that gave me all the nutrients and energy that food did, I probably wouldn’t eat. Healthy right? With this in mind, I need to actively remember to eat. I eat a cookie in the morning to get me out the door, a meal around 11am, a snack around 2pm, dinner at 5 or 6pm and another snack before bed around 10pm. Being both an early bird and a night owl requires energy around the clock and remembering to eat is important!</p>

<p>There is privilege in my ability to be both an early bird and a night owl. My job lets me decide my work schedule and I am lucky enough to have my health conditions recognized and (mostly) under control. With that being said, these tips have helped me work more effectively and be more happy day-to-day.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about sleeping patterns.]]></summary></entry><entry><title type="html">“Debit, please” not “credit fees”</title><link href="https://noisypigeon.github.io/posts/debit-please-not-credit-fees/" rel="alternate" type="text/html" title="“Debit, please” not “credit fees”" /><published>2021-06-03T19:00:00+00:00</published><updated>2021-06-03T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/debit-please-not-credit-fees</id><content type="html" xml:base="https://noisypigeon.github.io/posts/debit-please-not-credit-fees/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This blog post explores sensitive topics and has been altered to remove direct mentions of people due to safety concerns.</p>
</blockquote>

<p>I started working full-time at sixteen as a junior software developer. I made a tech salary but had no guidance or trusted adults to learn from. I made stupid decisions and spent years avoiding my money habits instead of working on changing them. A year ago I met the bottom of a rock. <em>Hello! Nice to meet you.</em> I was stressed, feeling trapped, because of the pandemic and my partner and I managed maxed out my credit cards on a bunch of pointless purchases. Spending provided me with such a big dopamine boost even though it was followed by an even larger hit of guilt and regret. In the last twelve months, I’ve worked on my money habits, consolidated and reduced my debt load and am actively working towards financial independence. I want to share what I’ve learned.</p>

<p>I used to believe that credit cards were a must because of the points and insurance they offer but they are also a slippery slope. Credit cards’ importance also dipped for me when I discovered <a href="https://www.koho.ca/?utm_source=noisypigeon&amp;utm_medium=email">KOHO</a> and similar products. Pre-paid debit cards with competitive cash back, insurance, and other benefits. Why buy on credit when I could have the same features and pay no interest? I took out all of the cards from my wallet and carefully considered what each one was for, both what I intended to use it for, and what I actually used it for. I simplified my wallet from five credit cards to one pre-paid debit card. I use KOHO for all of my disposable income purchases. I have setup KOHO to load $400 every month. This money can be spent without guilt but not without consideration. Since its a fixed amount per month, I am more careful about what I buy. For example, now that I’m vaccinated, I’ll walk to the nearest convenience store instead of ordering on Uber Eats (<em>$5.99 for delivery?</em> 😔).</p>

<p>Now that I have KOHO, I don’t need credit cards but sometimes I need to buy something before I have the money in hand, such as a work computer or a flight to a work event (remember those?). This is where a line of credit could be beneficial instead of a credit card. They generally have lower interest rates and are more inconvenient compared to credit cards because funds have to be manually transferred to a checking account. This makes them AWESOME! I want to wait six to twelve months until my next credit application but when I can, I want to close all of my credit cards and get an equivalent line of credit. With that said, most banks allow you to put cash down as collateral for lines of credit. Let’s say you have $5k. You could open a line of credit with a limit of $5k and use that money as collateral so it’s no risk but still improves your credit score. If you make a mistake, you can close the account and get back the difference. This takes having the money in the first place but is a stretch goal. I would like to eventually have a line of credit that’s “pre-paid” providing me with an asset and financial safety.</p>

<p>Something I learned from the FIRE (financial independence, retire early) community is the idea of the “runway fund”. I am working towards having three months in the bank, eventually six, twelve, twenty-four, and thirty-six months. This is going to take a long time to build but the idea is to have enough money to be able to pay for normal life expenses for that time without worry. The book <em>Your Money or Your Life</em> by Vicki Robin and subreddits <em>r/personalfinance</em>, <em>r/FIREyFemmes</em> are awesome resources. Have you been in a situation where your CEO said something morally incomprehensible or your company endorsed a cause you disagreed with? I have but I was always met with panic because speaking up could mean losing my livelihood (and I’m not the only mouth I feed). A runway provides you with the flexibility to choose who you work with and worry less about where your next paycheque is coming from. Hopefully one day I won’t panic if I get laid off or need to part jobs for ethical reasons. An emergency fund, on the other hand, is something that only exists for emergencies (things like vet bills, your bike got stolen, or voiding a lease on an unsafe apartment). The tricky thing about these accounts is that you need to replace them when you use them. I had $10k in an account but after emergency after emergency during 2020, I went into debt when the account ran dry. I am working on refilling this account but savings goals take time. This can be very discouraging but $100 here and there counts. It may take five years to get there but I will get there.</p>

<p>The best thing you can do is consolidate your debt into lower interest products, use pre-paid debit and save. The less money to predatory corporations, the better.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about navigating financial difficulties.]]></summary></entry><entry><title type="html">I have an dedicated office!</title><link href="https://noisypigeon.github.io/posts/i-have-an-dedicated-office/" rel="alternate" type="text/html" title="I have an dedicated office!" /><published>2021-05-29T19:00:00+00:00</published><updated>2021-05-29T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/i-have-an-dedicated-office</id><content type="html" xml:base="https://noisypigeon.github.io/posts/i-have-an-dedicated-office/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This blog post has been altered to remove direct mentions of people I was with due to safety concerns.</p>
</blockquote>

<p>I have worked remotely for almost my entire career and always viewed not working in a traditional office as a freedom that provided flexibility. Back in 2014, I worked in an office for six months when I started working, and I hated it.</p>

<p>In an ideal world, I like to constantly switch between my home office, coffee shops and co-working spaces but the pandemic put a stop to this. Obviously. Like most, I was limited to working from home during the lockdowns of the pandemic. Since I’m immunocompromised, I had everything from medications to groceries to takeout delivered to me, and my desk was less than two metres away from my bed.</p>

<p>I couldn’t go to the park or go for walks without risking my life. I no longer worked from home. I lived at work. It was incredibly difficult to not take naps during work and stop working at 4-5pm. I often slept during work hours and worked during sleep hours. This would work for some people but I was incredibly unhappy. My house had been sucked dry of any creativity.</p>

<p>I had my first dose of Pfizer so I looked into getting a separate apartment to use as my place of work and creative space. (I am extremely lucky that I have the income to do this and that rent is comparatively cheap in my city). I first moved into a small studio that was eight minutes away from me. It was very modern with its European style built-in fridge, dishwasher and stove but was incredibly small. You couldn’t even fit a queen sized bed in there. The problem was that even though the building was supposedly non-smoking, my <em>lovely</em> neighbours were constantly smoking in their units, in the hallways and the lobby.</p>

<p>This caused my asthma to flare up and I was going through emergency inhalers like pigeons through garbage. I ultimately voided the lease which cost me $2500 even though it was only a few weeks. I am still salty about this. I searched Facebook and Craigslist (making sure my neighbours followed the rules) and came across a large loft that was only five minutes away. It was a little more expensive ($150 more) but is quite literally several times as big. I love that the apartment is above a grocery store allowing me to go there for drinks and snacks instead of using UberEats (them $5.99 delivery fees 😭).</p>

<p>Lets tour the space. When you walk into the building, you can either take the stairs or the elevator. I try to use the stairs most days but the elevator was nice for when I moved in and when I’m tired. Walking into the unit, you are met with a long hallway where there’s two closets and the door to the bathroom.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1817" width="3230" alt="An image with caption: Wide shot of studio space." loading="lazy" src="/assets/images/posts/i-have-an-dedicated-office/img_0869.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Wide shot of studio space.</figcaption></figure>

<p>For starters, I love the large window. With all of the natural light, I rarely use the ceiling lights which saves me $$ on electricity. I have a coffee corner, writing/eating desk, printing station, nap couch, and (where the magic happens) my desk. The couch came free with the unit which is awesome because couches are super expensive. I really wanted some art for the walls so I bought some pigeon prints from Hunnap Print House on Etsy. The coffee machine saves me money because I’m not ordering in Starbucks all the time and the printer…the printer sucks (it doesn’t even have colour!) but it does its job which is good.<br />
I eventually want my office to look like a jungle or a forest. I currently have a few plants named Scott, Abagail and Olivia. Scott is a Schefflera and she’s recovering from a cold shock when I moved apartments. That darn Montreal weather! Abagail is a Ficus plant and Olivia is a Ficus tree (although a different strain). They’re all from Alma Plantes, which is a really cute plant store in my neighbourhood.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="2268" width="4032" alt="An image with caption: Up close shot of my desk setup." loading="lazy" src="/assets/images/posts/i-have-an-dedicated-office/img_0870.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Up close shot of my desk setup.</figcaption></figure>

<p>I love to watch YouTube videos and read about desk setups so I am excited to share mine. The desk was hand made from a local company in Montreal called Dubois. It was kind of expensive but is very sturdy being hardwood and I used my old sit stand legs from Ergonofis. I have two desk mats, the felt one is from Grovemade and the strawberry one is from a store on Etsy called TawnyIllustrations. I don’t particularly like the sensory of the felt against my hand while moving the mouse so I use the round one as a buffer. It’s also incredibly cute! I also have a time timer and a bunch of books. As for tech, I’m using an M1 Mac Mini with 16GBs of ram and a 1TB SSD. For peripherals, I’m using a 27” 4K monitor from BenQ, several Logitech products (MX Keys, MX Anywhere 3, Streamcam), and Sonos Roam Bluetooth speaker. Luckily I had a budget from work and they paid for basically everything. 🥵💸<br />
The kitchen is kind of excessive for my use but I want to use it more. Currently, I primarily use the kitchen to heat up food that my brother-in-law prepared for me and store drinks.</p>

<p>Maybe one day I’ll actually prepare food in this space but T R A U M A.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="2268" width="4032" alt="An image with caption: Wide shot of my studio’s kitchen." loading="lazy" src="/assets/images/posts/i-have-an-dedicated-office/img_0875.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Wide shot of my studio’s kitchen.</figcaption></figure>

<p>I love my moo cow kettle. Actually I made a montage of me making tea in my old office with it. You can watch the video here.<br />
This space allows me to be creative and get work done more effectively which makes the cost worth it IMO. I’ve written most of my blog posts here and it’s just so refreshing to have a space to call my own.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about having a personal office space outside of home.]]></summary></entry><entry><title type="html">What I learned: Atomic Habits, Make Time, and Show Your Work</title><link href="https://noisypigeon.github.io/posts/what-i-learned-atomic-habits-make-time-and-show-your-work/" rel="alternate" type="text/html" title="What I learned: Atomic Habits, Make Time, and Show Your Work" /><published>2021-05-23T19:00:00+00:00</published><updated>2021-05-23T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/what-i-learned-atomic-habits-make-time-and-show-your-work</id><content type="html" xml:base="https://noisypigeon.github.io/posts/what-i-learned-atomic-habits-make-time-and-show-your-work/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This blog post has been altered to remove direct mentions of people I was with due to safety concerns.</p>
</blockquote>

<p>The last year has been quite rough - I got myself in a lot of debt because of unforeseen circumstances and being stuck at home (2020 pandemic). I changed jobs three times and was hospitalized twice due to my asthma and other flaring chronic health conditions. I was exhausted. It’s been many years since I took a proper vacation and while I took time off during the height of the pandemic, I was very limited in what I could do or where I could go other than sit stuck at home, which like most, was where I was working every day.</p>

<p>My team lead suggested I go on a two week vacation, which was kinda wild to me having only been there for 2 months so far. I was surprised but excited. I had just been vaccinated with my first Pfizer shot and my two week waiting period had passed. I was so excited to do…what exactly? I had looked forward to this moment of being vaccinated since it was in the news and that vaccines were happening but now that I was, I didn’t really know what to do with my re-found freedom. First, I grabbed a nice cup of iced coffee from my local Starbucks, like the basic white girl I am, then sat down to decide what I wanted to do with my two weeks.</p>

<p>I wanted to draw more so I picked up an iPad Air and borrowed my partner’s Apple Pencil ($200 for a stylus?) to do some drawing. I’ve enjoyed creating pixel art on my computer but couldn’t get the hang of Affinity Designer on the iPad (yet) so I started doing isometric drawings in Procreate. I made a few pieces but after a few days, I got frustrated and eventually bored. I later learned that this can be attributed to the “Valley of Latent Potential,” a principle from <a href="https://jamesclear.com/atomic-habits?utm_source=noisypigeon&amp;utm_medium=email">James Clear’s book Atomic Habits</a>. Regardless, here’s a screenshot of what I drew over the course of a few days:</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1193" width="2360" alt="An image with caption: Screenshot of Procreate’s Gallery view of art I created this month.&amp;nbsp;" loading="lazy" src="/assets/images/posts/what-i-learned-atomic-habits-make-time-and-show-your-work/wqsx2jt.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot of Procreate’s Gallery view of art I created this month.&nbsp;</figcaption></figure>

<p>After I got bored, and realized I still had 11 days left in my vacation. Oh shit!</p>

<p>I’ve been watching a lot of <a href="https://youtube.com/c/aliabdaal?utm_source=noisypigeon&amp;utm_medium=email">Ali Abdaal’s YouTube videos</a> recently (his videos are amazing and I highly recommend watching them) and he’s always making book recommendations. I love the idea of reading a book but I’m dyslexic and until this vacation, as embarrassing as it is for me to say, I had never finished a book cover-to-cover. With that obstacle in mind, I took him up on his recommendation of Audible but introduced a twist. I also bought the Kindle version to read on my iPad, as well as listen to the audio version. The tactility and sensory of both reading and listening helped me retain the book better than just reading it or listening to it in isolation. I’ve tried both separately and it has always been a frustrating experience.</p>

<p>I compiled a list of books that I wanted to read and just started chapter by chapter. I first read Atomic Habits by James Clear and I was kinda put off at first, 5 hours and 35 minutes - that’s a lot of time. But I started at 1.0x speed then 1.3x speed and around have way I was listening at 1.8x speed slowly bumping it further as fast as I could keep up with reading the pages. My main takeaway from Atomic Habits was that I just have to start. Forget perfection. My habits are for the most part pretty good. I bite my nails every once in a while and order in takeout a little too much but honestly who doesn’t? However, I’m wanting to change two things. offer my money up less and understand my self-value/internalize that I am “pretty” and worthy of love.</p>

<p>I wrote “towards” and “away” lists for my “directions” - a concept in the book. Things like hiring a financial advisor and accountant and buying a coffee machine to save on cafes (which has been working by the way, at least for the most part, though those peach iced teas with lemonade are very intoxicating). The second one, slightly more personal and something I am vulnerable about is that I have a lot of body confidence issues. But as it says in the book, I’m not “trying to be pretty”, “I am pretty.” I learned through internal searching that I would go to a slimmer sized stores to purchase clothes and have nothing fit as a baked-in punishment. Saying things like “I won’t ever be thin enough so don’t even bother buying nice clothes” but when I worked with my body rather than against it, I was able to go to mid size/plus size inclusive stores, get a cute outfit that made me really happy and have a positive shopping experience reinforce that I don’t need to be size zero to be pretty.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="933" width="700" alt="An image with caption: Photo of me wearing a yellow dress, white crop topped tee shirt and pink fabric mask." loading="lazy" src="/assets/images/posts/what-i-learned-atomic-habits-make-time-and-show-your-work/hkwq4oh.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Photo of me wearing a yellow dress, white crop topped tee shirt and pink fabric mask.</figcaption></figure>

<p>A lot of the teachings from the book, I had already heard from Ali’s videos or from friends over the years but the way he wrote it made me understand that a change, even a seemingly small one, is all it takes. James did an awesome job on the book and it helped me immensely. Other than the attention on food habits (I’m recovering from disordered eating so I skipped that section entirely).</p>

<p>Next, I turned my attention to <a href="https://maketime.blog/?utm_source=noisypigeon&amp;utm_medium=email">Make Time by Jake Knapp and John Zeratsky</a> - a book that I was very excited for. I’ve heard a lot of good things about this book but never made the time to read it. Ironic right? Listening to what was said in the foreword, I skipped around but read through most of the chapters. The tactics that were most intriguing to me were the following:</p>

<ol>
  <li>
    <p>Adopting the Might-Do List method.</p>
  </li>
  <li>
    <p>Time-blocking and bulldozing your calendar</p>
  </li>
  <li>
    <p>Become a morning person.</p>
  </li>
  <li>
    <p>Put your toys away, block distraction kryptonite, and watch out for time craters.</p>
  </li>
  <li>
    <p>Be slow to respond.</p>
  </li>
  <li>
    <p>Get a time timer.</p>
  </li>
  <li>
    <p>Exercise everyday (but don’t be a hero).</p>
  </li>
</ol>

<p>I’ve always had a problem with todo lists. They’re fun to write and it feels nice to tick tasks off but everything in between sucks. The feeling of obligation to complete everything right away otherwise it disappears (some apps) sucks or it tasks stick around and I feel super guilty for not completing it yet. This is why the Might Do List was super empowering for me. Write your daily highlight and make sure that is completed but have a series of might-do tasks to ideally complete too.</p>

<p>Time blocking your calendar. I used to do this while I was working at Bitrise but stopped because my next job didn’t really have a calendar culture but when I started at my new and current job, I was overwhelmed with calendar events and just kind of followed the flow of the busy bandwagon. My goal for when I get back is to setup a proper system for time blocking and bulldoze my calendar to simplify meetings, combine events where possible and maybe nudge a few to be emails.</p>

<p>Become a morning person. My partner (at the time) laughed when I wrote this one down after reading the book. They said “You’re already a morning person!” and yes I get up usually around 6:45am or 7am but I don’t usually do much with my mornings and often feel rushed even when getting up earlier. So I’ve thought up some night and morning routines to help me get prepared for hte next day as well as kickstart the day. For example, if I’m going to my office (it’s also a creative space for me), I pack my bag, lay out a set of clothes and ensure my morning cookie is ready.</p>

<p>I really liked the “put your toys” away tactic which for me tied really nicely with blocking distraction kryptonite and watching out for time craters. I would often come to my laptop or iPad and be overwhelmed by whatever I left on the screen from the last time I used the device. I cleaned them up, deleting infinity pools where necessary/possible and optimize my devices to be a nicer, calmer environment. My iPad is ready for the next time I want to draw, make music, read or write. My computers (both work and personal) are tabs closed, ready for the next session.</p>

<p>The next one is really something for future me as right now I don’t have many people contacting me being on vacation but I want to be slower to respond. Not impossibly slow but before I would jump at the ping of a notification to be instantly there for whoever needed me. Putting their priorities over mine and ultimately tanking productivity because of the time it would take me to get back into the groove. Even when it could’ve waited until later.</p>

<p>Get a time timer. Often the passage of time completely disappears. I won’t get much done but time will have passed significantly. I purchased a $45 time timer from Amazon but unfortunately I misread the listing and purchased one that is 1ft when I wanted one that was like 3-4 inches max. Imagine my surprise when I opened the box! I returned it and waiting for the smaller one to arrive.</p>

<p>Lastly, exercise everyday but don’t be a hero about it. A mutual is a personal trainer and they’re training my partner. I’ve tried to get involved but ultimately drop off after a few weeks because I lose energy, motivation or both. There’s a passage in both Atomic Habits and Make Time where exercise is often viewed as exercise only if it fits certain criteria and that it’s bullshit! Doing 5 minutes is better than 0 minutes so I am going to try to work with my body to do as much or as little as I can but at least something each day. But even then, it’s okay if I miss a day. Even taking the stairs over the elevator and walking to and from my office is something!</p>

<p>I finished Make Time, a 4 hour book, in 2 hours ish by listening at 2.1x speed. I am honestly amazed at how fast I can listen to things and still take in everything!</p>

<p>The next book I read was <a href="https://austinkleon.com/show-your-work/?utm_source=noisypigeon&amp;utm_medium=email">Show Your Work by Austin Kleon</a>. This one I purchased a physical copy of because I hadn’t thought of the Kindle+Audible combo when I bought it yet. I still thought I could read the physical copy and listen to the audiobook. Unfortunately, I could only find it on Apple Books which I’ve not setup for my business credit cards so decided to read it out loud instead. This was much much harder and I often stumbled over my words and had to repeat paragraphs to understand what I had just read but it was a refreshing experience (although I think I’m still going to purchase Kindle and Audible books going forward).</p>

<p>Dyslexia sucks and reading is hard when I don’t have my fancy Dyslexia font (Atkinson Hyperlegible). Instead of using Kindle’s highlight feature, I used some of my partner’s sticky paper flags to tag parts of the book that I enjoyed. This book inspired me to buy a domain and get started on this post. I read it in about three and a half hours and there are a lot of great insights while maybe being a bit blunt about human spam. We’ve all met people like that and yet I still felt secondhand embarrassment when Austin wrote the truth.</p>

<p>So I guess that comes down to why I created this blog. I want to write about the systems I design, the books I read and the art I create. These days I’m a systems architect for continuous integration and delivery - a topic I will go into much more detail in the coming weeks, months and years. I also want to share, like in this post, what I learned from books that I’ve read and lastly share art that I’m going to create. I draw, I take photos, and I occasionally make music. I’m not going to set a schedule for when I post or even set exactly what I cover - it’s why I chose something related to me but vague for my domain. I’m noisy and I love pigeons.</p>

<p>I still have 8 days in my vacation and 4 more books in the to-read pipeline. This has been the most restful vacation I’ve had in years. I hope to see you in future posts and hope you enjoyed.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about personal reflections during the pandemic lockdowns of 2022-2021.]]></summary></entry><entry><title type="html">Deploying Expo React Native to Appetize using Bitrise</title><link href="https://noisypigeon.github.io/posts/deploying-expo-react-native-to-appetize-using-bitrise/" rel="alternate" type="text/html" title="Deploying Expo React Native to Appetize using Bitrise" /><published>2020-06-19T19:00:00+00:00</published><updated>2020-06-19T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/deploying-expo-react-native-to-appetize-using-bitrise</id><content type="html" xml:base="https://noisypigeon.github.io/posts/deploying-expo-react-native-to-appetize-using-bitrise/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of post from the Bitrise blog, published June 19th, 2020. The original has been removed from their website (likely because Bitrise now offers an official step for Appetize but you can use <a href="https://bitrise.io/integrations/steps/appetize-deploy">Wayback Machine</a> to see the original.</p>
</blockquote>

<p>We are going to be covering how to deploy a React Native Expo app to <a href="https://appetize.io/">Appetize</a>, a platform that lets you run mobile apps in your browser.</p>

<p><strong>Getting started</strong></p>

<p>First, you have to add your app to Bitrise. Unfortunately, the validation tool that works for most projects, doesn’t work for Expo applications (yet).</p>

<figure class="attachment attachment--preview attachment--png"><img height="172" width="1086" alt="An image with caption: Screenshot of Validation Failed." loading="lazy" src="/assets/images/posts/deploying-expo-react-native-to-appetize-using-bitrise/60543fa4b12ff505868adf77_xeuhwyxcs2furt0wkaqd.png" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot of Validation Failed.</figcaption></figure>

<p>This means that you should let the validator fail, restart scanning without validation…</p>

<figure class="attachment attachment--preview attachment--png"><img height="447" width="910" alt="An image with caption: Screenshot of Restart scanning without validation." loading="lazy" src="/assets/images/posts/deploying-expo-react-native-to-appetize-using-bitrise/60543fa357b2be7026d5850e_o9sqkl11qxo1jkkid57f.png" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot of Restart scanning without validation.</figcaption></figure>

<p>and then choose “Other/Manual” from the list.</p>

<p>You will then be prompted to select a Stack. I recommend using the most recent macOS stack unless you have a good reason otherwise. Register a webhook and you are done here.</p>

<p><strong>Writing the workflow</strong></p>

<p>We will be using the workflow editor to create our workflow. To start, the workflow editor will contain four steps. Delete the last one (Deploy to Bitrise) and add the following steps in order:</p>

<figure class="attachment attachment--preview attachment--png"><img height="746" width="354" alt="An image with caption: Screenshot of list of workflow steps." loading="lazy" src="/assets/images/posts/deploying-expo-react-native-to-appetize-using-bitrise/60543fa45b15397e3a4ab22a_uiyz0nstsuoovflymxwp.png" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot of list of workflow steps.</figcaption></figure>

<p>Note: if you don’t seem to find the steps, click All.</p>

<figure class="attachment attachment--preview attachment--png"><img height="210" width="814" alt="An image with caption: Screenshot calling out the ALL button.&amp;nbsp;" loading="lazy" src="/assets/images/posts/deploying-expo-react-native-to-appetize-using-bitrise/60543fa47b6141338116fa85_mz3tnnudtyogdxaux3wr.png" /><figcaption class="attachment__caption" aria-hidden="true">Screenshot calling out the ALL button.&nbsp;</figcaption></figure>

<p>Now let’s go over what each step in this workflow does and how to configure them.</p>

<p><strong>Activate SSH key and Git clone</strong></p>

<p>The Activate SSH key step simply sets up the given SSH key for the build. The Git clone step clones the app from your Git provider like GitHub, GitLab or Bitbucket.</p>

<p><strong>Run NPM command</strong></p>

<p>This step allows you to run commands using the Node Package Manager. This step should be configured to run npm install. This will install all of your app’s dependencies. <strong>Make sure</strong> to set the required input “The npm command with arguments to run” to “install” (just install, nothing else).</p>

<p><strong>[Beta] Expo Eject</strong></p>

<p>This step uses the Expo CLI to create the native Xcode and Android Studio projects for your app. This allows us to run the CocoaPods step later on. <strong>Make sure</strong> to create an account on <a href="https://expo.io/signup">https://expo.io/signup</a> and provide your credentials to the step. The password should be a secret.</p>

<p><strong>Run NPM command</strong></p>

<p>This step, like the previous one, allows you to run commands using NPM. This step should be configured to run npm test. This will run your run your unit tests or other kinds of tests as you have configured. <strong>Make sure</strong> to set the required input “The npm command with arguments to run” to “test” (just test, nothing else).</p>

<p><strong>Run CocoaPods install</strong></p>

<p>This step runs pod install on your native iOS Xcode project and Podfile generated by the Expo Eject step. No inputs should be necessary but if Bitrise has trouble finding the Podfile, try passing a direct path to it.</p>

<p><strong>Script</strong></p>

<p>This is the meat and potatoes of the build. Since Expo’s main CLI tool is primarily for local usage, it creates a build on their servers. Since we are using Bitrise, we want to use Bitrise’s servers instead of Expo’s. This is where Turtle comes in. It is Expo’s CLI tool for continuous integration usage. The script should contain:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm install -g turtle-cli
turtle setup:ios
turtle build:ios -t simulator -u non-binary -p $expopassword -o /Users/vagrant/expo-apps/app.tar.gz
</code></pre></div></div>

<p>But <strong>make sure</strong> to change <code class="language-plaintext highlighter-rouge">non-binary</code> to your username and use the $expopassword secret that you created earlier for the Expo Eject step. This will install the Turtle CLI, setup the iOS project for building and then build the iOS project.</p>

<p><a href="http://Appetize.io"><strong>Appetize.io</strong></a> <strong>Deploy</strong></p>

<p>Lastly, we will have our <a href="http://Appetize.io">Appetize.io</a> Deploy step which, well, deploys our app to Appetize. <strong>Make sure</strong> to provide your Application path (which is <code class="language-plaintext highlighter-rouge">/Users/vagrant/expo-apps/app.tar.gz</code>) and your Appetize token that can be generated at [their website].</p>

<p><strong>Closing Thoughts</strong></p>

<p>If everything is configured correctly, you will get something that looks like:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>+------------------------------------------------------------------------------+
|                               bitrise summary                                |
+---+---------------------------------------------------------------+----------+
|   | title                                                         | time (s) |
+---+---------------------------------------------------------------+----------+
| ✓ | activate-ssh-key@4                                            | 18.57 sec|
+---+---------------------------------------------------------------+----------+
| ✓ | git-clone@4                                                   | 8.70 sec |
+---+---------------------------------------------------------------+----------+
| ✓ | npm@1                                                         | 53.86 sec|
+---+---------------------------------------------------------------+----------+
| ✓ | npm@1                                                         | 3.38 sec |
+---+---------------------------------------------------------------+----------+
| ✓ | script@1                                                      | 3.6 min  |
+---+---------------------------------------------------------------+----------+
| ✓ | expo-detach@0                                                 | 9.6 min  |
+---+---------------------------------------------------------------+----------+
| ✓ | cocoapods-install@1                                           | 32.24 sec|
+---+---------------------------------------------------------------+----------+
| ✓ | script@1                                                      | 4.6 min  |
+---+---------------------------------------------------------------+----------+
| ✓ | appetize-deploy@0                                             | 10.34 sec|
+---+---------------------------------------------------------------+----------+
| Total runtime: 19.9 min                                                      |
+------------------------------------------------------------------------------+
</code></pre></div></div>

<p>Check the Appetize Deploy step to find the link to the app on Appetize.</p>

<p>I hope that this was helpful and please don’t hesitate to reach out to support if you have any questions.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a guide posted to the Bitrise blog.]]></summary></entry><entry><title type="html">PSPDFKit for Web 2019.5 Release</title><link href="https://noisypigeon.github.io/posts/pspdfkit-for-web-20195-release/" rel="alternate" type="text/html" title="PSPDFKit for Web 2019.5 Release" /><published>2019-09-09T07:00:00+00:00</published><updated>2019-09-09T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/pspdfkit-for-web-20195-release</id><content type="html" xml:base="https://noisypigeon.github.io/posts/pspdfkit-for-web-20195-release/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of blog post I co-authored for the <a href="https://pspdfkit.com/blog/2019/pspdfkit-web-2019-5/">PSPDFKit for Web 2019.5</a> release with Philipp Spiess, published September 9th, 2019.</p>
</blockquote>

<p>We are pleased to announce PSPDFKit for Web 2019.5! This release introduces our new Form Designer component, supports embedded JavaScript in PDF files on Standalone, and is distributed via Docker Hub and npm. Please refer to our Server and Web changelogs for a complete list of features and bug fixes.</p>

<p><strong>Form Designer</strong></p>

<p>We are excited to introduce Form Designer, a new component for PSPDFKit for Web. With Form Designer, you can now build workflows in which your end users can create and edit PDF form elements. In fact, one of our customers already successfully implemented a new signing workflow using Form Designer. Their use case involves one user (the “sender”) preparing a document for signing by adding signature fields and sending it out to one or many “signer(s).”</p>

<p>The Form Designer component enables an extensive set of APIs for creating and editing various PDF widget types — including text fields, check boxes, and signatures — and is available for both Standalone and Server-backed deployments.</p>

<p>Please email us at REDACTED if you are interested in developing on top of our Form Designer component. We’d love to hear about your use case and talk about how you can best leverage Form Designer for it.</p>

<p><strong>JavaScript for Standalone Deployments</strong></p>

<p>Some interactive PDF forms use embedded JavaScript to add custom validation rules, calculations, or other interactive functionality. We’re excited to bring support for these JavaScript features to PSPDFKit for Web Standalone.</p>

<p>We are using a custom, sandboxed JavaScript VM and do not run the embedded JavaScript in the browser directly. Nevertheless, JavaScript embedded in a PDF — much like macros in Microsoft Word files — can lead to behavior that’s surprising and unexpected for users. This is why we decided to let customers choose to opt into executing JavaScript in PDF files. Learn more in the new JavaScript guide article about how to enable support. Support for Server-backed deployments is coming in the future, so if you are interested in this, please email us at REDACTED.</p>

<p><strong>Docker Hub and npm</strong></p>

<p>To make it easier to integrate PSPDFKit for Web into your existing infrastructure, we’re thrilled to announce that we now publish PSPDFKit on Docker Hub and npm. Existing distribution channels are not affected by this change and will still be supported.</p>

<p>Along with all the new features, this release also includes numerous bug fixes and minor improvements. For a complete list of changes, see the PSPDFKit for Web 2019.5 and PSPDFKit 2019.5 Server changelogs.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of PSPDFKit for Web 2019.5 Release notes.]]></summary></entry><entry><title type="html">PSPDFKit for Web 2019.4 Release</title><link href="https://noisypigeon.github.io/posts/pspdfkit-for-web-20194-release/" rel="alternate" type="text/html" title="PSPDFKit for Web 2019.4 Release" /><published>2019-07-31T07:00:00+00:00</published><updated>2019-07-31T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/pspdfkit-for-web-20194-release</id><content type="html" xml:base="https://noisypigeon.github.io/posts/pspdfkit-for-web-20194-release/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of blog post I authored for the <a href="https://pspdfkit.com/blog/2019/pspdfkit-web-2019-4/">PSPDFKit for Web 2019.4</a> release, published July 31st, 2019.</p>
</blockquote>

<p><strong>PSPDFKit for Web 2019.4</strong></p>

<p>We are pleased to announce PSPDFKit for Web 2019.4! This release introduces our new Document Editor component, a complete visual overhaul, support for the Welsh language, and new examples. Please refer to our Server and Web changelogs for a complete list of features and bug fixes.</p>

<p><strong>Document Editor</strong></p>

<p>With this release, we are introducing a powerful new component for PSPDFKit for Web — the Document Editor. This feature enables users to add and remove pages, reorder pages, merge PDFs, and split PDFs — along with even more features. The Document Editor is available on both Standalone and Server-backed installations. If you’re interested in trying out this new component, please either download a trial or contact our Sales team.</p>

<p><strong>Complete Visual Overhaul</strong></p>

<p>We have revamped our visual language with new icons, new default styling, and a built-in dark mode. By default, this makes PSPDFKit for Web look more modern for our users while still giving them the power to customize as needed.</p>

<p>Please ensure you check out the migration guide for more information. We also have some additional features planned for further on down the road; these include the tweaking of all control types and the unification of font sizes and margins/paddings.</p>

<p><strong>Welsh Language Support</strong></p>

<p>We are continuously looking for new ways to extend functionality and accessibility for users around the world. So in this release, we’ve added support for the Welsh (cy) language.</p>

<p><strong>WASM Cache Improvements</strong></p>

<p>We added content hashing to more artifacts, including the WASM files, which allows you to enable advanced long-term caching on your web server if you use Standalone. If you use Server-backed PSPDFKit, these changes are enabled out of the box. We’ve also made changes to fully support code caching for WebAssembly, which is coming to Chrome soon.</p>

<p><strong>Examples: Document Editor and Dark Mode</strong></p>

<p>The Document Editor Catalog example demonstrates key features released in this version. For example, for dark mode, we added a new Catalog example that demonstrates a full UI switch to a dark color scheme.</p>

<p>Along with all the new features, this release also includes numerous bug fixes and minor improvements. For a complete list of changes, see the PSPDFKit for Web 2019.4 and PSPDFKit 2019.4 Server changelogs.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of PSPDFKit for Web 2019.4 Release notes.]]></summary></entry><entry><title type="html">My remote workspace (PSPDFKit)</title><link href="https://noisypigeon.github.io/posts/my-remote-workspace-pspdfkit/" rel="alternate" type="text/html" title="My remote workspace (PSPDFKit)" /><published>2019-07-22T19:00:00+00:00</published><updated>2019-07-22T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/my-remote-workspace-pspdfkit</id><content type="html" xml:base="https://noisypigeon.github.io/posts/my-remote-workspace-pspdfkit/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of post from the PSPDFKit blog, published July 22nd, 2019. The article is no longer on the website but is on <a href="https://web.archive.org/web/20200809172306/https://pspdfkit.com/blog/2019/luna-remote-workspace/">Wayback Machine</a>.</p>
</blockquote>

<p>My name is Luna and I am one of the Web Engineers here at PSPDFKit. I, like a lot of folks in our industry, prefer to work from home. Yes, I’ve tried working in an office and in coworking spaces, but as an autistic disabled person, I am simply more productive when I’m unencumbered by commutes and the social expectations that come with working in a shared space.</p>

<p>For most of my career, I have been working from home from multiple cities around the world and at multiple jobs. Until last year, my “remote workspace” was just a 13” MacBook Pro, but as this wasn’t ergonomic, it caused me a lot of neck and wrist pain. As a result, I decided to finally take the time to research and invest in a workspace that would be more comfortable and healthier for me to work at for eight hours a day.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="479" width="640" alt="An image with caption: This is not the original photo from the blog post that was posted on PSPDFKit’s blog. Since the post was no longer live, I had to use Wayback Machine to fetch it." loading="lazy" src="/assets/images/posts/my-remote-workspace-pspdfkit/899e0843-0272-4f94-8636-08d3f9b0c2a7.jpg" /><figcaption class="attachment__caption" aria-hidden="true">This is not the original photo from the blog post that was posted on PSPDFKit’s blog. Since the post was no longer live, I had to use Wayback Machine to fetch it.</figcaption></figure>

<p>Both my partner and I work from our two-bedroom apartment. Since he needs more space as an artist, my office is situated in our master bedroom and his is in the other room. My desk is a 1-by-2.5-meter dining room table that I got secondhand from a nearby coffee shop that was closing down. I really enjoy having such a large work surface since it allows me to be less cluttered.</p>

<p>The chair I use is an ErgoChair 2 from Autonomous. As someone with chronic pain, I needed a chair that wouldn’t cause a flareup as a result of sitting for most of the day, and I consider the chair to be a worthwhile investment. I’ve had it for more than a year and a half, and it’s still as comfortable as it was on the first day. Despite the quality of the chair, sitting all day can still be a pain. Literally. So I’m considering buying a sit-stand desk to give me more options.</p>

<p>The computer that powers my work is a docked 15” MacBook Pro from 2018. It packs a 6-core i7 processor, a Radeon 555X graphics card, 32 GB of RAM, and 256 GB of storage. I’ve also wrapped it in a beautiful Black Marble dbrand skin to give it some personality. It gets the job done, and it only sounds like a jet taking off when I’m compiling one of PSPDFKit’s codebases.</p>

<p>Now We’re Getting to the Good Stuff!</p>

<p>The keyboard I use is an imported HHKB Type-S with lubed key switches and a few custom key caps. From what I’ve seen, you can either import it from Japan or buy it secondhand on forums like r/mechmarket. With shipping and import fees, it was…expensive (lists budget: $250 food, $1,000 rent, $200 utilities, $50,000,000,000 custom keyboards. Someone please help me budget, my family is dying). However, it makes typing enjoyable, so I think it was worth the money.</p>

<p>Loud music helps me focus, and I’m really happy with my audio setup. For speakers, I have a pair of PreSonus Eris E5s that are plugged into a Focusrite Scarlett 2i2 audio interface. When I need to be quiet, I listen to music using my limited edition matte gray Audio Technica ATH-M50x headphones.</p>

<p>I have purchased and used so many Thunderbolt 3/USB-C docks, and all of them stopped working after a few months. After 11 or 12 “cheap” $100–200 docks, I decided to splurge on the most high-end one I could find — an OWC Thunderbolt 3 Dock — and so far, it’s worked great. Knock on wood, but I am confident this one will work for a long time, and at a cost of $400, it had better.</p>

<p>My monitor is a Dell U3419W 34-inch ultrawide. It’s 3440x1440 pixels, has USB-C, and sports a color-accurate IPS panel. I’ve only had this for a month (because my last ultrawide kicked the bucket), but in that short amount of time, it’s been awesome. I absolutely love that it’s one cable from the monitor to the Thunderbolt 3 dock.</p>

<p>Finally, I use a Logitech MX Master 2S mouse, a Logitech C925e webcam, and a Twelve South Bookarc for propping up my laptop.</p>

<p>That’s all for now, folks.</p>

<p><strong>Other pictures of my setup from this era</strong></p>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with caption: Alternative Photo #1." loading="lazy" src="/assets/images/posts/my-remote-workspace-pspdfkit/img_2588.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Alternative Photo #1.</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="479" width="640" alt="An image with caption: Alternative Photo #2." loading="lazy" src="/assets/images/posts/my-remote-workspace-pspdfkit/img_2571.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Alternative Photo #2.</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with caption: Alternative Photo #3." loading="lazy" src="/assets/images/posts/my-remote-workspace-pspdfkit/img_2564.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Alternative Photo #3.</figcaption></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="853" width="640" alt="An image with caption: Selfie of me in an airport on the way to PSPDFKit’s&amp;nbsp;Barcelona 2019 offsite." loading="lazy" src="/assets/images/posts/my-remote-workspace-pspdfkit/img_2568.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Selfie of me in an airport on the way to PSPDFKit’s&nbsp;Barcelona 2019 offsite.</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of post from the PSPDFKit blog about my remote desk setup.]]></summary></entry><entry><title type="html">PSPDFKit for Web 2019.3 Release</title><link href="https://noisypigeon.github.io/posts/pspdfkit-for-web-20193-release/" rel="alternate" type="text/html" title="PSPDFKit for Web 2019.3 Release" /><published>2019-05-29T07:00:00+00:00</published><updated>2019-05-29T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/pspdfkit-for-web-20193-release</id><content type="html" xml:base="https://noisypigeon.github.io/posts/pspdfkit-for-web-20193-release/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of blog post I authored for the <a href="https://pspdfkit.com/blog/2019/pspdfkit-web-2019-3/">PSPDFKit for Web 2019.3</a> release, published May 29th, 2019.</p>
</blockquote>

<p><strong>PSPDFKit for Web 2019.3</strong></p>

<p>We are pleased to announce PSPDFKit for Web 2019.3! This release introduces intelligent ink annotation splitting, a new eraser tool, faster search, support for page navigation using labels, and new Catalog examples. Please refer to our Server and Web changelogs for a complete list of features and bug fixes.</p>

<p><strong>Intelligent Ink Annotation Splitting</strong></p>

<p>While working with ink annotations, you might often end up adding numerous strokes to entire pages of a document in a single run. If these strokes have the same color and thickness, they will all be included in a single ink annotation, even if they belong to different contexts. As a result, subsequent editing work can become more difficult.</p>

<p>To address this, we have added a new smart annotation splitting algorithm that will make this process easier and more effective than ever. Using a heuristic based on elapsed time and point distance, this new splitting strategy determines whether new ink strokes should belong to the current annotation or be split into a new, separate annotation. This way, you can continuously add ink strokes and let the algorithm automatically split them based upon their context.</p>

<p><strong>Eraser Tool</strong></p>

<p>With this release, we are also introducing a new eraser tool that allows you to remove ink annotation points using the pointer, so the erase operation is as easy as drawing.</p>

<p>Erasing is performed simultaneously in all the annotations below the pointer, and the changes in the annotations are saved as soon as the pointer is released.</p>

<p><strong>Streaming Search Results for Faster Search</strong></p>

<p>We have made our search faster by streaming results page by page as they come in instead of computing the full list and only then displaying it. Responsiveness with medium and large documents is therefore improved, as search results will come in almost immediately when a user searches for a term. Both Server-based deployment and Standalone benefit from this enhancement, but it’s especially noticeable with WebAssembly deployment on older browsers.</p>

<p><strong>Page Navigation with Labels</strong></p>

<p>Each page in a PDF document can have a human-readable label associated with it. These kinds of labels, added by the document author, can result in a friendlier navigation experience by making content more easily identifiable.</p>

<p>Furthermore, page labels are also often used to assign a number to pages which otherwise would be identified by their page index. For example, the first few pages of a document could include a table of contents, introduction, etc., and the author may want the actual page number count to start from the sixth page of the document (e.g. pages i, ii, iii, iv, v, followed by 1, 2, 3).</p>

<p>PSPDFKit for Web now joins PSPDFKit for iOS and Android, as well as other PDF solutions, in supporting page labels instead of numbers: In the above example, the page with the label 2 would actually be page 7.</p>

<p>If the current page includes a label, it’s shown along with the actual page number in parentheses. When no label is available, only the page number is displayed.</p>

<p>Users can also enter a page label in the pagination widget of the main toolbar to jump to it directly.</p>

<p><strong>Examples: Obscure Annotations</strong></p>

<p>We are continuously looking for new ways to extend functionality so that it opens new possibilities beyond what the standard PDF toolset provides. In line with this, one of our most recent additions has been the Custom Renderers API, which allows you to enhance or completely replace the default appearance of annotations.</p>

<p>This feature is showcased in a new Catalog example that makes use of the Custom Renderers API to add two special custom annotations:</p>

<ul>
  <li>
    <p>An Obscure Annotation, which is basically a black rectangle that obscures the content behind it and may be used to, for example, hide specific parts of the content from the user.</p>
  </li>
  <li>
    <p>A Peek Hole Annotation, which obscures everything but the content behind it and could be helpful when you want to focus the user attention on specific parts of the page.</p>
  </li>
</ul>

<p>As shown by this example, you can easily provide enhanced capabilities to your PDF annotations. Keep in mind that this is custom behavior, and these kinds of annotations do not exist in the PDF specification. Therefore, such annotation customization is not included in the document when it’s exported and will not be displayed in any other viewer — only PSPDFKit for Web users can benefit from customization.</p>

<p>Along with all the new features, this release also includes numerous bug fixes and minor improvements. For a complete list of changes, see the PSPDFKit for Web 2019.3 and PSPDFKit 2019.3 Server changelogs.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of PSPDFKit for Web 2019.3 Release notes.]]></summary></entry><entry><title type="html">PSPDFKit for Web 2019.2 Release</title><link href="https://noisypigeon.github.io/posts/pspdfkit-for-web-20192-release/" rel="alternate" type="text/html" title="PSPDFKit for Web 2019.2 Release" /><published>2019-04-18T07:00:00+00:00</published><updated>2019-04-18T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/pspdfkit-for-web-20192-release</id><content type="html" xml:base="https://noisypigeon.github.io/posts/pspdfkit-for-web-20192-release/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of blog post I authored for the <a href="https://pspdfkit.com/blog/2019/pspdfkit-web-2019-2/">PSPDFKit for Web 2019.2</a> release, published April 18th, 2019.</p>
</blockquote>

<p><strong>PSPDFKit for Web 2019.2</strong></p>

<p>We’re pleased to announce PSPDFKit for Web 2019.2! This release introduces accessibility improvements, new Server APIs for creating Instant Layers from Instant JSON, and a new API to preload the WebAssembly or asm.js worker. Please refer to our Server and Web changelogs for a complete list of features and bug fixes.</p>

<p><strong>Accessibility Improvements</strong></p>

<p>With this release, we’re introducing the first of many accessibility improvements, as it is important to us that Web be accessible and provide equal access and opportunity to everyone, including those with disabilities. You can now select annotations using the keyboard by pressing the tab key. With Tab and Shift + Tab, it’s easy to navigate backward and forward between annotations, and annotations can be selected by pressing Enter. You can try out keyboard navigation for annotations by playing around with our public examples.</p>

<p><strong>Custom Annotation Data</strong></p>

<p>The <code class="language-plaintext highlighter-rouge">customData</code> field can be used to store arbitrary JSON on annotations for any reason you see fit. For example, you can store metadata in the newly added <code class="language-plaintext highlighter-rouge">customData</code> field and filter annotations based on that metadata directly using Instant JSON. This is persisted even in your PDF and in XFDF.</p>

<p><strong>Flipbook Example (Page Curl Effect)</strong></p>

<p>With Flipbook, we added a new Catalog example that demonstrates a magazine-like page curl effect that works great on desktop and mobile devices. We focused fully on the viewing experience here and did not add annotation editing support, as this is not a common use case for magazines. You can try it out here!</p>

<p><code class="language-plaintext highlighter-rouge">preloadWorker()</code> <strong>API</strong></p>

<p>We added a <code class="language-plaintext highlighter-rouge">preloadWorker()</code> API for Standalone that allows you to start a WebAssembly or asm.js initialization before you load your first document. This API can be used in a variety of ways, but one example is with single-page applications: They could use this API to start downloading the required artefacts for the viewer before the first PDF is displayed. This will ensure everything is loaded when a PDF is shown and will drastically reduce the time it takes to display the contents.</p>

<p><strong>Improved Performance for Large Documents</strong></p>

<p>We now limit the number of pages rendered offscreen, in order to drastically reduce the number of DOM nodes. This significantly improves performance when using the continuous page view.</p>

<p><strong>New Server APIs</strong></p>

<p>We added new APIs to create Instant Layers from Instant JSON for the same document. There are many use cases for this, but one example is that these APIs can be used to create different “views” consisting of a subset of annotations for different users.</p>

<p><strong>Examples of Print Modes, Custom PDF Search, and an Annotation’s Rendered Content</strong></p>

<p>We worked on new example integrations in our Catalog. The print modes example demonstrates printing normally, as HTML, or as an exported PDF document. The example about customizing the PDF search feature shows you how to limit what can be found when searching through a PDF. Lastly, the example about customizing an annotation’s rendered content demonstrates how to associate custom HTML content with rendered annotations in the DOM.</p>

<p>Along with all the new features, this release also includes numerous bug fixes and minor improvements. For a complete list of changes, see the PSPDFKit for Web 2019.2 and PSPDFKit Server 2019.2 changelogs.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of PSPDFKit for Web 2019.2 Release notes.]]></summary></entry><entry><title type="html">Ryzen 2600 / GeForce GTX 1070 Ti</title><link href="https://noisypigeon.github.io/posts/ryzen-2600-geforce-gtx-1070-ti/" rel="alternate" type="text/html" title="Ryzen 2600 / GeForce GTX 1070 Ti" /><published>2018-12-08T20:00:00+00:00</published><updated>2018-12-08T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/ryzen-2600-geforce-gtx-1070-ti</id><content type="html" xml:base="https://noisypigeon.github.io/posts/ryzen-2600-geforce-gtx-1070-ti/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This post was initially published on <a href="https://pcpartpicker.com/b/8tbXsY">PCPartPicker</a> on December 8th, 2018.</p>
</blockquote>

<p>I use this computer for my full-time job as a Support Engineer (read software engineer who helps other software engineers) where I answer tickets, edit and compile projects, and work with virtual machines. After hours I use it to play Stardew Valley, Forza Horizon 4 and CS:GO at 1440p 60, as well as 3D CAD using Fusion 360 and music production using FL Studio.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1199" width="1600" alt="An image with caption: Front." loading="lazy" src="/assets/images/posts/ryzen-2600-geforce-gtx-1070-ti/240331-06400135047039ca515953fb3b6d70af.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Front.</figcaption></figure>

<h2 id="parts">Parts</h2>

<ul>
  <li>
    <p><strong>CPU</strong>: AMD Ryzen 5 2600 3.4 GHz 6-Core.</p>
  </li>
  <li>
    <p><strong>CPU Cooler</strong>: Noctua NH-U12S SE-AM4.</p>
  </li>
  <li>
    <p><strong>Motherboard</strong>: MSI B450M Mortar Titanium Micro ATX AM4.</p>
  </li>
  <li>
    <p><strong>Memory</strong>: G.Skill Trident Z 16GB (2×8GB) DDR4-3200 CL14.</p>
  </li>
  <li>
    <p><strong>Storage</strong>: Samsung 970 Evo 1TB M.2-2280 PCIe 3.0 X4 NVMe SSD.</p>
  </li>
  <li>
    <p><strong>Video Card</strong>: MSI GeForce GTX 1070 TI Titanium 8GB.</p>
  </li>
  <li>
    <p><strong>Case</strong>: Fractal Design Meshify C Mini MicroATX Mini Tower.</p>
  </li>
  <li>
    <p><strong>Power Supply</strong>: EVGA SuperNova G3 750W 80+ Gold Fully Modular ATX.</p>
  </li>
  <li>
    <p><strong>Operating System</strong>: Windows 10 Pro OEM Key.</p>
  </li>
  <li>
    <p><strong>Case Fans</strong>: 5x Be Quiet! Silent Wings 3 50.5 CFM 120mm.</p>
  </li>
  <li>
    <p><strong>UPS</strong>: CyberPower CP1500PFCLCD.</p>
  </li>
  <li>
    <p><strong>Custom</strong>: USB 3.0 20-Pin Internal Header Adapter Cable (Low Profile).</p>
  </li>
</ul>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="1306" alt="An image with caption: Back." loading="lazy" src="/assets/images/posts/ryzen-2600-geforce-gtx-1070-ti/240331-e5b3b1d255ae0351eb6eb14c0537bc72.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Back.</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a build list published on PCPartPicker on December 8th, 2018.]]></summary></entry><entry><title type="html">WX 5100 + GTX 1070 Ti (Dual GPU Workstation!)</title><link href="https://noisypigeon.github.io/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/" rel="alternate" type="text/html" title="WX 5100 + GTX 1070 Ti (Dual GPU Workstation!)" /><published>2018-08-04T19:00:00+00:00</published><updated>2018-08-04T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation</id><content type="html" xml:base="https://noisypigeon.github.io/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This post was initially published on <a href="https://pcpartpicker.com/b/fjsZxr">PCPartPicker</a> on August 4th, 2018.</p>
</blockquote>

<figure class="attachment attachment--preview attachment--jpg"><img height="1066" width="1600" alt="An image with caption: Wide shot of earlier desk." loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-5bcf4d3ff055fee62063c5299efd0f0d.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Wide shot of earlier desk.</figcaption></figure>

<p>This is revision two of my build. I have been building custom PCs and fixing up OEM PCs since I was a kid however I only had the opportunity to build them for other people. And since I worked as a freelancer for many years (often having to move from one city to another for work) a desktop with monitors, peripherals, etc was unfeasible at the time. Fortunately, I recently had the opportunity to settle down and move into a permanent place and decided it was time to treat myself to a custom built PC.</p>

<p>This workstation serves two purposes. Firstly, this computer is my daily driver for my full-time job as a Support Engineer. I work at an organization that builds a set of tools that help developers automate the process of testing their code so they can detect and fix problems earlier. My job entails helping other software engineers work through problems with our product by creating test projects, configs, and writing scripts, running customer projects in isolated environments (generally remotely), and answering support tickets through our CRM tool.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="1600" alt="An image with filename: 231087.37a13f52d3a3cb2e983b4258b077cfef.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-37a13f52d3a3cb2e983b4258b077cfef.jpg" /></figure>

<p>However, this computer isn’t only for work, which leads me into its second purpose: my hobbies. This computer enables me to make better 3D CAD drawings in Fusion 360 and FreeCAD, music production in Ableton Live and FL Studio, and game development (although I’m still figuring out my workflow). I also use this machine to play games such as Stardew Valley, Overwatch, Metro Last Light, and GTA V.</p>

<p>This workstation is configured to have a host and a guest. The host uses my Linux distro of choice - Fedora 28 which I have customized to my liking, and the guest uses Windows 10 Pro. The host is running on the metal while Windows 10 runs in a virtual machine. This is configured using KVM, QEMU, and VFIO/VirtIO passthrough (VFIO for PCI devices, VirtIO for networking and peripherals). Fedora owns the 250GB NVMe SSD and WX 5100 graphics card while Windows 10 Pro owns the 1TB NVMe SSD and the GTX 1070 Ti. Each operating system has access to 4-Cores, 8-Threads and 16GBs of memory.</p>

<p>Peripheral management is currently handled by VirtIO/USB Host Device passthrough however I’m currently setting up evdev for easier peripheral management. I access the operating systems through one Dell UltraSharp 27” LED Monitor (model number U2715H) however, I plan on adding a second monitor or a hardware KVM switch in the near future (since switching display inputs is still a pain).</p>

<h2 id="pictures">Pictures</h2>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="900" alt="An image with filename: 231087.34b6d333329c97f703a4aa443fe64926.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-34b6d333329c97f703a4aa443fe64926.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="900" alt="An image with filename: 231087.a585bea1766ce763289946dd42251ace.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-a585bea1766ce763289946dd42251ace.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="1600" alt="An image with filename: 231087.92688828b36b7b2c7d864a78bbe5d01e.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-92688828b36b7b2c7d864a78bbe5d01e.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1066" width="1600" alt="An image with filename: 231087.90d37129a3ecb8bda7905f0441b0fc74.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-90d37129a3ecb8bda7905f0441b0fc74.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="841" alt="An image with filename: 231087.f4bf6a9281ad49dd62f36b0fa0ed2f56.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-f4bf6a9281ad49dd62f36b0fa0ed2f56.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="900" alt="An image with filename: 231087.fea5dced1404e067aa279a51cd32a8e7.1600.jpg" loading="lazy" src="/assets/images/posts/wx-5100-gtx-1070-ti-dual-gpu-workstation/231087-fea5dced1404e067aa279a51cd32a8e7.jpg" /></figure>

<p>Here are some comments about the components I chose for my build: </p>

<p>AMD Ryzen R7 2700X CPU</p>

<p>This build has been a work in progress and I have been planning this build since August of 2017. I put together a lot of different parts lists that eventually got scrapped for one reason or another. I started buying parts for Revision One of this system in early May 2018 and if Pinnacle Ridge wasn’t released when it was, this build 100% would’ve used a 8700K. First generation Ryzen was enticing but I needed a computer I could rely on and I saw/read/watched mixed reviews about this. However, when Pinnacle Ridge dropped, I was very impressed by the improvements Zen+ brought to Ryzen’s overall system stability and thought I’d take a chance. Another thing that contributed to my decision was that AMD announced their AM4 platform would be supported for longer than a couple generations, allowing me to get one last big upgrade before AM5 comes out. I also picked my parts with Intel compatibility in mind in case Ryzen was not stable enough. With that said, after almost three months of using Ryzen every day, I am very happy with the stability and plan to keep Ryzen/AM4 as my platform for the next 4-5 years. I have also overclocked this CPU to 3.9GHz which has been mostly stable for me.</p>

<p>Asus ROG Crosshair VII Hero X470 Motherboard</p>

<p>I ultimately chose the C7H because of der8auer’s and buildzoid’s coverage. I needed a motherboard that will last multiple years and will likely support new Ryzen CPUs (i.e 3700X, 4700X, or 5700X). I also liked that this motherboard has eight USB 3 Type A ports since I would’ve had to use a USB 3 dock with other options because of all of my peripherals. I also removed the plastic “heatsink” over the I/O as I personally think the motherboard looks cleaner without it. I opted for the non Wi-Fi/Bluetooth model because I read from others in the community that the Wi-Fi model wasn’t as stable as it’s non Wi-Fi enabled sibling. While some will see this as a compromise, my desktop sits beside my gigabit router plugged in with a cat6 cable giving me between 800 to 1100mbps down and 200 to 400mbps up. If I ever need to move to a place where this is no longer true, I can buy a dongle or a PCIe add-in card. However, I’d rather run a 15 foot ethernet cable across my house then use Wi-Fi as it severely bottlenecks my speeds.</p>

<p>G.Skill Trident Z RGB 32GB DDR4-3200 CL14 14-14-14-34 Memory</p>

<p>This memory kit is awesome however if I’m being honest, I would’ve preferred a non-RGB kit but it was the only Samsung b-die kit with rated 14-14-14-34 timings that I could find in stock at the time. I opted for 32GBs so both my host and guest could have access to a full 16 gigabytes of that glorious high-speed memory <em>chef kiss</em>. This kit is currently overclocked to 3266MHz at those timings.</p>

<p>Be Quiet! Dark Rock Pro 4 CPU Cooler</p>

<p>This cooler is massive - some folks do not like this but I do. I removed the outer fan to allow for better visibility of the memory DIMMs and my temperatures didn’t budge. My 2700X still runs in the high 50s, lower 60s when under full load (while running at 20-30s when idle). And yes, I could’ve used the stock cooler but I wasn’t a fan of the RGB. I was able to quickly sell it on the second hand market.</p>

<p>Samsung 970 Evo 250GB and 970 Evo 1TB NVMe SSDs</p>

<p>As mentioned, the 250GB SSD is for Fedora and my files from work. The 1TB SSD is for my Windows 10 virtual machine which stores my games, music production projects, and personal files and documents. The drives are blazing fast and I love how M.2 doesn’t require any additional/unnecessary cables.</p>

<p>AMD Radeon Pro WX 5100 and NVIDIA GeForce GTX 1070 Ti Graphics Cards</p>

<p>The WX 5100 is for Fedora and 3D CAD while the GTX 1070 Ti is for Windows via GPU passthrough for gaming. I am currently using a 27” 1440P 60Hz monitor from Dell and I’m getting over 60 FPS in all of my favourite games (while in the virtual machine). There are still some tweaks/optimizations I have to do but I am overall very happy with the performance.</p>

<p>EVGA SuperNOVA G3 750W Power Supply</p>

<p>I needed a good, reliable power supply for my build and this model was recommended to me by multiple people in the community. I purchased the 750W variant for additional leg room/future upgrades as well as to provide me with enough power for my overclocked Ryzen CPU, and two graphics cards (the 1070 Ti being overclocked as well). It has worked perfectly for my needs.</p>

<p>CableMod Pro series Nylon custom cables</p>

<p>They’re CableMod’s Pro series Nylon cables in Silver, Grey, and Pink. I purchased them in 700mm (24-Pin, PCIe), and 750mm (EPS) lengths to not limit my future options in terms of compatibility with other cases.</p>

<p>I also got a coupon with my C7H which arrived after I made my order with CableMod. I contacted their support team and they awesomely applied the coupon retroactively and refunded me the difference even though it was a few weeks after. Great customer support team! Would buy again. While some folks would say the cables aren’t worth it because of their price, I think they are! I’m not a huge fan of RGB but still wanted a pop of colour in my build.</p>

<p>Fractal Designs Meshify C White TG ATX Case</p>

<p>I wanted a compact ATX enclosure that had good airflow and wasn’t gaudy. I decided to go with the Meshify C because of the mesh front panel and small-ish form factor. I chose the white model because it fits better with my house. This case was a pleasure to build in and I have some case/paint mods planned for the future which I’ll definitely update you all on once they happen.</p>

<p>Be Quiet! SilentWings 3 120mm PWM Case Fans</p>

<p>I have added three Silent Wings 3 fans around my chassis (two in the front as intake and one in the back for exhaust). There are also two additional Silent Wings 3 fans that came with my CPU cooler however those ones are 135mm. They are so quiet, it’s honestly amazing. Under what I would call extreme load, the fans are only slightly audible. I would definitely recommend these to anyone who is noise sensitive like me.</p>

<p>Cyber Power CP1500PFCLCD 900W Uninterruptible Power Supply</p>

<p>I purchased this unit to provide emergency power in case of a power outage to provide me with enough time to safely shut down my machine. This unit provides enough power for my PC, monitor, router, and modem and it has helped me get through one power outage already! Very impressed.</p>

<p>I am very happy with my system’s performance but I still have some tweaking to do. I’m still working on overclocking and benchmarking all of my components so I will update this section in the coming weeks once I’ve had the opportunity to do so. I will be using Cinebench, 3DMark, AIDA64, Geekbench 4, Metro Last Light, and GTA V to benchmark Windows 10, and I am still trying to determine what benchmarking tools I should use to test Fedora 28 (please send me your recommendations!).</p>

<p>However, as a general note, I am getting over 60fps in most titles while in the Windows VM using GPU passthrough with a 1440P panel and high or medium quality settings depending on the game. This section will be expanded soon.</p>

<p>This is my first custom build that I made for myself and it was a lot of fun planning and building this system. It’s not final but Revision Two is so much closer to my vision. I’m so excited and grateful to have this sitting on my desk. Thanks to everyone who helped me on the Gamers Nexus, Level1Techs, Passthrough Post, Linus Tech Tips, and PCPartPicker forums and Discord servers. PS: I am still planning on using my old desk (see later photos), it’s just currently being repaired.</p>

<p>Let me know what you think and please share constructive criticism! Additionally, <strong>I would love to hear from you all about what I should name my build.</strong> The name of the hen figurine is Bimsy but I’m not sure that fits the build haha.</p>

<p>Thanks for taking a look and happy building!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a build list published on PCPartPicker on August 4th, 2018.]]></summary></entry><entry><title type="html">Ryzen 2700X + GeForce GTX 1080</title><link href="https://noisypigeon.github.io/posts/ryzen-2700x-geforce-gtx-1080/" rel="alternate" type="text/html" title="Ryzen 2700X + GeForce GTX 1080" /><published>2018-07-22T19:00:00+00:00</published><updated>2018-07-22T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/ryzen-2700x-geforce-gtx-1080</id><content type="html" xml:base="https://noisypigeon.github.io/posts/ryzen-2700x-geforce-gtx-1080/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This post was initially published on <a href="https://pcpartpicker.com/b/V7nH99">PCPartPicker</a> on July 22nd, 2018.</p>
</blockquote>

<p>Hey everyone! This is revision one of my new build. I hope you enjoy!</p>

<p>I am going to be using this system every day as my personal workstation for my job as a software engineer. However, more importantly, this system was built for my hobbies. I do 3D modelling in Fusion 360 and Blender, and music creation in Ableton Live and FL Studio. My daily driver prior to this system was a Lenovo X1 Carbon 5 to which I hit the limit of what a dual core laptop with integrated graphics could provide (at least for my hobbies, especially 3D modelling).</p>

<p>This system is also going to be used for gaming, albeit less often. I will be playing titles such as Stardew Valley, CS:Go, Metro Last Light, GTA5, and Overwatch among others.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="1600" alt="An image with filename: 230177.e8e7fe42426273d515803341a1ead633.1600.jpg" loading="lazy" src="/assets/images/posts/ryzen-2700x-geforce-gtx-1080/230177-e8e7fe42426273d515803341a1ead633.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="1200" width="1600" alt="An image with filename: 230177.7ccab34fd7b60d15c7faf1dc7fc2a6a4.1600.jpg" loading="lazy" src="/assets/images/posts/ryzen-2700x-geforce-gtx-1080/230177-7ccab34fd7b60d15c7faf1dc7fc2a6a4.jpg" /></figure>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: 230177.19385ad18aaa74140e6a0070171e2d8b.1600.jpg" loading="lazy" src="/assets/images/posts/ryzen-2700x-geforce-gtx-1080/230177-19385ad18aaa74140e6a0070171e2d8b.jpg" /></figure>

<p>The parts I used were:</p>

<p>CPU: AMD Ryzen 2700X</p>

<p>I have been planning this workstation since 2017 August and I’ve put together a lot of parts lists - oh so many parts list. This most definitely would’ve been an 8700K/z370 system if Pinnacle Ridge wasn’t released when it was. The 1700X was enticing to me but I needed a computer I could rely on and I received mixed reviews/opinions on this topic. However, when the 2700X dropped, I was very impressed by the improvements Zen+ brought to Ryzen’s overall system stability and thought I’d take a chance. I also really like that AMD will be supporting their AM4 chipsets for more than one or two CPU generations. It’s nice that I will be able to slot in a 3700X or 4700X if I wanted to do so in the future.</p>

<p>However, as one of the main priorities of this build is stability, I also picked my components with compatibility for Intel in mind. This will allow me to switch to a Coffee Lake CPU and z370 motherboard or their successors with relative ease if the need arises.</p>

<p>Motherboard: Asus Crosshair VII Hero</p>

<p>I picked the C7H because of der8auer’s and buildzoid’s coverage. I also liked that this motherboard has eight USB 3 Type A ports as with other options I would’ve had to use a hub to have access to all of my required peripherals and devices. I opted for the non Wi-Fi/Bluetooth model because first and foremost I heard from others in the community that the Wi-Fi enabled model wasn’t as stable. However, a secondary reason I justified the compromise was because this computer will always be connected to my gigabit router which is less than two feet away from my desk. I also removed the plastic heatsink over the I/O as I personally thought it looks cleaner without it.</p>

<p>Memory: G.Skill Trident Z RGB</p>

<p>I would’ve preferred a non-RGB memory kit but decided to go with this G.Skill kit because it was the only Samsung b-die kit I could find in Canada with rated CL14 (14-14-14-34) timings at the time. I opted for 32GBs because I often maxed out the 16GBs of memory on my last PC.</p>

<p>CPU Cooler: Be Quiet! Dark Rock Pro 4</p>

<p>The cooler that comes with the 2700X would have sufficed. Full stop. However, I personally dislike the aesthetics of the Wraith cooler enough that buying an aftermarket one was worth it to me. Since I went with SilentWings 3 fans for the rest of my build, I decided to go with a Be Quiet! Cooler. I would’ve preferred the Dark Rock 4 but I was limited to what was available in Canada at the time. The installation was relatively easy and I’m using Thermal Grizzly Kryonaut TIM.</p>

<p>Storage: Samsung 970 Evo 250GB NVMe SSD</p>

<p>My storage solution is incomplete with this revision of my build but I’m still very impressed by this drive’s performance. Everyone says M.2 drives are “the size of a stick of gum” for reference but oh boy was I still surprised by how small this drive was! Technology is amazing! I plan on adding a Samsung 970 Evo 1TB NVMe SSD to my build in the next revision.</p>

<p>Video Card: EVGA GeForce GTX 1080 FTW</p>

<p>I managed to get a GTX 1080 for CAD $660 including shipping and taxes during the mining craze. The card was originally purchased for a build that didn’t happen and sat in the box since March this year unused. I got this card for $300 less than retail (on Newegg) at time of purchase. It’s overkill for my use case and I may switch it out between now and when I publish my revision 2 build log.</p>

<p>I am currently using a 27” 1440P 60Hz monitor from Dell and I’m getting over 60 FPS in all of the games I play and awesome performance (no lag so far) in my 3D modelling programs. It’s honestly incomparable to the performance I got with integrated graphics.</p>

<p>Accessory: FSLabs Graphics Card GPU Brace Support</p>

<p>My graphics card is heavy and I needed something to help with the sag. I would not recommend this bracket. It wasn’t strong enough to hold my EVGA 1080 FTW and I ended up returning it to Amazon since the sag was equally as bad without it.</p>

<p>Power Supply: EVGA SuperNOVA G3 750W</p>

<p>I needed a good, reliable power supply and this model was recommended to me from a lot of folks in the community across different forums. I purchased the 750W model for additional leg room and because I plan to add a second graphics card for workstation/Linux purposes.</p>

<p>Custom Cable Kit</p>

<p>My custom cables are from CableMod. They’re CableMod’s Pro series Nylon cables in Silver, Grey, and Pink. I got them in 700 MM (24 Pin, PCIe) and 750 MM (EPS) lengths to not limit my future options in terms of compatibility with other cases. I also got a coupon with my C7H which arrived after I made my order with CableMod. I contacted support and they applied the coupon/refunded the difference anyways. Their customer support is excellent. While some folks would say the cables aren’t worth it because of their price, I think they are! I’m not a huge fan of RGB but still wanted to add a pop of colour to my build.</p>

<p>Case: Fractal Designs Meshify C White</p>

<p>I wanted an ATX enclosure that had good airflow, wasn’t needlessly large, and wasn’t gaudy. I decided to go with the Meshify C because of the all mesh front panel and small-ish form factor. I have some case mods in mind which I will be doing in June/July and I’ll definitely update the post with more pictures once I have completed those. I chose the white model because my colour scheme is white, gunmetal and pink.</p>

<p>Fans: Be Quiet! SilentWings 3 120mm PWM</p>

<p>I currently have three SilentWings 3 fans around my chassis; two in the front as intake and one in the back as exhaust. There are also two additional SilentWings 3 fans helping my Dark Rock Pro 4 cool my CPU. They are so quiet, it’s honestly amazing. I’m also considering adding two additional SilentWings 3 fans to the top of my case but I haven’t decided yet, will need to do more testing.</p>

<p>I am quite happy with my system’s overall performance but I still have some tweaking to do. I will probably let XFR2 do it’s thing but I want to manually overclock my GPU. I will update here once I have the chance to do so and make sure it’s stable. My memory is running at 3266MHz with 14-14-14-34 timings.</p>

<p>Here are some results from benchmarking tools I ran:</p>

<ul>
  <li>
    <p>Cinebench CPU: 1735</p>
  </li>
  <li>
    <p>Cinebench GPU: 120.96</p>
  </li>
  <li>
    <p>3DMark: 7962, GPU: 7761, CPU: 9340</p>
  </li>
  <li>
    <p>Geekbench CPU: Single Core: 5057, Multi Core: 28806</p>
  </li>
  <li>
    <p>Geekbench OpenCL: 184278</p>
  </li>
</ul>

<p>And here is some data about temperatures:</p>

<ul>
  <li>
    <p>CPU Idle: 35C</p>
  </li>
  <li>
    <p>CPU Load: 64C</p>
  </li>
  <li>
    <p>GPU Idle: 34C</p>
  </li>
  <li>
    <p>GPU Load: 43C</p>
  </li>
</ul>

<figure class="attachment attachment--preview attachment--jpg"><img height="480" width="640" alt="An image with filename: 230177.a618d4373ee6b9003bd515cce93e6073.1600.jpg" loading="lazy" src="/assets/images/posts/ryzen-2700x-geforce-gtx-1080/230177-a618d4373ee6b9003bd515cce93e6073.jpg" /></figure>

<p>This is my first custom build that I made for myself and it was a lot of fun planning and building this system but it’s not final and I’ll definitely be sharing the progress as it happens! Additionally, I would love to hear from you all about what I should name my build.</p>

<p>Thanks and happy building!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a build list published on PCPartPicker on July 22nd, 2018.]]></summary></entry><entry><title type="html">How to create a Realm instance (having nested objects) from a dictionary?</title><link href="https://noisypigeon.github.io/posts/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary/" rel="alternate" type="text/html" title="How to create a Realm instance (having nested objects) from a dictionary?" /><published>2017-02-17T20:00:00+00:00</published><updated>2017-02-17T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This post is a mirror of my answer to a Stack Overflow question from February 17th, 2017 as Willow PXXX.</p>

  <p>[<a href="https://stackoverflow.com/a/42308579">Original (Question)</a>], [<a href="https://stackoverflow.com/a/42308579">Original (Answer)</a>]</p>
</blockquote>

<figure class="attachment attachment--preview attachment--png"><img height="114" width="1050" alt="An image with caption: Comment after providing the answer below. [&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer nofollow&quot; href=&quot;https://stackoverflow.com/questions/42294962/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary/42308579#comment71842464_42308579&quot;&gt;Source&lt;/a&gt;]" loading="lazy" src="/assets/images/posts/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary/screenshot-202024-10-06-20at-201-33-39-e2-80-afpm.png" /><figcaption class="attachment__caption" aria-hidden="true">Comment after providing the answer below. [<a href="https://stackoverflow.com/questions/42294962/how-to-create-a-realm-instance-having-nested-objects-from-a-dictionary/42308579#comment71842464_42308579">Source</a>]</figcaption></figure>

<h2 id="my-answer">My Answer</h2>

<blockquote>
  <p>The reason you’re experiencing these issues is because the <code class="language-plaintext highlighter-rouge">List&lt;User&gt;</code> object must be initialized before use. Realm recommends declaring <code class="language-plaintext highlighter-rouge">List</code> and <code class="language-plaintext highlighter-rouge">RealmOptional</code> objects as <code class="language-plaintext highlighter-rouge">let</code> and therefore initializing them right inside the model.</p>

  <p>In addition to that, you need to declare other properties using the <code class="language-plaintext highlighter-rouge">dynamic var</code> attribute in order for the properties to become accessors for the underlying database.</p>

  <p>More on what I mentioned in the <a href="https://realm.io/docs/swift/latest/#property-attributes">Property Attributes</a> and <a href="https://realm.io/docs/swift/latest/#supported-types">Supported Types</a> sections of our documentation. With all that said, I recommend you change your model to the following:</p>

  <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import RealmSwift

class User: Object {
    dynamic var firstName: String?
    dynamic var lastName: String?
    let friends = List&lt;User&gt;()
}
</code></pre></div>  </div>

  <p>I hope this helps and please let me know if you need anymore assistance.</p>
</blockquote>

<h2 id="question">Question</h2>

<p>Asked by “Mohshin Shah”:</p>

<blockquote>
  <p>For example, I have model <code class="language-plaintext highlighter-rouge">class</code> like this</p>

  <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>class User: Objects {
    var firstName: String?
    var lastName: String?
    var friends: List&lt;User&gt;?
}
</code></pre></div>  </div>

  <p>and <code class="language-plaintext highlighter-rouge">Dictionary</code> like this</p>

  <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{
   firstName : "Mohshin"
   lastName : "Shah"
   friends : [
              {
               firstName : "Friend 1"
               lastName : "abc"
               },
              {
               firstName : "Friend 2"
               lastName : "def"
               }
              ]
}
</code></pre></div>  </div>

  <p>I want to make a User object using the dictionary. I have tried Realm’ <code class="language-plaintext highlighter-rouge">init(value: Any)</code> method and it is creating the User with flat values only but not the friends is initiated.</p>
</blockquote>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of my answer to a Stack Overflow question about Realm nested objects.]]></summary></entry><entry><title type="html">Panelist: The Future of Work and Education</title><link href="https://noisypigeon.github.io/posts/panelist-the-future-of-work-and-education/" rel="alternate" type="text/html" title="Panelist: The Future of Work and Education" /><published>2016-06-16T07:00:00+00:00</published><updated>2016-06-16T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/panelist-the-future-of-work-and-education</id><content type="html" xml:base="https://noisypigeon.github.io/posts/panelist-the-future-of-work-and-education/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of a podcast appearance with Agile and Beyond for their episode: The Future of Work and Education - A Millennial Perspective. This is a link to the <a href="https://www.agileandbeyond.co/portfolio/future-work-education-millennial-perspective/">original website hosting the podcast</a>.</p>
</blockquote>

<p>This episode is a little different. A joint experiment. A nebulous mission.</p>

<p>In this inspiring international discussion, I was honored to be joined by two co-hosts: Dawna Jones of Vancouver and Gert Penne of Belgium.</p>

<p>And three guests: Willow BXXXX and Lindsey Henwood of Vancouver, and Josh Shaffer of Tampa.</p>

<p>With 6+ participants, spanning 3+ countries, 3 continents, and 3 generations we explored not only the future of work, but also the future of education.</p>

<p>Dawna Jones is the author of DECISION-MAKING for DUMMIES. Her book appears on Steve Denning’s (Forbes) list of 8 Noteworthy Books for 2014. Dawna is also the host of the “Evolutionary Provocateur” podcast.</p>

<p>Gert Penne, an account executive in the tech industry, is a an Empathic Problem Solver, who takes a principle-centered approach to teaming across cultures, disciplines, and generations.</p>

<p>At the end of a 2-continent, 3-country Skype call, Dawna, Gert, and I found ourselves talking about generational differences globally. With the goal to learn how the next generation sees the Future of Work, we decided to invite 3 Millennials to a follow-up call. This show is that call.</p>

<p>Millennials fall just after the Gen-Xers. They were born between 1982 and 2004.</p>

<p>We were fortunate to have 3 Millennials join us.</p>

<p>Josh Shaffer is an early Millennial, and works for Accenture in Talent Acquisition in Tampa.</p>

<p>Willow BXXXX is an iOS Engineer, designer, and writer, as well as a teacher at Lighthouse Labs in Vancouver.</p>

<p>Lindsay Henwood is a User Experience Design Instructor at Red Academy, a rapidly growing Tech School startup in Vancouver.</p>

<p>Two other Millennials joined us virtually.</p>

<p>Lauren Kirmil is a Marketing and Media Specialist and a former technical recruiter in the San Francisco Bay Area. During her extensive travels throughout Southeast Asia she worked as a freelance travel writer.</p>

<p>Grace Liu is a former Outreach Support Officer at the British Consulate in Guangzhou, China. She recently received funding to start a venture in Shenzhen. With the assistance of her NYU professor she also plans to start an NGO incorporating ancient contemplative practices, including meditation.</p>

<p>In this discussion we covered a wide range of topics.</p>

<ul>
  <li>
    <p>Distributed workforces and workplace flexibility and the big American offensive to change the workplace.</p>
  </li>
  <li>
    <p>Self-responsibility, self-awareness, self-perception.</p>
  </li>
  <li>
    <p>Cultural fit: the “techie” mold and the pressure to fit in.</p>
  </li>
  <li>
    <p>The dying days of the industrial model, the irrelevant university degree and the rise of bootcamp style education.</p>
  </li>
  <li>
    <p>The need to understand the next generation, and the companies which will die.</p>
  </li>
  <li>
    <p>The rise of the robots and the growing fear of job loss.</p>
  </li>
  <li>
    <p>Capitalism and its booms and busts: do we want an economy based on self-interest or creativity and collaboration?</p>
  </li>
  <li>
    <p>Tribalism and the need to belong: do we become global citizens or nationalists?</p>
  </li>
  <li>
    <p>Surviving the industrial model and designing the new workplace.</p>
  </li>
  <li>
    <p>The need to shift easily into different industries and the costly risk in over-specialization.</p>
  </li>
  <li>
    <p>The silliness of our current system and people’s inability to work with power.</p>
  </li>
  <li>
    <p>And the power coming from the “Millennial values”.</p>
  </li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a podcast appearance with Agile and Beyond.]]></summary></entry><entry><title type="html">Interview: Murderous Canadian Moose</title><link href="https://noisypigeon.github.io/posts/interview-murderous-canadian-moose/" rel="alternate" type="text/html" title="Interview: Murderous Canadian Moose" /><published>2016-05-15T07:00:00+00:00</published><updated>2016-05-15T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/interview-murderous-canadian-moose</id><content type="html" xml:base="https://noisypigeon.github.io/posts/interview-murderous-canadian-moose/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. This is a mirror of a podcast interview with Retro Speculative.</p>

  <ul>
    <li>
      <p>Mirror of the podcast page on <a href="https://www.listennotes.com/en/podcasts/retro-speculative/3-murderous-canadian-moose-fCDGTMa9Z-y/">listennotes.com</a>.</p>
    </li>
    <li>
      <p>Mirror of the podcast audio on <a href="https://episodes.loomstate.fm/retro/retro3.mp3.">loomstate.fm</a>.</p>
    </li>
    <li>
      <p>Self-hosted mirror of the podcast audio on Google Drive.</p>
    </li>
  </ul>

</blockquote>

<p>Willow keeps an amazingly positive outlook despite her experiences. She shares her journey into iOS development and teaching as well as identifier and age discrimination; employer ethics and killer native animals.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mirror of a podcast interview with Retro Speculative.]]></summary></entry><entry><title type="html">GPG with GitHub on OS X</title><link href="https://noisypigeon.github.io/posts/gpg-with-github-on-os-x/" rel="alternate" type="text/html" title="GPG with GitHub on OS X" /><published>2016-04-17T19:00:00+00:00</published><updated>2016-04-17T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/gpg-with-github-on-os-x</id><content type="html" xml:base="https://noisypigeon.github.io/posts/gpg-with-github-on-os-x/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated information.</p>
</blockquote>

<p>There’s been a lot of chatter about <a href="https://github.com/blog/2144-gpg-signature-verification">GitHub’s recent announcement</a> in regards to their support for signing tags and commits. For those who don’t know, Git allows anyone to commit as anyone, but that opens up room for impersonation on platforms like GitHub where a community exists. GPG-signed commits or “verified signatures” provide reassurance to others that commits from Willow Bxmxy are actually originating from her computer instead of someone who is impersonating her.</p>

<figure class="attachment attachment--preview attachment--png"><img height="544" width="990" alt="An image with caption: What a verified commit looks like" loading="lazy" src="/assets/images/posts/gpg-with-github-on-os-x/dwfjxd9ac8eew_retina.png" /><figcaption class="attachment__caption" aria-hidden="true">What a verified commit looks like</figcaption></figure>

<p>I spent hours reading through the documentation and random posts to gather a better understanding about GPG. Git supported GPG-signed commits before GitHub released their support for the feature. So I was delighted to find lots of coverage on Stack Overflow and in the Git SCM book. I am writing this post to hopefully bring a humanised approach to configuring this feature with GitHub on an OS X-based machine.</p>

<h2 id="step-one-install-and-configure-the-toolbox">Step One: Install and configure the toolbox</h2>

<p>There is a bunch of dependencies that we’ll need to install. I recommend doing so with HomeBrew. The two dependencies we need are:</p>

<p><strong>GnuPG</strong></p>

<p>GnuPG, also known as GPG, is a command line tool which is used to encrypt and sign data with a public and private key.</p>

<p><strong>Pinentry</strong></p>

<p>Pinentry is a small collection of dialog programs that allow GnuPG to read passphrases and PIN numbers in a secure manner.</p>

<p>Install these dependencies by running the following command:</p>

<p><code class="language-plaintext highlighter-rouge">$ brew install gnupg21 pinentry-mac</code></p>

<p>Now that we have installed the tools we need on your machine, we will need to configure gpg-agent so it knows to use Pinentry when collecting passphrases.</p>

<p>To make that change, open up ~/.gnupg/gpg-agent.conf in your editor of choice and paste the following:</p>

<p><code class="language-plaintext highlighter-rouge">pinentry-program /usr/local/bin/pinentry-mac</code></p>

<p>This is where OS X’s special ingredient comes in. Pinentry for Mac is awesome because it connects gpg-agent to the Login Keychain on OS X. Storing the passphrase in the keychain is safe, secure and accessible.</p>

<p>This allows for (optional) automatic key signing and helps avoid the unnecessary frustration and hair loss of always having to provide your passphrase when committing changes.</p>

<h2 id="step-two-generate-a-key">Step Two: Generate a key</h2>

<p>Now let’s generate a new GPG key using the default parameters, but feel free to customise the parameters.</p>

<p>This key will be used to sign your commits and let GitHub know so your verified signature badge is visible to others to see.</p>

<p><code class="language-plaintext highlighter-rouge">$ gpg --gen-key</code></p>

<p><strong>Key Type</strong></p>

<p>Select what kind of key we want to create. In this situation, you will want to create a default RSA and RSA key.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? ↵
</code></pre></div></div>

<p>RSA is the most common Public Key Cryptography algorithm. These algorithms allow us to “sign” messages by encrypting them with a public key. This is effective since any recipient (GitHub) of the message (a commit) can verify that the user’s public key can decrypt the message and thus prove that the user’s secret key was used to encrypt it.</p>

<p>If the user’s secret key is, in fact, secret, then it follows that the user and not some impostor really sent the message.</p>

<p><strong>Key Size</strong></p>

<p>The key size determines the length and amount of time needed to process operations. The larger the size, the longer it takes.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Let’s use the default key size of 2048.
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) ↵
</code></pre></div></div>

<p><strong>Key Expiration</strong></p>

<p>Depending on what the key is being used for, it can be a good idea to specify an expiry date to add that extra level of security. However, because this key is being used to sign commits, I would personally avoid specifying an expiry date or maybe have it expire every 5 years.</p>

<p>Please specify how long the key should be valid.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>     0 = key does not expire
  &lt;n&gt;  = key expires in n days
  &lt;n&gt;w = key expires in n weeks
  &lt;n&gt;m = key expires in n months
  &lt;n&gt;y = key expires in n years
Key is valid for? (0) ↵
</code></pre></div></div>

<p><strong>Key Identity</strong></p>

<p>Create a user ID to identify your key. This identity is constructed using a real name, comment and email address in this form:</p>

<p>Willow Bxmxy (iOS Engineer) <code class="language-plaintext highlighter-rouge">willow.rose@bxmxy.ca</code></p>

<p>Provide the requested information using the prompts and enter an O at the end to confirm your details and continue.</p>

<p><strong>Key Passphrase</strong></p>

<p>You need a passphrase to protect your secret key. I would recommend using a tool like 1Password to generate this phrase.</p>

<figure class="attachment attachment--preview attachment--png"><img height="418" width="650" alt="An image with filename: xjyzyiw687zwa_small.png" loading="lazy" src="/assets/images/posts/gpg-with-github-on-os-x/xjyzyiw687zwa_small.png" /></figure>

<p>Passphrase suggestions:</p>

<ul>
  <li>
    <p>Between 15 and 25 characters long.</p>
  </li>
  <li>
    <p>Include numbers and symbols.</p>
  </li>
  <li>
    <p>Avoid repeating characters.</p>
  </li>
  <li>
    <p>Allow ambiguous characters.</p>
  </li>
</ul>

<p>Reminder: Save this passphrase. You will need to provide it again in the future (even if you intend on saving it in the keychain). I personally have mine stored in 1Password, so I don’t lose it.</p>

<p><strong>Step Three: Configure Git + GitHub</strong></p>

<p>Next we’ll configure Git with your key and loop GitHub in on the magic. List out all of your keys and find the one you want to use.</p>

<p><code class="language-plaintext highlighter-rouge">$ gpg2 --list-keys</code></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/Users/willow/.gnupg/pubring.gpg
--------------------------------

pub   rsa2048/797FCB96 2016-04-17 [SC]
uid         [ultimate] Willow Bxmxy (iOS Engineer) &lt;willow.rose@bxmxy.ca&gt;
sub   rsa2048/C1684200 2016-04-17 [E]
pub   rsa2048/0A46826A 2016-04-17 [SC]
uid         [ultimate] Willow Bxmxy (Alternative) &lt;willow.rose@bxmxy.ca&gt;
sub   rsa2048/874529A9 2016-04-17 [E]

You will need to provide your own signing key. If I wanted to use the key commented with: “iOS Engineer,” I would copy down 797FCB96.
</code></pre></div></div>

<p>Set your global signing key and tell Git that you’re using gpg2:</p>

<p><code class="language-plaintext highlighter-rouge">$ git config --global user.signingkey 797FCB96</code></p>

<p><code class="language-plaintext highlighter-rouge">$ git config --global gpg.program gpg2</code></p>

<p><strong>Export the key</strong></p>

<p>Now export your GPG key to add it to your GitHub account:</p>

<p><code class="language-plaintext highlighter-rouge">$ gpg --armor --export 797FCB96</code></p>

<p>lt;p&gt;Copy your GPG key, beginning with the “Begin PGP Public Key Block” comment and ending with the “End PGP Public Key Block” comment.</p>

<p>Add the key to your GitHub account</p>

<p>In the top right corner of any page (on <a href="https://github.com">https://github.com</a>), click your profile photo, then click “Settings.”</p>

<p>In the user settings sidebar, click “SSH and GPG keys.”</p>

<p>Click “New GPG key.”</p>

<p>In the “Key” field, paste the GPG key you copied while exporting.</p>

<p>Click “Add GPG key.”</p>

<p>To confirm the action, enter your GitHub password.</p>

<p><strong>Step Four: Sign all of your commits (Optional)</strong></p>

<p>I sign all of my commits because I love the simplicity of not having to provide my passphrase every time. There is some controversy regarding this, but I do not see any of the common concerns to be an issue.</p>

<p>To sign all of your commits by default, add this to your .gitconfig file:</p>

<p>[commit]</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpgsign = true
</code></pre></div></div>

<p>Sign a commit and check the “Save in Keychain” box in Pinentry to avoid providing your passphrase in the future.</p>

<p>Step Five: Take ‘er out for a spin!</p>

<p>Here’s a little sample for testing it out and signing a commit.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git clone https://github.com/istx25/some-project
$ cd some-project/
$ echo “Follow @istx25 on Twitter!” &gt;&gt; README.md
$ git add -A
$ git commit -s -m “Initial (signed) commit”
$ git push
</code></pre></div></div>

<p>Thank you for reading. Please feel free to reach out on Twitter or via email if you have any questions or find anything that could be improved or needs correcting. Happy to help (and learn)! ❤</p>

<p>That’s all folks.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Guide to setup GPG keys with GitHub on OS X.]]></summary></entry><entry><title type="html">Hiya, Svbtle! (Re-introduction)</title><link href="https://noisypigeon.github.io/posts/hiya-svbtle-re-introduction/" rel="alternate" type="text/html" title="Hiya, Svbtle! (Re-introduction)" /><published>2016-03-16T19:00:00+00:00</published><updated>2016-03-16T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/hiya-svbtle-re-introduction</id><content type="html" xml:base="https://noisypigeon.github.io/posts/hiya-svbtle-re-introduction/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>Hey, it’s me—Willow. I have decided that I want to get back into writing more regularly again. I learned a lot about myself and the world around me during 2015 and I’m positive I’m going to learn even more during 2016. I have always been intrigued by how my essays can show who I am, as a person at the time of writing them.</p>

<p>Over the past few weeks, I’ve been reading over my previous articles on Medium. It continually amazes me how pretentious and privileged I was as a (seemingly) cis white male. The past year has been humbling and I want to bring my readers on a ride through my transition, search for work:life balance and any new adventures that find me.</p>

<p>If you don’t know who I am, here’s a little bit of an intro:</p>

<p>My name is Willow Bxmxy. I am a twenty-seventeen year old trans woman from Vancouver, Canada. I primarily work on iOS apps, but I have started to dabble into Go and hardware projects. I love to work on products that improve lives and inspire change, especially those in the financial, medical and environmental tech industries.</p>

<p>I also dropped out of high school a while back (for some reason) and I haven’t looked back. I have considered majoring in Criminology but I don’t see uni as a means to a career but rather as a way to study topics that I am passionate about—and I don’t have a bottomless pit of cash to pay for tuition. I also love photography, so check out my Instagram.</p>

<p>Follow me on my journey for self-fulfilment. I am not sure what’ll look like, but I do know it’ll be one heck of a ride.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Blog post migration announcement from Medium to Svbtle.]]></summary></entry><entry><title type="html">Reflecting on dropping out (1 year later)</title><link href="https://noisypigeon.github.io/posts/reflecting-on-dropping-out-1-year-later/" rel="alternate" type="text/html" title="Reflecting on dropping out (1 year later)" /><published>2016-02-08T20:00:00+00:00</published><updated>2016-02-08T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/reflecting-on-dropping-out-1-year-later</id><content type="html" xml:base="https://noisypigeon.github.io/posts/reflecting-on-dropping-out-1-year-later/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>Over a year ago, I dropped out of high school to jump headfirst into a life without formal education. I want to share my perspective now, after a year of being in the field. I have learned more in the last year (plus) than I ever could have in a classroom setting.</p>

<p>I’m asked “Why did you leave school?” on a regular basis. It’s been such a common question that someone asks me at least once or twice a week. My answer? I love learning. That may sound like an odd explanation for why I left school, but the simple truth is that high school was holding me back. More specifically, I was on a completely different planet from my peers. I was tired of being surrounded by teenagers who only wanted to get high. I was tired of my school pushing me into courses that would actively get in my way of pursuing a degree. I was tired of applying for AP courses just to hear back that they were either too full or too empty (and cancelled).</p>

<p>I craved freedom. I needed an education that only experiences in the real world could provide. I needed to explore life in my own unconventional way in to truly find who I am and to get the most out of my young years. I put myself on a self-corrected path that would enable me to learn what life actually needed me to know. Not what the school board thought I needed twenty years ago.</p>

<p>Though I don’t agree <a href="https://medium.com/essays-by-kern/don-t-drop-out-ed0e8d14e22d">with everything Alex Kern said</a>. He made a great point about the problems in society regarding expectations in education.</p>

<blockquote>
  <p>A college education makes you more likely to get the job of your dreams. This is definitely true for most professions but was never enough to keep me motivated. The reward was too nebulous. Many successful people have college degrees. This smelled of a dubious causal claim. And besides, “checking boxes” doesn’t make me happy. A degree gives you a safety net to fall back on. This didn’t strike a chord with me because I don’t want to spend the better part of my youth constructing a safeguard. I want to do something I love — now.</p>
</blockquote>

<p>People love to criticize me for leaving school, but I knew I just needed to get out of there.</p>

<p>I immediately started looking for work when I dropped out. After a few weeks on the hunt, I landed a job as a junior UX designer at a small dev shop in Vancouver. It wasn’t great, but it was my first professional experience in the industry. I learned a lot and after a few months, I realized that I enjoyed writing code way more than being a designer.</p>

<p>I left the company to start working as a junior iOS developer at a product startup in Oakridge. My first few days were great, but it quickly unraveled as I saw how badly the CEO treated his team. The entire culture was built off of the sweatshop mentality. We would work from 9am to 8pm (and sometimes even later) with minimum to no breaks. I was constantly put down because my occasional question was a bother to their workflow. I was told that I was being “paid to code and not to learn.” I realized I was losing so much sleep over something so ridiculous that I ended up resigning after 31 days. Even though this environment was not conducive to learning, I still learned a lot about how not to run a team.</p>

<p>I took a few weeks to recharge and prepare myself for another job search. The job market felt like an impenetrable wall. I felt like I was playing in a game of keep away. Everyone told me to “Get a job to gain experience,” but everywhere I applied to said “You need more experience to get a job.” A lot of companies showed a genuine interest in me, but between my age, education status and lack of professional experience—I was too risky.</p>

<p>I decided it was time to make it my own responsibility to gain experience. I started to attend more hackathons and contribute to more open source projects. I ended up starting a consultancy with my best friend. Most of our clients didn’t care about my educational background. Knowing how to hustle and get shit done was the key to success. We started out with small design projects and worked our way up to accepting larger iOS (and web) projects. I did this full-time for an entire year. We contributed to nine apps and shipped two full-fledged apps.</p>

<p>I’m a mix between meticulous and spontaneous.</p>

<p>I am a fiercely independent person and dropping out of school enabled me to get away from the pointless stress that school caused. This newfound freedom allowed me to spend more time exploring the world I live in and who I am, as a person.</p>

<p>I spent most of 2015 outside of Canada. I constantly put myself into situations that required calm and quick thinking. I learn by doing and through fucking up, I got better. I learned how to coordinate people and deescalate situations. By the end of the year, I had visited San Francisco, New York City, Ann Arbor, Bonita Springs, Miami, Manchester, London, Berlin and Paris. These adventures showed me the need for real-life learning experiences.</p>

<p>I travelled alone for the most part, which introduced an interesting dynamic. Especially in cities where English was not widely spoken. I got more out of speaking French in Paris than I ever could have during my five years in French class. Rather than making learning a tedious task I was forced to complete, I genuinely wanted to learn. I wanted to speak French with the locals, receive feedback and improve in any way I could while I was there. I got so much out of my week in Paris. I tried to avoid speaking English and learned more French as I needed it while practicing in the real world.</p>

<p>Besides travelling, my freedom also enabled me to find my true self. Throughout my entire life, starting at a young age—I felt out of place. I have always known there was something wrong but I could never figure out what exactly was bothering me. When I moved out of my parent’s house in 2014—their influence over who I was started to fade. In time, this release of pressure allowed me to see myself for who I really am. It took almost two years, but I started to remember various suppressed childhood memories. These memories helped provide a lot of context into why I was so uncomfortable.</p>

<p>On January 1st, 2016, <a href="/posts/ive-got-something-to-share-coming-out-as-trans/">I came out to everyone as a trans woman</a>. I can’t help but wonder how much longer it would’ve taken me to find my true self if I didn’t take this year to explore life. I never thought I would be where I am today, but I can truly say I’m happier than I have ever been.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about dropping out of high school from one year later.]]></summary></entry><entry><title type="html">I’ve got something to share! (coming out as trans)</title><link href="https://noisypigeon.github.io/posts/ive-got-something-to-share-coming-out-as-trans/" rel="alternate" type="text/html" title="I’ve got something to share! (coming out as trans)" /><published>2016-01-01T20:00:00+00:00</published><updated>2016-01-01T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/ive-got-something-to-share-coming-out-as-trans</id><content type="html" xml:base="https://noisypigeon.github.io/posts/ive-got-something-to-share-coming-out-as-trans/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. It explores sensitive subjects and includes a CW for gender dysphoria, mental health, and suicide.</p>
</blockquote>

<p>I have been working on this post, on-and-off, for a few months. I have put a lot of time and effort into this post because I want to make sure I say what I really want to say, how I want it to be said.</p>

<p>It’s big but not bad, so don’t panic.</p>

<p>All my life, I have felt out of place. I always knew there was something wrong but I could never put my finger on what was making me uncomfortable. This spiralled me into years of self-hatred, depression and the constant urge to end my life.</p>

<p>Eventually this urge became too much to bear and I attempted to take my own life. I don’t think I’ll ever forget that night. I remember feeling uneasy but unable to turn around and go home. I was ready to throw everything away when an older man pulled me over the barrier from behind. This experience made me realize I had the power to completely change my life, for better or for worse.</p>

<p>That night I made a promise to myself that I would never let it get to that point again. I had to force myself to make a bunch of difficult decisions, but over time, I learned how to control these feelings and allowed myself to focus on becoming who and what I wanted to be.</p>

<p>I made a lot of changes and yet I still felt out of place.</p>

<h2 id="until-this-september"><strong>Until this September.</strong></h2>

<p>I started to remember various suppressed childhood memories that provided a lot of context into why I was uncomfortable. I remembered getting into trouble because I liked to play with toys that were “intended for girls.” I remember being told that I looked “like a fag” when I pranced around the house too girlishly. I remember being forced to do masculine activities because I needed to be “rounded out.” I now realize that being gendered as a boy has been the source of my discomfort all along. I should have been gendered as a girl. I am transgender.</p>

<blockquote>
  <p><strong>Transgender</strong> (adjective) - Noting or relating to a person whose gender identity does not correspond to that person’s biological sex assigned at birth.</p>
</blockquote>

<p>That feeling is something you’re born with. It’s not my fault, it’s not your fault. It’s a feeling that’s never gone away. In fact it’s only grown stronger. I explored the transgender community, did the research, attended support groups and sought refuge in LGBTQ in Tech’s #trans channel. I met a lot of amazing people along the way and learned so much through their experiences.</p>

<p>I finally feel like I can be happy. Every step towards doing this is terrifying but feels right. Knowing that there is a way to be more comfortable with who I am has changed my mind on how the rest of my life could be.</p>

<p>I have picked the name <strong>Willow</strong> and my pronouns are <strong>she/her</strong>. It’s important to me that everyone uses the pronouns and name I’ve chosen to address me.</p>

<p>I’m on a waiting list for hormone replacement therapy. This means that over time, changes will happen. That said, I will still be me. I will still love programming, hiking, criminology, travelling, etc. Life won’t change in a lot of ways. I’ll still work, study, travel, all of those things.</p>

<p>I know that for some, this will be difficult to get used to but my hope is even if you don’t necessarily <em>agree</em> with this for whatever reason, you’ll at least understand that this is not a decision nor easy for me. It’s not something impulsive. It’s something I need to do to be happy and healthy and I hope you embrace Willow into your life, as she isn’t going anywhere.</p>

<p>Call me if you want to. I’m happy to talk about it.</p>

<p>❤</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about coming out as transgender.]]></summary></entry><entry><title type="html">Interview: “If we want to have a planet to live on that isn’t shit, we need to turn around and fix this”</title><link href="https://noisypigeon.github.io/posts/interview-if-we-want-to-have-a-planet-to-live-on-that-isnt-shit-we-need-to-turn-around-and-fix-this/" rel="alternate" type="text/html" title="Interview: “If we want to have a planet to live on that isn’t shit, we need to turn around and fix this”" /><published>2015-12-10T08:00:00+00:00</published><updated>2015-12-10T08:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/interview-if-we-want-to-have-a-planet-to-live-on-that-isnt-shit-we-need-to-turn-around-and-fix-this</id><content type="html" xml:base="https://noisypigeon.github.io/posts/interview-if-we-want-to-have-a-planet-to-live-on-that-isnt-shit-we-need-to-turn-around-and-fix-this/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. The blog post is a mirror of <a href="https://on-purpose.ca/post/135802615876/willow-bumby-delta-if-we-want-to-have-a-planet">an interview with On Purpose</a> about Delta, my final project at Lighthouse Labs. </p>
</blockquote>

<figure class="attachment attachment--preview attachment--jpg"><img height="852" width="1280" alt="An image with caption: December 2015." loading="lazy" src="/assets/images/posts/interview-if-we-want-to-have-a-planet-to-live-on-that-isnt-shit-we-need-to-turn-around-and-fix-this/tumblr_nzttshsjdw1v05htgo1_1280.jpg" /><figcaption class="attachment__caption" aria-hidden="true">December 2015.</figcaption></figure>

<p>In the rapid-fire world of startups and app development, it’s rare to hear about a project that is only meant to benefit the world, rather than selling out for a big payday. It’s even more unusual to hear about a project built entirely by a 17-year-old high school dropout. Willow Bxmxy is the creator of Delta, an app under development at Lighthouse Labs, that aims to point out the environmental shortcomings of our society using the smartphone and something many of us are familiar with: shame.</p>

<p>Delta has three components: a check-in system like FourSquare except for recycling; a platform to donate to a fund benefitting high-impact environmental charities; and a module that lets users photograph litter and abandoned waste, publicly shame the city or neighbourhood where the litter is located, and schedule a community cleanup. We spoke to Willow about the app, the planet, and why she’s so motivated to give back to the planet.</p>

<p>On education: The education system in Canada, at least in my experience, does not foster the people who enjoy learning…I was thinking why am I here when I could be out there learning from my own experiences, learning from others’ experiences, and travelling, getting lost so I can find my way out of it. In my opinion you cannot learn something as fully in a classroom as you can by doing it…I dropped out of school about a year ago and since then I’ve been travelling. I went to San Francisco, New York, I was in London, Wales, Berlin, and Paris and a few other places here and there and it’s all the same: people have this attitude that littering is okay.</p>

<p>On the idea: I was walking through central Paris along the river and there was a pile of garbage floating in the water that was bigger than this room…and while I was standing there someone behind me chucked a bottle onto the pile. And I realized that we have fostered a culture where littering and causing these kinds of problems with the planet are okay. It’s really sad because nobody really understands that when you drop that coffee cup on the ground that can cause environmental damage, or at the very least take a long time to decompose. So I went back to the drawing board and asked how can technology approach this problem and solve it, or at least try to solve it.</p>

<p>On priorities: Technology in general, most of the time it has been this attitude of how can we make money from this problem? How can we solve this but make some on the side? But I’m approaching this problem from a bit of a different angle. Rather than trying to make money from this I’m going to make as much change and help as many people, help the environment as much as I can…We as a collective human race prioritize making money more than we do the wellbeing of anything other than money…If we want to have a planet to live on that isn’t shit, we need to turn around and fix this. I don’t necessarily think that Delta is the solution but I think it’s a step in the right direction.</p>

<p>On trust: I want to partner up with somebody that has a reputable name because nobody will donate money through this platform if they don’t fully know that it’s going to make its way, in full, to a charity. So I’m looking at ways that I can get across that I have no intention of making anything from this product.</p>

<p>On spreading the love: Traditionally when somebody donates to a charity, they go to that website and donate to it. That charity takes all of it. That charity needs the donation but a portion of that, even if that’s just a few dollars, could go to one that’s trying to get off the ground.</p>

<p>On sponsorship: Ideally I would love to receive some kind of funding for this that would allow me to build this properly, get the team to do it, which would allow us to launch this and get it going because I can do this completely by myself but it would be a lot more fun and lot more effective and a lot faster to get it to where I, and my team eventually, would want it to be.</p>

<p>Delta is expected to launch in early 2016.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="1350" width="1800" alt="An image with caption: January 2016." loading="lazy" src="/assets/images/posts/interview-if-we-want-to-have-a-planet-to-live-on-that-isnt-shit-we-need-to-turn-around-and-fix-this/c__e_dnuiaa1nqg.jpg" /><figcaption class="attachment__caption" aria-hidden="true">January 2016.</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Interview with On Purpose.]]></summary></entry><entry><title type="html">I struggle with finishing projects</title><link href="https://noisypigeon.github.io/posts/i-struggle-with-finishing-projects/" rel="alternate" type="text/html" title="I struggle with finishing projects" /><published>2015-10-23T19:00:00+00:00</published><updated>2015-10-23T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/i-struggle-with-finishing-projects</id><content type="html" xml:base="https://noisypigeon.github.io/posts/i-struggle-with-finishing-projects/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>You may know the story of <a href="/posts/how-i-got-into-software-development/">how I was introduced to programming</a>, but I didn’t touch on some of the problems (and mental blocks) that I still suffer from to this day. We’ve been conditioned to not want to talk about the things we need to improve on. I’ve rewritten this article several times, but enough is enough! It’s time to talk about this. We shouldn’t have to mask our problems to be accepted in a community of smart and creative people. Let’s embrace our downfalls and help each other improve.</p>

<p><strong>Problem</strong>: Occasionally an interesting “app idea” will pop into my head and I’ll immediately feel the need to drop everything and devote my life to building this product. I’ll get engrossed in designing and building this product that I’ll start to dream about what this project could be. I’ll learn so much during the development cycle that I’ll lose interest and move onto something else in the last 10%. This is a <em>seemingly never-ending</em> cycle.</p>

<p>I know, bad right?</p>

<p>There are a few issues with this. I <em>never</em> finish any of my personal projects and I end up beating myself up for not finishing them. The older generation have ingrained the principle that being unmotivated is bad and that we should be ashamed of ourselves when we’re not productive. We end up worrying that our friends and colleagues will make fun of us for lacking the focus we <em>perceive</em> they have.</p>

<p>But news flash…</p>

<p>You’re not the only one. A lot more people experience this than you are lead on to believe. We need to unlearn the unrealistic expectation of being completely focused, 100% of the time. We, or at least I feel the need to isolate myself when I’m not performing as well as I expect myself to. Instead of silencing ourselves, we should talk about our problems so we can receive the support we need to finish what we’ve started.</p>

<p><strong>If you’re tired of starting over, stop giving up.</strong></p>

<p>We have all started a project at one point or another and lost motivation for it midway. It happens. This is a problem when you shelve every project you start. It’s a problem when you beat yourself up for not having the motivation to finish it. It’s a problem when this affects your performance at work. Quitting isn’t always a bad thing, but make sure you’re quitting for the right reasons.</p>

<p>One of the reasons I suffer from this is that I always want to use my newest skills in some way. So when I learn something at work, I want to put it to the test in a project that’s mine. Don’t quit because it’s too hard. Don’t quit because you lost motivation for it. Push through. Seeing people use/contribute to a project I’ve made is one of the most satisfying feelings I’ve ever felt.</p>

<p>But hey, maybe quitting a couple side projects is necessary? Through my own research and experience, I suggest that you consider the following when deciding if you should persevere or shelve a project.</p>

<h3 id="consider-the-following"><strong>Consider the following:</strong></h3>

<p><strong>1.</strong> Why did you start this project in the first place?<br />
It helps to understand why your former self started this project in the first place. Was it a need that has since been filled? Knowing this can help find the motivation to finish it or help you realize that it was unnecessary.</p>

<p><strong>2.</strong> Shelve unnecessary projects.<br />
Continuing on from my first point, I recommend reducing your workload so you can focus more on the projects you actually care about.</p>

<ul>
  <li>Don’t spread yourself too thin. You’ll eventually wear yourself out and find yourself working for hours without completing anything.</li>
</ul>

<p><strong>3.</strong> Write down ideas and come back to them.<br />
If you’re like me, you’ll think of an interesting idea in the middle of your current project. <strong>Write them down</strong> and come back to them after you’ve finished/shipped your current one.</p>

<ul>
  <li>Best of both worlds. (a) You won’t have the anxiety of possibly forgetting the idea. (b) You can also use the new project as motivation to help you finish the project you’re currently working on.</li>
</ul>

<p><strong>4.</strong> Build a minimal viable product and add to it.<br />
I know it’s fun to dream up elaborate features, but try to keep your first version to a minimum. If there is less to do, you’ll have a better chance of finishing the app.</p>

<ul>
  <li>
    <p>Tasks won’t be as daunting if they’re not as monstrous.</p>
  </li>
  <li>
    <p>Don’t worry. You can add more bells and whistles in a future version, if you want to!</p>
  </li>
</ul>

<p>I know it can be fun to dream up elaborate features, but try to keep your first version to the minimum. Leave room for improvements and enhancements. Reducing your fist version to the core components will help make the project feel less intimidating and you’ll finish more in less time.</p>

<ul>
  <li>
    <p>Make a list for features that you’re implementing and another one for features you’d like to implement in the future.</p>
  </li>
  <li>
    <p>Don’t overload yourself.</p>
  </li>
</ul>

<p><strong>5.</strong> Collaborate, ask for help or find someone who can keep you in line.<br />
This is why we’re in this mess. We’re afraid to ask for help. Let others help. I know it’s surprising, but asking for help does not mean that you’re weak or not good something.</p>

<ul>
  <li>
    <p>Collaborating with someone is a good way to share the workload and learn other coding techniques. You’ll have someone who can help keep you on track and <em>most likely</em> get more done in less time.</p>
  </li>
  <li>
    <p>Attend meetups like <em>Side project Sunday</em> in London to meet people who are passionate about the same things as you.</p>
  </li>
</ul>

<p>I hope you enjoyed this article (and maybe even learned something new).</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about personal struggles with finishing tasks.]]></summary></entry><entry><title type="html">How I got into software development</title><link href="https://noisypigeon.github.io/posts/how-i-got-into-software-development/" rel="alternate" type="text/html" title="How I got into software development" /><published>2015-09-20T19:00:00+00:00</published><updated>2015-09-20T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-i-got-into-software-development</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-i-got-into-software-development/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I was introduced to programming by my elementary school’s vice principal. I was in the second grade and twice a week, our VP would bring my class to the computer lab. He would try to teach seven-year-olds CS concepts. The majority of my classmates didn’t show an interest, but I couldn’t get enough. I was fascinated by the idea that I could tell a computer what to do.</p>

<p>He started out by teaching us HTML and CSS. I remember working on countless websites about tigers and lions. I would spend hours of my own time learning as much as I could before the next class. After a few weeks, I was promoted to “teacher’s assistant” and helped explain difficult concepts to my peers. Throughout my junior years, I was exposed to other scripting languages (like JS and Python). He eventually retired and stopped teaching and because nobody else could teach this, the classes were cancelled. But he sparked a flame in me which is responsible for motivating me through the hard parts.</p>

<p>When my house burned to the ground in 2011, my HP notebook was destroyed and I raised enough money to purchase my first Mac.</p>

<figure class="attachment attachment--preview attachment--png"><img height="1174" width="2224" alt="An image with caption: Xcode was the first app I installed on my (used) 2010 white MacBook." loading="lazy" src="/assets/images/posts/how-i-got-into-software-development/a059e9f6-5d45-11e5-84bb-54f3ddb43ccf.png" /><figcaption class="attachment__caption" aria-hidden="true">Xcode was the first app I installed on my (used) 2010 white MacBook.</figcaption></figure>

<p>I fell in love with Objective-C and iOS. My passion for telling a computer what to do extended to mobile. I focused on honing my Objective-C (and design) chops for two years, sifting through tutorials on YouTube and indie blogs.</p>

<p>I submitted an application for Apple’s WWDC scholarship contest for three years and on my third attempt, I was awarded a scholarship for the conference. <a href="https://twitter.com/istx25/status/460935137778077696">I was absolutely ecstatic</a>.</p>

<p>My grandparents drove me to the conference in San Francisco and I learned so much from such an amazing group. I couldn’t fully describe what it felt like to finally feel completely accepted by my peers. All developers. All outliers. After WWDC, I decided to stop chasing a degree and focus on learning. <a href="/posts/why-i-dropped-out-of-high-school/">I dropped out of school</a> and since then I have learned so much.</p>

<p>I honestly owe my career path to that one vice principal. I hope he knows that he single-handedly changed one of his students’ lives.</p>

<figure class="attachment attachment--preview attachment--png"><img height="1024" width="577" alt="An image with filename: BmWSEMgCUAI3j6x.png" loading="lazy" src="/assets/images/posts/how-i-got-into-software-development/bmwsemgcuai3j6x.png" /></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about my origin to software development.]]></summary></entry><entry><title type="html">4 countries in 91 days</title><link href="https://noisypigeon.github.io/posts/4-countries-in-91-days/" rel="alternate" type="text/html" title="4 countries in 91 days" /><published>2015-09-09T19:00:00+00:00</published><updated>2015-09-09T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/4-countries-in-91-days</id><content type="html" xml:base="https://noisypigeon.github.io/posts/4-countries-in-91-days/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>In the last few months away, I’ve lived in 2 continents, 3 time zones, 4 countries and 5 cities. I remember when this was a dream. I remember how my friends and family constantly told me that this trip would never happen. I remember how determined I was to bring this trip to fruition. I have always loved travelling. Experiencing new cultures and hearing foreign languages for the first time is liberating. I’ve travelled a lot in the last twelve months, but I knew that my Europe trip would be different.</p>

<p>My trip started in North America. I flew down to Fort Myers on June 16th. Why you ask? I was helping my friend and colleague move overseas. Over the next ten days, I helped them box up their lives and ship it half way around the world. After boxing up electronics, hoovering carpets and scrubbing floors for a week. We made our way to Miami International to spend nine hours on a plane to Manchester. <a href="https://twitter.com/istx25/status/614550561250263041">We were stoked</a>.</p>

<p>The first few days in England were weird. My brain didn’t have a clue about what was going on. The time difference hit me hard. I was jet lag’s bitch. My sorted out an apartment for us to move into immediately upon arrival. We picked up the keys and headed to Stoke-on-Trent (our new home for the near future). It was a fantastic learning experience for me. This was the first time helping someone setup a household (buying appliances, beds, etc). It will definitely be easier for me when I choose to move out (in Canada). I didn’t do too much travelling in my first month. I worked on Cosmic Labs’ LineHop, met <a href="https://twitter.com/jfkingsley">Jonathan Kingsley</a> and made an account on Tinder.</p>

<p>After my first month in England, I travelled down to London and stayed with a friend in Camden Town. The combination of culture mashing, energy and busyness inspired me. It was my first entry to my “I’d totally live here” list in Clear. I don’t know how to explain it better than saying that I felt at home in London (Camden Town). After my first London dash, I stayed in Stoke-on-Trent for another few weeks. Hungry for a big city, I came back to London for a few more days. I experienced a whole different side of London with my friend, <a href="https://twitter.com/lady_jeanette">Julia Shusterman</a>.</p>

<p>So far, my travels were only in English-speaking countries. My next two adventures brought me to situations I have never been in. This was my first time in country where English wasn’t widely spoken (or popular). Having to scramble for the right German/French word was exhausting. Especially when I constantly failed to pronounce them.</p>

<p>My next adventure was in Berlin. Between the overnight stay at Manchester International, the layover at Cologne and the time difference, I arrived in Berlin around dusk on August 10th. With limited internet access (and German), I made it to my Airbnb in the Friedrichshain. I decided to go exploring on my first night in the city. I couldn’t find any sit-down restaurants and ended up settling for a kebab. I walked up to the counter and started speaking in English. The man behind the counter looked at me blankly. Oh right. German… Quickly trying to know what to say, I mumbled “Kann ich bitte einen Kebab mit Pommes haben?” I honestly thought my pronunciation was good, but his look said it all: “I have no clue what you just said.” Luckily their menu was numbered. I started to frantically point at the pictures and form a peace symbol with my hand. I met a handful of really awesome people (including <a href="https://twitter.com/BDiekert">Bjoern Diekert</a>) and experienced a culture unlike any other. I’m not sure if I would want to live in Berlin (yet), I would love to come back and explore/experience some more.</p>

<p>The night before travelling to Paris, I set several cascading alarms to ensure I would arrive at Berlin-Tegel early. Unfortunately none of my alarms went off and I woke up an hour before my plane was supposed to depart. There were no Ubers in the area and none of the local cab companies spoke English. I was kind of freaking out. Fortunately I remembered the name of MyTaxi (an over advertised taxi app) which may have just saved my ass. I made it to the airport twenty-minutes before departure. I’m not even entirely sure how I made it onto that plane, but I am so happy I avoided the complications of missing it.</p>

<p>I arrived in Paris at 09:30 on August 14th and quickly hopped on a RoissyBus to travel to the city centre. My Airbnb was in Colombes (north of Paris). Navigating to somewhere I’ve never been before is difficult without directions, but I managed. My French is better than my German, but is still really bad. I accidentally exited through the wrong gate at the station and needed to go back in to cross over the overpass. I tried to ask the girl behind the assistance counter for help. She couldn’t speak English and I couldn’t articulate what I wanted in French. After five minutes of trying, we found ourselves laughing. We were both talking, but neither of us could understand each other. I eventually articulated enough French that got her out of the booth, so I could point at the escalator outside. One of my most interesting experiences so far. I explored Paris for the next few days. It was really cool to see La Tour Eiffel, Catacombes de Paris, Musée du Louvre and general city life. For the most part, I enjoyed Paris — I loved the food, the language and the vibe. I added it to my “I’d totally live here” list, but Paris is definitely below London.</p>

<p>I found it amazing that each of these cities have a completely different way of life and culture. If nothing else, this trip was an eye opener. It’s pure ignorance but as someone coming from North America it’s an amazing realization that not everyone speaks English. I’ve merely had a glimpse of Europe and fully intend to come back and explore new countries. As this trip comes to a close and I fly back to Canada on September 14th, I’m starting to plan my next adventure and you’ll be sure to see me explore new corners of the Earth.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about trip to Florida, UK, France, and Germany.]]></summary></entry><entry><title type="html">Dropping out is a big decision</title><link href="https://noisypigeon.github.io/posts/dropping-out-is-a-big-decision/" rel="alternate" type="text/html" title="Dropping out is a big decision" /><published>2015-07-21T19:00:00+00:00</published><updated>2015-07-21T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/dropping-out-is-a-big-decision</id><content type="html" xml:base="https://noisypigeon.github.io/posts/dropping-out-is-a-big-decision/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p><em>“I seldom end up where I wanted to go, but always end up where I need to be” — Douglas Adams</em></p>

<p>Before I decided to drop out of high school, I was chasing a degree in computer engineering and psychology. I was pursuing this major because I loved the topics, but I was pursuing the degree because I was told to. I believed that the only way to success was an expensive piece of paper and the connections that came with it. I believed this until I opened my mind to alternative paths.</p>

<p>The issue with the traditional education system is that we are teaching our youth to hate school — to hate learning. Students spend the majority of their youth in a classroom yet most schools tailor the curriculum for auditory and visual learners only. Because I am a kinaesthetic learner — I struggled to fulfil my teachers demands, but when I embraced my learning style I started to translate auditory and visual lessons into practical knowledge. I no longer had problems with my teachers and started to receive A’s and B’s in most of my classes. I took my education into my own hands because our education system was not prepared to.</p>

<p>I stopped to think about what I really wanted in life and if a degree was really necessary. I came to the conclusion that I was chasing a degree because society told me it was the best thing for me. I didn’t even sit back to think about what I wanted until then. I realized that I am capable of anything and an expensive piece of paper will not help or hinder my chances of success. I have come a long way since dropping out last October, but I still have a long way to go.</p>

<p>I will not let anything get in my way and when it inevitably does. I will find a way around each obstacle. Dropping out is a big decision and is not for everybody, but I urge you to ask yourself if university is the right path for you.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about dropping out of high school and unforeseen side effects.]]></summary></entry><entry><title type="html">How can something be beneath me?</title><link href="https://noisypigeon.github.io/posts/how-can-something-be-beneath-me/" rel="alternate" type="text/html" title="How can something be beneath me?" /><published>2015-05-20T19:00:00+00:00</published><updated>2015-05-20T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-can-something-be-beneath-me</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-can-something-be-beneath-me/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I was recently involved in a bunch of debates that got me thinking. Teenagers want money, but <em>most</em> don’t want to put in the necessary work to make some. I wanted to write about getting started in the workplace and why being picky (about opportunities) is bad.</p>

<p>For starters — you do not need to <em>dropout</em> to get a job as a high school student. Before leaving school, I worked in a computer store making $10.50 selling electronics. It wasn’t glamorous but I made a little and learned a lot. I also worked on a multitude of freelance projects while going to class. Sometimes I was hired to make small apps and others to replace a dead hard drive. I wasn’t making much, but I made enough to ‘go have fun’ on the weekend.</p>

<p>A lot of these brilliant teenage programmers think they’re better than the average joe. Thinking they deserve to start out as a developer for their first job. Back then, I’d agree with you, but now I believe everyone’s first job should be a menial one. Only because it gave me a sense of respect for those who have to work there regularly.</p>

<p>I’ve learned to always listen to what my elder generation(s) have to say. I don’t necessarily act on their advice, but I always hear them out. I listen because even though they may not be right, or know what’s best for you; they will have their own tales to tell.</p>

<p>​So hence the title — how can something be beneath you, if you haven’t even left the ground.</p>

<p>I recommend that you never let an opportunity get away. Experience is experience. Even if the work you had to do was shitty, you would have learned more about something new. You can’t be better than something, until you have something to be better than.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about personal reflection and identity-searching.]]></summary></entry><entry><title type="html">How to add custom colours to UIColor()</title><link href="https://noisypigeon.github.io/posts/how-to-add-custom-colours-to-uicolor/" rel="alternate" type="text/html" title="How to add custom colours to UIColor()" /><published>2015-04-22T19:00:00+00:00</published><updated>2015-04-22T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-to-add-custom-colours-to-uicolor</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-to-add-custom-colours-to-uicolor/"><![CDATA[<p>I have noticed that a lot of iOS (and Mac) developers who need to use custom colours in their applications formulate their palette using:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>let fooColor = UIColor(red: X, green: X, blue: X, alpha: X)
</code></pre></div></div>

<p>As much as this solution works, it creates unnecessary clutter if you’re using this constant in multiple scopes. I use a more efficient solution that allows for less clutter and reduces the weight of the application.</p>

<h4 id="1-create-a-new-swift-class">1. Create a new Swift class.</h4>

<p>Please create a new Swift file (cmd+n =&gt; Swift file) with the name “CustomColorPalette”.</p>

<h4 id="2-add-uicolor-extension">2. Add UIColor extension.</h4>

<p>Now that you have your new Swift file, open it up in your Xcode editor. We will need to import <em>UIKit</em>, in order to extend the <em>UIColor</em> class.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import UIKit
</code></pre></div></div>

<p>With <em>UIKit</em> imported, extend the <em>UIColor</em> class using the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extension UIColor {}
</code></pre></div></div>

<h4 id="3-add-custom-colours">3. Add custom colours.</h4>

<p>Each custom colour can be added to your extension using the following declaration inside of your <em>UIColor</em> extension.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>class func customColor() -&gt; UIColor {
    return UIColor(red: X, green: X, blue: X, alpha: X)
}
</code></pre></div></div>

<p>This method is using the <em>class</em> keyword, so the custom colour can be fetched with the following line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>view.backgroundColor = UIColor.customColor()
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[Swift UIColor convenience how-to.]]></summary></entry><entry><title type="html">Why do I have to be someone I’m not?</title><link href="https://noisypigeon.github.io/posts/why-do-i-have-to-be-someone-im-not/" rel="alternate" type="text/html" title="Why do I have to be someone I’m not?" /><published>2015-04-09T19:00:00+00:00</published><updated>2015-04-09T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/why-do-i-have-to-be-someone-im-not</id><content type="html" xml:base="https://noisypigeon.github.io/posts/why-do-i-have-to-be-someone-im-not/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>So — I don’t know about you, but for most of my life I have been under pressure to be someone I’m not. Family, teachers and peers all want the “best” for you, but won’t slow down to consider if it’s what you actually want. I am terrible at relating to my teenage acquaintances. I would rather converse with adults, as they’re more mature than teenagers. I am constantly receiving flak for surrounding myself with adults. Society is great at pushing expectations and often they’re useless at that. Many believe that everyone must finish high school, go to university, get married and make lots of money to be happy. I do not. I believe in order to be happy, I must fund experiences, learn lots, be passionate and never settle.</p>

<p>I have been on this planet for sixteen years and most would take my blossoming existence as inexperience. I let my optimism drive me forward, without fear of failure because I am determined that there are more doors to be opened. Throughout my life, I have witnessed so many people deprive the world of the chance to know them because of their fear of rejection. I used to chase acceptance until I realized what I was doing. I stopped because my once-original piece, was becoming a generic photocopy of someone else.</p>

<p>I am very strategic and love to think ten steps ahead of everyone else. Occasionally difficult predicaments will come about, forcing me to make difficult decisions. I have always gone with the option that seemed “risky” in the moment, but brought more success than staying on the safe-side ever could. Here are a couple of things I would recommend to anyone, hoping to find happiness, passion and experiences:</p>

<ol>
  <li>
    <p>Reflect on the now. I know so many people who’re frozen in their inaction for fear of the consequences. They aren’t sure of what’s going to happen and they’re too shy to open themselves up to the possibilities. You should ponder why you’re doing what you are and if you’re not satisfied, venture off into a direction that may help you achieve what you’re after.</p>
  </li>
  <li>
    <p>Do not take “no” for an answer. For a large chunk of my life, I was a breathing punching bag. Until I realized I was in control of what happens to me, nothing changed. I have learned to say no, which can be difficult to do in some situations. Don’t ask for permission to live your life because after all, it’s your life. Don’t live the life your family want for you, live the life you want for you.</p>
  </li>
</ol>

<p>So, stop chasing someone else’s dream and put in the effort to find your own. Life is short and I definitely do not want to be on my death bed regretting my inactions.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Egg posting before the egg knew she was an egg.]]></summary></entry><entry><title type="html">Formal education is busted</title><link href="https://noisypigeon.github.io/posts/formal-education-is-busted/" rel="alternate" type="text/html" title="Formal education is busted" /><published>2015-04-07T19:00:00+00:00</published><updated>2015-04-07T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/formal-education-is-busted</id><content type="html" xml:base="https://noisypigeon.github.io/posts/formal-education-is-busted/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>Education is in disarray. Our governments have endorsed a system whose structure has not evolved with time. Our students’ “lack of effort” is not the predominant issue causing poor performance. Poor performance is a side effect of deeper societal and leadership issues that have not been addressed. I have talked with a multitude of students from all age groups. I am going to address four issues we find important.</p>

<p><strong>Unquestioned Requirements.</strong></p>

<p>We have had societal expectations drilled into our minds, since most can remember. These expectations are only effective when they aren’t questioned. Diplomas are not golden tickets to success, like they have been hyped up to be. Employers do not care what you took in high school and in most cases students aren’t in control of what courses they’re enrolled in.</p>

<p><strong>Traditional Leadership.</strong></p>

<p>Due to our leadership problems, our education system has not received many growth opportunities. As time has evolved, the traditional leadership has not. We’re supposed to arrive on time and regurgitate “knowledge” for hours. I believe we need an education system that captivates and inspires the age-group. A system that teaches curriculum that is both relatable and relevant. We need an education system that adopts multiple learning techniques.</p>

<p><strong>Learning Spaces.</strong></p>

<p>Every school is the same, featuring classrooms, labs and gymnasiums. Just like every student is the same, right? Nope. Municipalities should build new schools featuring versatile learning environments, so every student has a fair chance. Introducing environments for auditory learners, providing spaces where students can listen to lectures; providing computers to visual learners, allowing growth through visual stimulation; or if you’re like me, a space for kinaesthetic learners to learn through doing.</p>

<p><strong>Bullying.</strong></p>

<p>I believe education has become too engrossed in politics. Students are always fighting for attention, <em>to be the best</em>. The attention seekers have always caused distress in the hearts of the lower-class kids. The ones who are bullied either do not care about the trends, or can’t keep up with them. Schools need to stop bullying and provide a space for everyone to be comfortable (no matter what sexual orientation, gender, religion, skin-colour, or language you speak).</p>

<p>I believe if our leaders made these changes to our education system we would better our society and future generations.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about formal education.]]></summary></entry><entry><title type="html">Why I enjoy startup life</title><link href="https://noisypigeon.github.io/posts/why-i-enjoy-startup-life/" rel="alternate" type="text/html" title="Why I enjoy startup life" /><published>2015-04-03T19:00:00+00:00</published><updated>2015-04-03T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/why-i-enjoy-startup-life</id><content type="html" xml:base="https://noisypigeon.github.io/posts/why-i-enjoy-startup-life/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>So, you think I am crazy, eh? That I would leave a stable career behind to venture out into untested waters? Good. Yes — I’ve heard the statistics about startup “failure” and that there is a good set of odds against the industry. However, there are two types of people in this world:</p>

<blockquote>
  <p>“A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty.” — Winston Churchill</p>
</blockquote>

<p>Starting a company was never meant to be easy because if it were, more people would be doing it. My family, but also most of our society, does not understand unconventional pursuits and well, nonconformists. I am constantly antagonized about the authenticity of my career and that I should get a “real job”. I have worked for many people in the past, in menial jobs, but also in highly technical positions at companies around North America. I have always found myself aspiring to lead, not be led. I love working in small high-intensity teams, working to find innovative solutions to complex problems and implementing them. Here are my three reasons why I believe startups are better work atmospheres than corporate endeavours:</p>

<ol>
  <li>
    <p>CEO? Developer? Designer? We’re all the same. Since leaving high school, I have worked for over seven different startups building products in mobile, desktop and web mediums. These experiences have shown me the good and the bad of the startup cult and why certain leadership structures are more effective than others. Five of the seven startups I have worked for built their business with a strong foundation made of healthy team relationships and employee equality. The best of them did not hold pretentious CEOs who disparaged employees with demeaning comments, but jumped into the trenches with the team, working with the team to accomplish any task on hand. I absolutely adore a good ol’ positive culture where team is family. Work like a team and have fun like a team.</p>
  </li>
  <li>
    <p>Less overhead. I love working with small compact teams where responsibility is shared. In compact intensity-driven teams, communication is vital to our success. Many look at having small teams as more responsibility, but I look at them as an opportunity to increase productivity and to bond with the team. Between not having enough funding to pay more than a few people, to choosing to take this direction; I have worked for three startups that shared similar ideals to my own, which in part is what I look for in job extending startups.</p>
  </li>
  <li>
    <p>Build your skills. Many of the corporate opportunities that have been extended to me, often ask for seasoned professionals, with university and previous work experience shining like a golden plaque, whereas many startups send prestigious experience and university attendance to the backseat, allowing for determined and driven people to fill the room. At the end of the day, startups want someone who will pull their weight and if this means enthusiastically learning new skills, that’s okay. Your university degree may help you get through the front door, but it won’t help you close a job offer if you’re not a quick learning, enthusiasm dripping, determined goon who won’t stop until perfection.</p>
  </li>
</ol>

<p>All-in-all, I prefer to work for and with startups because I prefer the vibe and attitude of sharing responsibilities in a way that allows small intensity-driven teams with excessive productivity to thrive. Maybe you should consider leaving your comfortable cubicle for a career that entails greater risks for greater rewards. You don’t have to start something to help finish it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about working at and operating a startup.]]></summary></entry><entry><title type="html">Upcoming projects at Cosmic Labs</title><link href="https://noisypigeon.github.io/posts/upcoming-projects-at-cosmic-labs/" rel="alternate" type="text/html" title="Upcoming projects at Cosmic Labs" /><published>2015-04-01T19:00:00+00:00</published><updated>2015-04-01T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/upcoming-projects-at-cosmic-labs</id><content type="html" xml:base="https://noisypigeon.github.io/posts/upcoming-projects-at-cosmic-labs/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. It has been altered to obscure direct mentions to other people due to safety concerns.</p>
</blockquote>

<p>Hello everyone! I would like to talk about a bunch of awesome projects that we are working on at Cosmic Labs. We are a tiny team of ebullient software engineers focusing on building intuitive software products. We are here to share some insight on upcoming projects that we are planning to engineer over the next twelve months. So let’s get on to the important bits of information!</p>

<h4 id="moments">Moments.</h4>

<p>Over the past five months — We have been working on a product that will address many of the complications of video blogging on an iPhone. We have received lots of awesome feedback which has allowed us to change directions and produce a unique product for iOS. Moments is now a unified recording suite for iPhone, built by iPhoneographers, for iPhoneographers. Simply focus on recording your beautiful content, while we handle the editing and uploading for you.</p>

<h4 id="uniform">Uniform.</h4>

<p>We are building a product that we have codenamed “Uniform” within our team. <em>Uniform</em> will allow users to organize photographs and add various pixel-art filters. It will initially be for iPhone, with plans to extend to iPad. Many love this style of photography for use as avatars and in social profiles. Coming soon to an app store near you!</p>

<h4 id="echo">Echo.</h4>

<p>Have you ever been in a call and had a support representative ask you to spell something out? A name? A serial number? Echo will enable users the ability to intuitively write out NATO phonetic terms in a quick and easy fashion. It will initially be for iPhone, with plans to extend to iPad and the Mac. More information coming soon!</p>

<h4 id="foxtrot">Foxtrot.</h4>

<p>We are building a product that we have codenamed “Foxtrot” within our team. Foxtrot is a product that will attract cinematographers and public speakers alike who are looking to better their level of confidence and public speaking ability. We’re going to engineer interactive exercises that feel like games, analyzing video and audio metadata that intelligently tracks confidence levels in our users.</p>

<p>We are building ConfidenceKit as an open-source framework for developers to extend off of our platform or build their own! Go and star the repository on Github! ConfidenceKit will be the brain of Foxtrot and we are super passionate about the product!</p>

<p>Our goal is to finish and publish both Echo, Uniform and Moments to the App Store before WWDC, as Tapbots have said it best, “We never want to be in the middle of a huge update or new app through the summer because WWDC has a tendency to derail us with significant OS changes.”</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Outline of projects at Cosmic Labs.]]></summary></entry><entry><title type="html">New York Nuances</title><link href="https://noisypigeon.github.io/posts/new-york-nuances/" rel="alternate" type="text/html" title="New York Nuances" /><published>2015-03-30T19:00:00+00:00</published><updated>2015-03-30T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/new-york-nuances</id><content type="html" xml:base="https://noisypigeon.github.io/posts/new-york-nuances/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I travelled to New York as part of my adventure to find a new city to call home. My journey began on December 4th 2014 when I woke up at four in the morning to travel six thousand miles by air from YVR → Sky Harbour → Newark. I arrived at my Airbnb in East Williamsburg, with help from my Uber driver at roughly nine in the evening. I was staying in a smallish sized Artist Loft where pizza is expensive and hipsterism is rampant.</p>

<p>I was in New York for a week, eagerly waking up every morning to venture out in the brisk winter city. My bedroom held a loft bed, with a rickety old ladder climbing up to the elevated oasis. Every morning I climbed down to a distinctive squeak, got dressed and packed my bag for the trek ahead. I can not really say that I loved the vibe, but I can definitely say that I loved the food scene. On my way to the <strong>M</strong> train, I would stop at a food truck on Flushing and Broadway for a bacon and egg sandwich. I found that New York has a distinctive gap between <em>amazing+expensive</em> and <em>amazing+cheap</em>.</p>

<p>I have to admit, I loved the music scene in New York and no… it wasn’t in some fancy venue. It was on a subway or in a train station. I must’ve given fifty dollars over the week to talented musicians and singers. It was amazing to see, especially when some of the musicians played with just a pair of drum sticks and a few buckets.</p>

<p>Whilst exploring Times Square I was approached by a lady selling tickets to a pair of comedy clubs for just twenty dollars. I coughed up the money and made my way over to the first venue and I have to say –– I cried… in laughter. Between the food and buskers, this was definitely one of my other favourite experiences in the city.</p>

<p>One of the reasons that I was not too fond of New York was the anger in the people. I have travelled to San Francisco, Seattle, Edmonton and lived in Vancouver, but I have never seen behaviour like I have in NYC. I was waiting inside the Flushing Ave station, to purchase a weekly pass when I noticed a man was making a commotion because the automated machine did not print out his ticket. The man angrily walked to the front of the line, budging in-front and asked the officer in a harsh tone “Why wasn’t my ticket printed?”, the transit officer behind two-inch tempered glass politely asked him to wait in-line “like everyone else”. He did not like this, because he formed a pair of fists and punched the window, the entire booth shook and then he proceeded to run up the staircase adjacent to the ticket machines to jump on a train. I witnessed two other situations similar to this one and I was not impressed.</p>

<p>I experienced New York in a couple of ways, but I am nowhere near finished. I have taken helicopter tours and climbed up to the eighty-sixth floor of the Empire State building, but I would like to return in the future to explore some of the other districts. I found the big apple was exhausting after the first couple of days. Cultural, exhilarating, but exhausting. For me, New York is just another vacation spot and definitely not my future home. If you enjoyed this article, I’d really appreciate a recommendation.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about New York.]]></summary></entry><entry><title type="html">Never give up</title><link href="https://noisypigeon.github.io/posts/never-give-up/" rel="alternate" type="text/html" title="Never give up" /><published>2015-03-25T19:00:00+00:00</published><updated>2015-03-25T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/never-give-up</id><content type="html" xml:base="https://noisypigeon.github.io/posts/never-give-up/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>. It explores sensitive subjects and includes a CW for depression, mental health, and suicide.</p>
</blockquote>

<p>Statistics have shown that depression and mental illness is plaguing our youth. I am writing this article because I would like to speak up about my own personal experiences and why you will make it. I remember being emotionally charged with frustration and discouraging thoughts. I was mentally stonewalled, lacking any ability to think rationally about my future. I was ready to drop — I couldn’t handle the pressure that felt like a high-rise on my shoulders.</p>

<p>I can clearly remember a direction changing experience that I encountered in January 2014. It was starting to get ridiculously difficult to continue because I was being bullied at school and ridiculed at home. One evening, after my father went to work and my mother went to sleep — I decided to take a walk into town. I made my way to an overpass in the midst of the city, positioned over a highway. I walked over to the middle of the pass and stood on the sidewalk with vehicles roaring underneath me. I remember feeling the wind flow through my hair and the raindrops under my fingertips. I was so calm, too calm. It almost didn’t feel real.</p>

<p>My moment of serenity was interrupted by a group of early rising teenagers who yelled “Oh hey! There’s Bxmxy”, mocking and laughing at me while they walked off of the bridge. I was pulled towards the maintenance platform, like there was a rope around my torso. My entire life was flashing before my eyes and my life was in my hands.</p>

<p>I wanted to believe that my situation would improve; that I was loved; that there was someone waiting for me, but I couldn’t materialize those dreams. I was ready to die because I was tired of being thrown around and yelled at for no reason. I knew that I wasn’t perfect, but I could not think of any reasons to make my situation okay. I was standing on the edge of the maintenance platform, one step would take all of the pain away. My brain was screaming no, but my heart was shrieking yes. I started to feel my heels lifting off the ground, weight shifting forward. I was going. I was completely free-falling, when someone from behind grabbed my jacket at the last second. My entire body was limp when he dragged me over the railing. I remember the man muttering, “You’re too young to die, it will get better”, when I was laying on the pavement.</p>

<p>I never received the opportunity to thank the man, but I am grateful that he was walking his dog. I doubt this man left his house thinking he was going to save a life, but I am sure he was happy he did. After this experience, I started to take initiative in my life, changing everything I didn’t like. I moved out of my parents’ house, left school and have started to pursue the path I was meant to be on. I want everyone who is in a similar situation or who is struggling with suicidal thoughts, depression or mental illnesses to aspire to be resilient.</p>

<p>There is no-one else exactly like you — so don’t deprive the world of the chance to know you. You are you. Embrace it. Don’t let bullies at school bring you down or parents deride your ambitions.</p>

<p>Stay strong.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about mental health struggles.]]></summary></entry><entry><title type="html">Serendipitous San Francisco</title><link href="https://noisypigeon.github.io/posts/serendipitous-san-francisco/" rel="alternate" type="text/html" title="Serendipitous San Francisco" /><published>2015-03-20T19:00:00+00:00</published><updated>2015-03-20T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/serendipitous-san-francisco</id><content type="html" xml:base="https://noisypigeon.github.io/posts/serendipitous-san-francisco/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I have been to San Francisco twice over the past year. I was awarded a student scholarship that allowed me to attend Apple’s world wide developer conference in 2014. During my first trip to the bay area, I did not receive that many opportunities to explore San Francisco because I was busy with sessions, labs and networking events for WWDC.</p>

<p>I was staying in the Civic Centre Holiday Inn with my grandparents, which was roughly two kilometres away from Moscone West. On the first night of the event — I left my hotel room at two thirty in the morning, walking alone to the event centre to line up. On my way, I couldn’t help but notice that there was a man following me, gripping a metal baseball bat. I started to quicken my pace, as did he which resulted in a fast paced run down Mission street. I flew around the corner and dove into the massive WWDC line. Maybe I dropped my EarPods and he was just trying to return them? Probably not…so I did not want to let him get close to me. This was my only negative experience while at WWDC.</p>

<p>Later that year — I was supposed to check in at CalHacks, a hackathon held by UC Berkeley. The school decided to discriminate against minors, blocking my entrance. I wasn’t allowed to attend and UC Berkeley would not issue a travel reimbursement — so I decided to make an adventure out of the mishap.</p>

<p>While exploring San Francisco in October — I was staying in a startup house directly in the heart of the Castro. Between my weeklong trip, I slept on their couch and in one of their extra bedrooms. I was surrounded by awesome developers and designers who were anxiously working on their projects with sticky notes everywhere. I was leaving the house, early in the morning to explore different districts and landmarks while returning to the house around eleven at night. I explored all day and night, without problems.</p>

<p>I really enjoyed the vibe in San Francisco. I arranged to meet a variety of people I’ve met on Twitter and meetups around the bay. San Franciskies are upbeat, spontaneous people who know how to have fun. These people made my time in SF amazing and to say the least — it was one of the craziest weekends in my life. I really felt at home because everyone is super friendly, unique and filled with happiness. If you enjoyed this article, I’d really appreciate a recommendation! ☺</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about San Francisco, California.]]></summary></entry><entry><title type="html">Vancouver Vibes</title><link href="https://noisypigeon.github.io/posts/vancouver-vibes/" rel="alternate" type="text/html" title="Vancouver Vibes" /><published>2015-03-14T19:00:00+00:00</published><updated>2015-03-14T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/vancouver-vibes</id><content type="html" xml:base="https://noisypigeon.github.io/posts/vancouver-vibes/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I moved to Langley in February of 2014, coming from a small town out in the Fraser Valley named Chilliwack. Chilliwack is roughly two hours away from Downtown Vancouver; so before my move, the only time I would receive the opportunity to go downtown was when I had sleepovers over at my grandparents house. My cousins and I would come along for the adventure, travelling downtown using the SkyTrain and crossing the harbour via SeaBus to eat fish and chips. I have been living in Langley for just over a year and have studied, worked and explored most of the surrounding metropolitan areas.</p>

<p>I have been introduced to many people while working at startups, studying at public schools and attending different conferences and meetups. I found that a lot of the inhabitants of Vancouver are conservatives, with the exception for a few really awesome people. I was doing some digging and came across an article from 2012 which reads:</p>

<blockquote>
  <p>Recently, Vancouver Magazine published an article with the title “Vancouver Men Suck.” I won’t get into the details of the article, but basically it suggested that men in this city are lazy, poorly dressed, unambitious goons who have lost the art of chivalry. Not surprisingly, Vancouver men responded in droves, claiming that Vancouver women are the ones who suck because they are pretentious, shallow, unfriendly gold diggers” — @thiscitylife</p>
</blockquote>

<p>As this snippet is quite revealing, showing that Vancouver is a cold, harsh place to meet new people; I would have to agree. Many of the residents may be polite, but that does not mean that they are friendly. Vancouverites are very traditional, and barely ever go for the offbeat path. I was reading through comments from foreigners, one gentleman’s remarks got my attention.</p>

<blockquote>
  <p><em>“It is very hard to meet people as they are very reserved or they believe that they are some kind of special entity of this planet, so nobody is good enough for them. Worst of it all is that it is just a head game of their own, because a lot of them look very lonely and unhappy.” — @Gtiransty</em></p>
</blockquote>

<p>I wholeheartedly agree, as I have noticed while travelling on public transit that the average Vancouverite has headphones in, displeasing facial expressions on and exuding their discomforting vibe.</p>

<p>All-in-all, I am itching to leave Vancouver. Yes, it’s quite safe and has awesome food, but the majority of people living here are conservative, unhappy individuals who are agitated by the world. I am looking for a more upbeat, individualistic and happy community that embraces diversity, innovation and change.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about Vancouver, Canada.]]></summary></entry><entry><title type="html">Searching for a new city to call home</title><link href="https://noisypigeon.github.io/posts/searching-for-a-new-city-to-call-home/" rel="alternate" type="text/html" title="Searching for a new city to call home" /><published>2015-03-10T19:00:00+00:00</published><updated>2015-03-10T19:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/searching-for-a-new-city-to-call-home</id><content type="html" xml:base="https://noisypigeon.github.io/posts/searching-for-a-new-city-to-call-home/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I established that I really dislike staying in the same place for long, building up daily routines or doing “normal day-to-day activities”. I have never been one to “go with the flow”, as I can never hold my tongue when I see an inferior solution being enforced. I have interests in technology, architecture, psychology and culture, but the problem that I face is every little thing that was once unfamiliar, is now known to me like the back of my hand. I have an inner passion for exploring, seeing foreign things and getting lost in new places.</p>

<p>At the end of the summer in 2014, I realized that Vancouver was starting to lose its charm. I am no longer exhilarated by the culture, people and vibe that western Canada provides. I set myself on a journey to find a new city, somewhere else around the world that provides me with the satisfaction I am looking for. I have been curating and refining a list of destinations that I am going to visit before my eighteenth birthday in pursuit of finding a new city to call home.</p>

<p>My list of destinations are as follows:</p>

<ul>
  <li>Montreal, Canada</li>
  <li>Bordeaux, France</li>
  <li>Berlin, Germany</li>
  <li>Prague, Czech Republic</li>
  <li>Oslo, Norway</li>
  <li>San Francisco, United States</li>
  <li>London, England</li>
  <li>Vienna, Austria</li>
  <li>Istanbul, Turkey</li>
  <li>Stockholm, Sweden</li>
  <li>New York, United States</li>
  <li>Cape Town, South Africa</li>
  <li>Zadar, Croatia</li>
  <li>Toronto, Canada</li>
</ul>

<p>As would be expected, there are an infinite number of other destinations that I have interest in visiting, but from my own research, these fourteen destinations could potentially house my future. Since the summer, I have visited San Francisco (in October) and New York (in December). <del>You can watch my daily video blogs on my YouTube channel</del> and with just over two months in between travels, it’s time to go again.</p>

<p>My next destination is going to be Montreal. I have found that Quebec holds a unique Canadian culture, having various interesting districts, people and a foreign language. I am planning a trip that consists of flying to the city from YVR and staying in a Airbnb for a couple weeks to experience the city while I work and explore.</p>

<p>Maybe I’ll find that place that makes my <em>clock tick clearer</em>, that’s the main objective of these travels. To find somewhere I’d like to call home.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about trying to find a new home.]]></summary></entry><entry><title type="html">How I stay motivated</title><link href="https://noisypigeon.github.io/posts/how-i-stay-motivated/" rel="alternate" type="text/html" title="How I stay motivated" /><published>2015-03-05T20:00:00+00:00</published><updated>2015-03-05T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-i-stay-motivated</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-i-stay-motivated/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I indubitably believe that motivation is not a global switch we need to flip within our minds, but a compass that we should use to find where and what we have an appetite for. I am constantly questioned by my peers, superiors and family about how I keep myself motivated. My key to triumph is only doing things that I want to do, because one can not be motivated to act if they’re not passionate about the action. I strategically plan where and what I am going to be doing and if the demand changes, team shuffles or new ideas surface — I have no issues with abandoning my previous plans to pursue the greener pathway.</p>

<p>I have curated three points that I believe everyone should apply within our own lives to continually stay motivated and work towards happiness.</p>

<ol>
  <li>
    <p>Befriend enthusiastic and positive people. I am a strong believer that one’s environment is a vital part to staying motivated and feeling fulfilled. We tend to conform with negative people that gradually destroy self-esteem and diminish self-confidence. Gradually remove yourself from the negative circle and usher in a more positive group of people in your life who want you to succeed and would genuinely enjoy helping you achieve your ambitions.</p>
  </li>
  <li>
    <p>Follow your heart. I have established that too many people are assenting to demands shaped by society to achieve nothing but acceptance. My advice would be to remind yourself that this is your life and to always listen to that internal instinct that summons uncommon and noteworthy adventures. Live a life where you have regrets for actions, not inaction. You might be told that you’re erratic or insane or that you won’t succeed. Let them talk and use their harsh expressions to motivate and galvanize you even further to corroborate your decisions and prove everyone wrong.</p>
  </li>
  <li>
    <p>Fuel your inspiration. Inspiration, for me, comes from others who have achieved what I want to achieve, or who are currently doing it. I read other blogs and watch short films. <a href="https://www.youtube.com/user/benbrown100">Ben Brown</a>, for example, motivated me to start my own video blogging channel which I have been updating constantly while travelling. Find something or someone that will continuously inspire you to move forward.</p>
  </li>
</ol>

<p>Use these to motivate yourself to improve your work ethic, go further or anything else that your heart desires. I have always looked to the future for direction while learning from my past to reduce the chances of making the same mistakes. If your heart tells you something, listen. It’s the only thing that knows you better than your brain.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about staying motivated through personal challenges.]]></summary></entry><entry><title type="html">How I get work as a high school dropout</title><link href="https://noisypigeon.github.io/posts/how-i-get-work-as-a-high-school-dropout/" rel="alternate" type="text/html" title="How I get work as a high school dropout" /><published>2015-02-27T20:00:00+00:00</published><updated>2015-02-27T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/how-i-get-work-as-a-high-school-dropout</id><content type="html" xml:base="https://noisypigeon.github.io/posts/how-i-get-work-as-a-high-school-dropout/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>Contrary to popular belief, dropouts can get jobs, in fact — they can be placed in very good software engineering and design positions, just as quickly as graduates. I recently published my article talking about <a href="/posts/why-i-dropped-out-of-high-school/">why I dropped out of high school</a>, which among other things received a lot of criticism. I dropped out of the eleventh grade on October 7th, 2014 and immediately started working for a startup as a designer in a senior capacity. I would like to crack the code, which has helped me and other individuals around the world get placed in colossal roles throughout the workforce.</p>

<p>When I was planning my exit strategy out of high school, I prepared a plan of how I was going to manoeuvre myself from point A to point B. I planned to work in a software-based startup for a couple of months, honing my real-life work experience and add entries to my curriculum vitae, while still looking into the future with plans to abandon my stable career and start my quest through the journey of entrepreneurship. The day that I filed my papers at the school and was officially labelled as a dropout, I was approached by startups via phone, email and in person at meetups in the community. As a few of these start-ups saw my education status as a turn off, more than seventy-five percent of those who reached out to me still requested either a phone interview or an in person conversation.</p>

<p>As some may know, I am an ENTJ. Most of the population is unfamiliar with the Myers-Briggs personality types, but there are sixteen different types broken down into four different categories: Analysts, Diplomats, Sentinels and Explorers. My four letter acronym stands for: Extroversion, Intuition, Thinking and Judgement. 16Personalities.com defines an ENTJ as: Bold, imaginative and strong-willed leaders, always finding a way — or making one. Knowing these traits within myself has allowed me to strengthen my weaknesses and use my strengths accordingly. ENTJs are known to be charismatic, inspiring, efficient, self-confident, strong-willed, energetic and strategic. Many people, including myself have a passion for Psychology and I have been studying the social science behind human behaviour and how certain types will interact with each other. This knowledge has allowed me to be more prepared for interviews and interactions with interviewers, chief executives and in normal day-to-day conversations.</p>

<p>And with that knowledge in mind, I would like to expand on seven characteristics people can adopt to improve their probability of getting placed in prestigious positions:</p>

<ol>
  <li>
    <p>Self-confidence. This characteristic is very important because as society stands, dropouts are in the minority. We have to confidently and fearlessly express our ideas, opinions and demands in a fashion that comes off as confident, not arrogant. Work to improve speech patterns, tone and try to avoid using syllables like “um” or “uh”.</p>
  </li>
  <li>
    <p>Charisma. This distinctive trait is built off of the last characteristic, as this allows us to exude confidence in how we speak, walk and expose ourselves to others. The most charismatic people can make anyone feel special, and interpersonally relate to anyone. Try to be genuinely engaged in every interaction.</p>
  </li>
  <li>
    <p>Fearless. “Do the things you fear, and the death of fear is certain.” — Ralph Waldo Emerson. This quote is imperative as it reads the truest, yet hardest task. I would like to challenge you to leave your comfort zone and be optimistic of success. Confidently express what you have done, what you have failed at doing and what you’ve learned through these experiences. Be proud of these achievements.</p>
  </li>
  <li>
    <p>Optimism. The ability to show employers that one is filled with optimism is an amazing trait that will get people very far if they have learned how to display it. Optimism is the ability to look at something, see solutions before the problems and work towards the success rather than complain that the problem exists in the first place. I would recommend reading last weeks article about <a href="/posts/five-ways-to-convert-to-optimism/">converting to optimism</a>.</p>
  </li>
  <li>
    <p>Teachable. Employers do not want egotists on their team. The best way to win an employer over is to show that you can recognize when you’re wrong, listen to the correction and apply what you have learned. There are many ways you can instigate these situations to show employers you can be corrected and taught.</p>
  </li>
  <li>
    <p>Persuasion. There is an art behind persuasion, allowing you to give the person a choice, but steer them in a preferred direction. You do not want to be known as a manipulator, so keep this within reason.</p>
  </li>
  <li>
    <p>Greatness. As this characteristic is simple in theory, it can be difficult to accomplish. Be the best at something and be so good, they can’t ignore you. Whether you are just starting out in a new career or trying to get to the next level, the main goal should be to master a craft to the point where people can’t help but notice. This will go further than any degree obtained or university attendance recorded.</p>
  </li>
</ol>

<p>I have been using these characteristics and principles to manoeuvre myself through careers in the technology industry. Now it’s your turn, do you want to get hired into technology-based career without employers discriminating against your education status? Research, learn and act to become better at those seven characteristics and others to reduce the chances of being discriminated against in the interviewing office.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about career challenges as a high school dropout.]]></summary></entry><entry><title type="html">Five ways to Convert to Optimism</title><link href="https://noisypigeon.github.io/posts/five-ways-to-convert-to-optimism/" rel="alternate" type="text/html" title="Five ways to Convert to Optimism" /><published>2015-02-23T20:00:00+00:00</published><updated>2015-02-23T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/five-ways-to-convert-to-optimism</id><content type="html" xml:base="https://noisypigeon.github.io/posts/five-ways-to-convert-to-optimism/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>The majority of the human race is so utterly afraid of “failure”, that it scares most of the population away from pursuing novel and innovative lifestyles because of the life-shaking possibility of “failing”. I’ve talked to over four hundred people about my decision regarding dropping out of school and seventy-five percent of them made the same negative remarks; this consistency does not make what they’re saying correct, but makes them victims to polluted mindsets and fear.</p>

<p>I would like to write about some of the challenges that I personally faced and overcame. I would like to make a few points that anyone can implement, today — to improve their outlook on life, become more optimistic and start to play the game in their favour. I strongly believe that becoming a successful entrepreneur and a “positive contributor to society” as those more traditional types would convey is not based on what degrees you’ve obtained or universities you’ve attended, but something that isn’t taught in a lecture hall.</p>

<p>For most of my life I was surviving in a desolate mental state, living in a environment where I was isolated from my peers because of my differences and harassed for my weaknesses. I was never accepted for who I was, or at least it felt that way while attending my early years of school, church and at home. These experiences spiralled me into a state of depression. I believed that the situation would never improve and was at the point where I attempted to take my own life. I had a moving experience one evening when an older gentlemen pulled me over a barrier at the last second. Moving there onward, I decided and held myself to changing my life into something that I wanted it to be. This indispensable experience changed my outlook on life, giving me the drive and determination to do something, to change and most importantly place me in the right direction.</p>

<blockquote>
  <p>The only way we can fail, is if we refuse to continue</p>
</blockquote>

<p>Since that experience in January 2014, I have made a tonne of progress towards my end goal. I am starting to sculpt my life into something that I truly want it to be, rather than acting, only to satisfy those around me. Over the past year, I’ve learned that the only person who can force me to do something, is me. With this in mind, I would like to propose a few key points that if applied can improve one’s mindset and outlook on success, failure and life in general.</p>

<ol>
  <li>
    <p>Search for solutions, rather than being puzzled by the problems. I constantly find myself searching for these solutions rather than being caught up by the problems. This characteristic isn’t easy to master, but anyone with the determination to change, even small bits at a time will be able to start recognizing solutions and starting immediately.</p>
  </li>
  <li>
    <p>Surround yourself with positive people. I find that this step is incredibly important, yet the most difficult. We all have toxic relationships that we wish would succeed. I’ve learned time and time again that these parasitic individuals cause nothing more than heartache in the long term. Gradually move yourself away from the negative crowd and usher in more positive people in your life.</p>
  </li>
  <li>
    <p>Inspire yourself with a smile and motivational reminders. I believe that one needs to be objective, thick-skinned and work towards being more self-motivated. Someone I respect once told me, that I should note all the negative remarks that people have said to me. Reading over these remarks can bring that little boost of motivation I need on days where I feel that I am not making enough progress or something goes wrong.</p>
  </li>
  <li>
    <p>Work on the things you can control. I know a lot of people who make themselves miserable for things they have zero control over. Pessimism breeds indecision. Every minute spent worrying guarantees nothing but less time to enjoy what life has to offer. I would recommend trying to realise that you can’t control everything, but start to choose the best decision by analyzing your life, finding the things you don’t like and fixing them, rather than complaining about the existence of the problem.</p>
  </li>
  <li>
    <p>Focus on the now and work towards the future. The most important step is focusing on the now, allowing you to work towards your future. I used to act like a victim and was living in the past. This was obstructing my view on where I wanted to be. Coming from a past where I’ve been directly affected by someone’s actions; I know that letting go of the pain is tremendously difficult, but this is a vital step towards being more optimistic. “Change is the law of life and those who look only to the past or present are certain to miss the future.”—JFK</p>
  </li>
</ol>

<p>If there is anything that you could take from this article, it’s that nothing is permanent. We will always be able to prevail with enough dedication and diligence, no matter what the situation is, the country we’re from, the colour of our skin or family we’re born into. Work towards being the person you want to be, rather than focusing on why it can’t happen.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Essay about forced optimism.]]></summary></entry><entry><title type="html">Hello, Medium! (Introduction)</title><link href="https://noisypigeon.github.io/posts/hello-medium-introduction/" rel="alternate" type="text/html" title="Hello, Medium! (Introduction)" /><published>2015-02-15T20:00:00+00:00</published><updated>2015-02-15T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/hello-medium-introduction</id><content type="html" xml:base="https://noisypigeon.github.io/posts/hello-medium-introduction/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>I have decided to start writing weekly articles. You may have read my first publication about <a href="/posts/why-i-dropped-out-of-high-school/">why I dropped out of high school</a>. I am writing today to describe what my readers are in for and why you should come along for the ride. I left school in pursuit of a life filled with happiness, working with startups and like-minded individuals. I love entrepreneurship, travelling, hiking and languages.</p>

<p>I want to bring the optimists along for a life filled with adventure, fulfilment and pleasure through my words and video blogs on my YouTube channel.</p>

<p>I am writing these articles because I am on a mission to positively impact other people’s lives, inspiring them to do something that wasn’t thought to be possible. Our time on Earth is limited, so let’s not waste it. I want to bring my readers with me through my experiences around the world.</p>

<blockquote>
  <p>“People have a problem with me being different, but that propels me forward in life.” — Mary-Louise Parker</p>
</blockquote>

<p>These articles are being written by me, an individual who does not hide himself, or hold back. I would rather regret doing something than regret not having done it. Life brings billions of opportunities that will change indefinitely. I am looking to bring insight to my readers and will precisely break down my ideals, dreams and ambitions over time, allow you to comprehend what the lifestyle I am working towards costs: physically, psychologically, financially, everything.</p>

<p>I am going to be writing about entrepreneurship, startups, culture, software engineering, psychology and most importantly, the experiences I have. At roughly an article a week, I will start to grow a library of thought-provoking material that is digestible by anyone. Let’s go where nobody will go, be the people nobody thought we could be and experience things that will mould us into the people we want to be.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Medium blog announcement post.]]></summary></entry><entry><title type="html">Why I dropped out of high school</title><link href="https://noisypigeon.github.io/posts/why-i-dropped-out-of-high-school/" rel="alternate" type="text/html" title="Why I dropped out of high school" /><published>2015-02-14T20:00:00+00:00</published><updated>2015-02-14T20:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/why-i-dropped-out-of-high-school</id><content type="html" xml:base="https://noisypigeon.github.io/posts/why-i-dropped-out-of-high-school/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>
</blockquote>

<p>Last October (2014) I dropped out of the eleventh year of school because I was exhausted by the education system’s constant efforts to make squares out of circles. It took almost six months to convince my family that it was the right decision for me and there are still some people who think it was a poor one.</p>

<p>I considered the advantages and disadvantages of leaving school without intending to attend college or university. I came to the conclusion that public schools in general are obsessed with good grades and test scores and therefore result in nothing more than years of regurgitation. I strongly believe that I should use my teenage years to gain as much knowledge as possible.</p>

<p>Since dropping out I have been given the opportunity to work with multiple startups around Vancouver, in positions such as a UI designer and a iOS Developer. From being out there, I quickly made a multitude of amazing connections. Recently, I decided to quit my full-time job to realize my full potential as an entrepreneur.</p>

<p>While attending a hackathon at the University of Michigan I met Cristopher Bello, a machine learning guy and liberal arts student who takes an interest in psychology. Cris brought to my attention that most freshmen believe that they can only be successful with the ‘right’ major. I’ve quoted him:</p>

<blockquote>
  <p>“It appears to be a recurring theme when you talk to Highschool seniors and College freshmen: You ask them what they’re going to major in and they start ‘weighing out’ the decisions. You ask them their reasoning and they say ‘Well, I /can/ do this or do that with x degree.’ But then I ask “With who’s permission?” — a question that each and every one of them has greeted with a shrug. Successful people will always be successful no matter what they do and no matter where they go.” — Cristopher Bello</p>
</blockquote>

<p>Here are a few things that I’ve learnt through dropping out of school to pursue my dreams:</p>

<ol>
  <li>
    <p>Feeling like the world is against you. Living in the conservative society that I do, I have received remarks from teachers, my family, pseudo friends and local recruiters attempting to dissuade me from dropping out and now that I have, why to return. I am a natural born ENTJ, built to excel in an efficient way, with the confidence and charisma to inspire and lead teams. Walking into battle with my double-ended sword does not frighten me. I am not easily offended and I hate the status quo. I thrive on a naysayers constant urge to put others down because as long as I am doing well a pessimist will be lurking. I do not believe or experience doubt and I truly believe anything and everything can be accomplished with enough determination and dedication. “You don’t need permission (qualifications) to go out there and start doing.” — James Anderson</p>
  </li>
  <li>
    <p>Education is not limited to the bounds of a classroom. I have always known that I am better off in an environment where I learn by doing; Over the past five months the amount of knowledge I’ve acquired is insane! I am traveling around the world to see things with my own eyes that exhilarate and cultivate my lust for being introduced to new experiences. Formal education is great for teaching theory, but often students miss out on the real-life experiences.</p>
  </li>
  <li>
    <p>Experiences over materialistic things. Since leaving school, I started to realize and implement a tactic that the most inspiring individuals around the globe have used: Use your resources to fund experiences rather than purchasing things; Even a bad experience becomes a good story. I only purchase what I think will contribute to my success.</p>
  </li>
  <li>
    <p>You do not need everything. A good entrepreneur is not a consumerist. We purchase what we need to do the job, not fun or unnecessary possessions. Don’t fund distractions, fund genuine experiences.</p>
  </li>
  <li>
    <p>It’s not easy. I am amused by those who approach me with remarks such as “Since you dropped out you have 100x more time.” or “School is way harder than what you’re doing right now.” — I am up 15/7 working on something. No matter what the occasion is, no matter what the weather is, I’m working. I’m 100% responsible for holding myself accountable, for keeping myself disciplined.</p>
  </li>
  <li>
    <p>I inspire people. I love coming out to support the community. I take pride in talking about where I came from and how much I have improved: A different child who was rejected from society to high school dropout entrepreneur that doesn’t have a care in the world other than making my life worth it and touching those around me to make a larger dent in the universe.</p>
  </li>
</ol>

<p>I think dropping out of high school was the best decision I have ever made. I am not limited by the restrictions of the education system while still allowing myself to grow as an entrepreneur, developer and a person. I understand that everyone has their own ambitions for who they envision themselves being, nor can everyone take the pressure of a thousand conservatives.</p>

<p>This is your life; live it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Musings about when I dropped out of high school.]]></summary></entry><entry><title type="html">Interview: Vancouver Teen Among 8 Canadian Winners of WWDC 2014 Scholarships</title><link href="https://noisypigeon.github.io/posts/interview-vancouver-teen-among-8-canadian-winners-of-wwdc-2014-scholarships/" rel="alternate" type="text/html" title="Interview: Vancouver Teen Among 8 Canadian Winners of WWDC 2014 Scholarships" /><published>2014-06-02T07:00:00+00:00</published><updated>2014-06-02T07:00:00+00:00</updated><id>https://noisypigeon.github.io/posts/interview-vancouver-teen-among-8-canadian-winners-of-wwdc-2014-scholarships</id><content type="html" xml:base="https://noisypigeon.github.io/posts/interview-vancouver-teen-among-8-canadian-winners-of-wwdc-2014-scholarships/"><![CDATA[<blockquote>
  <p>📖 <strong>Note</strong>: This post is from the archives. It may reflect outdated views or a <a href="/pages/names/">previous name</a>.</p>

  <p>This blog post is a mirror of <a href="https://www.iphoneincanada.ca/2014/06/02/vancouver-teen-canadian-winners-wwdc-2014/">iPhone in Canada’s coverage</a> of my interview with Canadian Press. The original headline was “Vancouver Teen Among 7 Canadian Winners of WWDC 2014 Scholarships” but Apple made a mistake with the media release, excluding Kaleb Butt.</p>
</blockquote>

<figure class="attachment attachment--preview attachment--jpg"><img height="467" width="700" alt="" loading="lazy" src="/assets/images/posts/interview-vancouver-teen-among-8-canadian-winners-of-wwdc-2014-scholarships/wwdc2014-students.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Group Picture (with me circled) - June 2014</figcaption></figure>

<p>Every year Apple awards worthy students WWDC scholarships, which essentially are free tickets to the company’s developer conference, worth $1,599 USD. This year eight* student winners are representing Canada down in San Francisco as recipients of the WWDC 2014 Scholarship, where only 200 are available. Students had to create an app and submit it to Apple, where the latter decided on the winners.</p>

<p>One winner from Vancouver is 16-year old Dxxxxxx Bxxxx, who gets to skip school for the week as he drove down to California with his grandparents for WWDC, according to the Vancouver Sun:</p>

<p>“I’m really excited, I’m looking forward to the labs and how to implement the new stuff … I would like to work at Apple as a software engineer or designer one day,”</p>

<p>Bxmxy told the Canadian Press he spent 60-70 hours on his app which took him just over 7 days to create. He says a grade 2 computer class got him interested in technology and coding—from there he learned basic HTML, then years later moved onto the C programming language and Objective-C:</p>

<p>“With C and Objective-C I learned everything from YouTube, I spent an entire summer at a computer just watching tutorials, that was pretty much my days,”</p>

<p>“I’ve always been around and immersed in technology, it’s one of my hobbies — one of my only hobbies now to be honest.”</p>

<p>The other six Canadian student winners are: Martin Bestawros, Jaiten Gill, Indragie Karunaratne, Bruce Li, Jaxon Stevens and Ishan Thukral. Update: Kaleb Butt from Vancouver was also a student winner.</p>

<p>Well done to these hardworking students and getting selected by Apple for a WWDC Scholarship. That’s going to be one unforgettable experience.</p>

<figure class="attachment attachment--preview attachment--jpg"><img height="467" width="700" alt="An image with caption: Unedited Group Picture - June 2014" loading="lazy" src="/assets/images/posts/interview-vancouver-teen-among-8-canadian-winners-of-wwdc-2014-scholarships/wwdc2014-students-2.jpg" /><figcaption class="attachment__caption" aria-hidden="true">Unedited Group Picture - June 2014</figcaption></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[iPhone In Canada news coverage of my WWDC scholarship.]]></summary></entry></feed>