HqAAKFMwGuCJk8DqIH0c5EO/QFU5u6Gk3lup1m5FDdFVZDQKaMwM1OY Aaron Parecki

CINXE.COM

Aaron Parecki

<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Aaron Parecki</title> <link rel="webmention" href="https://webmention.io/aaronpk/webmention"> <script src="/assets/jquery-1.12.0.min.js"></script> <script src="/semantic/2.2.6/semantic.min.js"></script> <script src="/assets/featherlight-1.5.0/featherlight.min.js"></script> <link rel="stylesheet" type="text/css" href="/assets/font.css"> <link rel="stylesheet" type="text/css" href="/semantic/2.2.6/semantic.min.css"> <link rel="stylesheet" href="/assets/icomoon/style.css"> <link rel="stylesheet" href="/assets/weather-icons/css/weather-icons.css"> <link rel="stylesheet" href="/assets/featherlight-1.5.0/featherlight.min.css"> <!-- <script src="/assets/screensaver.js"></script> <link rel="stylesheet" href="/assets/screensaver.css"> --> <link rel="stylesheet" href="/assets/admin.2.css"> <link rel="stylesheet" href="/assets/pulse.css"> <link rel="stylesheet" href="/assets/styles.8.css"> <link rel="stylesheet" href="/site/styles.2.css"> <link rel="stylesheet" href="/assets/carbon.css"> <link rel="stylesheet" href="/assets/story.css"> <link rel="openid.delegate" href="https://aaronparecki.com/"> <link rel="openid.server" href="https://indieauth.com/openid"> </head> <body> <div class="sticky-footer-content"> <div class="top-bar "> <div class="ui container"> <form action="/search" method="get" class="search item"> <div class="ui icon input"> <input type="text" name="q" placeholder="Search..." value=""> <i class="search icon"></i> </div> </form> <span class="item">70&deg;F</span> <span class="weather item"> <i class="wi wi-owm-801" title="few clouds in Portland"></i> </span> <span class="time item"></span> <span class="battery item"></span> <div id="logged-in-menu"> </div> </div> </div> <div class="ui container"> <div class="site-header"> <div class="align-bottom"> <div class="left"> <h1><a href="/">Aaron Parecki</a></h1> </div> <div class="right"> <ul> <li><a href="/articles">Articles</a></li> <li><a href="/notes">Notes</a></li> <li><a href="/photos">Photos</a></li> </ul> </div> </div> </div> <div class="post-list"> <div class="content-area"><div class="pad"> <h2>Articles</h2> <table style="width:100%; margin-top: 10px;" class="table-of-contents"> <tr> <td>2025-04-03</td> <td><a href="#post-id-111779" class="link-to-post">Let&#039;s fix OAuth in MCP</a></td> </tr> <tr> <td>2024-11-04</td> <td><a href="#post-id-108670" class="link-to-post">My IETF 121 Agenda</a></td> </tr> <tr> <td>2024-08-31</td> <td><a href="#post-id-107451" class="link-to-post">Thoughts on the Resiliency of Web Projects</a></td> </tr> <tr> <td>2024-08-29</td> <td><a href="#post-id-107414" class="link-to-post">OAuth Oh Yeah!</a></td> </tr> <tr> <td>2024-07-21</td> <td><a href="#post-id-106752" class="link-to-post">My IETF 120 Agenda</a></td> </tr> <tr> <td>2024-05-12</td> <td><a href="#post-id-105554" class="link-to-post">FedCM for IndieAuth</a></td> </tr> <tr> <td>2024-05-02</td> <td><a href="#post-id-105425" class="link-to-post">OAuth for Browser-Based Apps Working Group Last Call!</a></td> </tr> <tr> <td>2024-03-29</td> <td><a href="#post-id-104774" class="link-to-post">OAuth: &quot;grant&quot; vs &quot;flow&quot; vs &quot;grant type&quot;</a></td> </tr> <tr> <td>2023-12-01</td> <td><a href="#post-id-102683" class="link-to-post">I took the High-Speed Brightline Train from Miami to Orlando with only two hours notice</a></td> </tr> <tr> <td>2023-10-23</td> <td><a href="#post-id-102018" class="link-to-post">OAuth for Browser-Based Apps Draft 15</a></td> </tr> <tr> <td>2023-03-09</td> <td><a href="#post-id-97036" class="link-to-post">OAuth Support in Bluesky and AT Protocol</a></td> </tr> <tr> <td>2023-03-07</td> <td><a href="#post-id-96974" class="link-to-post">How to use your own domain as your BlueSky handle</a></td> </tr> <tr> <td>2022-12-22</td> <td><a href="#post-id-95470" class="link-to-post">How to create a keyboard shortcut to export the current slide in Keynote</a></td> </tr> <tr> <td>2022-12-06</td> <td><a href="#post-id-95055" class="link-to-post">OAuth for Browser-Based Apps Draft 12</a></td> </tr> <tr> <td>2022-12-02</td> <td><a href="#post-id-95054" class="link-to-post">The Laws of OAuth</a></td> </tr> <tr> <td>2022-11-14</td> <td><a href="#post-id-94308" class="link-to-post">How to Build a Restreaming Server with a Raspberry Pi</a></td> </tr> <tr> <td>2022-09-15</td> <td><a href="#post-id-92670" class="link-to-post">New Draft of OAuth for Browser-Based Apps (Draft -11)</a></td> </tr> <tr> <td>2022-01-29</td> <td><a href="#post-id-86260" class="link-to-post">Stream a USB webcam to HDMI on a Raspberry Pi</a></td> </tr> <tr> <td>2022-01-17</td> <td><a href="#post-id-86005" class="link-to-post">How to Green Screen on the YoloBox Pro</a></td> </tr> <tr> <td>2022-01-11</td> <td><a href="#post-id-85861" class="link-to-post">How to convert USB webcams to HDMI</a></td> </tr> <tr> <td width="90"></td> <td><a href="/articles?before=20220111T093324-0800" class="infinite " rel="prev">&larr; older</a></td> </tr> </table> </div></div> </div> <div class="post-list"> <ul> <li class="h-entry post-entry post-type-article post " id="post-id-111779"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2025/04/03/15/oauth-for-model-context-protocol" class="p-name post-title">Let&#039;s fix OAuth in MCP</a></h2> <a href="https://aaronparecki.com/2025/04/03/15/oauth-for-model-context-protocol"><img src="/2025/04/03/15/mcp-featured.jpg" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">Let&#039;s not overthink auth in MCP.</div> <a href="https://aaronparecki.com/2025/04/03/15/oauth-for-model-context-protocol">continue reading...</a> </div> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2025/04/03/15/oauth-for-model-context-protocol" class="u-url"> <time class="dt-published" datetime="2025-04-03T16:39:37-07:00"> Thu, Apr 3, 2025 4:39pm -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/61466242" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/mcp" class="p-category">mcp</a> #<a href="/tag/modelcontextprotocol" class="p-category">modelcontextprotocol</a> #<a href="/tag/ai" class="p-category">ai</a> #<a href="/tag/llm" class="p-category">llm</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-108670"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/11/04/7/ietf-121" class="p-name post-title">My IETF 121 Agenda</a></h2> <div class="p-summary" style="margin: 12px 0;">Here&#039;s where you can find me at IETF 121 in Dublin!</div> <a href="https://aaronparecki.com/2024/11/04/7/ietf-121">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">1</span> like</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/11/04/7/ietf-121" class="u-url"> <time class="dt-published" datetime="2024-11-04T09:18:03+00:00"> Mon, Nov 4, 2024 9:18am +00:00 </time> </a> <span class="right"> #<a href="/tag/ietf" class="p-category">ietf</a> #<a href="/tag/ietf121" class="p-category">ietf121</a> #<a href="/tag/oauth" class="p-category">oauth</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-107451"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/08/31/9/too-many-projects" class="p-name post-title">Thoughts on the Resiliency of Web Projects</a></h2> <div class="p-summary" style="margin: 12px 0;">I just did a massive spring cleaning of one of my servers, trying to clean up what has become quite the mess of clutter. For every website on the server, I either:</div> <a href="https://aaronparecki.com/2024/08/31/9/too-many-projects">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">2</span> likes</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">1</span> reply</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">2</span> mentions</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/08/31/9/too-many-projects" class="u-url"> <time class="dt-published" datetime="2024-08-31T18:36:50-07:00"> Sat, Aug 31, 2024 6:36pm -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/44592561" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/indieweb" class="p-category">indieweb</a> #<a href="/tag/clutter" class="p-category">clutter</a> #<a href="/tag/projects" class="p-category">projects</a> #<a href="/tag/100daysofmusic" class="p-category">100daysofmusic</a> #<a href="/tag/biketheeclipse" class="p-category">biketheeclipse</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-107414"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/08/29/9/oauth-oh-yeah" class="p-name post-title">OAuth Oh Yeah!</a></h2> <div class="p-summary" style="margin: 12px 0;">The first law of OAuth states that</div> <a href="https://aaronparecki.com/2024/08/29/9/oauth-oh-yeah">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">1</span> like</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/08/29/9/oauth-oh-yeah" class="u-url"> <time class="dt-published" datetime="2024-08-29T12:59:53-07:00"> Thu, Aug 29, 2024 12:59pm -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/44460426" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/ai" class="p-category">ai</a> #<a href="/tag/music" class="p-category">music</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-106752"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/07/21/15/ietf-120" class="p-name post-title">My IETF 120 Agenda</a></h2> <div class="p-summary" style="margin: 12px 0;">The sessions I will be attending and presenting at during IETF 120 in Vancouver</div> <a href="https://aaronparecki.com/2024/07/21/15/ietf-120">continue reading...</a> </div> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/07/21/15/ietf-120" class="u-url"> <time class="dt-published" datetime="2024-07-21T12:54:40-07:00"> Sun, Jul 21, 2024 12:54pm -07:00 </time> </a> <span class="right"> #<a href="/tag/ietf" class="p-category">ietf</a> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/scim" class="p-category">scim</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-105554"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/05/12/3/fedcm-for-indieauth" class="p-name post-title">FedCM for IndieAuth</a></h2> <a href="https://aaronparecki.com/2024/05/12/3/fedcm-for-indieauth"><img src="/2024/05/12/3/fedcm-button-mode.png" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">IndieWebCamp D&uuml;sseldorf took place this weekend, and I was inspired to work on a quick hack for demo day to show off a new feature I&#039;ve been working on for IndieAuth.</div> <a href="https://aaronparecki.com/2024/05/12/3/fedcm-for-indieauth">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">13</span> likes</span> <span><i class="retweet icon"></i> <span class="p-pk-num-reposts">2</span> reposts</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">2</span> replies</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">1</span> mention</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/05/12/3/fedcm-for-indieauth" class="u-url"> <time class="dt-published" datetime="2024-05-12T07:39:30-07:00"> Sun, May 12, 2024 7:39am -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/37332804" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/fedcm" class="p-category">fedcm</a> #<a href="/tag/indieauth" class="p-category">indieauth</a> #<a href="/tag/oauth" class="p-category">oauth</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-105425"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/05/02/5/oauth-browser-based-apps-last-call" class="p-name post-title">OAuth for Browser-Based Apps Working Group Last Call!</a></h2> <a href="https://aaronparecki.com/2024/05/02/5/oauth-browser-based-apps-last-call"><img src="/2024/05/02/5/oauth-featured.jpg" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">The draft specification OAuth for Browser-Based Applications has just entered Working Group Last Call!</div> <a href="https://aaronparecki.com/2024/05/02/5/oauth-browser-based-apps-last-call">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">3</span> likes</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">1</span> mention</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/05/02/5/oauth-browser-based-apps-last-call" class="u-url"> <time class="dt-published" datetime="2024-05-02T15:06:00-07:00"> Thu, May 2, 2024 3:06pm -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/36707195" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/ietf" class="p-category">ietf</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-104774"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2024/03/29/3/oauth-terminology" class="p-name post-title">OAuth: &quot;grant&quot; vs &quot;flow&quot; vs &quot;grant type&quot;</a></h2> <div class="p-summary" style="margin: 12px 0;">Is it called an OAuth &quot;grant&quot; or a &quot;flow&quot;? What about &quot;grant type&quot;?</div> <a href="https://aaronparecki.com/2024/03/29/3/oauth-terminology">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">1</span> like</span> <span><i class="retweet icon"></i> <span class="p-pk-num-reposts">5</span> reposts</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2024/03/29/3/oauth-terminology" class="u-url"> <time class="dt-published" datetime="2024-03-29T08:15:24-07:00"> Fri, Mar 29, 2024 8:15am -07:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/34462913" class="u-syndication syndication"><i class="icon-microblog"></i></a> <a href="https://www.linkedin.com/feed/update/urn:li:activity:7180013903580450817/" class="u-syndication syndication"><i class="linkedin icon"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/terminology" class="p-category">terminology</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-102683"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2023/12/01/18/riding-brightline-train-miami-orlando" class="p-name post-title">I took the High-Speed Brightline Train from Miami to Orlando with only two hours notice</a></h2> <a href="https://aaronparecki.com/2023/12/01/18/riding-brightline-train-miami-orlando"><img src="/2023/12/01/18/brightline.jpg" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">It was 11am at the Fort Lauderdale airport, an hour after my non-stop flight to Portland was supposed to have boarded. As I had been watching our estimated departure get pushed back in 15 minute increments, I finally received the dreaded news over the loudspeaker - the flight was cancelled entirely. As hordes of people started lining up to rebook their flights with the gate agent, I found a quiet spot in the corner and opened up my laptop to look at my options.</div> <a href="https://aaronparecki.com/2023/12/01/18/riding-brightline-train-miami-orlando">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">9</span> likes</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">1</span> reply</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">1</span> mention</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2023/12/01/18/riding-brightline-train-miami-orlando" class="u-url"> <time class="dt-published" datetime="2023-12-01T19:38:05-08:00"> Fri, Dec 1, 2023 7:38pm -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/27241041" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/travel" class="p-category">travel</a> #<a href="/tag/train" class="p-category">train</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-102018"> <div class="context"> <div> <i class="ui users icon"></i> <a href="https://mailarchive.ietf.org/arch/browse/oauth/" class="u-audience h-card">OAuth WG</a> </div> </div> <div style="" class="content-area has-context has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2023/10/23/5/oauth-browser-based-apps-draft-15" class="p-name post-title">OAuth for Browser-Based Apps Draft 15</a></h2> <div class="p-summary" style="margin: 12px 0;">After a lot of discussion on the mailing list over the last few months, and after some excellent discussions at the OAuth Security Workshop, we&#039;ve been working on revising the draft to provide clearer guidance and clearer discussion of the threats and consequences of the various architectural patterns in the draft.</div> <a href="https://aaronparecki.com/2023/10/23/5/oauth-browser-based-apps-draft-15">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">1</span> mention</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2023/10/23/5/oauth-browser-based-apps-draft-15" class="u-url"> <time class="dt-published" datetime="2023-10-23T09:12:55-07:00"> Mon, Oct 23, 2023 9:12am -07:00 </time> </a> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/ietf" class="p-category">ietf</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-97036"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2023/03/09/5/bluesky-and-oauth" class="p-name post-title">OAuth Support in Bluesky and AT Protocol</a></h2> <a href="https://aaronparecki.com/2023/03/09/5/bluesky-and-oauth"><img src="/2023/03/09/5/jelleke-vanooteghem-gnxb59lGU1M-unsplash.jpg" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">Bluesky, a new social media platform and AT Protocol, is unsurprisingly running up against the same challenges and limitations that Flickr, Twitter and many other social media platforms faced in the 2000s: passwords!</div> <a href="https://aaronparecki.com/2023/03/09/5/bluesky-and-oauth">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">12</span> likes</span> <span><i class="retweet icon"></i> <span class="p-pk-num-reposts">1</span> repost</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">10</span> replies</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">2</span> mentions</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2023/03/09/5/bluesky-and-oauth" class="u-url"> <time class="dt-published" datetime="2023-03-09T17:09:09-08:00"> Thu, Mar 9, 2023 5:09pm -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/17558379" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/indieauth" class="p-category">indieauth</a> #<a href="/tag/bluesky" class="p-category">bluesky</a> #<a href="/tag/atproto" class="p-category">atproto</a> #<a href="/tag/indieweb" class="p-category">indieweb</a> #<a href="/tag/indieauth" class="p-category">indieauth</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-96974"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2023/03/07/3/bluesky-custom-domain" class="p-name post-title">How to use your own domain as your BlueSky handle</a></h2> <div class="p-summary" style="margin: 12px 0;">I recently got access to the BlueSky beta, and decided to poke around to see what it&#039;s all about. I will save the details of what it is and how I feel about it for a different post. However, one of the first things you do when you sign up is choose a username that exists under the bsky.app domain. I have zero interest in another name rush where everyone tries to claim the shortest username possible, so I went with aaronpk.bsky.app rather than trying to get a or apk.</div> <a href="https://aaronparecki.com/2023/03/07/3/bluesky-custom-domain">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">1</span> like</span> <span><i class="bookmark icon"></i> <span class="p-pk-num-bookmarks">1</span> bookmark</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">2</span> replies</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">2</span> mentions</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2023/03/07/3/bluesky-custom-domain" class="u-url"> <time class="dt-published" datetime="2023-03-07T07:17:12-08:00"> Tue, Mar 7, 2023 7:17am -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/17492820" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/indieweb" class="p-category">indieweb</a> #<a href="/tag/bluesky" class="p-category">bluesky</a> #<a href="/tag/atproto" class="p-category">atproto</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-95470"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/12/22/10/export-current-slide-keynote" class="p-name post-title">How to create a keyboard shortcut to export the current slide in Keynote</a></h2> <div class="p-summary" style="margin: 12px 0;">Lately I&#039;ve been using Apple Keynote to create graphics for using in videos and blog posts. It&#039;s a quick way to arrange things on a page, copying and pasting most things just works, and there are enough built in shapes and tools to get the point across. However, after spending a full day creating graphics for a video, I found myself frustrated by the number of clicks required to export a single slide at a time.</div> <a href="https://aaronparecki.com/2022/12/22/10/export-current-slide-keynote">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">2</span> replies</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/12/22/10/export-current-slide-keynote" class="u-url"> <time class="dt-published" datetime="2022-12-22T11:59:55-08:00"> Thu, Dec 22, 2022 11:59am -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/15331287" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/keynote" class="p-category">keynote</a> #<a href="/tag/tutorial" class="p-category">tutorial</a> #<a href="/tag/automation" class="p-category">automation</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-95055"> <div class="context"> <div> <i class="ui users icon"></i> <a href="https://mailarchive.ietf.org/arch/browse/oauth/" class="u-audience h-card">OAuth WG</a> </div> </div> <div style="" class="content-area has-context has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/12/06/8/oauth-browser-based-apps-draft-12" class="p-name post-title">OAuth for Browser-Based Apps Draft 12</a></h2> <div class="p-summary" style="margin: 12px 0;">I just published a revised version of OAuth for Browser-Based Apps based on the feedback and discussion at IETF 115 London!</div> <a href="https://aaronparecki.com/2022/12/06/8/oauth-browser-based-apps-draft-12">continue reading...</a> </div> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/12/06/8/oauth-browser-based-apps-draft-12" class="u-url"> <time class="dt-published" datetime="2022-12-06T16:20:05-08:00"> Tue, Dec 6, 2022 4:20pm -08:00 </time> </a> <span class="syndications"> <a href="https://mailarchive.ietf.org/arch/msg/oauth/XrfUUJerrBqjCRPYZeNBuWX5HgU/" class="u-syndication syndication"><i class="envelope square icon"></i></a> <a href="https://micro.blog/aaronpk/14890409" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/ietf" class="p-category">ietf</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-95054"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/12/02/23/laws-of-oauth" class="p-name post-title">The Laws of OAuth</a></h2> <div class="p-summary" style="margin: 12px 0;"> The first law of OAuth states that the total number of authorized access tokens must remain constant in an isolated system.</div> <a href="https://aaronparecki.com/2022/12/02/23/laws-of-oauth">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">2</span> replies</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/12/02/23/laws-of-oauth" class="u-url"> <time class="dt-published" datetime="2022-12-02T15:00:00-08:00"> Fri, Dec 2, 2022 3:00pm -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/14890410" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/chatgpt" class="p-category">chatgpt</a> #<a href="/tag/openai" class="p-category">openai</a> #<a href="/tag/oauth" class="p-category">oauth</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-94308"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/11/14/9/raspberry-pi-restream" class="p-name post-title">How to Build a Restreaming Server with a Raspberry Pi</a></h2> <div class="p-summary" style="margin: 12px 0;">First of all, what is a restreaming server? Sometimes you want to livestream video from a device like an ATEM Mini or OBS to multiple destinations. Many devices and software like this will let you push video to just one RTMP destination at a time.</div> <a href="https://aaronparecki.com/2022/11/14/9/raspberry-pi-restream">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">6</span> likes</span> <span><i class="retweet icon"></i> <span class="p-pk-num-reposts">4</span> reposts</span> <span><i class="comment outline icon"></i> <span class="p-pk-num-replies">2</span> replies</span> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">3</span> mentions</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/11/14/9/raspberry-pi-restream" class="u-url"> <time class="dt-published" datetime="2022-11-14T08:09:21-08:00"> Mon, Nov 14, 2022 8:09am -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/14013299" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/restream" class="p-category">restream</a> #<a href="/tag/youtube" class="p-category">youtube</a> #<a href="/tag/video" class="p-category">video</a> #<a href="/tag/livestreaming" class="p-category">livestreaming</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-92670"> <div class="context"> <div> <i class="ui users icon"></i> <a href="https://mailarchive.ietf.org/arch/browse/oauth/" class="u-audience h-card">OAuth WG</a> </div> </div> <div style="" class="content-area has-context has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/09/15/30/browser-oauth" class="p-name post-title">New Draft of OAuth for Browser-Based Apps (Draft -11)</a></h2> <div class="p-summary" style="margin: 12px 0;">With the help of a few kind folks, we&#039;ve made some updates to the OAuth 2.0 for Browser-Based Apps draft as discussed during the last IETF meeting in Philadelphia.</div> <a href="https://aaronparecki.com/2022/09/15/30/browser-oauth">continue reading...</a> </div> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/09/15/30/browser-oauth" class="u-url"> <time class="dt-published" datetime="2022-09-15T18:04:51-07:00"> Thu, Sep 15, 2022 6:04pm -07:00 </time> </a> <span class="syndications"> <a href="https://mailarchive.ietf.org/arch/msg/oauth/-tMD2ahhs8CmlgMp-Uh2E8k76gg/" class="u-syndication syndication"><i class="envelope square icon"></i></a> <a href="https://micro.blog/aaronpk/13390840" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/oauth" class="p-category">oauth</a> #<a href="/tag/oauth2" class="p-category">oauth2</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-86260"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/01/29/12/raspi-usb-webcam-hdmi" class="p-name post-title">Stream a USB webcam to HDMI on a Raspberry Pi</a></h2> <div class="p-summary" style="margin: 12px 0;">This post exists to collect my notes on displaying a USB webcam on the Raspberry Pi HDMI outputs. This is not the same as streaming the webcam (easy), and this is not for use with the Raspberry Pi camera module. This is specifically for USB UVC webcams.</div> <a href="https://aaronparecki.com/2022/01/29/12/raspi-usb-webcam-hdmi">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="star empty icon"></i> <span class="p-pk-num-likes">1</span> like</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/01/29/12/raspi-usb-webcam-hdmi" class="u-url"> <time class="dt-published" datetime="2022-01-29T13:53:21-08:00"> Sat, Jan 29, 2022 1:53pm -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/12426535" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/raspi" class="p-category">raspi</a> #<a href="/tag/webcam" class="p-category">webcam</a> #<a href="/tag/hdmi" class="p-category">hdmi</a> #<a href="/tag/streaming" class="p-category">streaming</a> #<a href="/tag/video" class="p-category">video</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-86005"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/01/17/4/how-to-green-screen-chroma-key-yolobox-pro" class="p-name post-title">How to Green Screen on the YoloBox Pro</a></h2> <a href="https://aaronparecki.com/2022/01/17/4/how-to-green-screen-chroma-key-yolobox-pro"><img src="/2022/01/17/4/yolobox-green-screen-featured.jpg" class="u-featured"></a> <div class="p-summary" style="margin: 12px 0;">This step-by-step guide will show you how to use the chroma key feature on the YoloBox Pro to green screen yourself onto picture backgrounds and videos, or even add external graphics from a computer.</div> <a href="https://aaronparecki.com/2022/01/17/4/how-to-green-screen-chroma-key-yolobox-pro">continue reading...</a> </div> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/01/17/4/how-to-green-screen-chroma-key-yolobox-pro" class="u-url"> <time class="dt-published" datetime="2022-01-17T07:55:57-08:00"> Mon, Jan 17, 2022 7:55am -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/12384041" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/chromakey" class="p-category">chromakey</a> #<a href="/tag/greenscreen" class="p-category">greenscreen</a> #<a href="/tag/yolobox" class="p-category">yolobox</a> #<a href="/tag/videoproduction" class="p-category">videoproduction</a> #<a href="/tag/livestream" class="p-category">livestream</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> <li class="h-entry post-entry post-type-article post " id="post-id-85861"> <div style="" class="content-area has-name"> <div class="pad"> <div class="post-text"> <h2 class="post-title"><a href="https://aaronparecki.com/2022/01/11/8/convert-usb-webcam-to-hdmi" class="p-name post-title">How to convert USB webcams to HDMI</a></h2> <div class="p-summary" style="margin: 12px 0;">There are a handful of interesting USB webcams out there, which naturally work great with a computer. But what if you want to combine video from a USB webcam with your HDMI cameras in a video switcher like the ATEM Mini?</div> <a href="https://aaronparecki.com/2022/01/11/8/convert-usb-webcam-to-hdmi">continue reading...</a> </div> </div> <div class="metaline responses-summary pad"> <span><i class="file text outline icon"></i> <span class="p-pk-num-mentions">2</span> mentions</span> </div> <div class="metaline pad"> <a href="https://aaronparecki.com/2022/01/11/8/convert-usb-webcam-to-hdmi" class="u-url"> <time class="dt-published" datetime="2022-01-11T09:33:24-08:00"> Tue, Jan 11, 2022 9:33am -08:00 </time> </a> <span class="syndications"> <a href="https://micro.blog/aaronpk/12362933" class="u-syndication syndication"><i class="icon-microblog"></i></a> </span> <span class="right"> #<a href="/tag/video" class="p-category">video</a> #<a href="/tag/atem" class="p-category">atem</a> #<a href="/tag/streaming" class="p-category">streaming</a> #<a href="/tag/usb" class="p-category">usb</a> #<a href="/tag/uvc" class="p-category">uvc</a> #<a href="/tag/webcam" class="p-category">webcam</a> </span> </div> <a class="u-author" href="/"></a> <div style="clear:both;"></div> </div> </li> </ul> <div class="load-more"> <a href="/articles?before=20220111T093324-0800" class="infinite " rel="prev">older</a> </div> </div> <style> .table-of-contents td { padding: 1px; } </style> </div> </div> <footer class="sticky-footer"> <div class="subfooter"> <div class="ui container h-card"> <div class="about"> <div class="image"><a href="/" class="u-url u-uid"><img src="/images/profile.jpg" class="u-photo"></a></div> <div class="bio"> <div class="p-note"> <p>Hi, I'm <span class="p-name">Aaron<span style="display:none;"> Parecki</span></span>, Director of Identity Standards at Okta, and co-founder of <a href="https://indieweb.org/">IndieWebCamp</a>. I maintain <a href="https://oauth.net/">oauth.net</a>, <a href="/oauth/">write and consult about OAuth</a>, and participate in the OAuth Working Group at the IETF. I also help people learn about <a href="https://aaronpk.tv">video production and livestreaming</a>. (<a href="/bio/">detailed bio</a>)</p> <p>I've been <a href="/gps/">tracking my location</a> since 2008 and I wrote <a href="https://100.aaronparecki.com/">100 songs in 100 days</a>. I've <a href="/presentations">spoken</a> at conferences around the world about <a href="/presentations?tag=indieweb">owning your data</a>, <a href="/oauth/">OAuth</a>, <a href="/presentations?tag=quantifiedself">quantified self</a>, and explained <a href="https://www.youtube.com/watch?v=FGVJ0eXTRpw">why R is a vowel</a>. <a href="/about">Read more</a>.</p> <time class="dt-bday" datetime="--12-28"></time> <data class="p-street-address" value="PO Box 12433"></data> <data class="p-locality" value="Portland"></data> <data class="p-region" value="Oregon"></data> <data class="p-country-name" value="USA"></data> <data class="p-postal-code" value="97212"></data> </div> </div> <div class="right"> <div class="orgs"> <ul> <li class="p-org h-card"> <img src="/images/okta.png" alt="" class="u-photo"> <span class="p-role">Director of Identity Standards</span> at <a href="https://www.okta.com/" class="u-url"> <span class="p-name">Okta</span> </a> </li> <li class="p-org h-card"> <img src="/images/indiewebcamp.png" alt="" class="u-photo"> <a href="https://indieweb.org/" class="u-url"> <span class="p-name">IndieWebCamp</span> </a> <a class="p-role" href="https://indieweb.org/founders">Founder</a> </li> <li class="p-org h-card"> <img src="/images/ietf.ico" alt="" class="u-photo"> <a href="https://oauth.net" class="u-url"> <span class="p-name">OAuth WG</span> </a> <a class="p-role" href="/oauth/">Editor</a> </li> <li class="p-org h-card"> <img src="/images/openid.png" alt="" class="u-photo"> <a href="https://openid.net" class="u-url"> <span class="p-name">OpenID</span> </a> <a class="p-role" href="/oauth/">Board Member</a> </li> <!-- <li class="p-org h-card"> <img src="/images/w3c.png" alt="" class="u-photo"> <a href="https://www.w3.org/" class="u-url"> <span class="p-name">W3C</span> </a> <a class="p-role" href="/w3c/">Editor</a> </li> --> <li><br></li> <!-- <li><img src="/images/spotify.ico" alt=""> <a href="/sunshine-indie-pop/">Sunshine Indie Pop</a></li> <li> <img src="/images/microphone.png" alt=""> <a class="p-callsign u-url" href="https://w7apk.com">W7APK</a> </li> --> <li>馃帴 <a href="https://youtube.com/aaronpk">YouTube Tutorials and Reviews</a></li> <li>馃彔 <a href="https://www.youtube.com/@TheHouseFilesPDX">We're building a triplex!</li> <li>猸愶笍 <a href="https://aaronparecki.com/life-stack/">Life Stack</a></li> <li>鈿欙笍 <a href="https://aaronparecki.com/home-automation/">Home Automation</a></li> </ul> <link rel="pgpkey" href="/key.txt"> <link rel="me" href="sms:+15035678642"> <link rel="me" href="https://micro.blog/aaronpk"> </div> <div class="search"> <form action="/search" method="get"> <div class="ui fluid icon input"> <input type="text" name="q" placeholder="Search..." value=""> <i class="search icon"></i> </div> </form> </div> </div> </div> <div class="channels"> <ul class="footer-links"> <li><a href="/all">All</a></li> <li><a href="/articles">Articles</a></li> <li><a href="/bookmarks">Bookmarks</a></li> <li><a href="/notes">Notes</a></li> <li><a href="/photos">Photos</a></li> <li><a href="/replies">Replies</a></li> <li><a href="/reviews">Reviews</a></li> <li><a href="/trips">Trips</a></li> <li><a href="/videos">Videos</a></li> <li><a href="/contact">Contact</a></li> </ul> </div> <div class="elsewhere"> <ul class="footer-links"> <li><a href="https://github.com/aaronpk" rel=""><i class="github icon"></i></a></li> <li><a href="https://youtube.com/aaronpk" rel=""><i class="youtube play icon"></i></a></li> <li><a href="http://foursquare.com/aaronpk" rel=""><i class="foursquare icon"></i></a></li> <li><a href="http://www.linkedin.com/in/aaronparecki" rel=""><i class="linkedin icon"></i></a></li> <li><a href="https://instagram.com/aaronpk_tv" rel=""><i class="instagram icon"></i></a></li> <li><a href="http://flickr.com/aaronpk" rel=""><i class="flickr icon"></i></a></li> <li><a href="https://speakerdeck.com/aaronpk" rel=""><i class="icon-speakerdeck icon"></i></a></li> <li><a href="http://www.slideshare.net/aaronpk" rel=""><i class="slideshare icon"></i></a></li> <li><a href="http://www.last.fm/user/aaron_pk" rel=""><i class="lastfm icon"></i></a></li> <li><a href="https://kit.co/aaronpk" rel=""><i class="icon-kit-co icon"></i></a></li> <li><a href="https://www.duolingo.com/profile/aaronpk" rel=""><i class="icon-duolingo icon"></i></a></li> <li><a href="https://www.w3.org/users/59996" rel=""><i class="icon-w3c icon"></i></a></li> <li><a href="https://en.wikipedia.org/wiki/User:Aaronpk" rel=""><i class="linkify icon"></i></a></li> <li><a href="https://u.wechat.com/kKChiO-sSbgJQFf0UJrpHhE" rel=""><i class="wechat icon"></i></a></li> <li><a href="https://www.amazon.com/shop/aaronparecki" rel=""><i class="amazon icon"></i></a></li> <li><a href="https://www.amazon.com/gp/profile/amzn1.account.AHJ2OJ7NXSYM23FDDEDVZV2UR4MA" rel=""><i class="amazon icon"></i></a></li> <li><a href="https://aaronparecki.com/aaronpk" rel=""><i class="icon-mastodon icon"></i></a></li> <li><a href="https://bsky.app/profile/aaronpk.com" rel=""><i class="icon-bluesky icon"></i></a></li> <li><a href="https://cash.me/$aaronpk" rel=""><i class="icon-squarecash icon"></i></a></li> <li><a href="https://venmo.com/aaronpk" rel=""><i class="icon-venmo icon"></i></a></li> <li><a href="https://paypal.me/apk" rel=""><i class="paypal icon"></i></a></li> <li><a href="mailto:aaron@parecki.com" rel=""><i class="mail icon"></i></a></li> </ul> </div> </div> </div> <div class="footer"> <a href="/login" class="hidden-login"></a> <div> <span>&copy; 1999-2025 by Aaron Parecki.</span> <span>Powered by <a href="https://indieweb.org/p3k">p3k</a>.</span> <span>This site supports <a href="https://webmention.net/">Webmention</a>.</span> </div> <div> <span>Except where otherwise noted, text content on this site is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/" rel="license">Creative Commons Attribution 3.0 License</a>.</span> </div> <div class="badges" style="padding-top: 8px;"> <a href="https://indieweb.org/"><img src="/assets/badges/indieweb.png" width="80" height="15" alt="IndieWebCamp" style="image-rendering: pixelated;"></a> <a href="http://microformats.org/"><img src="/assets/badges/microformats.png" width="80" height="15" alt="Microformats" style="image-rendering: pixelated;"></a> <a href="https://indieweb.org/Webmention"><img src="/assets/badges/webmention.png" width="80" height="15" alt="Webmention" style="image-rendering: pixelated;"></a> <img src="/assets/badges/w3c-valid-html.png" width="80" height="15" alt="W3C HTML5" style="image-rendering: pixelated;"> <a href="http://creativecommons.org/licenses/by/3.0/"><img src="/assets/badges/cc-commons.png" width="80" height="15" alt="Creative Commons" style="image-rendering: pixelated;"></a> </div> </div> </footer> <input type="hidden" id="permalink" value=""> <div id="wechat-modal" class="hidden"> <div class="contents"> <div class="text">WeChat ID<br>aaronpk_tv</div> <div class="img"><img src="/images/wechat.jpg"></div> </div> </div> <script src="/assets/photo-albums/justified-layout.js"></script> <script src="/assets/photo-albums/photo-layout.js"></script> <script src="/assets/js-cookie.js"></script> <script src="/assets/story.js" async></script> <script src="/assets/script.js"></script> <script src="/assets/webmention.js"></script> <script src="/assets/admin.js"></script> <script> // Lolz. https://www.youtube.com/watch?v=EZpdEljk5dY // thanks seblog.nl! let photo = document.querySelector('.about .image img') if(photo) { window.addEventListener('deviceorientation', (e) => { let tiltLR = e.gamma; let tiltFB = e.beta; photo.style.transform = `rotate(${tiltLR * -1}deg)` }) } </script> <script src="https://cdn.usefathom.com/script.js" site="JGWUQUCN" defer></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10