<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>This Modern Web</title>
        <link>https://p.atrick.org</link>
        <description>The personal website of Patrick Marsceill</description>
        <lastBuildDate>Mon, 16 Mar 2026 02:05:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>This Modern Web</generator>
        <language>en</language>
        <image>
            <title>This Modern Web</title>
            <url>https://p.atrick.org/assets/icon/favicon-512x512.png</url>
            <link>https://p.atrick.org</link>
        </image>
        <copyright>© 2026 - Patrick Marsceill</copyright>
        <item>
            <title><![CDATA[Introducing Feedster]]></title>
            <link>https://p.atrick.org/2026/03/05/introducing-feedster</link>
            <guid isPermaLink="false">https://p.atrick.org/2026/03/05/introducing-feedster</guid>
            <pubDate>Thu, 05 Mar 2026 17:47:46 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I love the web. It’s the reason that I have a career, it’s why I got into design, and it has enabled so much of my (and our society’s) modern life that I cannot imagine going back to the time before it existed.</p>
<p>A lot has been said in the last few years about the rise of AI agents and how people access content. We’re seeing a wild shift in how people get their information: search engines (and AI agents at large) are increasingly turning into <em>answer engines</em>, reducing real human traffic and interaction in the open web.<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="true" aria-describedby="footnote-label">1</a></sup> In parallel, AI-generated summaries appear in search results, making users less likely to visit individual websites further pushing behavior toward answer-seeking instead of browsing.<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="true" aria-describedby="footnote-label">2</a></sup> As AI systems consume and remix the web’s content at scale, infrastructure providers and publishers are actively reshaping how crawling and access work, reflecting how contested the old traffic model has become.<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="true" aria-describedby="footnote-label">3</a></sup> While this behavior does allow for incredible efficiency in going deep on a particular subject, it also removes a certain serendipity that the “old web” provided, something that has long been treated as a real (and designable) part of discovery.<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="true" aria-describedby="footnote-label">4</a></sup> Coupling this recent trend with the way social media websites have created walled gardens of content<sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="true" aria-describedby="footnote-label">5</a></sup> over the last decade, we’re left with fewer places to wander and discover.</p>
<p>That’s why I decided to build <a href="https://feedster.co">Feedster</a>. I miss blogs, personal websites, and the internet publications that I grew up consistently reading online.</p>
<div class="md:-mx-8 lg:-mx-12 xl:-mx-16 [&amp;_.rsi-container]:after:shadow-none!"><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/introducing-feedster/feedster-homepage.png" srcSet="/assets/introducing-feedster/feedster-homepage.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure></div>
<p>At its core, Feedster is a feed reader that allows its users to organize their feeds into different channels. Channels are like folders that contain many feeds. Each channel has its own top-level feed mixing all of the feeds within it. Feedster is different from traditional RSS readers in that it’s web-based and all of the feed syncing happens on the server. There are some technical workings that allow the posts to stay cached locally for faster load times, but all of the feed updating happens server-side first and Feedster operates as a “thin client”. Additionally any feed that gets added to Feedster by one user, immediately becomes discoverable by all other users of the system. I’m still working on making search <em>really great</em>, but even in its basic form it is nice to be able to share feeds (especially independently published) so easily.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="A channel on Feedster" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/introducing-feedster/feedster-channel-page.png" srcSet="/assets/introducing-feedster/feedster-channel-page.png 1x"/></div><figcaption class="rsi-figcaption">A channel on Feedster</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Creating a public channel allows others to subscribe to it, like a shared playlist of feeds" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/introducing-feedster/feedster-shared-channel.png" srcSet="/assets/introducing-feedster/feedster-shared-channel.png 1x"/></div><figcaption class="rsi-figcaption">Creating a public channel allows others to subscribe to it, like a shared playlist of feeds</figcaption></figure>
<p>The reading experience in Feedster allows users to view feed items’ content directly in the app itself. There are two views for each piece of content: a <em>reader view</em>, which is similar to the reader view in Safari, and a <em>web view</em>, which will render most websites directly inside of Feedster, so that users don’t have to leave the app to get an idea of what the real content looks like and can easily paginate through posts within a given channel.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Reading content on Feedster" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/introducing-feedster/feedster-reader-view.png" srcSet="/assets/introducing-feedster/feedster-reader-view.png 1x"/></div><figcaption class="rsi-figcaption">Reading content on Feedster</figcaption></figure>
<p>Despite being a countermeasure to the erosion of some of the original web’s appeal, Feedster was also built to <em>connect</em> with AI agents. Using Feedster’s hosted MCP server, users can connect to their Feedster account and give AI agents access to the content that they follow, so long as MCP is supported on the AI agent’s client. This gives direct access to the content that users care about in near real time, unlocking many workflows for agents that may resolve on recent information without requiring the agent to search the web directly.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Having a chat with Claude about some content in my Feedster" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/introducing-feedster/feedster-agent-chat.png" srcSet="/assets/introducing-feedster/feedster-agent-chat.png 1x"/></div><figcaption class="rsi-figcaption">Having a chat with Claude about some content in my Feedster</figcaption></figure>
<details class="mb-4"><summary class="text-gray-11 [&amp;::marker]:text-xs cursor-pointer"><em>Here’s a transcript of that chat…</em></summary><pre><code>❯ /feedster

⏺ Feedster - front_page.get (MCP)(limit: 10)
  ⎿  ### Front Page (10)
     1. **Stolen Gemini API key racks up $82,000 in 48 hours** (id: 7391348) — Hacker News (Mar 3, 20
     26 12:41 PM)
     … +27 lines (ctrl+o to expand)

⏺ Here&#x27;s your updated front page:

  1. Stolen Gemini API key racks up $82,000 in 48 hours — Hacker News 🆕
  2. College students add puppy training to their course load — Washington Post 🆕
  3. Seattle Xcoders Talks This Week Considered Unmissable — inessential.com
  4. Anthropic&#x27;s popularity surges amid Pentagon rift — Semafor
  5. Introducing the AI Gateway — Vercel
  6. Pinterest shares pop 8% as Elliott Management takes $1B stake — CNBC 🆕
  7. Anthropic and Alignment — Stratechery
  8. Amazon Cloud Unit&#x27;s Data Centers In UAE, Bahrain Damaged In Drone Strikes — Slashdot 🆕
  9. &#x27;Pray We Make It Through the Night&#x27;: Iran&#x27;s Capital Under Siege — NYT 🆕
  10. Apple Introduces M4-Powered iPad Air — MacStories

  A few new stories since last check. Want to read any of these?

❯ Tell me about the anthropic thing and also provide additional context.

⏺ Feedster - items.get (MCP)(item_id: 7391249)
  ⎿  ### Anthropic&#x27;s popularity surges amid Pentagon rift
     - ID: 7391249
     - Feed: Semafor
     … +20 lines (ctrl+o to expand)

⏺ Feedster - items.get (MCP)(item_id: 7386043)
  ⎿  ### Anthropic and Alignment
     - ID: 7386043
     - Feed: Stratechery
     … +53 lines (ctrl+o to expand)

⏺ Feedster - items.get (MCP)(item_id: 7391234)
  ⎿  ### US Defense Secretary Pete Hegseth&#x27;s and Trump&#x27;s actions against Anthropic have serious legal
      issues, and its designation exceeds what the statute authorizes (Lawfare)
     - ID: 7391234
     … +21 lines (ctrl+o to expand)

⏺ Feedster - items.get (MCP)(item_id: 7386043, content_offset: 4000, max_chars: 4000)
  ⎿  ### Anthropic and Alignment
     - ID: 7386043
     - Feed: Stratechery
     … +53 lines (ctrl+o to expand)

⏺ The Anthropic-Pentagon Standoff

  Here&#x27;s the full picture:

  What Happened

  The Pentagon demanded that Anthropic allow its AI models to be used for &quot;all lawful use cases&quot; without
  restriction. Anthropic refused, drawing hard lines on two specific uses:

  1. Mass domestic surveillance — Anthropic argues AI-driven surveillance can assemble scattered data into
   comprehensive profiles of Americans&#x27; lives at massive scale, and that the law hasn&#x27;t caught up with
  these capabilities.
  2. Fully autonomous weapons — Anthropic says frontier AI is not yet reliable enough to take humans out
  of the loop on selecting and engaging targets, and offered to do joint R&amp;D with the DoD on improving
  reliability — an offer the Pentagon rejected.

  The Escalation

  - Feb 24: Defense Secretary Pete Hegseth gave CEO Dario Amodei a deadline — comply by 5:01 PM Friday,
  Feb 27, or face consequences.
  - Feb 27: Anthropic publicly refused to budge.
  - Feb 28: Trump directed federal agencies to stop using Anthropic&#x27;s products. Hegseth designated
  Anthropic a &quot;supply chain risk&quot; — a label previously reserved for US adversaries, never before applied
  to an American company. This ended Anthropic&#x27;s ~$200M defense contract and bars other defense
  contractors from working with them.
  - The Pentagon also threatened to invoke the Defense Production Act to force compliance — which
  Anthropic noted is contradictory (you can&#x27;t call a company both a security risk and essential to
  national security).

  The Fallout — Surprisingly Positive for Anthropic

  - Claude shot to #1 on Apple&#x27;s US App Store charts as public support surged
  - ChatGPT saw a 295% surge in uninstalls after OpenAI signed its own unrestricted DoD deal
  - Defense contracts were only about ~5% of Anthropic&#x27;s total business
  - Prediction markets are betting Anthropic will be largely unaffected

  The Debate

  - Lawfare argues the designation is &quot;political theater&quot; — it has serious legal issues and exceeds what
  the statute authorizes. They don&#x27;t expect it to survive legal challenge.
  - Ben Thompson (Stratechery) takes a more cautious view, arguing the designation &quot;would decimate
  Anthropic&quot; and that Anthropic&#x27;s position — having an unelected CEO decide what the government can do
  with AI — is &quot;intolerable and misaligned with reality,&quot; even if their specific concerns are legitimate.
  He draws an analogy to international law: ultimately, power decides what&#x27;s allowed, not principles.
  - Scott Alexander noted the financial exposure is small and expects limited impact.

  Sources:
  - Semafor: Anthropic&#x27;s popularity surges amid Pentagon rift
  - Stratechery: Anthropic and Alignment
  - Lawfare: Pentagon&#x27;s Anthropic Designation Won&#x27;t Survive Legal System
  - NPR: Anthropic rejects Pentagon demands
  - Axios: Hegseth gives Anthropic deadline
  - Fortune: Hegseth issues ultimatum to Anthropic
  - Washington Post: Pentagon-Anthropic fight reshapes Silicon Valley relations
  - TechPolicy.Press: Timeline of the dispute

✻ Cooked for 38s

❯ How did you know to pull that Stratechery article too?

⏺ It was on your front page from the earlier fetch — item #7, &quot;Anthropic and Alignment&quot; by Stratechery.
  When you asked about &quot;the anthropic thing,&quot; there were actually three related articles across the two
  front page pulls:

  1. Anthropic&#x27;s popularity surges amid Pentagon rift — Semafor
  2. Anthropic and Alignment — Stratechery
  3. US Defense Secretary&#x27;s actions against Anthropic have serious legal issues — Techmeme/Lawfare

  I grabbed all three since they were clearly about the same story from different angles.
</code></pre></details>
<p>Feedster is still in its early infancy. I think there is a lot more I can design and build to bring back the serendipity of the old web. To start, I am focusing on these things:</p>
<ul>
<li>Prioritize a slower type of content that isn’t constrained to 240 characters</li>
<li>Give users the ability to create <em>sharable</em> channels of feeds that other users can subscribe to</li>
<li>Create a better experience for curious minds that want to discover new sources of content outside of the mainstream (or social media platforms)</li>
<li>Bring RSS into 2026 and expose it to a new audience</li>
</ul>
<p>I hope that you’ll <a href="https://feedster.co">give Feedster a spin</a>. I’ve been having a blast building it.</p>
<section data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p>Reuters Institute for the Study of Journalism, “<a href="https://reutersinstitute.politics.ox.ac.uk/journalism-media-and-technology-trends-and-predictions-2026">Journalism, media, and technology trends and predictions 2026</a>” (discusses search evolving into AI-driven answer experiences and concerns about referral traffic). <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-2">
<p>Pew Research Center, “<a href="https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/">Google users are less likely to click on links when an AI summary appears in the results</a>” (reports lower click-through rates when AI summaries are shown). <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-3">
<p>Cloudflare, “<a href="https://www.cloudflare.com/press/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/">Cloudflare Just Changed How AI Crawlers Scrape the Internet at Large</a>” (describes tooling/policies to block AI crawlers and the scale of the crawler dynamic). <a href="#user-content-fnref-3" data-footnote-backref="" aria-label="Back to reference 3" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-4">
<p>M. A. Rahman, M. A. I. Hossain, and M. A. Hossain, “<a href="https://people.cs.nott.ac.uk/pszmw/pubs/sigir2015-serendipity.pdf">Exploring Opportunities to Facilitate Serendipity in Search (SIGIR 2015)</a>” (studies serendipity in web search and frames it as a meaningful part of discovery). <a href="#user-content-fnref-4" data-footnote-backref="" aria-label="Back to reference 4" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-5">
<p>Coding Horror, Jeff Atwood, “[<a href="https://blog.codinghorror.com/avoiding-walled-gardens-on-the-internet/">https://blog.codinghorror.com/avoiding-walled-gardens-on-the-internet/</a>]” <a href="#user-content-fnref-5" data-footnote-backref="" aria-label="Back to reference 5" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2026/03/02/143703</link>
            <guid isPermaLink="false">https://p.atrick.org/2026/03/02/143703</guid>
            <pubDate>Mon, 02 Mar 2026 19:37:03 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>“Ideas are cheap / execution is expensive” has become “Execution is cheap / ideas are cheaper”</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2025/02/17/141508</link>
            <guid isPermaLink="false">https://p.atrick.org/2025/02/17/141508</guid>
            <pubDate>Mon, 17 Feb 2025 19:15:08 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Thinking about (micro)blogging again.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2024/08/09/102924</link>
            <guid isPermaLink="false">https://p.atrick.org/2024/08/09/102924</guid>
            <pubDate>Fri, 09 Aug 2024 17:29:24 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I love personal computing!</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2024/07/31/212004</link>
            <guid isPermaLink="false">https://p.atrick.org/2024/07/31/212004</guid>
            <pubDate>Thu, 01 Aug 2024 01:20:04 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>We have lift off 🚀: The 2024 refresh of <em>This Modern Web</em> is now live on the new domain <a href="https://p.atrick.org">p.atrick.org</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2024/05/30/143012</link>
            <guid isPermaLink="false">https://p.atrick.org/2024/05/30/143012</guid>
            <pubDate>Thu, 30 May 2024 14:30:12 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Dusting off the cobwebs on this old thing…</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2022/07/20/16502</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/07/20/16502</guid>
            <pubDate>Wed, 20 Jul 2022 16:50:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Meeting People Is Easy</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2022/03/01/2337</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/03/01/2337</guid>
            <pubDate>Tue, 01 Mar 2022 02:33:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Deeply feeling this… <a href="https://rkg.blog/desperation-induced-focus.php">Desperation-Induced Focus</a> by Ravi Gupta</p>
<p>Processes that feel unnecessary really demotivate and kill creative spirit. One of the main reasons why I went from big tech to startup earlier this year.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2022/02/08/16516</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/02/08/16516</guid>
            <pubDate>Tue, 08 Feb 2022 16:05:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I’ve been spending more time than I should wondering why someone would choose not to add an RSS feed to their personal blog/website in favor of a “subscribe to updates with email”</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Figuring out what’s next]]></title>
            <link>https://p.atrick.org/2022/02/08/looking-for-my-next-job</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/02/08/looking-for-my-next-job</guid>
            <pubDate>Tue, 08 Feb 2022 08:10:23 GMT</pubDate>
            <description><![CDATA[How I approached looking for my next job]]></description>
            <content:encoded><![CDATA[<p>At the end of the first week of 2022, I left my job at <a href="https://github.com">GitHub</a> after six and-a-half years. It was a hard choice mostly because I wasn’t unhappy there, I had just <a href="https://github.com/features/issues">done some of the best work of my career</a>, I had built a network of people that I trusted, and I had an incredible sense of job security. <em>So why did I leave?</em></p>
<p>A few months before I decided that It Was Time™, I had a discussion with someone that I trust implicitly with my career. During our talk, it was pointed out to me that unknowingly I was exhibiting signs of someone who was looking for a my next thing. The GitHub that I joined in 2015 was a very different place than it is today. You could change just about anything with a pull request (and were encouraged to), even though management had just recently been implemented, much of an employee’s expectations were still tied to shipping / output. This meant that as a product designer you got to wear a lot of hats, processes were loose and experimental — if there at all, and you really got a sense that everyone at the company was all pushing toward something together.</p>
<p>As GitHub grew and scaled, more formal processes were built around the work we did, things became more complicated as more specialized roles were added, and the path to shipping the product grew longer and less straightforward. The entrepreneurial instincts that I had in my first few years were slowly exchanged for figuring out how to fit in bits that <em>I</em> cared most about into the larger product.</p>
<p>Working as an IC for a big tech company in 2022 provides a lot of niceties: you get consistency, job security, above-market salary and equity compensation, and if you’re there long enough you get to specialize in things. The tradeoffs that you face are your own personal impact on a company / directional level, the ability to take big risks, and straying outside of established processes without asking for permission/forgiveness. Depending on what you’re seeking out of work, you may land on either side of these tradeoffs: predictability, compensation, and job security vs. autonomy, individual impact, and the ability to make big bets. The more I talked and thought about it, the more I longed to exchange one for the other.</p>
<h2>A framework my next job</h2>
<p>At a certain point after this conversation, I realized that I never wrote down the things that I wanted from a potential employer before. I had a lot of ideas about the type of role that I wanted, but not the type of place I wanted to work. Back in 2020, after a few years in a management role, I realized that it wasn’t for me so I dove head-first into a staff designer position. There’s <a href="https://staff.design">been a lot written about the pursuing a senior+ IC designer track</a>, but I’ve never thought about evaluating this at a company level before. Also around this time I stumbled upon Muan’s <em><a href="https://muan.co/2021/12/15/notes-on-looking-for-a-job/">On looking for a job</a></em>, which I would recommend to anyone in tech looking for their next thing. With all of this rattling around in my head, I decided that I needed to formalize some type of framework to help me decide what’s next.</p>
<ol>
<li>
<p>Type of product / design</p>
<blockquote>
<p>Working at GitHub made me fall in love with designing developer tools. I get a lot of joy out of making tools for people who make. In my next role, I knew I wanted to stay in this space and perhaps get even more focused on a singular aspect of it. It is developer tools or bust for me. Product taste is also played a role in this, even if the money was good, I couldn’t pursue any company whose products I wouldn’t use myself and truly believe in.</p>
</blockquote>
</li>
<li>
<p>Stage and size of company</p>
<blockquote>
<p>This was a big one, perhaps the biggest one and the reason why I started to get itchy at GitHub. Later stage established companies have a lot to offer (see above). At this point though, I really wanted to get in somewhere as an early employee. I wanted to shape the design culture, figure out our own processes as we go, and be a high leverage IC that has a hand in everything. In my case it was a matter of figuring out what <em>I didn’t</em> that helped me navigate this. For example, even getting in at a hyper-growth company with a couple hundred people felt like I would be repeating the last five years of my time at GitHub again (scaling from 300-3000+). I knew I needed to find something that was even earlier: 20-30 employees, series A/B round, and with obvious growth potential.</p>
</blockquote>
</li>
<li>
<p>Equity / Salary compensation</p>
<blockquote>
<p>When considering a move from a big tech company ➡️ startup, getting paid usually also means taking on more risk. Typically early stage companies offer less cash salary than and more potential for equity growth. My financial situation allowed me to take a bit of a salary decrease, in exchange for more upside on my equity. Startup equity is hardly a sure thing, but I wasn’t going to take a position at a company that I didn’t have confidence in.</p>
</blockquote>
</li>
<li>
<p>Management structure</p>
<blockquote>
<p>Another hard requirement that I had was that I had to, for now, report directly to a founder. This was a forcing function for me not to step into a company that was top-heavy with management, too large, or too process heavy. I fully expected that this wouldn’t be a forever thing, but a near-term thing that would allow me to help scale the design org and eventually hire my own boss.</p>
</blockquote>
</li>
<li>
<p>Tech stack / tooling</p>
<blockquote>
<p>There’s a quote from Picasso, “When art critics get together they talk about content, style, trend and meaning. But when painters get together, they talk about where you can get the cheap turpentine.” (I’m sure this isn’t really what he said, but it sounds good!) I am very comfortable with certain stack of design tools and front-end development tech, and veering too far outside my comfort zone wouldn’t allow me to do my best work. Because I was looking for a position where I would be involved in front-end engineering, a modern tech stack was important, engineers who care about performance, design systems, and scalability were all must-haves.</p>
</blockquote>
</li>
<li>
<p>Operations</p>
<blockquote>
<p>There is a really fuzzy line between too much operational process and not enough. It moves around as a company grows, and usually companies are on the either side of the line. While having a formal HR department wasn’t a hard requirement for me, formalized People Ops was. This could be a single person or an entire department, but I needed to know that there was some structure around things like raising concerns, asking questions about benefits or company policies, and a channel for career advancement.</p>
<p>Additionally, I wanted to make sure that the company had a remote-first culture, in 2015 this was more rare than it is now, but any requirements to move or eventually go back to an in-person focused environment quickly disqualified a role for me.</p>
</blockquote>
</li>
</ol>
<h2>My Goldilocks zone</h2>
<p>After talking to multiple companies, I only really seriously considered one position that fit into to the criteria of the framework that I laid out. In the second week of January, I joined the team at <a href="https://workos.com">WorkOS</a> and I can’t wait to share what we’re building. The process taught me that patience and really honing in on the things you care about and letting go of the things you don’t is the way to find a job that leads to personal happiness.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2022/01/16/143939</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/01/16/143939</guid>
            <pubDate>Sun, 16 Jan 2022 14:39:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>First week at <a href="https://workos.com">WorkOS</a> is in the books. Really excited to share some of the stuff that we’ve been working on 🚀</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Jealousy List 2021]]></title>
            <link>https://p.atrick.org/2022/01/15/jealousy-list</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/01/15/jealousy-list</guid>
            <pubDate>Sun, 16 Jan 2022 03:45:57 GMT</pubDate>
            <description><![CDATA[Shout-out to all the work that made me jealous this year]]></description>
            <content:encoded><![CDATA[<p>Since 2015, Bloomberg Businessweek staff has published a <a href="https://www.bloomberg.com/features/2021-jealousy-list/">Jealousy List</a> of work that they recognize as top-notch.</p>
<blockquote>
<p>At Bloomberg Businessweek, we read—a lot. We also listen to podcasts and watch a ton of stuff (often with borrowed passwords). Sometimes we read, watch, or listen to something that we wish we had published. To recognize a job well done, the magazine’s staff and many of our contributors in the Bloomberg newsroom have compiled our annual yearend Jealousy List. Congratulations to those on this year’s list, we hate/love you. —The Editors</p>
</blockquote>
<p><em>h/t <a href="https://pxlnv.com/linklog/jealousy-list-2021/">pxlnv</a></em></p>
<p>In the spirit of sharing great work, I wanted to create a similar list focusing on some of the great work that I’ve come across this past year (and I wish had my fingerprints on it). If anything this exercise has taught me that there isn’t a great place for showcasing small tools and side projects (aside from being lost in the noise of Twitter) and maybe a meta-side project would building such a place.</p>
<hr/>
<h3><a href="https://automator.design">Automator</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/automator.png" srcSet="/assets/jealousy-list-2021/automator.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>As if everything that <a href="https://ibuildmyideas.com">Jordan Singer</a> makes doesn’t make me jealous, this Figma automation suite is certainly one of the most worthy of this list.</p>
<p><em>Links: <a href="https://automator.design">automator.design</a></em></p>
<hr/>
<h3><a href="https://cron.com">Cron</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/cron.png" srcSet="/assets/jealousy-list-2021/cron.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>I don’t <em>love</em> using Google Calendar, but I do love using Cron. Cron is a native app that provides an interface to Google Calendar, has some stunning UI design, and a very robust keyboard-first approach.</p>
<p><em>Links: <a href="https://cron.com">cron.com</a></em></p>
<hr/>
<h3><a href="https://radix-ui.com">Radix</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/radix.png" srcSet="/assets/jealousy-list-2021/radix.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Radix is a set of un-styled, accessible, and highly composable components for React ready for your next project created by the <a href="https://modulz.app">Modulz team</a>.</p>
<p><em>Links: <a href="https://radix-ui.com">Radix</a>, <a href="https://github.com/modulz/radix-ui">radix-ui on GitHub</a></em></p>
<hr/>
<h3><a href="https://adrianmg.gumroad.com/">Minimal Shapes</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/minimalshapes.png" srcSet="/assets/jealousy-list-2021/minimalshapes.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>I remember when <a href="https://twitter.com/adrianmg">Adrian</a> started playing around with Blender a few years ago… Fast forward and now he’s got the most beautiful collection of wallpapers and textures.</p>
<p><em>Links: <a href="https://adrianmg.gumroad.com/">Minimal Shapes on Gumroad</a></em></p>
<hr/>
<h3><a href="https://typefully.com">Typefully</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/typefully.jpg" srcSet="/assets/jealousy-list-2021/typefully.jpg 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>It’s been a few years since a new Twitter client did something completely different. Typefully completely re-imagines how you create content on Twitter, optimizing your threads, and making the authoring experience feel more civilized and focused. Made by the talented <a href="https://mailbrew.com">Mailbrew</a> team.</p>
<p><em>Links: <a href="https://typefully.com">typefully.com</a></em></p>
<hr/>
<h3><a href="https://twitter.com/pifafu/status/1468316497940410368">This Bowl</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/thisbowl.jpg" srcSet="/assets/jealousy-list-2021/thisbowl.jpg 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Kathy made this bowl (amongst many other beautify ceramics) and I love the glaze, size, and shape.</p>
<p><em>Links: <a href="https://twitter.com/pifafu/status/1468316497940410368">The bowl on Twitter</a></em></p>
<hr/>
<h3><a href="https://swallowmygraphicdesign.com/project/macostalgia">(mac)OStalgia</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/ostalgia.png" srcSet="/assets/jealousy-list-2021/ostalgia.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>I’ve said it before — but I am a sucker for vintage internet nostalgia, so <a href="https://swallowmygraphicdesign.com">Michael Feeney</a> exploring what various modern apps would have looked like in MacOS 9 is really up my alley. Complete with a MacOS 9 UI kit for Figma.</p>
<p><em>Links: <a href="https://swallowmygraphicdesign.com/project/macostalgia">swallowmygraphicdesign.com</a></em></p>
<hr/>
<h3><a href="https://twitter.com/killnicole/status/1467898441053483009">Everything that Vic makes</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/vic.jpg" srcSet="/assets/jealousy-list-2021/vic.jpg 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>I’ve tried picking up 3D / Blender about five times, but the learning curve is so steep that I eventually just gravitate toward spending my free time on things that I’m already pretty good at (making music, hacking on side projects, drawing, painting, etc…). <a href="https://twitter.com/killnicole">Vic</a>’s 3d work has always been inspirational because it is just so damn playful and I love that she posts Twitter threads of her process so you can see how the work evolves.</p>
<p><em>Links: <a href="https://twitter.com/killnicole/status/1467898441053483009">Vic’s 3D work on Twitter</a></em></p>
<hr/>
<h3><a href="https://openpeeps.com">Open Peeps</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/openpeeps.png" srcSet="/assets/jealousy-list-2021/openpeeps.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Open peeps is a really nice set of customizable, diverse, pay-what-you-want set of hand-drawn people illustrations by <a href="https://blush.design">Pablo Stanley</a>. Comes packaged up as a file for your favorite web graphics editor (Figma, Sketch, Xd) and is under a Creative Commons license. The drawing style isn’t over-done (yet) so if feels unique compared to other similar libraries.</p>
<p><em>Links: <a href="https://openpeeps.com">openpeeps.com</a></em></p>
<hr/>
<h3><a href="https://brianlovin.com">brianlovin.com</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/brianlovin.png" srcSet="/assets/jealousy-list-2021/brianlovin.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Brian Lovin’s site redesign features an app-like interface, internal commenting system, stack-tracking system, and more features that stretch the boundaries personal site and personal app.</p>
<p><em>Links: <a href="https://brianlovin.com">brianlovin.com</a>, <a href="https://github.com/brianlovin/brios">briOS on GitHub</a></em></p>
<hr/>
<h3><a href="https://poolsuite.net">Poolsuite Mixtapes</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/poolsuite.png" srcSet="/assets/jealousy-list-2021/poolsuite.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>The most nostalgically drunk website minted a set of very chill <del>mixtapes</del> <del>mix CDs</del> mix playlists for your infinite summer party.</p>
<p><em>Links: <a href="https://poolsuite.net">poolsuite.net</a></em></p>
<hr/>
<h3><a href="https://cobe.vercel.app">COBE</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/cobe.png" srcSet="/assets/jealousy-list-2021/cobe.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Need a WebGL globe à la <a href="https://github.com/home">GitHub</a> or <a href="https://stripe.com/">Stripe</a> homepages? Look no further. COBE is a 5kB library for generating a globe on a WebGL canvas.</p>
<p><em>Links: <a href="https://cobe.vercel.app">cobe.vercel.app</a>, <a href="https://github.com/shuding/cobe">COBE on GitHub</a></em></p>
<hr/>
<h3><a href="https://replay.software/sleeve">Sleeve</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/sleeve.jpg" srcSet="/assets/jealousy-list-2021/sleeve.jpg 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Sleeve is a custom music display for Spotify, Apple Music, and Dopler that allows you to personalize the UI in almost any way imaginable. I almost built something similar to this a few years ago because I really disliked how bloated the Spotify player UI was, but this solves that problem in a much more flexible way than I could have imagined.</p>
<p><em>Links: <a href="https://replay.software/sleeve">replay.software/sleeve</a></em></p>
<hr/>
<h3><a href="https://www.companioninabox.art">Companion in a Box</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/ciab.png" srcSet="/assets/jealousy-list-2021/ciab.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>The only NFTs that I’m legitimately jealous of. Fellow GitHubber <a href="https://twitter.com/mkwng">@mkwng</a> created a beautiful system of companions that hang out in said box.</p>
<p><em>Links: <a href="https://www.companioninabox.art">companioninabox.art</a></em></p>
<hr/>
<h3><a href="https://www.bueno.art">Bueno</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/bueno.png" srcSet="/assets/jealousy-list-2021/bueno.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Bueno is a no-code toolkit for NFT creators, it makes creating all the permutations of a collection <em>a lot</em> easier to manage. This type of thing feels like the future of NFT creation as it democratizes the process significantly.</p>
<p><em>Links: <a href="https://www.bueno.art">bueno.art</a></em></p>
<hr/>
<h3><a href="https://read.cv">Read.cv</a></h3>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/jealousy-list-2021/readcv.png" srcSet="/assets/jealousy-list-2021/readcv.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Maybe the anti-LinkedIn professional network? Read.cv is a platform created by <a href="https://%E3%83%A1%E3%83%87%E3%82%A3.com">Mehdi Mulani</a> and <a href="https://twitter.com/_andychung">Andy Chung</a> which allows users to create a resumé-like profiles and share a bit about what they’re working on.</p>
<p><em>Links: <a href="https://read.cv/">read.cv</a></em></p>
<hr/>
<p>What are some projects that have made you jealous from 2021? <em><a href="https://twitter.com/pmarsceill">Let me know on Twitter</a>.</em></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2022/01/07/23218</link>
            <guid isPermaLink="false">https://p.atrick.org/2022/01/07/23218</guid>
            <pubDate>Fri, 07 Jan 2022 23:02:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>After 6.5 years, today is my last day at <a href="https://github.com">GitHub</a>. It is truly the best job that I’ve ever had thanks to the people that I got to work with here. I’m proud to have been a small part of GitHub’s impact on the world and forever grateful for opportunities that came with it. 💜</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/12/15/211116</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/12/15/211116</guid>
            <pubDate>Wed, 15 Dec 2021 21:11:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Boosted this morning 💉</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/12/15/42859</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/12/15/42859</guid>
            <pubDate>Wed, 15 Dec 2021 04:28:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Some incremental improvements to the personal website…</p>
<ul>
<li>Re-wrote it in Next.js</li>
<li>Switched to Stitches for styling</li>
</ul>
<p>Loving the perf gains so far.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/11/27/165817</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/11/27/165817</guid>
            <pubDate>Sat, 27 Nov 2021 16:58:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>It’s the Saturday after Thanksgiving… time to get a tree.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/11/23/17526</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/11/23/17526</guid>
            <pubDate>Tue, 23 Nov 2021 17:05:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>It’s a: gotta dig up my septic tank with a shovel to find out that it’s not draining properly kind of day.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/11/17/213918</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/11/17/213918</guid>
            <pubDate>Wed, 17 Nov 2021 21:39:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>What’s your least favorite website that you <em>have</em> to use? Mine is the Microsoft Corporate training SharePoint portal.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/11/15/13430</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/11/15/13430</guid>
            <pubDate>Mon, 15 Nov 2021 01:34:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Sensing some cosmic shifts these last weeks. 🪐👽</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/05/01/231022</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/05/01/231022</guid>
            <pubDate>Sat, 01 May 2021 23:10:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Got Moderna shot #2 yesterday. The day after symptoms are no joke. I’ve been laid up with a fever and body aches all day.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2021/02/20/20743</link>
            <guid isPermaLink="false">https://p.atrick.org/2021/02/20/20743</guid>
            <pubDate>Sat, 20 Feb 2021 20:07:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Ideas for future posts:</p>
<ul>
<li>Designing principles</li>
<li>Fewer concepts and more types</li>
<li>Finding that sweet spot between implementation and concept/shaping</li>
<li>Looser process/stricter framework</li>
</ul>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/12/14/125926</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/12/14/125926</guid>
            <pubDate>Mon, 14 Dec 2020 12:59:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>Man you gotta love Benioff (I mean, you don’t but he’s going to try), he clearly worked for Larry Ellison, loved Larry Ellison, and then said, I will be the absolute opposite of Larry Ellison and yet still build the most phallic building in history.</p>
</blockquote>
<p><a href="https://ftrain.medium.com/lets-skim-the-slack-salesforce-press-release-22e941ddc1e0">Let’s Skim! The Slack/Salesforce Press Release </a></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/12/12/19143</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/12/12/19143</guid>
            <pubDate>Sat, 12 Dec 2020 19:14:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I think I might be ready to start writing again…</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/09/11/154321</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/09/11/154321</guid>
            <pubDate>Fri, 11 Sep 2020 15:43:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>One of my <a href="https://poolside.fm">favorite websites</a> now has an iOS app… Check out what the poolside.fm folks have been building over at <a href="https://cellular.poolside.fm">https://cellular.poolside.fm</a></p>
<blockquote>
<p>The closest thing you can get to drinking Peach Bellinis at your desk. ★★★★★</p>
</blockquote>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/09/09/191023</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/09/09/191023</guid>
            <pubDate>Wed, 09 Sep 2020 19:10:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Yesterday marked my five year anniversary of working at GitHub 🎉</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/09/09/184830</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/09/09/184830</guid>
            <pubDate>Wed, 09 Sep 2020 18:48:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>It feels obvious now, but just starting to realize that my own creative output correlated to my personal happiness and probably my mental health, also.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/07/30/232849</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/07/30/232849</guid>
            <pubDate>Thu, 30 Jul 2020 23:28:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Nice surprise for a Thursday evening… <a href="https://open.spotify.com/album/1XoE7ZirQ3gjxq8HIzTJU9?si=LTSHiO4iRUiy2c1-lc-UIw">Cowboy Bebop Soundtrack now on Spotify</a>.</p>
<p>via <a href="https://kotaku.com/the-cowboy-bebop-soundtracks-just-hit-spotify-so-excuse-1844563638?utm_campaign=Kotaku&amp;utm_content=1596146488&amp;utm_medium=SocialMarketing&amp;utm_source=twitter">Kotaku</a></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/07/08/02140</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/07/08/02140</guid>
            <pubDate>Wed, 08 Jul 2020 00:21:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I love me some internet nostalgia and <a href="https://jdan.github.io/98.css/">98.css</a> does not disappoint.</p>
<blockquote>
<p>98.css is a CSS library for building interfaces that look like Windows 98.</p>
</blockquote>
<p>A pretty damn faithful recreation of the UI that sent me online curiously building my first web pages, Winamp skins, Visual Basic programs, and pirated copies of PhotoShop.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/05/18/2281</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/05/18/2281</guid>
            <pubDate>Mon, 18 May 2020 02:28:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p><a href="http://tttthis.com/blog/if-i-could-bring-one-thing-back-to-the-internet-it-would-be-blogs?ref=thismodernweb.com">If I could bring one thing back to the internet it would be blogs</a></p>
<blockquote>
<p>Maybe it was chronicles of their life as they got a job teaching in Japan and how it was leaving American for the first time and all the new things there and skateboarding and meeting people and trying to meet girls, or a photographer working for a while in Minorca or some island off Spain when music hit a rock scene period and all the young people were dressing up in leather and tight jeans and going out dancing to dance rock and writing about his thoughts on where he fit into the scene as he was kind of older but not old, or a compilation of weird and unexplained science and gnostic wisdom, or the things some guy was making out of wood or electronics in his garage, or some Japanese girl who posted pictures of herself looking extremely pink and pneumatic and writing little things with them.</p>
</blockquote>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/05/18/13028</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/05/18/13028</guid>
            <pubDate>Mon, 18 May 2020 01:30:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Most Thursday nights, I was with three other humans in a too hot (or too cold) room constructed out of hastily framed walls, unfinished drywall, and 200 year old brick. Ah band practice, how I miss you. These days you’ll find me at “band practice” in my home office smashing buttons on my Ableton Push, trying to get the most out of samples, VST instruments, and a lot of trial and error. A different kind of fun.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Hacking from your iOS device]]></title>
            <link>https://p.atrick.org/2020/05/13/siri-shortcuts</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/05/13/siri-shortcuts</guid>
            <pubDate>Wed, 13 May 2020 20:44:45 GMT</pubDate>
            <description><![CDATA[Developing with Siri Shortcuts and more]]></description>
            <content:encoded><![CDATA[<p>I love spending short chunks of time programming things that are <em>just for me</em>. It’s a satisfying indulgence, like cooking an intricate dinner for one or building a scale model of your own house. Lately, <a href="https://developer.apple.com/siri/">Siri Shortcuts</a> have filled this need quite well because I find them accessible, intuitive enough to quickly get productive, and malleable enough to solve “real problems”.</p>
<p>Siri Shortcuts aren’t new, but as more developer-centric apps begin using the <a href="https://developer.apple.com/documentation/sirikit">SiriKit API</a>, developers now have increased potential for upping their productivity levels on iOS (and iPadOS) devices. One great example of this is the <a href="https://workingcopyapp.com/">Working Copy</a> app. Working Copy is a Git client for iOS and iPadOS, which in itself is handy for editing and pushing code from your iPhone or iPad. Outside of being a nice Git client, the team has also built a deep integration with SiriKit, opening up entirely new workflows not even found on MacOS. Using Shortcuts, we can now access many individual tasks within specific apps (such as basic Git commands from within Working Copy) as pieces of larger workflows that pass data between other Siri-enabled apps.</p>
<h2>What are Siri Shortcuts anyway?</h2>
<p>Before getting into examples of how to set up your device with handy dev-centric Shortcuts, let’s review exactly what they are and some of the core concepts around them.</p>
<div class="max-w-80 mx-auto"><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Shortcuts app, &#x27;Edit&#x27; view on iOS
13" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/siri-shortcuts/shortcuts-app-small.png" srcSet="/assets/siri-shortcuts/shortcuts-app-small.png 1x"/></div><figcaption class="rsi-figcaption">Shortcuts app, &#x27;Edit&#x27; view on iOS
13</figcaption></figure></div>
<p>iOS 13 brought a new Shortcuts app to our devices. This app is the engine that allows us to create specific workflows using individual tasks, called actions, from many individual apps and connect them together into one string of events called a shortcut. These shortcuts are accessible from OS-level context menus (primarily the <em>share sheet</em>), kicked off manually from the home screen, or automatically run at a certain time interval.</p>
<p>While Shortcuts can be used to accomplish any number of tasks (like getting walking directions to the nearest coffee shop), they are especially valuable to me in transforming my iOS devices into automated development tools. Let’s dig in to some common use-cases.</p>
<h2>Running a simple curl command</h2>
<p>My initial motivation was fairly niche; I wanted to build a shortcut that used the camera on my iPhone to take a photo of an album cover, identify what it was, and then add that album to a Spotify playlist. It’s handy when shopping for vinyl or cataloging my existing record collection and creating a digital version on Spotify.</p>
<p>I found that the simplest way to identify the contents of a photo was to use Google Vision. Specifically, the image annotation API. After researching several ways to hit this API from my phone, I stumbled upon the <em>Get contents of <code>&lt;url&gt;</code></em> action could be used to send curl commands. This made hitting the Google Vision API with an encoded version of the photo that I just took feel too easy. This specific action is built into Shortcuts itself (not tied to any particular app) and has many uses. It can hit API endpoints, grab an RSS feed, download and parse the contents of a webpage, or grab any data that is backed by a URL. As I learned, it is also very handy for making a single curl command and getting a response back. A more complicated API integration may be better served using another app with Shortcuts support (like Scriptable, more on this later) to handle more advanced back-and-forth and parsing of an API response.</p>
<div class="max-w-80 mx-auto"><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Get contents of ... action in Siri
Shortcuts" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/siri-shortcuts/get-contents-url-small.png" srcSet="/assets/siri-shortcuts/get-contents-url-small.png 1x"/></div><figcaption class="rsi-figcaption">Get contents of ... action in Siri
Shortcuts</figcaption></figure></div>
<p>Another use for this action that I am eager to play with is <a href="https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#triggering-a-workflow-with-events">triggering a GitHub Action workflow run</a> using the <a href="https://developer.github.com/v3/repos/#create-a-repository-dispatch-event"><code>repository_dispatch</code></a> event via curl that is kicked off from a shortcut. There are a ton of possibilities with this flexible action allowing your device to interface with any number of services fronted by public web APIs.</p>
<h2>Writing content to a static site (Gatsby, Next.js, Jekyll, etc..)</h2>
<p>I use this workflow the most of any in my toolkit. It recently came up in conversation with Brian Lovin (fellow GitHubber) after reading <a href="https://brianlovin.com/overthought/cookies-authenticate-next-js-apollo-graphql-requests">his post about how he architected a way to add links to his Bookmarks page</a> via adding authentication to NextJS + GraphQL.</p>
<p>This workflow solves the same problem, but instead of creating authentication, it uses a Git + GitHub centric workflow to add content to a (static) website in a secure way. I use it to post content to my <a href="/inbox">Inbox</a> simply by searching for the cover art on Google and “sharing” it to my workflow which handles the rest. The basic steps look like this:</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Visualization of the Add to Inbox shortcut" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/siri-shortcuts/add-to-inbox-illo.png" srcSet="/assets/siri-shortcuts/add-to-inbox-illo.png 1x"/></div><figcaption class="rsi-figcaption">Visualization of the Add to Inbox shortcut</figcaption></figure>
<ol>
<li>I search Google for the cover art to the book, film, album, tv show that I’m consuming.</li>
<li>I use the native “share” button in iOS and my shortcut lives on the share sheet.</li>
<li>My shortcut uses the Working Copy app and checks out the <code>master</code> branch of my website’s repository</li>
<li>My shortcut pulls any new changes from GitHub</li>
<li>My shortcut creates a new branch using the current time down to the second as the branch name: <code>dd-MM-hh-mm-ss</code></li>
<li>My shortcut asks me what the title of the media is, what the artist name(s) are, and what my current status is (did I finish it?)</li>
<li>My shortcut transforms the text of the title using regex to a slug-like format (lowercase, strips out special characters, replaces spaces with dashes, etc…).</li>
<li>My shortcut renames the image file with the slug version of the title.</li>
<li>My shortcut writes this new file to the <code>content/inbox/assets</code> directory of my repository.</li>
<li>My shortcut creates a new text blob with the yaml front-matter metadata (title, artist, status, image path, date, etc…).</li>
<li>My shortcut writes this text blob to an <code>mdx</code> file in my repository.</li>
<li>My shortcut commits all the changes and pushes them to the remote.</li>
<li>My shortcut opens my repository in the GitHub app.</li>
</ol>
<div class="max-w-80 mx-auto"><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="My &#x27;Add to Inbox&#x27; shortcut for adding content to my
website" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/siri-shortcuts/add-to-inbox-ui-small.png" srcSet="/assets/siri-shortcuts/add-to-inbox-ui-small.png 1x"/></div><figcaption class="rsi-figcaption">My &#x27;Add to Inbox&#x27; shortcut for adding content to my
website</figcaption></figure></div>
<p>From here, I usually open the repository in Safari to actually create the Pull Request from the recently pushed branch (as of writing this there is no way to do this in the GitHub iOS app yet). I then wait for GitHub Actions to build and Netlify to do my preview deploy and <em>viola</em> — I’m ready to merge 👌.</p>
<p>This shortcut was inspired by <a href="https://twitter.com/rafahari/status/1239682156919762946?s=21">this tweet from Rafa</a> showing his shortcut for posting photos to his static site.</p>
<h2>Extending Shortcuts with other Apps</h2>
<p><a href="https://scriptable.app">Scriptable</a> is an automation app (much like Shortcuts), but it runs on JavaScript instead of a visual block editor. It fully supports ES6, all scripts are stored on your phone, and can be executed from the Scriptable app, Siri/Shortcuts, or the share sheet. If you write JavaScript, this can unlock another level of functionality to Shortcuts giving you native JavaScript APIs to bake in.</p>
<div class="max-w-80 mx-auto"><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="&#x27;Is Slack Down?&#x27; Script in
Scriptable" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/siri-shortcuts/scriptable-small.png" srcSet="/assets/siri-shortcuts/scriptable-small.png 1x"/></div><figcaption class="rsi-figcaption">&#x27;Is Slack Down?&#x27; Script in
Scriptable</figcaption></figure></div>
<p>As mentioned earlier in this post, this allows for the potential to create relatively complex integrations with any services with web APIs. Specifically for development, GitHub’s API is a great candidate for something like this.</p>
<h2>Other tips for writing code on your Phone</h2>
<p>While the GitHub app has no editor and is focused on triaging issues, pull requests, and other notifications; it does allow you to “share” to Working Copy if you have it installed, which has a fairly nice text editor built in. This doesn’t actually use Shortcuts specifically, but it does use a similar action in the share sheet within the GitHub app.</p>
<div class="max-w-80 mx-auto"><video src="https://p.atrick.org/assets/siri-shortcuts/working-copy-to-gh.mp4" alt="Video showing sharing between GitHub iOS app and Working Copy iOS app" controls="" loop=""></video></div>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/04/23/143031</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/04/23/143031</guid>
            <pubDate>Thu, 23 Apr 2020 14:30:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p><a href="https://daringfireball.net/2020/04/the_2020_iphone_se">Gruber’s review of the 2020 iPhone SE</a> showcases the bonkers performance of the A13 Bionic chip:</p>
<blockquote>
<p>…a $400 iPhone SE bests a $3,000 top-of-the-line MacBook Pro in single-core CPU performance.</p>
</blockquote>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/04/10/34412</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/04/10/34412</guid>
            <pubDate>Fri, 10 Apr 2020 03:44:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I am very excited to hear that <a href="https://ranchero.com/netnewswire/">NetNewsWire</a> (my RSS reader of choice) is going to get iCloud syncing support! That was literally the only wishlist feature that I had for this app. Maurice Parker, a developer on the project <a href="https://vincode.io/2020/04/09/cloudkit-impressions-from.html">wrote a nice piece about building the feature</a> and his impressions of CloudKit in general.</p>
<p>ht @manton</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/04/10/33610</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/04/10/33610</guid>
            <pubDate>Fri, 10 Apr 2020 03:36:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Some thoughts I had this week:</p>
<ul>
<li>I’ve never been this conscious about what I’m eating every day because we only have a finite supply of staples like eggs, butter, milk, bread, etc…</li>
<li>I’ve never been this conscious of how I manage my time every day because my wife and I are splitting childcare duties and we need to balance getting work done and not sitting my daughter in front of a screen all day</li>
<li>I’ve never been this conscious of how often I work out because we all need to get some physical exercise to stay mentally and physically well</li>
</ul>
<p>Wellness in the time of global un-wellness, I guess.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/04/07/172749</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/04/07/172749</guid>
            <pubDate>Tue, 07 Apr 2020 17:27:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Phases of social distancing / shelter at home:
Week 1: WTF is this, the world is going to hell
Week 2: Struggling to find balance between work and family
Week 3: Every day is the same: depression
Week 4: I’m lucky to have a job and be able to spend unlimited time with my family</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/29/152911</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/29/152911</guid>
            <pubDate>Sun, 29 Mar 2020 15:29:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I’ve been thinking a lot about how we can bring the principles and tools used in open source software development to the scientific and medical community to aid in finding solutions for big problems faster.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/29/53</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/29/53</guid>
            <pubDate>Sun, 29 Mar 2020 15:21:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>In a truly psychedelic moment during my morning run, I saw two older men (70+ years old) walking six feet apart, movements perfectly in sync, both wearing leather driving gloves, and both smoking giant cigars.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/20/2020-03-20-15-58</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/20/2020-03-20-15-58</guid>
            <pubDate>Fri, 20 Mar 2020 15:58:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p><a href="https://www.hustwit.com/">Gary Hustwit</a> is streaming his documentaries for free during the COVID-19 crisis. <a href="https://www.ohyouprettythings.com/free">Watch this week’s flim <em>Helvetica</em> about the iconic typeface from March 17-24</a>.</p>
<blockquote>
<p>I’ve decided to stream my films for free to viewers stuck indoors anywhere in the world. No catch…</p>
</blockquote>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/20/2020-03-20-13-15</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/20/2020-03-20-13-15</guid>
            <pubDate>Fri, 20 Mar 2020 13:15:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>My daughter now has FaceTime dates set up with her classmates in pre-school because she can’t be physically close to them and probably won’t be for a few months. This makes me wonder if this time will have any long term affects on our kids?</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/17/2020-03-17-04-04</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/17/2020-03-17-04-04</guid>
            <pubDate>Tue, 17 Mar 2020 04:04:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Got inspired by <a href="https://twitter.com/rafahari/status/1239682156919762946?s=21">Rafa’s Shortcut</a> and whipped <a href="https://www.icloud.com/shortcuts/98ce69a7f59640ce931e45f3d69d2adf">my own Apple Shortcut</a> up to automate posting media and books to my <a href="https://thismodernweb.com/inbox">Inbox</a> from my iPhone. All I need is to select cover art from my Photos and the shortcut handles everything else (except the merge into <code>master</code>).</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/15/2020-03-15-15-32</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/15/2020-03-15-15-32</guid>
            <pubDate>Sun, 15 Mar 2020 15:32:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>🎥 <a href="https://m.imdb.com/title/tt5727208/criticreviews?ref_=m_tt_ov_rt">Uncut Gems</a> might be the most stressful and anxiety provoking film I’ve ever seen. Amazing on so many levels and the celebrity cameos were done in a way that I’ve never really seen before — at this scale, anyway.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/13/2020-03-13-13-49</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/13/2020-03-13-13-49</guid>
            <pubDate>Fri, 13 Mar 2020 13:49:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Popular Science’s <a href="https://www.popsci.com/story/diy/diy-hand-sanitizer/">DIY hand sanitizer recipe</a>:</p>
<blockquote>
<p>1 cup of 99% isopropyl alcohol,
1 tablespoon of 3% hydrogen peroxide, 1 teaspoon of 98% glycerin,
¼ cup, 1 tablespoon, and 1 teaspoon (or 85 milliliters) of sterile distilled or boiled cold water</p>
</blockquote>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[This web designer gets his wings]]></title>
            <link>https://p.atrick.org/2020/03/13/swift-for-web-designers</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/13/swift-for-web-designers</guid>
            <pubDate>Fri, 13 Mar 2020 07:59:33 GMT</pubDate>
            <description><![CDATA[My first impressions of SwiftUI]]></description>
            <content:encoded><![CDATA[<p>In recent years, designing and building for the web has taken a few steps closer toward application development (for better or worse) with the advent of modern frameworks like React. These encourage a more app-centric approach to UI development through components and different ways of encapsulating logic and presentation layers. In the end though, the web still is — and probably always will be: markup, styles, and JavaScript served over a network to a browser that turns it into a UI. This protocol allows web developers to be productive very early-on in their journey because what you “write” is what you “get” and unlike compiled languages like Swift, there is no required build step before you can see the fruits of your labor. With the release of SwiftUI though, Apple has attempted to replicate a web developer’s ease-of-entry with a live preview mechanism and an abstracted language for constructing interfaces. This was enough to pique my interest and over the last month, I began playing with SwiftUI through <a href="https://designcode.io/swiftui-course">Design+Code’s SwiftUI</a> course. Here are my initial impressions…</p>
<h2>Tooling</h2>
<p>Let me start out by saying that Xcode is an <a href="https://en.wikipedia.org/wiki/Integrated_development_environment">IDE (integrated development environment)</a> and most modern web development tools are not. VSCode comes close-<em>er</em>, but it’s really not the same thing. Xcode has an editor, documentation, compiler, virtualization, and a rendering engine all-in-one — including all the settings to boot. It feels big in every conceivable way to someone who isn’t used to working with a tool of this scope. In this new version of Xcode (version 11.3.1), Apple has added a new component called <em>Canvas</em> that works exclusively with SwiftUI. Canvas is the real-time preview (+ inspector) that makes writing SwiftUI so compelling. With Swift <em>classic</em> (and ObjectiveC) apps, every time code was edited, a manual build step was required before you could preview the app in a separate process. With SwiftUI + Canvas, the preview updates as-you-type(-ish) which is familiar to those of us using live-reload in our web browsers while developing web pages.</p>
<p>The Apple team has done a lot of things right in <em>not</em> making this version of Xcode overly complex to use, but coming from the light-weight world of Vim, VSCode, Atom, and Sublime Text, I do feel like sometimes I’m driving a tank — and a very delicate one at that. Often times while writing code, response time feels sluggish and triggers syntax error statements that may or may not be accurate. I find myself deleting and writing the same line multiple times to try to get a “true” result from the change. SwiftUI <em>is</em> in beta still, so I’ll chalk this up to it not being production-ready yet.</p>
<p>Despite some of the bulkiness and current fragility, I do really appreciate having the niceties of a full IDE at my fingertips. Take the <em>Library</em>, as an example: it’s a universal command palette that you can pull up while you’re writing code to search for specific parts of the Swift/SwiftUI API to use inline. I love that it has the docs <em>right there</em> and selecting an item inserts it right where I want it with placeholders for all the properties.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Library view in Xcode 11.3.1" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/swift-for-web-designers/library.png" srcSet="/assets/swift-for-web-designers/library.png 1x"/></div><figcaption class="rsi-figcaption">Library view in Xcode 11.3.1</figcaption></figure>
<p>Another thing that I appreciate is the approach in integrating Canvas into Xcode and how it is very reminiscent of the early versions of Framer Studio. For those that don’t remember, this was the precursory product that came before Framer X: CoffeeScript on the left, live preview (with device chrome) on the right:</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="UI from the defunct Framer Studio*" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/swift-for-web-designers/framer.png" srcSet="/assets/swift-for-web-designers/framer.png 1x"/></div><figcaption class="rsi-figcaption">UI from the defunct Framer Studio*</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="UI from Xcode 11.3.1 with Canvas" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/swift-for-web-designers/swift-ui.png" srcSet="/assets/swift-for-web-designers/swift-ui.png 1x"/></div><figcaption class="rsi-figcaption">UI from Xcode 11.3.1 with Canvas</figcaption></figure>
<p>It certainly <em>feels</em> like there was some inspiration there. It’s also interesting to see how technology seemingly continues to pull development and design closer together. Framer Studio was a tool often used to prototype native app interactions, and now with the same level of code abstraction one can actually write the real UI for a native app — animation, interaction, and even integrated into a data model. I’m actually quite surprised that it took Apple this long to create this sort of thing, but I have no idea how long SwiftUI has been in the works.</p>
<h2>Writing Swift/SwiftUI</h2>
<p>I took an ObjectiveC class about five years ago and it wasn’t even close to this easy to pick-up and just make stuff. It was only on day two of the four day class that I actually had anything running on a device. This is why being a web developer is awesome: you can make a production-ready webpage in minutes with default tools like Notepad or TextEdit, with zero configuration, and using the browser that comes with your OS. As you learn more about HTML and CSS, you can see exactly how the edits you make affect the outcome, and thats when making stuff gets <em>fun</em>. Apple has again done a great job of abstracting out the types of things that will give you the momentum to <em>keep going</em> making them seem conceptually simple.</p>
<p>One such example is how the layout engine that produces variable width and height layouts (similar to flexbox in CSS). This uses the concepts of <code>Stacks</code> and <code>Spacer()s</code>. <code>Spacer</code> kind of reminds me of the old <code>spacer.gif</code> hack from the days of table based layouts in HTML, which brought a smile to my face as I typed it out every time.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="swift" data-theme="github-dark github-light"><code data-language="swift" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">// HStack creates a horizontal layout, Spacer() creates a flexible spacer (think flexbox with justify-content: space-between)</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">HStack</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    Text</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Acme Corp&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    Spacer</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">()</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    Image</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;logo&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<p>“Hello world!” is a thing of the past, SwiftUI it’s more like, “Hello, beautiful UI complete with animations and dark-mode built-in!”</p>
<p>Here is an example of how to create a simple card UI using <em>out-of-the-box</em> SwiftUI:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="swift" data-theme="github-dark github-light"><code data-language="swift" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">// Create a vertical layout for the card &quot;frame&quot;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">VStack</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">    // Create a horizontal layout to &quot;push&quot; the text to the left edge with a Spacer()</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    HStack</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">        // Create a vertical layout for each text component to stack on top of each other</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">        VStack</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">alignment</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: .leading) {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">            Text</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Card Title&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">                // Style the text using system styles</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">font</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(.largeTitle)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">fontWeight</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(.bold)</span></span>
<span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">                // Use a color from a color set (a theming file) in the assets catalog, so that it will dynamically shift for dark and light mode</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">foregroundColor</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">Color</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;primary&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">))</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">            Text</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Sub Title&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">font</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(.headline)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">fontWeight</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(.regular)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">                .</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">foregroundColor</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">Color</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;secondary&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">))</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">            Spacer</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">()</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">        }</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">        Spacer</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">()</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">    }</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span>
<span data-line=""><span style="--shiki-dark:#6A737D;--shiki-light:#6A737D">// Specify the size of the card and its styles</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">frame</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">width</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">300</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">height</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">200</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">padding</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">20</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">background</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">Color</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;accent&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">))</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">cornerRadius</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">20</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">shadow</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">(</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">radius</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">20</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span></code></pre></figure>
<p>This will render the following in both dark and light mode, using the color sets that I defined in the asset catalog (which is like a special folder in your project where you keep all your images and color properties for theming).</p>
<div class="md:-mx-8 lg:-mx-12 xl:-mx-16 [&amp;_.rsi-container]:after:shadow-none!"><div class="sm:grid gap-x-4 grid-cols-2 "><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Preview of the SwiftUI code example in light mode" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/swift-for-web-designers/card-light.png" srcSet="/assets/swift-for-web-designers/card-light.png 1x"/></div><figcaption class="rsi-figcaption">Preview of the SwiftUI code example in light mode</figcaption></figure><figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Preview of the SwiftUI code example in dark mode" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/swift-for-web-designers/card-dark.png" srcSet="/assets/swift-for-web-designers/card-dark.png 1x"/></div><figcaption class="rsi-figcaption">Preview of the SwiftUI code example in dark mode</figcaption></figure></div></div>
<p>Despite its quirks and unfamiliarity, I am already a fan of SwiftUI. Intentionally or not, Apple is now courting folks like me who grew up building on web tech stacks. Because in many ways SwiftUI feels like the tools I am already using, I can absolutely see myself building out the UI (and more) of an entire app with this in a matter of weeks. Who knows, maybe I’ll get something in the App Store this year?</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/09/2020-03-09-03-29</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/09/2020-03-09-03-29</guid>
            <pubDate>Mon, 09 Mar 2020 03:29:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I hope we see more of this from the tech industry, which actually has the resources to put a dent in the detection effort despite our government’s ineptness:</p>
<blockquote>
<p>The Bill &amp; Melinda Gates Foundation announced today that it will commit an additional $5 million to help public health agencies in the greater Seattle region enhance their capacity to detect novel coronavirus (COVID-19) in King County, Snohomish County and other surrounding communities.</p>
</blockquote>
<p>via <a href="https://www.gatesfoundation.org/Media-Center/Press-Releases/2020/03/Gates-Foundation-Commits-5-Million-to-Help-Public-Health-Agencies-in-Greater-Seattle-Region">gatesfoundation.org</a></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/06/2020-03-06-14-04</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/06/2020-03-06-14-04</guid>
            <pubDate>Fri, 06 Mar 2020 14:04:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Three lessons in on <a href="https://designcode.io/swiftui?promo=learnswiftui">Design+Code’s SwiftUI course</a>. SwiftUI’s layout engine feels really similar to <a href="https://www.figma.com/blog/announcing-auto-layout/">auto layout in Figma</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/03/02/2020-03-02-20-20</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/03/02/2020-03-02-20-20</guid>
            <pubDate>Mon, 02 Mar 2020 20:20:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Useful dashboard for viewing the latest quant data for COVID-19 from Johns Hopkins CSSE. <a href="https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6">Desktop version</a> and <a href="http://www.arcgis.com/apps/opsdashboard/index.html#/85320e2ea5424dfaaa75ae62e5c06e61">Mobile version</a> available. The raw data is <a href="https://github.com/CSSEGISandData/COVID-19">also available on GitHub</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/02/25/2020-02-25-01-35</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/02/25/2020-02-25-01-35</guid>
            <pubDate>Tue, 25 Feb 2020 01:35:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Trying out Meng To’s <a href="https://designcode.io/swiftui?promo=learnswiftui">SwiftUI class</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/02/19/2020-02-19-00-05</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/02/19/2020-02-19-00-05</guid>
            <pubDate>Wed, 19 Feb 2020 00:05:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>First time I’ve seen a pixel font in the wild in about a decade. I’m not mad at it either.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[This modern what?]]></title>
            <link>https://p.atrick.org/2020/02/17/new-site-who-dis</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/02/17/new-site-who-dis</guid>
            <pubDate>Mon, 17 Feb 2020 20:29:38 GMT</pubDate>
            <description><![CDATA[A new decade, a new site, and a new name]]></description>
            <content:encoded><![CDATA[<p>Every year or so I get the itch to start redesigning my personal site with the intention of writing more, showcasing more work, and generally creating more things to put on the internet. About six months ago, I started gathering ideas for what exactly I wanted the next iteration of my personal site to be, how I wanted it to be presented, and what <em>I</em> wanted to get out the process.</p>
<p>Growing up as an early consumer of the internet in the late 90s, I had a desire to join the ranks of those creating for this new space. I found my way to a few dozen websites/zines/portals/blogs/whatever geared towards <em>making</em>. I was immediately drawn in and wanted to soak up as much as possible. Many of these sites had a distinct identity of their own beyond that of the author(s) that wrote them. Specifically in the “web design” community, my digital worldview was shaped by the likes of <a href="https://web.archive.org/web/20030207162038/http://www.k10k.net:80/">K10k</a>, <a href="http://v2.stopdesign.com/">Stop Design</a>, <a href="https://daringfireball.net">Daring Fireball</a>, <a href="https://web.archive.org/web/20020802043308/http://designiskinky.com/index_main.html">Design Is Kinky</a>, <a href="https://web.archive.org/web/20051202063834/http://swissmiss.typepad.com/">swissmiss</a>, and others. Once again almost twenty-years later, these pioneering sites inspired me to detach my personal home on the web from my own namesake, giving birth to <em>This Modern Web</em>.</p>
<p>This new site is broken down into three different types of content:</p>
<ol>
<li>Long-form content, like this blog post.</li>
<li>Microblogs that take the form of short posts, photos, and links, shown on the <a href="/home">home/feed page</a> <del>and on the Everything Archive in monospace</del> (removed during redesign).</li>
<li><del>The Inbox, which is a media diary of what I am reading, listening to, or watching</del> (removed during redesign).</li>
<li><em>Update</em> Feb 3, 2025: The <a href="/now">Now</a> page, which is a collection of what I am currently up to.</li>
</ol>
<p>Beyond the content that I am producing, I wanted more control over the process by which it is produced. This led me to explore many ways of <em>building</em> this site and my ideal workflows for publishing each type of content. I ultimately choose to go with <a href="https://gatsbyjs.com">Gatsby.js</a> as the framework to build this thing for two reasons:</p>
<ul>
<li>
<p>I wanted an excuse to build a JavaScript/React based site and play in all of the possibilities that come with this landscape.</p>
</li>
<li>
<p>I wanted more flexibility than <a href="https://jekyllrb.com">Jekyll</a> (my previous static site generator) has out-of-the-box. I love Jekyll and still use it for many things, but there are many things that it leaves to be desired for a website in 2020, like processing assets, SEO, a modern data layer, a more dynamic front end, and flexibility in working with Markdown.</p>
</li>
</ul>
<p>Once I got over the initial learning curve of going from the familiar and fairly boundaried world of Jekyll to the unknown and expansive possibilities of Gatsby, I found the experience of building the site to be quite joyful. Thanks to <a href="https://themeui.com">Theme UI</a>, styling the site was felt familiar and much of the heavy lifting that I normally need to do (with utility classes or custom CSS frameworks) was all there for me and completely customizable to however I wanted to setup my design constraints. It’s responsive out-of-the-box and I didn’t have to write one media query. <em>It feels like cheating</em>. And hell, this whole process even finally converted me to a CSS-in-JS disciple.</p>
<p>Of all the new stuff though, my biggest improvement was making the content creation workflow more ergonomic. I was heavily inspired by <a href="https://muan.co">Muan’s personal site</a> which is purely Microblog / Micropub-based collection of “notes”. I love the idea of a personal site with short low-commitment posts as it harkens back to all those early blogs that had their own “news feeds”. I toyed around with this before on the last iteration of my site, but it never really felt like I had the right implementation. Behind the scenes, I used Muan’s <a href="https://github.com/muan/micropub-content">micropub-content</a> as a template for how to build the <a href="https://www.w3.org/TR/micropub/">Micropub standard</a> into a static site-generator like Gatsby as well as a fork of <a href="https://github.com/muan/micropub-endpoint">micropub-endpoint</a> to actually handle the posting of content. On the client side, I’m using the <a href="https://apps.apple.com/us/app/micro-blog/id1253201335">Micro.blog iOS</a> app to write the short posts which is as easy as writing a tweet on my phone. The content gets created in the GitHub repo, Netlify automatically deploys it and the post goes live — just like posting a tweet.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/02/15/2020-02-15-22-45</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/02/15/2020-02-15-22-45</guid>
            <pubDate>Sat, 15 Feb 2020 22:45:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Kinda love the “build the plane as you fly it” approach to making my <a href="https://thismodernweb.com">personal site</a>. The more things coalesce, the higher it flies.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2020/02/10/2020-02-10-13-08</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/02/10/2020-02-10-13-08</guid>
            <pubDate>Mon, 10 Feb 2020 13:08:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I’ve been sick for three weeks, the longest I can remember. Makes me wonder if my body is getting weaker or are the germs are getting stronger.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Some things I did in the 2010s]]></title>
            <link>https://p.atrick.org/2020/01/03/what-i-did-in-the-2010s</link>
            <guid isPermaLink="false">https://p.atrick.org/2020/01/03/what-i-did-in-the-2010s</guid>
            <pubDate>Fri, 03 Jan 2020 22:40:23 GMT</pubDate>
            <description><![CDATA[Music, family, and a career]]></description>
            <content:encoded><![CDATA[<p>The decade began much like the years leading up to it; the US economy was crawling out of the recession, Obama was two years into his first term, Steve Jobs was still somehow making public appearances, and my adult life was really just beginning to take shape. It’s cathartic to take a chunk of time like ten years and play back your memories in fast-forward trying to catch the good parts to watch in slow motion. Memories are faulty and my sense of time is only getting worse, so recapping the last ten years morphed into an exercise in my own personal anthropology. Digging through my Photos library, old emails, and archived Dropbox folders helped me piece together the holes in time, especially in the early 2010s when digital life <em>wasn’t</em> on the cloud by default.</p>
<hr/>
<p>I was 26 years old in 2010. In almost all of my free time I was playing in bands — it was awesome. I was in two at the time: <em>Sun Airway</em> (which began as an electronic duo and had been recently signed to <a href="https://deadoceans.com">Dead Oceans</a>) and <em>Blood Feathers</em> (a down-home six-piece rock n’ roll band). These two groups couldn’t have been more different in sound, personnel, and personality which worked in my favor as I never found myself bored. There were multiple US tours with both bands that kicked off in 2010, the longest of which was Sun Airway’s first tour to support our debut album <em>Nocturne of Exploded Crystal Chandelier</em> (<a href="https://pitchfork.com/reviews/albums/14780-nocturne-of-exploded-crystal-chandelier/">coming in at a whopping 7.8 on Pitchfork</a>).</p>
<p>Last year (in 2019), <a href="https://pitchfork.com/features/article/2010s-chillwave-best-coast-washed-out-neon-indian/">Pitchfork published an interesting retrospective</a> of the genre that Sun Airway was ultimately pegged as: <em>chillwave</em>.</p>
<blockquote>
<p>This purposeful placelessness—a slight-of-hand attempt at creating mystique—also speaks to chillwave’s escapist tendencies. When Philadelphia duo Sun Airway, one of the few group efforts in early chillwave’s largely solitary confines, emerged with their own slightly emo-tinged sound, the airline-esque moniker made perfect sense: Chillwave existed as the ultimate vessel to leave your surroundings—and, in an authorial sense, yourself—behind.</p>
</blockquote>
<p>I couldn’t help but have a laugh at Brandon Cox’s (Deerhunter, Atlas Sound) 2011 remark:</p>
<blockquote>
<p>I hope nobody associates me with fucking chillwave.</p>
</blockquote>
<p>The ironic thing about this genre pretension is that the guitar-based rock music that <em>Blood Feathers</em> was making at the time was kinda out-of-favor in many taste-making circles in the beginning of “the 10’s”. Music blogs had so much influence in discovering and hyping bands (unlike today’s world of streaming services) and many were trying to break bands that fit into this new internet-era aesthetic of hazy sample-based warbly-cassette-tape nostalgia. This only encouraged us in <em>Blood Feathers</em> to unapologetically lean even further in the other direction. We ultimately put out two records during my time with the band (<em>Goodness Gracious</em> in 2009 &amp; <em>Tingle Tangle Wanda</em> in 2014) and took a sketchy-as-fuck RV across the South in the dead of Summer.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="One of the many break-downs we experienced in Blood Feathers&#x27; touring RV. August 2010." loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/what-i-did-in-the-2010s/rv.jpg" srcSet="/assets/what-i-did-in-the-2010s/rv.jpg 1x"/></div><figcaption class="rsi-figcaption">One of the many break-downs we experienced in Blood Feathers&#x27; touring RV. August 2010.</figcaption></figure>
<p>I really loved being on both of those groups and look back on this time as some of the best of my life and certainly the most musically prolific. As fate took us all in different directions, the desire to dedicate this much of my life to music — which is an almost impossible lifestyle — faded. By 2013, <em>Sun Airway</em> was chugging on without me, toured Europe, and put out two more records. <em>Blood Feathers</em> split up by the end of that year and the song writing partnership that held the band together dissolved. My own sense of purpose shifted from trying to make it as a musician to building a life with my partner and to have a meaningful career.</p>
<hr/>
<p>On October 12, 2013, I got married in the most-fun wedding that I’ve ever attended (still haven’t beat it). The next day, as newlyweds, we caught a ride to lovely Newark airport and embarked on our incredible honeymoon to Europe. We toured through Venice, the South of France, Basque Country, and Paris. To say we ate and drank our way through this trip would be an understatement. One of my favorite memories from this trip was going to a small wine bar in Venice where they hand-sliced Mortadella behind the bar. Every day we’d go there around four for a drink and a slice and every day there was a roving gang of street dogs that would come in around the same time. The bar tender greeted them as regulars and tossed them scraps of ham. Satisfied enough the dogs would trot out the door and go about the the rest of their evening, hitting up every cafe in the neighborhood to get fed. What a life.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Outside our Venice hotel. Pretty good for an iPhone 5." loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/what-i-did-in-the-2010s/venice.jpg" srcSet="/assets/what-i-did-in-the-2010s/venice.jpg 1x"/></div><figcaption class="rsi-figcaption">Outside our Venice hotel. Pretty good for an iPhone 5.</figcaption></figure>
<p>Flying into Italy and taking a train across France and Spain also taught me that the rail system in Europe is fucking amazing. Spending so much time on the road a musician, I had the privilege to see almost every major city in the US, and this is something that I think more people should experience. If only it was as easy as hoping on a train… that was fast… and had good food and decent wine.</p>
<hr/>
<p>Roughly a month before we got engaged in 2012 (about a year and a half before our wedding), I started working at Happy Cog studios in Philadelphia. Having spent the previous five years cutting my teeth at a fast-growing but way more corporate agency in the suburbs (a forty-five minute commute on a good day), this was an exciting change. This opportunity seemed to align much more with how I wanted to work: smaller and more meaningful projects where quality was regarded as important as revenue. Perhaps most valuable though, was the team I got to work with — super talented, opinionated, and genuinely fun people to spend eight hours a day with. At Happy Cog I made some of the best professional relationships of my career (which would eventually lead me to GitHub), learned a ton about design, web development, and was plugged in to a network of folks who literally made the internet that loved. Relationships aside, I also learned a lot about success and failure at Happy Cog, what I liked and disliked about design (and the industry in general), and what ultimately made me dread coming into work.</p>
<p>A year and a half into my tenure, there were signs that the company itself was beginning to struggle; people were fired, there were layoffs, eventually our Austin office closed without much notice. I stuck through it in hopes that things would get better, but ultimately I just felt burnt out. By the end of the my third year I stopped feeling a connection to the work. I struggled to feel purpose investing my time in solving problems for clients when I knew the solutions would ultimately be at the fate of whatever level of corporate dysfunction they possessed.</p>
<p>I like to imagine that this is when I went through my career adolescence and discovered who I was and what I valued in my work. When I made the decision to leave Happy Cog, I knew that the years I spent doing client/agency work served me well, but there wasn’t much drive left there. Ultimately, I craved the opportunity to work on problems that I felt true ownership over, shared a sense of investment, and had some iterative process in solving. Around the same time, I also gained a deeper fascination with developer tools and the communities around them. To scratch my own itch, I designed and built my the first end-to-end side project, <a href="/2015/02/06/tab-lab/">Tab Lab</a>. This little taste of working on a product that I felt passionate about got me hooked, so when I had the chance to interview at GitHub in the summer of 2015, I jumped at it.</p>
<hr/>
<p>My daughter was born in May of 2015 and everything changed. Not only did I want to spend more time at home, I gained the benefit of leaving the pretty strict nine-to-five-ish work schedule in favor of a flexible remote one. This was a huge factor in my choosing to work at GitHub. Being around for all the moments in the early years of my daughter’s life alone outweighed any uncertainties I had about the decision. Working remotely isn’t for everyone though, and I did struggle with some aspects initially. I no longer had to commute so most of my day was spent in a chair at my desk. Finding ways to get out of the house became a must — for me this meant going to the gym regularly and getting my body moving. I seriously took up running and haven’t regretted a second of it.</p>
<p>The next few years seemed to happen at warp speed. Time gets really distorted after you have kids. I imagine that the lack of sleep, the series of temporary routines that constantly get disrupted, and the speed at which kids’ brains and bodies develop, swirl around and affect how our minds perceive time passing. Having settled into parental life, our daughter grew from an infant to toddler to a kid and started going to pre-school in our neighborhood. She gained her own life, best friends, interests, tastes, and opinions. In all of this (and I know it’s cliché to say this) being a parent dwarfs all other aspects in my life in almost every way that I can think of, especially once the develop a true sense of self.</p>
<hr/>
<p>Early on at GitHub, I found an incredibly empowering and energizing sense of autonomy. I was pushing code to production (GitHub.com) in my first month as a designer and I had never felt a sense of sheer power like that before. It really did feel like a drug. Within my first quarter, I joined a newly formed team that completely redesigned and rebuilt the top of the funnel of our flagship products. I loved putting stuff out into the world and seeing the internet light up praising or trashing it. Work then was ergonomic in a way that I had never experienced. GitHub used the best workflow that I had seen to implement and deploy products. The spikes of dopamine that you get from making stuff at that scale is hard to beat and I could see how it becomes addictive.</p>
<p>I decided to pursue management during my second year at GitHub. It was a big adjustment and a different sense of reward, one that I’m still figuring out. Instead of getting the high from designing, building, and shipping products, I had to find what would become my hook into management. It turns out, that takes years (just like learning how to be a designer). In the last few years, I’ve found it in building my team and empowering them to be impactful with what they produce. This takes many forms; helping the team shape products, being a good listener, working on longer-term vision with my Product counter parts, helping my team identify areas for personal career growth. Still though, nothing beats the feeling of waking up on a ship day.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2019/09/27/23145</link>
            <guid isPermaLink="false">https://p.atrick.org/2019/09/27/23145</guid>
            <pubDate>Fri, 27 Sep 2019 19:59:05 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>4 years at GitHub!</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/08/13/49313</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/08/13/49313</guid>
            <pubDate>Mon, 13 Aug 2018 13:41:53 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Are there any examples of design education that focus on how to effectively utilize existing infrastructures vs. blow everything up and start over?</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/08/09/68214</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/08/09/68214</guid>
            <pubDate>Thu, 09 Aug 2018 18:56:54 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>🤔 Does the long arc of the web bend toward non-bullshit? Link: <a href="https://pxlnv.com/blog/bullshit-web/">The Bullshit Web</a></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/08/08/77329</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/08/08/77329</guid>
            <pubDate>Wed, 08 Aug 2018 21:28:49 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>“I love the smell of incremental correctness in the morning.” - Anonymous</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/08/06/55722</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/08/06/55722</guid>
            <pubDate>Mon, 06 Aug 2018 15:28:42 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Zen and the art of website maintenance</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/07/27/74622</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/07/27/74622</guid>
            <pubDate>Fri, 27 Jul 2018 20:43:42 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Wrote code for the first time in a while today. Feels like stretching.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[DIY internet privacy]]></title>
            <link>https://p.atrick.org/2018/03/27/diy-internet-privacy</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/03/27/diy-internet-privacy</guid>
            <pubDate>Tue, 27 Mar 2018 14:38:00 GMT</pubDate>
            <description><![CDATA[Roll your own VPN for (almost) free]]></description>
            <content:encoded><![CDATA[<p>For years Virtual Private Networks have been used by corporations to provide a secure channel to employees for access to sensitive company data or systems. In simple terms, a VPN server acts as a proxy and all network traffic is routed through it, encapsulated, encrypted and delivered to the end-user. This type of private secure delivery doesn’t only have business applications, though.</p>
<p>Internet privacy <a href="https://www.aclu.org/issues/privacy-technology/internet-privacy/status-internet-privacy-legislation-state">laws have been changing</a>. <a href="https://www.huffingtonpost.com/entry/republicans-are-about-to-kill-rules-banning-internet-providers-from-sharing-your-web-history-without-your-consent_us_58d9a4cbe4b00f68a5ca2c7c">A lot</a>. Internet Service Providers have unprecedented access to record and analyze your online activity, and a VPN can be a good defense against such prying. There is also the added benefit of spoofing your geographic location (IP-based geolocation services would pick up the location of the VPN server that you connect to, not your physical location), which is a great way to stream Netflix while vacationing out of the country.</p>
<p>Having a VPN server laying around for this type of personal use has historically been cost-prohibitive. But we live in 2018 now, and cloud-based hosting is very cheap (or free) and a lot of IP security tools are open source. This is great if you’re willing to tinker with the setup to make it work for you — which hopefully this post can help with.</p>
<h2>Open Source to the rescue</h2>
<p><a href="https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/">Algo VPN</a> is an open source VPN server geared toward security and ease-of-use. It comes with IPSec features that make allow you to secure your sessions out-of-the-box. Here is a quick set up guide and some issues that I ran into while setting it up for the first time.</p>
<h3>1. Figure out where you want to host this</h3>
<p>I choose Digital Ocean because it was easy, required next to no setup, and costs less than five bucks a month (and comes with a ten dollar referral credit). If you want a setup like mine, use this link to create your account… <em>Note that you don’t need to configure a Droplet or anything yet, this will happen automatically later.</em></p>
<a href="https://m.do.co/c/e675b6b6aa8e">💁 Sign up for Digital Ocean</a>
<h3>2. Download the VPN server source locally</h3>
<p><a href="https://github.com/trailofbits/algo">Algo’s source is hosted on GitHub</a>, you can download a <code>zip</code> file of the source:</p>
<a href="https://github.com/trailofbits/algo/archive/master.zip"><p>⬇ Algo VPN source (.zip)</p></a>
<p>Extract the <code>zip</code> file. This will create a folder called <code>algo-master</code>. Rename it to whatever you want and put it somewhere that you’ll remember. For the purposes of these instructions, let’s rename it <code>algo-vpn</code>. The rest of these instructions assume that you’re on a Mac, as that is what I used… but there are <a href="https://github.com/trailofbits/algo#deploy-the-algo-server">Linux and Windows-based docs</a>.</p>
<h3>3. Configure the server locally</h3>
<p>Fire up Terminal and <code>cd</code> to your <code>algo-vpn</code> folder…</p>
<p>The first thing you want to do is check to see if you have <code>python</code> installed…</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> which</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python</span></span></code></pre></figure>
<p>You may get back <code>python not found</code> (which means you need to install Python 2) or something like <code>/usr/local/bin/python2</code> (which means you already have it) or, in my case <code>python: aliased to python3</code>…</p>
<p>Algo <em>requires</em> Python 2. If you’re unsure what version you’re running <code>python --version</code> will give you a clue.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --version</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">Python</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> 3.6.3</span></span></code></pre></figure>
<p>So I’m running Python 3 (which I installed from <a href="https://brew.sh">Homebrew</a>). This means that I need also install Python 2 and tell my computer to use it and not Python 3 for this…</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> brew</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2</span></span></code></pre></figure>
<p>Ok, now let’s see how my Python versions are setup:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> which</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">python:</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> aliased</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> to</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python3</span></span></code></pre></figure>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --version</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">Python</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> 3.6.3</span></span></code></pre></figure>
<p>👍 I wanted this to remain my default Python for other nerdy shit that I’m into.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --version</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">Python</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> 2.7.14</span></span></code></pre></figure>
<p>👍👍 I now have access to Python 2 using <code>python2</code> from the command line.</p>
<p>Now we can follow the install instructions from the <a href="https://github.com/trailofbits/algo">Algo GitHub repo</a>, replacing the <code>python</code> command to use <code>python2</code> instead…</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> virtualenv</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --python=</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">`</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">which</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2`</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1"> env</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">source</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> env/bin/activate</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -U</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -r</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> requirements.txt</span></span></code></pre></figure>
<p><em>but</em> this doesn’t work because my Python 2 doesn’t have the <code>virtualenv</code> module installed yet. To install <code>virtualenv</code> it, I must use <code>pip</code> (Python’s built-in package manager). I’m going to use <code>pip2</code> here so it explicitly installs it to my Python 2 instance and not my default Python 3 instance. I’m also going to use <code>sudo</code> here because the command won’t have write access to the proper folders without it, and I’m too lazy to reconfigure access for just this one thing.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> sudo</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip2</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> virtualenv</span></span></code></pre></figure>
<p>Ok, so let’s try it again…</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> virtualenv</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --python=</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">`</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">which</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> python2`</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1"> env</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">source</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> env/bin/activate</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -U</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> &amp;&amp; </span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">python2</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -m</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pip</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -r</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> requirements.txt</span></span></code></pre></figure>
<p>… ⏰ <em>this will install a bunch of dependencies</em> ⏰ …</p>
<p>Once you’re done installing the dependencies, you can set up your VPN user accounts by editing <code>config.cfg</code> to add some usernames to the list (replace <code>dan</code> and <code>jack</code> with your usernames):</p>
<pre><code># Add as many users as you want for your VPN server here.
# Credentials will be generated for each one.
users:
  - pmarsceill
</code></pre>
<h3>4. Setup and deploy to Digital Ocean</h3>
<p>This single command will create a Droplet, set it up, and deploy it to your Digital Ocean account:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="shell" data-theme="github-dark github-light"><code data-language="shell" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> ./algo</span></span></code></pre></figure>
<p>You’ll need access to a Digital Ocean API key, so you should log in to your Digital Ocean account <a href="https://cloud.digitalocean.com/settings/api/tokens">and generate one</a>. When prompted, paste that API key into the command line.</p>
<pre><code>  What provider would you like to use?
    1. DigitalOcean
    2. Amazon Lightsail
    3. Amazon EC2
    4. Microsoft Azure
    5. Google Compute Engine
    6. Scaleway
    7. OpenStack (DreamCompute optimised)
    8. Install to existing Ubuntu 16.04 server

Enter the number of your desired provider
: 1

Enter your API token. The token must have read and write permissions (https://cloud.digitalocean.com/settings/api/tokens):
[pasted values will not be displayed]
:

Name the vpn server:
[algo.local]: FtheFCC
</code></pre>
<p>Next, choose your location wisely — remember streaming video services Netflix and HBOGo block restrict access in some countries.</p>
<pre><code>  What region should the server be located in?
    1.  Amsterdam        (Datacenter 2)
    2.  Amsterdam        (Datacenter 3)
    3.  Frankfurt
    4.  London
    5.  New York         (Datacenter 1)
    6.  New York         (Datacenter 2)
    7.  New York         (Datacenter 3)
    8.  San Francisco    (Datacenter 1)
    9.  San Francisco    (Datacenter 2)
    10. Singapore
    11. Toronto
    12. Bangalore
Enter the number of your desired region:
[7]: 8
</code></pre>
<p>Run through the rest of your setup — you can answer <code>y</code> to everything.</p>
<p>If all goes well you’ll be greeted with this:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="json" data-theme="github-dark github-light"><code data-language="json" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">ok: [</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">255.255</span><span style="--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;--shiki-light:#B31D28;--shiki-light-font-style:italic">.</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">255.55</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">] =&gt; {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    &quot;msg&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: [</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">        [</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#                          Congratulations!                            #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#                     Your Algo server is running.                     #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#    Config files and certificates are in the ./configs/ directory.    #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#              Go to https://whoer.net/ after connecting               #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#        and ensure that all your traffic passes through the VPN.      #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#               Local DNS resolver 255.255.255.55              #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">            &quot;&quot;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">        ],</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">        &quot;    </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#                The p12 and SSH keys password for new users is XXXXXXXX             #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;\n</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">        &quot;    </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#                  The CA key password is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                 #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;\n</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">        &quot;    </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">#      Shell access: ssh -i configs/algo.pem root@255.255.255.55        #</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">\&quot;\n</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">    ]</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<p>Keep this screen handy… you’ll need it later.</p>
<p>You should also now be able to log into Digital Ocean and see your VPN server Droplet running:</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="&quot;The VPN server on Digital Ocean&quot;" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/diy-internet-privacy/digital-ocean.png" srcSet="/assets/diy-internet-privacy/digital-ocean.png 1x"/></div><figcaption class="rsi-figcaption">&quot;The VPN server on Digital Ocean&quot;</figcaption></figure>
<h3>5. Configure a computer to connect to the VPN</h3>
<p>In your <code>algo-vpn</code> folder, find <code>configs/xxx.xxx.xxx.xx/username.mobileconfig</code>. Send this file to the user of the VPN (if they use a Mac or iOS device — if they use Windows or Linux there are equivalent VPN profiles in here). When they open this file they will be prompted with:</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="&quot;VPN profile installation on MacOS&quot;" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/diy-internet-privacy/install-profile.png" srcSet="/assets/diy-internet-privacy/install-profile.png 1x"/></div><figcaption class="rsi-figcaption">&quot;VPN profile installation on MacOS&quot;</figcaption></figure>
<p>And they can continue through the installation process. Eventually, they will need to enter the password from the previous section (obfuscated with X’s), not their system password:</p>
<pre><code>&quot;    \&quot;#                The p12 and SSH keys password for new users is XXXXXXXX             #\&quot;\n&quot;,
</code></pre>
<p>Voila, they should be connected automatically. Open up network preferences and they should see something like:</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="&quot;Network settings showing VPN connected on MacOS&quot;" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/diy-internet-privacy/network-settings.png" srcSet="/assets/diy-internet-privacy/network-settings.png 1x"/></div><figcaption class="rsi-figcaption">&quot;Network settings showing VPN connected on MacOS&quot;</figcaption></figure>
<p>I turned off the <code>connect on demand</code> option because I like to manually connect to VPN when I need to, not automatically connect when not on a trusted network.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/03/21/grand-designs</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/03/21/grand-designs</guid>
            <pubDate>Wed, 21 Mar 2018 04:14:58 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>📺 <a href="https://www.netflix.com/title/80160755">Grand Designs</a> has become my new obsession.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/03/14/84178</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/03/14/84178</guid>
            <pubDate>Wed, 14 Mar 2018 23:22:58 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>👋🏻 I’m posting from the Micro.blog iOS app using the micropub API.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Here we go again]]></title>
            <link>https://p.atrick.org/2018/03/14/here-we-go-again</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/03/14/here-we-go-again</guid>
            <pubDate>Wed, 14 Mar 2018 01:00:00 GMT</pubDate>
            <description><![CDATA[Is the future of the web a network of independent sites?]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>There seems to be a weak undercurrent of old and young bloggers like us that feel sentimental or curious and want to bring back blogging. Blogging won’t save the world. But, hell, after two weeks now, we can confirm: it feels great to be back on the blogging line.</p>
</blockquote>
<blockquote>
<p>If you are one of those old or young bloggers, please join in. Drop Facebook, drop Twitter and drop Medium for original thought. Own your traffic. You can use them to engage in discussion. But don’t get lost in there. Write daily. Publish as often as you have something to say. Link to other blogs.</p>
</blockquote>
<p>— Oliver Reichenstein <a href="https://ia.net/topics/web-trend-map-2018/">IA.net Web Trend Map 2018</a></p>
<p>It’s worth talking about how you can do this in 2018. The benefits of using Twitter, Facebook, and Medium are the “built-in” network of users that you can reach and the low barriers to start producing content. Can you be independent, have a nice publishing platform, and still build a community? More, now than ever, the answer is yes. Perhaps you don’t want to be responsible for building your own website or managing your own Wordpress blog (though these still work fine)… Just before the new year, I set up a <a href="https://micro.blog">Mirco.blog</a> account and sincerely hope that this type of model gains traction across other types content-based networks on the web.</p>
<p>On the surface, Micro.blog looks a lot like early-Twitter. But that’s really where the similarities end. On Micro.blog you own and can self-host (if you want to) all the content yourself. This BYO content model uses Micro.blog as the network layer that sits on top of your posts (which are syndicated to Micro.blog via RSS or hosted on their platform). For five bucks a month, Micro.blog also offers a <em>hosted</em> option if you don’t want to set up your own separate blog that syndicates to your Micro.blog account.</p>
<blockquote>
<p>Micro.blog adds discovery and conversations on top of previously unconnected blog posts.</p>
</blockquote>
<p>— <a href="http://help.micro.blog/faq/">Micro.blog FAQ</a></p>
<p>Micro.blog also offers <a href="https://itunes.apple.com/us/app/micro-blog/id1253201335?ls=1&amp;mt=8">a native iOS app</a> to make the browsing and posting a bit nicer, though unless you use their hosted option, your site must support the <a href="http://micropub.net">Micropub</a> API standard to create posts through the third-party services.</p>
<p>↪︎ <em>Read more about <a href="http://help.micro.blog/2015/why-i-created-this/">why Micro.blog was created</a></em></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <link>https://p.atrick.org/2018/01/20/hello-microblog</link>
            <guid isPermaLink="false">https://p.atrick.org/2018/01/20/hello-microblog</guid>
            <pubDate>Sat, 20 Jan 2018 20:20:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Hello, micro.blog!</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Design GitHub, the product]]></title>
            <link>https://p.atrick.org/2017/03/28/design-github</link>
            <guid isPermaLink="false">https://p.atrick.org/2017/03/28/design-github</guid>
            <pubDate>Tue, 28 Mar 2017 11:34:00 GMT</pubDate>
            <description><![CDATA[Shape the future of software development]]></description>
            <content:encoded><![CDATA[<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/design-github/design-github.png" srcSet="/assets/design-github/design-github.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p><em>Are you designer who enjoys building products and wants to work on a highly visible one? I’m looking to a <a href="https://boards.greenhouse.io/github/jobs/580527#.WNvkI1KZNjA" title="GitHub&#x27;s Product Designer job application">hire code-conscious product designer</a> to join my team at <a href="https://github.com" title="GitHub">GitHub</a>.</em></p>
<h2>What this position is</h2>
<p>This is a product design position. You’ll be working with product managers, engineers, design managers, and other product designers to define, design, and build features on GitHub dot com. You’ll research, sketch, create mockups, write code, and deploy to production. You’ll probably introduce a few bugs — its cool, we all do. Your work will be reviewed and you will review others’ work. You will use GitHub to build GitHub.</p>
<blockquote>
<p>Is this position remote?</p>
</blockquote>
<p>We value a remote work. So much so that most of our product design team is remote. In an effort to create more of a geographically balanced team, we’re currently only considering candidates that live in the San Francisco area (or are willing to relocate) and can work out of our office in SOMA.</p>
<blockquote>
<p>What type of projects will I get to work on?</p>
</blockquote>
<p>GitHub builds products for developers, businesses, open source organizations, educational institutions, government agencies and just about anyone who is involved in building and shipping software. About 20 million people currently use GitHub.com around the world.</p>
<p>My group within the product design team primarily focuses on the businesses that use GitHub, as well as the integrators that build products to extend our platform in various ways. This means you’ll get to work on stuff like:</p>
<ul>
<li>Providing organizations enterprise-class tools to help manage and support teams of all sizes</li>
<li>Helping developers discover and install integrations to add functionality to their projects on GitHub</li>
<li>Giving integrators a great experience to build on top of, extending the core functionality of GitHub</li>
</ul>
<p>Additionally, you’ll provide input and feedback that helps influence the direction of product designers working on other areas of GitHub.</p>
<h3>This position might be a great fit if</h3>
<ul>
<li>You have a few years experience designing software or websites</li>
<li>You can talk and write about your work</li>
<li>You’re comfortable with people having strong opinions about your work and are comfortable sharing yours</li>
<li>You can use HTML and CSS as a design tool (to prototype or build your designs)</li>
<li>You enjoy shepherding design from concept through implementation</li>
<li>You can work within a defined design system and can explain why you might need to break outside of it</li>
<li>You value research as a foundational design component</li>
<li>You’ve used GitHub before or are familiar with modern developer workflows</li>
</ul>
<h3>This position may not be right for you if…</h3>
<ul>
<li>You’ve never held a professional design position before</li>
<li>You don’t have a desire to expand your front-end development skills</li>
<li>You have serious front-end development chops, but aren’t excited by an iterative design process grounded in research</li>
<li>You’re really into designing editorial content, digital marketing experiences, conference websites, etc… (<a href="http://sophieshepherd.com/2017/12/06/hiring-a-web-designer.html">we’re hiring those types of web designers, too!</a>)</li>
</ul>
<h2>Applying</h2>
<p>If the above interests you, but you aren’t sure if you would be a good fit, feel free <a href="https://twitter.com/pmarsceill">ask me any questions via Twitter</a> (my DMs are open). Otherwise, <a href="https://boards.greenhouse.io/github/jobs/580527#.WNvkI1KZNjA">head over to the job application</a>, we’re excited to meet you.</p>
<hr/>
<p><em>Thanks to Sophie Shepherd for inspiring me <a href="http://sophieshepherd.com/2017/12/06/hiring-a-web-designer.html" title="Calling All Web Designers">with her post</a> and for her help editing this one.</em></p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Dear Last.fm,]]></title>
            <link>https://p.atrick.org/2017/01/10/dear-last-fm</link>
            <guid isPermaLink="false">https://p.atrick.org/2017/01/10/dear-last-fm</guid>
            <pubDate>Tue, 10 Jan 2017 15:30:00 GMT</pubDate>
            <description><![CDATA[It’s been awhile. Seven years, actually]]></description>
            <content:encoded><![CDATA[<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/dear-last-fm/dear-last-fm.png" srcSet="/assets/dear-last-fm/dear-last-fm.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>Spotify (the streaming service that I use) is dropping the ball pretty hard when it comes to personal listening stats and communal listening features. So much so, that I believe that Last.fm could fill this void, while connecting users across multiple streaming services together.</p>
<p>You started as a way to bring listeners of downloadable media together. Around 2006, I began using your service so I could update my blog with the songs that I was listening to at the moment. A lot has changed since then, huh? I stopped blogging regularly… and then started again, and then stopped again, and then recently started again… and with the rise of streaming music services with “social” features built in, people like me kind of forgot about you.</p>
<p>After logging into my Last.fm account for the first time in a long while, a few things dawned on me. First, Spotify’s social features leave a lot to be desired. The sole reason why I came back today was because I wanted to track/see my most played songs, artists, etc… (seems like a simple request?) According to <a href="https://community.spotify.com/t5/Desktop-Linux-Windows-Web-Player/My-most-played-songs/td-p/1408745">this article</a>, the only way to achieve this with Spotify is to use Last.fm. Secondly, I don’t have a Facebook account. If you’re like me, you know that Spotify treats users without Facebook accounts as second-class citizens. You <del>can’t have an avatar</del> (recently fixed) or even a real first and last name without one. Beyond being nameless and faceless—forget about connecting with friends as they’ll never find you. “Normal” users (those with Facebook accounts) will have to know your handle and search for it (and most people just connect to Facebook and use those connections). Lastly, a big chunk of my friends don’t use Spotify. The streaming music ecosystem is pretty diverse with streaming services like Apple Music, Tidal, Google Play, Bandcamp, and many other smaller niche services.</p>
<p>I think this leaves you with a tremendous opportunity. Not since Rdio (RIP 💀) has any single streaming service done anything innovative with social listening features. Users are spread across various services and ecosystems and are dying to connect with each other. Could Last.fm be the thing to bring us together? I’m writing not to complain about your ads or to ask you to implement anything specific. I’m writing in hopes that you might take this opportunity head-on and innovate between the cracks in the digital music landscape so that we can discover music new, universally share my playlists, and stay up on what my friends are listening to regardless of service they use.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Hacking the font Stack]]></title>
            <link>https://p.atrick.org/2016/11/28/hacking-the-font-stack</link>
            <guid isPermaLink="false">https://p.atrick.org/2016/11/28/hacking-the-font-stack</guid>
            <pubDate>Mon, 28 Nov 2016 17:18:00 GMT</pubDate>
            <description><![CDATA[Explorations in a modern native fonts on the web]]></description>
            <content:encoded><![CDATA[<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/hacking-font-stack.png" srcSet="/assets/hacking-font-stack/hacking-font-stack.png 1x"/></div><figcaption class="rsi-figcaption"></figcaption></figure>
<p>When the <code>@font-face</code> directive (which allows the use of non-system font files on webpages) made its <a href="https://www.w3.org/TR/2001/WD-css3-fonts-20010731/" title="CSS3 module: Fonts, W3C Working Draft 31-July-2001">official debut</a> in the CSS3 fonts module, Flash was still a big part of the web. Compared to CSS at the time, Flash allowed for seemingly limitless possibilities in layout, typography, animations and consistency across platforms. It was extremely attractive to adopt with its relatively shallow learning curve and gave designers a more visual way to put content on the web.</p>
<p>A lot of folks (myself included) developed a palpable distaste for Flash-based sites as they were often slow to load, relied on a locally installed plugin, and often were a black box of content that was inaccessible to a large chunk of the web’s users. <code>@font-face</code> was just the thing CSS needed if was going to seriously compete with Flash and become adopted as part of the modern (and standard) way to build websites. HTML + CSS offered a more extensible and accessible way to present content and with the addition of features like <code>@font-face</code> we could start to see a future where the aesthetic consistency of Flash could be replicated with CSS.</p>
<p>I started experimenting with web fonts in 2007 after reading <a href="http://alistapart.com/article/cssatten" title="CSS @ Ten: The Next Big Thing">CSS @ Ten: The Next Big Thing</a>.
Ten years prior, <a href="https://www.w3.org/TR/WD-CSS2-971104/cover.html" title="CSS 2 Specification - W3C Working Draft 04-November-1997">this CSS2 draft from 1997</a> mentions the <code>@font-face</code> directive but it was removed in the <a href="https://www.w3.org/TR/CSS21/" title="Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification">CSS2.1 spec</a>.</p>
<p>🎉 <em>Fun fact: Internet Explorer was the first browser to implement web fonts with @font-face, back in version 4 (1997).</em></p>
<p>The web is now available on any capable device, largely thanks to the adoption of mobile-friendly web design (like responsive), the downfall of Flash as a web technology, and a user base glued to their phones reading Facebook at any given time. This has forced those who build web pages to consider performance impacts (load time, render time, etc..) more than ever before — or at least since the days of dialup when that draft was written in 1997.</p>
<p>Like images, JavaScript, and CSS bloat; web fonts can easily become performance bottlenecks if not kept in check. While they allow for consistency in typography across devices and platforms, concern for performance and accessibility over pixel-perfect consistency is a valid reason to think twice before using them.</p>
<p>Today, there are some newer fonts available that make setting type with system fonts on the web a little nicer. Since 1997, major OSs now ship with (and continue to release) native system fonts that can be easily adopted using a few stylesheet hacks and some carefully planned fallbacks.</p>
<p>Let me preference this list by saying that I am not anti-webfont and I think the technology was/is a huge step forward for CSS. I do think there is still work to be done when it comes to how browsers load these resources as it can lead to user experience issues like <a href="https://css-tricks.com/fout-foit-foft/" title="FOUT, FOIT, FOFT">FOIT (flash of invisible text)</a>. Likewise, this list is experimental and hasn’t been tested on many devices beyond recent OSX / Android / and Windows 7+ devices. These stacks can work independently or in conjunction with web fonts and hopefully will be useful for folks looking for alternatives.</p>
<h2>1. The modern serif</h2>
<p>A modern and more humanist serif stack ideal for both body and display sized text.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="css" data-theme="github-dark github-light"><code data-language="css" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">body</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-family</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Hiragino Mincho Pro&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, Cambria, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Roboto Serif&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">serif</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-size</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">16</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">px</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  line-height</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">1.4</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<p>On the Apple side of things, we’re using a font intended for a Japanese character set which includes good support for latin characters. I think this is a hidden gem on Apple’s OSes that isn’t used nearly enough.</p>
<ul>
<li>macOS / OS X / iOS - <em>Hiragino Mincho Pro</em></li>
<li>Windows 7 and up - <em>Cambria</em></li>
<li>Android / ChromeOS - <em>Roboto Serif</em></li>
<li>Falls back to - <em>local serif</em></li>
</ul>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Hiragino Mincho Pro (Latin characters) on macOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/apple-hiragino-mincho-pro.png" srcSet="/assets/hacking-font-stack/apple-hiragino-mincho-pro.png 1x"/></div><figcaption class="rsi-figcaption">Hiragino Mincho Pro (Latin characters) on macOS</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Cambria on Windows" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/windows-cambria.png" srcSet="/assets/hacking-font-stack/windows-cambria.png 1x"/></div><figcaption class="rsi-figcaption">Cambria on Windows</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Roboto Serif on Android / ChromeOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/android-roboto-serif.png" srcSet="/assets/hacking-font-stack/android-roboto-serif.png 1x"/></div><figcaption class="rsi-figcaption">Roboto Serif on Android / ChromeOS</figcaption></figure>
<h2>2. The Helvetica / Arial alternative</h2>
<p>Modern sans stack suitable for UI and body copy. A variety of weights (with a light option on most operating systems).</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="css" data-theme="github-dark github-light"><code data-language="css" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">body</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-family</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">:</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    -apple-system</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, BlinkMacSystemFont, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Segoe UI&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, Roboto, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">Helvetica</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">Arial</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">    sans-serif</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-size</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">16</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">px</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  line-height</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">1.4</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<p>You might have seen this type of stack used on Medium, GitHub, and Facebook recently.</p>
<ul>
<li>macOS / OS X / iOS - <strong>San Francisco</strong></li>
<li>Windows 7 and up - <strong>Segoe UI</strong></li>
<li>Android / ChromeOS - <strong>Roboto</strong></li>
<li>Falls back to - <strong>Helvetica, Arial, local sans serif</strong></li>
</ul>
<p>If you want to stay strictly with neo-grotesque typefaces, you could pull out <code>Segoe UI</code> font to allow Windows to render the fall back (Arial). Segoe UI is one of the only default fonts on Windows that has a light weight option, which makes it useful in many display sized contexts.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="San Francisco on macOS / iOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/apple-san-francisco.png" srcSet="/assets/hacking-font-stack/apple-san-francisco.png 1x"/></div><figcaption class="rsi-figcaption">San Francisco on macOS / iOS</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Segoe UI on Windows" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/apple-san-francisco.png" srcSet="/assets/hacking-font-stack/apple-san-francisco.png 1x"/></div><figcaption class="rsi-figcaption">Segoe UI on Windows</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Roboto on Android / ChromeOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/android-roboto.png" srcSet="/assets/hacking-font-stack/android-roboto.png 1x"/></div><figcaption class="rsi-figcaption">Roboto on Android / ChromeOS</figcaption></figure>
<h2>3. The humanist sans</h2>
<p>A humanist sans stack that works best with body copy set above 18px.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="css" data-theme="github-dark github-light"><code data-language="css" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">body</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-family</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Gill Sans&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Segoe UI&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Lucida Grande&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, Calibri, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">sans-serif</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-size</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">18</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">px</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  line-height</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">1.4</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<ul>
<li>macOS / OS X / iOS - <strong>Gill Sans</strong></li>
<li>Windows 7 and up - <strong>Segoe UI</strong></li>
<li>Android / ChromeOS - <strong>Roboto</strong></li>
<li>Falls back to - <strong>Lucida Grande, Calibri, local sans serif</strong></li>
</ul>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Gill Sans on macOS / iOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/apple-gill-sans.png" srcSet="/assets/hacking-font-stack/apple-gill-sans.png 1x"/></div><figcaption class="rsi-figcaption">Gill Sans on macOS / iOS</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Segoe UI on Windows" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/windows-segoe-ui.png" srcSet="/assets/hacking-font-stack/windows-segoe-ui.png 1x"/></div><figcaption class="rsi-figcaption">Segoe UI on Windows</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Roboto on Android / ChromeOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/android-roboto.png" srcSet="/assets/hacking-font-stack/android-roboto.png 1x"/></div><figcaption class="rsi-figcaption">Roboto on Android / ChromeOS</figcaption></figure>
<h2>4. Classical serif</h2>
<p>A traditional serif stack suitable optimized for legibility in body copy.</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="css" data-theme="github-dark github-light"><code data-language="css" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">body</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-family</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: Athelas, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Times New Roman&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">serif</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">h1</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">h2</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">,</span></span>
<span data-line=""><span style="--shiki-dark:#85E89D;--shiki-light:#22863A">h3</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> {</span></span>
<span data-line=""><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">  font-family</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">: Athelas, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Palatino Linotype&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">&quot;Times New Roman&quot;</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">, </span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5">serif</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">;</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">}</span></span></code></pre></figure>
<p>Here we are only using <code>Palatino Linotype</code> for display sized headings on Windows machines as I find it hard to read at small sizes on lower resolution displays.</p>
<ul>
<li>macOS / OS X / iOS - <strong>Athelas</strong></li>
<li>Windows 7 and up - <strong>Palatino Linotype</strong> for headings and <strong>Times New Roman</strong> for body</li>
<li>Android / ChromeOS - <strong>Roboto Serif</strong></li>
<li>Falls back to - <strong>local serif</strong></li>
</ul>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Athelas on macOS / iOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/apple-athelas.png" srcSet="/assets/hacking-font-stack/apple-athelas.png 1x"/></div><figcaption class="rsi-figcaption">Athelas on macOS / iOS</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Palentino Linotype and Times New Roman on Windows" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/windows-palentino-linotype-times-new-roman.png" srcSet="/assets/hacking-font-stack/windows-palentino-linotype-times-new-roman.png 1x"/></div><figcaption class="rsi-figcaption">Palentino Linotype and Times New Roman on Windows</figcaption></figure>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Roboto Serif on Android / ChromeOS" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/hacking-font-stack/android-roboto-serif.png" srcSet="/assets/hacking-font-stack/android-roboto-serif.png 1x"/></div><figcaption class="rsi-figcaption">Roboto Serif on Android / ChromeOS</figcaption></figure>
<h3>Suggestions or additions?</h3>
<p>If you have suggestions or additions to the stacks above, <a href="https://github.com/pmarsceill/this-modern-web/issues/new" title="Open an Issue on GitHub">open an issue on this site’s GitHub repo</a> and I’ll update or append them to this list.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Introducing Tab Lab]]></title>
            <link>https://p.atrick.org/2015/02/08/tab-lab</link>
            <guid isPermaLink="false">https://p.atrick.org/2015/02/08/tab-lab</guid>
            <pubDate>Sun, 08 Feb 2015 22:44:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<q>So, what’s stopping you?</q>
<p>… has been my mantra for the last six months. It’s been in the back of my head from the first conceptual sketch, to the last code deployment. As of Saturday evening—I can finally respond with a definitive, “nothing.”</p>
<p>I have launched my first product, <a href="https://tablab.io">Tab Lab</a>, and I couldn’t be more excited for its future.</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I’ve been working on this thing for a while now, and I think I’m finally ready to share it. Twitter, meet Tab Lab <a href="https://t.co/aoB0fXg6SQ"><a href="https://t.co/aoB0fXg6SQ">https://t.co/aoB0fXg6SQ</a></a></p>— Patrick Marsceill (@pmarsceill) <a href="https://twitter.com/pmarsceill/status/564183786167238659?ref_src=twsrc%5Etfw">February 7, 2015</a></blockquote>
<p>Of the obstacles that I faced in putting Tab Lab together, three define my experience most completely:</p>
<ol>
<li>Time.</li>
<li>Ignorance.</li>
<li>Fear.</li>
</ol>
<p>And though the first two were surmountable, the third is a mountain that I’m still climbing.</p>
<p>At first, I struggled to reclaim my free time. I stopped watching TV every night, going out on the weekends, and spent almost every waking moment (when I wasn’t at work) chiseling away at this thing. Despite being incredibly productive, it became isolating and marginally unhealthy. Finding a good balance of hard work with measured breaks was more difficult than I could have imagined. I was truly immersed in what I was doing. When I was home alone some weekends, it wasn’t uncommon for me to wake up and start working only look up at the clock to discover that almost ten hours had gone by.</p>
<p>Fortunately, I have a encouraging wife who helped tame this habit—and even got me outside sometimes. If I hadn’t learned to tackle small bits at a time, I would have never left my desk, let alone launched a website. Stepping away became progressively easier, even necessary the further along the app was. The more I focused on other things, the more I realized that the quality of my work was improving. I reevaluated problems and saw them differently. My brain needed breaks, sometimes long ones, to perform at its best.</p>
<p>My second problem was that I had no idea what I was doing. Sure, I’ve designed a lot of sites and apps for a variety of clients—but I’ve never individually designed, built, <em>and</em> launched anything from start to finish aside from the site you’re reading right now. Fortunately, I was guided by services like <a href="http://stackexchange.com">Stack Exchange</a>, <a href="http://railscasts.com">Railscasts</a>, and <a href="http://codeschool.com">Code School</a> to steer me through the unfamiliar territory of building a web app. In the beginning, I knew very little about the inner workings of a site like Tab Lab, let alone how to architect an application around them. By the end, a holistic operational view of these components allowed me to design them from a more enlightened point of view.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="tablab.io music on small screens" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/intro-tablab/music-small.jpg" srcSet="/assets/intro-tablab/music-small.jpg 1x"/></div><figcaption class="rsi-figcaption">tablab.io music on small screens</figcaption></figure>
<p>Consistent with my personality, I shared very little about this project until close to launch day. At one point, I was so paralyzed by the thought of not being able to pull it off that the project sat stagnant for a few months. I kept going back to the mantra, “So, what’s stopping you?” and was comforted by the fact that the list never grew beyond three items.</p>
<p>Fear is a steep and constant climb. I know I’m not at the top yet, but I’ve reached a bivvy and I’m not looking back.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Woodshedding]]></title>
            <link>https://p.atrick.org/2014/10/30/woodshedding</link>
            <guid isPermaLink="false">https://p.atrick.org/2014/10/30/woodshedding</guid>
            <pubDate>Thu, 30 Oct 2014 14:30:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>When I was nine, I began learning how to play percussion. I started out studying in the school band program. By eleven, I was surprisingly still interested enough to seek additional instruction. Driven by a family that already produced two other musicians, I began taking private drum lessons from an older jazz player.</p>
<p>Beyond actually reading drum charts, improvising, practicing technique, and all the things a student might do one-on-one with an instructor, I learned how a professional musician goes about honing their craft. My teacher patiently explained that this is called <em>woodshedding</em>. I imagined a small shack in a snow covered valley where bad musicians were banished if they messed up during a performance. Despite his best efforts, my eleven year old mind couldn’t fully understand what he was trying to explain to me.</p>
<p>Woodshedding isn’t a punishment. It’s a necessity. Woodshedding isn’t just practicing an instrument. Woodshedding is putting your understanding of an instrument and a song under a microscope. All of the ugliness and the mistakes come into focus. Woodshedding is working through it. Meticulously figuring it out. Dissecting a song until it’s a big mess, and then cleaning it up. Going at it until every dynamic is observed, every note and every rest is understood. Not just playing the song, but becoming so familiar with it and the theory behind it that improvising on top of it becomes the next step.</p>
<p>I don’t study music anymore, but I still think about woodshedding. As a younger designer, I had an idealized misconception that my craft was a precise, structured practice reliant on organization and cleanliness. Straight lines, stainless steel tools, white rooms and all that. Quite the opposite of how a jazz drummer might describe their profession. At a certain point—maybe after painfully working through projects that challenged this notion—my perspective shifted. These things really don’t seem that different to me anymore. Tearing up my work and examining all the components, consolidating, streamlining, rethinking, understanding, and rebuilding are daily rituals. I work on systems until extending and improvisation are possibilities. Making a mess is almost essential in order to maintain that kind of focus. When successful, the mess fades away with out a trace. The end result, whether it be a musical performance or a product or a website seems effortless to its audience.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Designing for Yourself]]></title>
            <link>https://p.atrick.org/2014/09/11/designing-for-yourself</link>
            <guid isPermaLink="false">https://p.atrick.org/2014/09/11/designing-for-yourself</guid>
            <pubDate>Thu, 11 Sep 2014 19:25:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Redesigning my personal website has historically been a stressful process riddled with self-doubt. Designing for yourself is hard. It’s hard for individuals, it’s hard for companies, and it’s usually the project that will lose out to more pressing priorities. In past iterations of my personal site, I primarily focused on <em>just getting it to work</em> so I could move on. Rather than spending the time to discover and enhance the details that might have elevated the experience, I raced through it to get something launched. For this version, I was very conscious of taking the time to allow these details to flourish through patience and iteration.</p>
<p>In other mediums that I work with, like recorded music, the time spent leading up to an idea often reveals itself to be one of the most active and rewarding parts of my creative process. There is no formula for it, the only constant is time. Time to think, time to re-think, time to create, time to destroy, and time to think again. I find the same is true when designing. Most designers, like musicians, develop stronger intuitions as they gain experience. This intuition not only shapes the work itself, but it also determines when a piece of work can be deemed finished. It’s easy to forget this when working on the web due to its nature of being such a flexible format. Where recordings have the constraint of being finite and unchangeable, websites do not. Is a website ever finished? It’s certainly easier to justify “fixing it later” in the absence of this constraint, but I’ve found this can become a crutch if not consciously kept in check.</p>
<p>For my personal site’s redesign, I fundamentally changed my personal design process to avoid relying on this crutch. This gave me an opportunity to get back to why I started in this profession in the first place, my love of creating things. I kept things loose at first, emphasizing creating smaller ideas over the entire site’s execution. Surprisingly, the biggest challenge that I faced wasn’t in the design or development of the site, rather trusting that things would either naturally come together or be edited out as part of the process.</p>
<p>To keep myself disciplined, I set a pace of constant ideation, followed by editing (both by myself and peers), and finally iterating in code. Once I had something resembling my site I kept refining it until it felt right. Here is general overview of what that schedule looked like:</p>
<ul>
<li>
<p><strong>I kept a Photoshop diary for a few months.</strong> I don’t know what inspired me to start doing this, but I found it to be extremely useful. Every week I forced myself to add at least one new element to it, even if it wasn’t entirely related to this site design. Just to get something out of my head and in front my eyes, without any judgment. I liken this to a personal, private <a href="http://dribbble.com">Dribbble</a> account contained in one giant PSD file. While the majority of its contents never got used, somewhere in that messy jumble I had the beginnings of what you are seeing here.</p>
</li>
<li>
<p><strong>I edited and edited and edited.</strong> I took everything I liked from that diary and massaged it into a loose layout. I kept refining it in Photoshop over and over until it started to resemble something like fragments of different pages. I sent early versions of the design to other designers and asked for feedback. Finally—and perhaps most importantly—I took time away from the design and came back to it with fresh eyes every few days.</p>
</li>
<li>
<p><strong>I set a code deadline.</strong> The design certainly wasn’t perfect in the PSD by the time I started coding it, but it didn’t need to be. By getting it into the browser by a certain date, I could make better design decisions and execute them faster. The final grid and type scale were developed entirely in code using general ideas of columns/gutter proportions and loose type sizes from the PSD. At the same time, I had little patterns established from the design comp that I iterated on and re-used throughout the site as a coded it.</p>
</li>
<li>
<p><strong>I didn’t set a launch date.</strong> This really wasn’t a purposeful decision. Just a feeling that if I could live with the design locally and chisel away at it until it felt right, it would evolve in the most organic way possible. I looked at the fully coded site every day for about a month (in my local dev environment), even if just for five minutes at a time. While I was browsing other sites, I would purposefully pull it up to see what the experience was like—judging how natural or jarring it felt. This lead me to discover more details that I wanted to temper and I hammered at them until they felt <em>done</em>.</p>
</li>
</ul>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="An excerpt of my Photoshop Diary" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/designing-for-yourself/ps-diary.jpg" srcSet="/assets/designing-for-yourself/ps-diary.jpg 1x"/></div><figcaption class="rsi-figcaption">An excerpt of my Photoshop Diary</figcaption></figure>
<p>Out of this thing comes a desire to try to break some of the rigidity that I impose on myself for both personal and professional projects. Designing for yourself is an exercise in confidence and trust in your own intuitions. It’s a challenge in restraint and a willingness to allow change to happen as consequence of growth. It’s a reminder to foster the formation of ideas, constantly evolve their execution, but allow their core to remain true.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Prototyping Q&A]]></title>
            <link>https://p.atrick.org/2013/12/11/prototyping-q-and-a</link>
            <guid isPermaLink="false">https://p.atrick.org/2013/12/11/prototyping-q-and-a</guid>
            <pubDate>Wed, 11 Dec 2013 11:20:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>A few months ago <a href="http://happycog.com">Happy Cog™</a> released <a href="https://mijingo.com/products/bundles/the-happy-cog-way">The Happy Cog Way</a>, an instructional video series highlighting our methods and best practices. As part of this series I created a course in <a href="http://mijingo.com/products/screencasts/html-prototyping">HTML Prototyping</a>, a beginners guide to using <a href="http://foundation.zurb.com">Zurb Foundation</a>, <a href="http://sass-lang.com">Sass</a>, and <a href="http://incident57.com/codekit/">CodeKit</a> to create responsive prototypes. Since its release, I’ve received some really great feedback about my video and the series, including this set of questions that a reader emailed me.</p>
<blockquote>
<p>I’m a front end dev that’s been in the business for over 15 years. I’ve always hand coded my sites, and I’ve never really gotten into grid systems. (I was working online back int the table days).</p>
</blockquote>
<p>Grid systems and “hand coding” are not mutually exclusive. For me, grid systems are just as much of a design tool as they are a development tool. Designers have been using proportional grids to layout designs on paper since the days before the printing press was invented.</p>
<p>In the context of web development, grids allow designers and developers to layout pages with the consistency and flexibility that modern day web development requires. While it is a good idea to use a grid to help layout your pages, you may not want an entire “front end framework” like Zurb Foundation or Twitter Bootstrap to weigh down your production-level code. At Happy Cog, we use these as tools to get ideas into the browser early, but we don’t use these for production. Here are a few options that still allow a developer to use grid-based designs efficiently in front-end production:</p>
<ul>
<li>
<p>Roll your own. <a href="http://css-tricks.com/dont-overthink-it-grids/">Chris Coyier did a pretty good demo here</a>. I’m not a super huge fan of using class names like <code>.col-1-2</code> so if I were developing a site using this method, I would make all those classes Sass mixins so I could just <code>@include</code> them within the element selectors that need to use them.</p>
</li>
<li>
<p>Use a light weight grid system framework. <a href="http://susy.oddbird.net/">Susy</a> is a pretty good example of this. Susy is a Compass based grid framework that easily allows you to customize your grid using Sass mixins. This enables you to keep your CSS class names semantic. <a href="http://neat.bourbon.io/">Neat</a> is a similar framework that is built on top of Bourbon, if you that is what you prefer.</p>
</li>
</ul>
<p>While both of these options are indeed technically frameworks, they exist purely in the pre-compiled Sass layer, do not contain additional UI elements (unlike Foundation and Bootstrap), and are relatively lightweight in terms of what gets served to the user. I tend to think of them less as frameworks, and more as as set of mathematical functions that make it easier for a developer to quickly divide a page up using proportions, percentages, ems, or pixels.</p>
<blockquote>
<p>Does Happy Cog use foundation for live production websites?</p>
</blockquote>
<p>No we do not. Foundation requires you to use a very specific patterns for class names, and markup.</p>
<blockquote>
<p>And has Happy Cog ever taken something that was prototyped out in foundation then converted it into a live website for a client?</p>
</blockquote>
<p>Prototypes serve as an alternative to exclusively creating paper wireframes. Their purpose is to more effectively document and communicate designs to our internal and client stakeholders. Frameworks like Foundation allow us to quickly and easily get our ideas into the browser and allow us to think about how things will scale from small to large screens. When prototyping, we aren’t as worried about the quality of the code—but the content, information architecture, and interaction design take priority. Prototyping may also be a good time for developers to get involved in thinking early about how they may approach a problem, while not actually spending time fully executing it.</p>
<blockquote>
<p>If Happy Cog doesn’t use foundation or convert their prototypes to live sites, isn’t it more work to try and hand code a site later to match your Foundation prototype? (You’re re-creating the styes and html but without the “cruft”)</p>
</blockquote>
<p>Since our prototypes have essentially replaced paper wireframes in most cases—it actually speeds up the design process and facilitates more conversations between our design and development teams. This allows our front end developers to see how elements on the page should behave and then plan for the best possible implementation sooner in the process. If prototyping were not part of our process, we would spend a fairly large chunk of time trying to document the same information on paper—which can be very time consuming. Front end teams would still have to hand code the site based on paper wireframes which inevidably leaves some nuances left undocumented. We’ve found that prototyping provides a more complete and definitive documentation, with clearer direction to stakeholders and developers alike.</p>
<p><a href="http://mijingo.com/products/screencasts/html-prototyping/">HTML Prototyping</a> is available for purchase on <a href="http://mijingo.com">Mijingo.com</a>. For more questions about the prototyping process, <a href="mailto:patrick@thismodernweb.com">email me</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[The Russian Joe]]></title>
            <link>https://p.atrick.org/2013/06/26/russian-joe</link>
            <guid isPermaLink="false">https://p.atrick.org/2013/06/26/russian-joe</guid>
            <pubDate>Wed, 26 Jun 2013 12:34:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I was looking at some old photos on Flickr and came across this. It’s from 2013’s SXSW Interactive, at Easy Tiger, just before a sizable group of people consumed the combination of beverages spread out on the table.</p>
<p>Ryan Jahn and I spent a day biking around Austin trying to eat lunch. After multiple unsuccessful attempts, we gave up and focused our collective energy on something that would get us through the rest of the day / night. The Russian Joe was born out of lack of energy, need for sustinance, and the desire to get in some day drinking.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="4 Russian Joes ready for launch" loading="lazy" sizes="100vw" src="https://farm8.staticflickr.com/7373/9135600825_6d52df6494_c.jpg" srcSet="https://farm8.staticflickr.com/7373/9135600825_6d52df6494_c.jpg 1x"/></div><figcaption class="rsi-figcaption">4 Russian Joes ready for launch</figcaption></figure>
<p>Shoot the vodka, then dump the espresso into the stout and enjoy it at a hefty pace.</p>
<h3>Credits:</h3>
<ul>
<li><em>Drink recipe</em>: Ryan Jahn and Patrick Marsceill</li>
<li><em>Drink name</em>: Allison Wagner</li>
<li><em>Testers</em>: Who ever was with us at Easy Tiger</li>
<li><em>Honorable mention</em>: Our waitress who let us do this</li>
</ul>
<h3>The Russian Joe</h3>
<ul>
<li>1 chilled shot of Russian vodka</li>
<li>1 shot of espresso</li>
<li>1/2 pint of stout</li>
</ul>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[The Difference Between Money and Power]]></title>
            <link>https://p.atrick.org/2013/02/27/the-difference-between-money-and-power</link>
            <guid isPermaLink="false">https://p.atrick.org/2013/02/27/the-difference-between-money-and-power</guid>
            <pubDate>Wed, 27 Feb 2013 12:10:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<blockquote><p>Such a waste of talent. He chose money over power, in this town a mistake nearly everyone makes. Money is the McMansion in Sarasota that starts falling apart after ten years, power is the old stone building that stands for centuries. I can not respect someone who does not see the difference</p><footer>—Senator Francis Underwood, from Netflix’s <strong>House of Cards</strong>.</footer></blockquote>
<p>The first season of <em><a href="http://movies.netflix.com/WiMovie/House_of_Cards/70178217?locale=en-US">House of Cards</a></em> has ended for me. I tore through the thirteen episode season in about a week after having recently cancelled my cable. I miss watching <em>House of Cards</em>, I do not miss having cable television.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Building My Desk — Part Two: The Top]]></title>
            <link>https://p.atrick.org/2013/02/13/building-my-desk-part-two-the-top</link>
            <guid isPermaLink="false">https://p.atrick.org/2013/02/13/building-my-desk-part-two-the-top</guid>
            <pubDate>Wed, 13 Feb 2013 23:04:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>The conclusion to my desk building saga ended with a trip to Ikea, and the sanding, staining, and finishing of the tabletop.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Sanding and staining the desk top" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/desk/finish_process.jpg" srcSet="/assets/desk/finish_process.jpg 1x"/></div><figcaption class="rsi-figcaption">Sanding and staining the desk top</figcaption></figure>
<p>I would have never even considered Ikea as the place to go when searching for the top of my desk, had it not been for <a href="http://spacekat.github.com/blog/2012/07/31/steel-pipe-standing-desk/">Jessica’s blog post</a>. The <a href="http://www.ikea.com/us/en/catalog/products/40057396/">Ikea Numerär</a> counter top in oak is actually the perfect size for this project and looks great after you stain and finish it.</p>
<p><a href="http://www.ikea.com/us/en/catalog/products/40057396/">This counter</a> comes in a few sizes and <a href="/2013/01/14/building-my-desk-part-one-the-frame">I built my frame</a> to hold the 73 1/4” x 25 5/8” size top. After getting it home (it’s way heavier than it looks), I sanded it with a hand sander and some medium grit paper. I then used a tack cloth to get all the dust up before staining.</p>
<p>I had some walnut stain left over from when I finished the hardwood floors in my house, so I evenly applied it to the countertop with a clean rag and let it absorb into the wood for about five minutes. After wiping off the excess, I let the stain dry overnight before finishing it with polyurethane.</p>
<p>I applied one coat of poly, let it dry for about 4 hours. Lightly sanded it, wiped it down with another tack cloth, and applied another coat. Due to the impending thunderstorm, I had to act rather quickly and didn’t have time to apply a third or fourth coat—which I would highly recommend doing.</p>
<p>I got the finished countertop onto the frame I built, centered it, marked off where the screws would be going with a pencil and drilled the pilot holes. The oak top is very hard wood and it would be extremely difficult to screw into it without drilling pilot holes first. The screws went in a bit harder than I expected—mostly due to awkward angles. Finally, I eagerly setup my desk for its first test run that evening.</p>
<h3>A success.</h3>
<p>I’ve been using it now for about a month and it is by far the best desk I’ve ever owned. I added a keyboard tray too keep the desktop clutter free, and its perfect for my setup.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="A rather crappy photo of the completed desk" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/desk/finished_desk.jpg" srcSet="/assets/desk/finished_desk.jpg 1x"/></div><figcaption class="rsi-figcaption">A rather crappy photo of the completed desk</figcaption></figure>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[Building My Desk — Part One: The Frame]]></title>
            <link>https://p.atrick.org/2013/01/14/building-my-desk-part-one-the-frame</link>
            <guid isPermaLink="false">https://p.atrick.org/2013/01/14/building-my-desk-part-one-the-frame</guid>
            <pubDate>Mon, 14 Jan 2013 16:15:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>Over the last week and a half, I designed and constructed a new desk for my home office. If you <a href="http://instagram.com/pmarsceill" title="Patrick Marsceill&#x27;s Instagram">follow me on Instagram</a> you might have seen some of the progress photos that I’ve been posting. I wanted to document my experience building this thing and what learned along the way. This was not only one of my favorite construction projects from a process perspective, but also my favorite finished product.</p>
<p><em>First, a little backstory</em>… A few years ago, I saw <a href="http://www.apartmenttherapy.com/morgans-amazing-diy-shelving-97760">this post on Apartment Therapy</a> about constructing shelving from steel plumbing pipe. I instantly latched on to this idea and added it to the list of projects that I wanted to take on in my then—new house. If you’re a home-owner, you know that this list quickly gets re-prioritized in favor of things leaking, mold growing, and whatever else requires immediate (and usually expensive) repair. Needless to say, the pipe-shelving project had been in the back of my head for a few years.</p>
<p>About a month ago, I stumbled upon <a href="http://spacekat.github.com">Jessica’s blog</a> through a link that someone posted on Twitter about some of her work at Engine Yard. I then found my way to <a href="http://spacekat.github.com/blog/2012/07/31/steel-pipe-standing-desk/">this very detailed post about how she constructed a standing desk</a>, using similar materials and construction methods as the shelving unit mentioned above. This immediately got the gears turning in my head and I spent a few days imagining how I could construct something like this.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="Plans for my desk" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/desk/plans.jpg" srcSet="/assets/desk/plans.jpg 1x"/></div><figcaption class="rsi-figcaption">Plans for my desk</figcaption></figure>
<p>Unlike Jessica’s desk, I didn’t want mine to be that of the standing variety. I did some research and found <a href="http://www.apartmenttherapy.com/look-desks-and-68448">a few photos of other sitting desks that people had made out of plumbing pipe</a>. Based on these photos and Jessica’s design, I sketched out some plans borrowing ideas from both.</p>
<p>Next, I took an inventory of everything I would need to execute this plan and headed off to <a href="https://www.lowes.com">Lowe’s</a>. As Jessica noted, Lowe’s will cut and thread the pipes for you right in the aisle. They also have pre-cut and pre-threaded pipes from about 1 inch through 20 inches in length.</p>
<h3>Parts required to build the frame</h3>
<p>All parts galvanized steel, 1” diameter and the fittings made by Mueller</p>
<h4>Fittings:</h4>
<ul>
<li>5 x Flanges</li>
<li>11 x “T” Joints</li>
<li>6 x Elbow Joints</li>
<li>4 x End Caps</li>
<li>16 x ‘close’ pipe nipple</li>
<li>1 x 4” pipe nipple</li>
</ul>
<h4>Pipes:</h4>
<ul>
<li>4 x 21.5”</li>
<li>2 x 28”</li>
<li>4 x 18”</li>
</ul>
<h4>Finishing Products:</h4>
<ul>
<li>1 bottle of spray degreaser, citrus scented</li>
<li>1 can of Rustoleum spray metal primer</li>
<li>1 can of Rustoleum matte black spray paint</li>
</ul>
<p>When I got home, I decided to clean all the parts and quickly assemble the frame (without measuring or really tightening anything) just to make sure I had all the pieces I needed. The saw and the pipe threading machine at Lowe’s gets the pipes pretty greasy, so I used some spray degreaser and rags to clean each piece and remove any stickers.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="The frame primed and ready for paint" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/desk/primed.jpg" srcSet="/assets/desk/primed.jpg 1x"/></div><figcaption class="rsi-figcaption">The frame primed and ready for paint</figcaption></figure>
<p>The next weekend, it was time to prime and paint the frame. I reconstructed the frame and measured all the fittings, legs, and connectors to ensure I had a symmetrical table before it was too late to turn back. I put on one coat of primer, let it dry for about 2 hours, and then one coat of spray paint. This actually used up the entire can of paint and if I could do it again, I would have bought another can for a second coat.</p>
<figure class="rsi-figure"><div class="rsi-container"><img class="rsi-image" alt="The frame painted" loading="lazy" sizes="100vw" src="https://p.atrick.org/assets/desk/painted.jpg" srcSet="/assets/desk/painted.jpg 1x"/></div><figcaption class="rsi-figcaption">The frame painted</figcaption></figure>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[How I Setup My Machine for Prototyping]]></title>
            <link>https://p.atrick.org/2012/11/19/how-i-setup-my-machine-for-prototyping</link>
            <guid isPermaLink="false">https://p.atrick.org/2012/11/19/how-i-setup-my-machine-for-prototyping</guid>
            <pubDate>Mon, 19 Nov 2012 17:27:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>A few weeks ago, I wrote <a href="http://cognition.happycog.com/article/its-alive-prototyping-in-the-browser">a post for Cognition</a> explaining my process for creating prototypes and how I arrived there. After being asked for more technical detail around my actual setup, I decided to create this step by step guide.</p>
<p><em>Note: This was written for those using a Mac running OSX 10.7 or later.</em></p>
<h3>Step 1 — Install Xcode and the “Command Line Tools”</h3>
<p>You can <a href="http://itunes.apple.com/us/app/xcode/id497799835?ls=1&amp;mt=12" title="Apple Xcode Download">download and install Xcode from Apple’s App store</a> after creating a <a href="https://developer.apple.com" target="_blank" title="Apple Developers">Developer Account</a>.</p>
<p>After Xcode is downloaded and installed, there is another step that I always forget about. I mean <em>always</em>… And it takes me a good 20 minutes of cursing trying figure out why my compiler is taking a dump. So here is what you gotta do: You open up Xcode and select “Preferences…” from the Xcode menu and manually install the “Command Line Tools” by clicking “Downloads” tab, and then the “Install” button next to the item in the list.</p>
<p>Install Command Line Tools</p>
<p>…AND you have to do this step every time you upgrade to the latest version of OSX as well.</p>
<h3>Step 2 — Install RVM and a non-system version of Ruby</h3>
<p>I don’t like to muck around with the version of Ruby that comes installed with OSX. <a href="https://rvm.io" title="Ruby Version Manager Project Site">RVM (Ruby Version Manager)</a> is a useful piece of software that lets you have segregated versions of Ruby installed at the same time. This lets us start from a clean Ruby enviroment every time, upgrade very easily, and not have to worry much about system configuration.</p>
<p><em>This is where you need to open up Terminal and get busy…</em></p>
<h4>Install RVM &amp; install the latest stable version of Ruby</h4>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> \c</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">url</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -L</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> https://get.rvm.io</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49"> |</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1"> bash</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> -s</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> stable</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> --ruby</span></span></code></pre></figure>
<h4>Verify you a running on the newly installed “RVM” version of Ruby</h4>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> which</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> ruby</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">/Users/patrickmarsceill/.rvm/rubies/ruby-1.9.3-p327/bin/ruby</span></span></code></pre></figure>
<p>The important thing to note here is the <code>/.rvm/rubies/ruby-1.9.3-p327</code>. Your version numbers may be different, and thats ok but the path should be <code>/.rvm/rubies/ruby-x.x.x-pxxx</code>. If you don’t see something like this, you should switch to the newly installed version:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> rvm</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> use</span><span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> 1.9.3</span></span></code></pre></figure>
<p>This just tells your machine to switch to Ruby 1.9.3 installed by RVM. You may have a different version number installed by RVM, in which case you would run <code>rvm use 1.9.2</code> or <code>rvm use 1.9.4</code>.</p>
<h3>Step 3 — Install Git</h3>
<p>The easiest way to install Git on an OSX machine is to <a href="http://git-scm.com/download/mac">download and install the Universal .dmg file from git-scm.com</a>. There are other ways to do this from the command line, if you are a Homebrew user like me you can use:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> brew</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> git</span></span></code></pre></figure>
<h3>Step 4 — Build your development environment</h3>
<p>/images/blog/prototype-setup/active-projects.png Active Projects Folder</p>
<p>Create and/or open the folder where you might want to house all your prototyping projects. I like to use a folder called “_active” where all my current projects live.</p>
<p>Switch back over to terminal and CD (change directories) by typing <code>cd</code> and then a space, <em>do not press “Enter” yet</em>:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> cd</span></span></code></pre></figure>
<p>Then drag the folder icon (in this case it’s called “_Active”) immediately following the space after <code>cd</code>. Like magic, the full path to this location will appear after the <code>cd</code>:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> cd</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> /Users/patrickmarsceill/Dropbox/_Active</span></span></code></pre></figure>
<p>Press “Enter”</p>
<h4>Now it’s time to get some development tools and start building:</h4>
<p><code>&lt;controversialname&gt;</code> “StrapOn” <code>&lt;/controversialname&gt;</code> is a pre-packaged set of tools and rake commands that I build with the help of my friend <a href="http://stephentudor.com" title="Stephen Tudor&#x27;s Blog">Stephen</a> for quickly building HTML prototypes.</p>
<p><em>From your current location in Terminal run:</em></p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> git</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> clone</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> git@github.com:pmarsceill/StrapOn.git</span></span></code></pre></figure>
<p>This will pull down a directory called “StrapOn” that you can use as a starter for your projects. A more detailed tutorial is in the works, but to get started <code>cd</code> into the “StrapOn” directory:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> cd</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> StrapOn</span></span></code></pre></figure>
<p>Then install all the tools that are needed for this project by running:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> bundle</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> install</span></span></code></pre></figure>
<p>If successful you should see something like this:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">Your</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> bundle</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> is</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> complete!</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> Use</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> `</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">bundle</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> show [gemname]`</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1"> to</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> see</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> where</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> a</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> bundled</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> gem</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> is</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> installed.</span></span></code></pre></figure>
<p>Start the StrapOn dev mode by running this rake command:</p>
<figure data-rehype-pretty-code-figure=""><pre style="--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff" tabindex="0" data-language="bash" data-theme="github-dark github-light"><code data-language="bash" data-theme="github-dark github-light" style="display:grid"><span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">$</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> rake</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> start</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">DEPRECATION</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> WARNING:</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> ActiveSupport::Memoizable</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> is</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> deprecated</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> and</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> will</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> be</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> removed</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> in</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> future</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> releases,simply</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> use</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> Ruby</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> memoization</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pattern</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> instead.</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> (called </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">from</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> require</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> at</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> /Users/patrickmarsceill/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""> </span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">StrapOn</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> starting.....................</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">DEPRECATION</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> WARNING:</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> ActiveSupport::Memoizable</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> is</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> deprecated</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> and</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> will</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> be</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> removed</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> in</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> future</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> releases,simply</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> use</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> Ruby</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> memoization</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pattern</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> instead.</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> (called </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">from</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> require</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> at</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> /Users/patrickmarsceill/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">DEPRECATION</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> WARNING:</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> ActiveSupport::Memoizable</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> is</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> deprecated</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> and</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> will</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> be</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> removed</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> in</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> future</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> releases,simply</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> use</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> Ruby</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> memoization</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> pattern</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> instead.</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> (called </span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">from</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> require</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> at</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62"> /Users/patrickmarsceill/Desktop/StrapOn/config.ru:14</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">)</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">[2012-11-19 17:02:23] INFO  WEBrick 1.3.1</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">[2012-11-19 17:02:23] INFO  ruby 1.9.3 (</span><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">2012-11-10</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">) [x86_64-darwin12.2.0]</span></span>
<span data-line=""><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">[2012-11-19 17:02:23] INFO  WEBrick::HTTPServer#start: pid</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">=</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">30507</span><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> port</span><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">=</span><span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">4000</span></span>
<span data-line=""> </span></code></pre></figure>
<p>Voila, StrapOn has started a local server on your machine that you can use for development by pointing your browser to: <code>http://localhost:4000</code></p>
<p>This also includes starts an auto-compiler for SASS, and all the built-in templating engine included in the Serve gem. Both of which will be explained in my next post about developing with StrapOn.</p>
<h3>Downloads</h3>
<ul>
<li><a href="https://itunes.apple.com/us/app/xcode/id497799835?ls=1&amp;mt=12">Command Line Tools (Included in Xcode)</a></li>
<li><a href="https://rvm.io/">Ruby Version Manager (RVM)</a></li>
<li><a href="http://git-scm.com/download/mac">Git</a></li>
</ul>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
        <item>
            <title><![CDATA[First.]]></title>
            <link>https://p.atrick.org/2012/10/24/first</link>
            <guid isPermaLink="false">https://p.atrick.org/2012/10/24/first</guid>
            <pubDate>Wed, 24 Oct 2012 15:36:00 GMT</pubDate>
            <description><![CDATA[on This Modern Web]]></description>
            <content:encoded><![CDATA[<p>I can’t think of a better first post than to <a href="http://cognition.happycog.com/article/its-alive-prototyping-in-the-browser">link you to something I wrote on Cognition</a>.</p>]]></content:encoded>
            <author>Patrick Marsceill</author>
        </item>
    </channel>
</rss>