PageSourceSearch

https://dannyrb.com/

html dannyrb.com collected 2026-10-05 05:38:19 UTC 29,611 bytes, 14 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en"><!--
3 __  __                __                                     __
4/\ \/\ \              /\ \             __                    /\ \
5\ \ \_\ \   __  __    \_\ \      __   /\_\      __       ___ \ \ \/'\
6 \ \  _  \ /\ \/\ \   /'_` \   /'__`\ \/\ \   /'__`\    /'___\\ \ , <
7  \ \ \ \ \\ \ \_\ \ /\ \L\ \ /\  __/  \ \ \ /\ \L\.\_ /\ \__/ \ \ \\`\
8   \ \_\ \_\\/`____ \\ \___,_\\ \____\ _\ \ \\ \__/.\_\\ \____\ \ \_\ \_\
9    \/_/\/_/ `/___/> \\/__,_ / \/____//\ \_\ \\/__/\/_/ \/____/  \/_/\/_/
10                /\___/                \ \____/
11                \/__/                  \/___/
12
13Powered by Hydejack v8.1.1 <https://hydejack.com/>
14--><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>👋 Hi, Friend | Dannyrb</title><meta name="generator" content="Jekyll v3.8.3" /><meta property="og:title" content="👋 Hi, Friend" /><meta name="author" content="Danny Brown" /><meta property="og:locale" content="en" /><meta name="description" content="💻 Code, 🧠 Thoughts, and 📚 Me I owe a lot to the knowledge others have shared; this is my small contribution." /><meta property="og:description" content="💻 Code, 🧠 Thoughts, and 📚 Me I owe a lot to the knowledge others have shared; this is my small contribution." /><link rel="canonical" href="https://dannyrb.com/" /><meta property="og:url" content="https://dannyrb.com/" /><meta property="og:site_name" content="Dannyrb" /><meta property="og:image" content="https://dannyrb.com/assets/img/authors/dannyrb-128.png" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:site" content="@dannyrbdev" /><meta name="twitter:creator" content="@dannyrb" /> 
14<script type="application/ld+json"> {"name":"Danny Brown","description":"💻 Code, 🧠 Thoughts, and 📚 Me I owe a lot to the knowledge others have shared; this is my small contribution.","author":{"@type":"Person","name":"Danny Brown"},"@type":"WebSite","url":"https://dannyrb.com/","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://dannyrb.com/assets/icons/icon.png"},"name":"Danny Brown"},"image":"https://dannyrb.com/assets/img/authors/dannyrb-128.png","headline":"👋 Hi, Friend","sameAs":["https://twitter.com/dannyrbdev","https://github.com/dannyrb"],"@context":"http://schema.org"}</script>
14<meta name="keywords" content="code,mentor,cornerstone.js,software,web,applications,JavaScript,C#,.NET Core"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="Dannyrb"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="application-name" content="Dannyrb"><meta name="msapplication-config" content="/assets/ieconfig.xml"><meta name="theme-color" content="rgb(47, 21, 45)"><meta name="generator" content="Hydejack v8.1.1" /><link type="application/atom+xml" rel="alternate" href="https://dannyrb.com/feed.xml" title="Dannyrb" /><link rel="alternate" href="https://dannyrb.com/" hreflang="en"><link rel="shortcut icon" href="/assets/icons/favicon.ico"><link rel="apple-touch-icon" href="/assets/icons/icon.png"><link rel="manifest" href="/assets/manifest.json"><link rel="dns-prefetch" href="https://fonts.googleapis.com"><link rel="dns-prefetch" href="https://fonts.gstatic.com"><link rel="dns-prefetch" href="https://www.google-analytics.com"><link rel="dns-prefetch" href="/" id="_baseURL"><link rel="dns-prefetch" href="/assets/js/hydejack-8.1.1.js" id="_hrefJS"><link rel="dns-prefetch" href="/sw.js" id="_hrefSW"><link rel="dns-prefetch" href="/assets/bower_components/fontfaceobserver/fontfaceobserver.standalone.js" id="_hrefFFO"><link rel="dns-prefetch" href="/assets/bower_components/katex/dist/katex.min.js" id="_hrefKatexJS"><link rel="dns-prefetch" href="/assets/bower_components/katex/dist/katex.min.css" id="_hrefKatexCSS"><link rel="dns-prefetch" href="/assets/img/swipe.svg" id="_hrefSwipeSVG"><link rel="dns-prefetch" href="https://dannyrb.disqus.com" id="_hrefDisqus"> 
14<script>!function(e,t){"use strict";function n(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent?e.attachEvent("on"+t,n):e["on"+t]=n}e.loadJS=function(e,r){var o=t.createElement("script");o.src=e,r&&n(o,"load",r,{once:!0});var a=t.scripts[0];return a.parentNode.insertBefore(o,a),o},e._loaded=!1,e.loadJSDeferred=function(r,o){function a(){e._loaded=!0,o&&n(d,"load",o,{once:!0});var r=t.scripts[0];r.parentNode.insertBefore(d,r)}var d=t.createElement("script");return d.src=r,e._loaded?a():n(e,"load",a,{once:!0}),d},e.setRel=e.setRelStylesheet=function(e){function n(){this.rel="stylesheet"}var r=t.getElementById(e);r.addEventListener?r.addEventListener("load",n,{once:!0}):r.onload=n}}(window,document); !function(a){"use strict";var b=function(b,c,d){function e(a){return h.body?a():void setTimeout(function(){e(a)})}function f(){i.addEventListener&&i.removeEventListener("load",f),i.media=d||"all"}var g,h=a.document,i=h.createElement("link");if(c)g=c;else{var j=(h.body||h.getElementsByTagName("head")[0]).childNodes;g=j[j.length-1]}var k=h.styleSheets;i.rel="stylesheet",i.href=b,i.media="only x",e(function(){g.parentNode.insertBefore(i,c?g:g.nextSibling)});var l=function(a){for(var b=i.href,c=k.length;c--;)if(k[c].href===b)return a();setTimeout(function(){l(a)})};return i.addEventListener&&i.addEventListener("load",f),i.onloadcssdefined=l,l(f),i};"undefined"!=typeof exports?exports.loadCSS=b:a.loadCSS=b}("undefined"!=typeof global?global:this); !function(a){if(a.loadCSS){var b=loadCSS.relpreload={};if(b.support=function(){try{return a.document.createElement("link").relList.supports("preload")}catch(b){return!1}},b.poly=function(){for(var b=a.document.getElementsByTagName("link"),c=0;c<b.length;c++){var d=b[c];"preload"===d.rel&&"style"===d.getAttribute("as")&&(a.loadCSS(d.href,d,d.getAttribute("media")),d.rel=null)}},!b.support()){b.poly();var c=a.setInterval(b.poly,300);a.addEventListener&&a.addEventListener("load",function(){b.poly(),a.clearInterval(c)}),a.attachEvent&&a.attachEvent("onload",function(){a.clearInterval(c)})}}}(this); </script>
14 
14<script>!function(w, d) { w._noPushState = false; w._noDrawer = false; /**/ loadJS(d.getElementById('_hrefFFO').href, function() { if ('Promise' in w) Promise.all([ new FontFaceObserver('Noto Sans').load(), new FontFaceObserver('Roboto Slab').load(), ]).then(function f() { d.body.classList.add('font-active'); }, function() {}); }); /**/ }(window, document);</script>
14 <!--[if gt IE 8]><!----><style> body{--code-font-family: Menlo,Monaco,Consolas,monospace;--font-weight: 400;--font-weight-bold: 700;--font-weight-heading: 400;--text-muted: #888;--gray-bg: rgba(0,0,0,0.025);--gray-text: #666;--menu-text: #bbb;--body-color: #333;--body-bg: #fff;--border-color: #ebebeb}.clearfix,.sidebar-social::after{content:"";display:table;clear:both}.color-transition,body,hr,.hr,table:not(.highlight) td,table:not(.highlight) th,.message{transition:background-color 1s ease, border-color 1s ease}.no-color-transition{transition:none !important}@media screen{.dark-mode{--text-muted: rgba(255,255,255,.5);--gray-bg: rgba(255,255,255,.033);--gray-text: rgba(255,255,255,.625);--menu-text: rgba(255,255,255,.25);--body-color: #d8d8d8;--body-bg: #392d38;--border-color: #644e63}}*{box-sizing:border-box}html,body{margin:0;padding:0}html{font-size:16px;line-height:1.75}body{color:var(--body-color);background-color:var(--body-bg);font-weight:var(--font-weight);overflow-y:scroll}a{text-decoration:none}.lead{margin-left:-1rem;margin-right:-1rem}.content img,.img,.content video,.video{max-width:100%}.content img.lead,.img.lead,.content video.lead,.video.lead{max-width:calc(100% + 2rem);width:calc(100% + 2rem)}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:var(--font-weight-heading);margin:5rem 0 1rem}h1,.h1{font-size:2rem;line-height:1.3}h2,.h2{font-size:1.5rem;line-height:1.4}h3,.h3{font-size:1.17em;line-height:1.5}h4,h5,h6,.h4,.h5,.h6{font-size:1rem;margin-bottom:0.5rem}p{margin-top:0;margin-bottom:1rem}p.lead{font-size:1.2em;margin-top:1.5rem;margin-bottom:1.5rem;padding:0 1rem}ul,ol,dl{margin-top:0;margin-bottom:1rem}ul,ol{padding-left:1.25rem}hr{position:relative;margin:3rem 0;border:0;border-top:1px solid var(--border-color)}.hr{border-bottom:1px solid var(--border-color);padding-bottom:1rem;margin-bottom:2rem}table:not(.highlight){border-collapse:collapse;margin-bottom:2rem;margin-left:-1rem}table:not(.highlight) td,table:not(.highlight) th{padding:.25rem .5rem;border:1px solid var(--border-color)}table:not(.highlight) td:first-child,table:not(.highlight) th:first-child{padding-left:1rem}table:not(.highlight) td:last-child,table:not(.highlight) th:last-child{padding-right:1rem}.page{margin-bottom:3em}.page li+li{margin-top:.25rem}.page>header{margin-bottom:2rem}.page-title,.post-title{margin-top:0}.post-date{display:block;margin-top:-0.5rem;margin-bottom:1rem;color:var(--text-muted)}.related-posts{padding-left:0;list-style:none;margin-bottom:2rem}.related-posts>li,.related-posts>li+li{margin-top:1rem}.message{margin-bottom:1rem;padding:1rem;color:var(--gray-text);background-color:var(--gray-bg);margin-left:-1rem;margin-right:-1rem}@media screen{body::before{content:'';width:.5rem;background:var(--border-color);position:fixed;left:0;top:0;bottom:0}}@media screen and (min-width: 64em){body::before{width:21rem}}@media screen and (min-width: 1666px){body::before{width:calc(50% - 28rem)}}@media screen and (min-width: 42em){html{font-size:17px}}@media screen and (min-width: 124em){html{font-size:18px}}.fade-in{animation-duration:500ms;animation-timing-function:ease;animation-name:fade-in;animation-fill-mode:forwards}@keyframes fade-in{from{transform:translateY(-3rem);opacity:0}50%{transform:translateY(-3rem);opacity:0}to{transform:translateY(0);opacity:1}}.fl{float:left}.fr{float:right}.mb4{margin-bottom:4rem}.mb6{margin-bottom:6rem}.mt0{margin-top:0}.mt2{margin-top:2rem}.mt3{margin-top:3rem}.mt4{margin-top:4rem}.pb0{padding-bottom:0}.sixteen-nine{position:relative}.sixteen-nine::before{display:block;content:"";width:100%;padding-top:56.25%}.sixteen-nine>*{position:absolute;top:0;left:0;right:0;bottom:0}.sr-only{display:none}.border{border:1px solid var(--border-color)}hy-push-state a,.a{position:relative;padding-bottom:.15rem;border-bottom:1px solid}hy-push-state a.no-hover,.a.no-hover{border-bottom:none;padding-bottom:0}.content .img{overflow:hidden}.content .img img{margin:0;width:100%;height:100%;background-color:var(--gray-bg)}hy-drawer{width:100%;position:relative;overflow:hidden}@media screen and (min-width: 64em){hy-drawer{position:fixed;width:21rem;top:0;left:0;bottom:0;margin-left:0}hy-drawer.cover{position:relative;width:100%}}@media screen and (min-width: 1666px){hy-drawer{width:calc(50% - 28rem)}}.sidebar{position:relative;display:flex;justify-content:center;align-items:center;color:rgba(255,255,255,0.75);text-align:center;z-index:2;min-height:100vh}.sidebar a{color:#fff;border-bottom-color:rgba(255,255,255,0.2)}.sidebar-bg{position:absolute;top:0;left:calc(50% - 50vw);width:100vw;height:100%;background:#202020 center / cover}.sidebar-bg::after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0.05)}.sidebar-bg.sidebar-overlay::after{background:linear-gradient(to bottom, rgba(32,32,32,0) 0%, rgba(32,32,32,0.5) 50%, rgba(32,32,32,0) 100%)}.sidebar-sticky{position:relative;z-index:3;max-width:21rem;padding:1.5rem;contain:content}.sidebar-about .avatar{margin-bottom:1.5rem}.sidebar-about>h2{margin-top:0}.sidebar-nav>ul{list-style:none;padding-left:0}a.sidebar-nav-item{display:inline-block;font-weight:var(--font-weight-heading);line-height:1.75;padding:.25rem;border-bottom:1px solid rgba(255,255,255,0.2)}.sidebar-social>ul{display:inline-block;list-style:none;padding-left:0;margin-bottom:0}.sidebar-social>ul>li{float:left}.sidebar-social>ul>li>a{display:inline-block;text-align:center;font-size:1.4rem;width:3rem;height:4rem;padding:.5rem 0;line-height:3rem}.sidebar-social>ul li+li{margin-top:0}.fixed-common,.fixed-top,.fixed-bottom{position:fixed;left:0;width:100%;z-index:2}.fixed-top{top:0}.fixed-bottom{bottom:0}.navbar>.content{padding-top:0;padding-bottom:0;min-height:0;color:var(--menu-text)}.nav-btn-bar{margin:0 -1rem 0 -.875rem}.nav-btn{background:none;border:none;padding:1.75rem .875rem;color:var(--menu-text) !important;cursor:pointer}.animation-main{opacity:0;pointer-events:none}.content{position:relative;margin-left:auto;margin-right:auto;padding:6rem 1rem 12rem}@media screen{.content{padding-left:1.5rem;max-width:38rem;min-height:100vh}}@media screen and (min-width: 54em){.content{max-width:42rem}}@media screen and (min-width: 64em){.content{padding-left:1rem;margin-left:24rem;margin-right:3rem}}@media screen and (min-width: 90em){.content{margin-left:25rem;margin-right:4rem;max-width:48rem}}@media screen and (min-width: 1666px){.content{margin:auto}}.avatar{width:6.5rem;height:6.5rem;border-radius:100%;overflow:hidden}@media screen and (min-width: 90em){.avatar{width:7rem;height:7rem}}.content .avatar{float:right;margin-left:.5rem}html{font-family:Helvetica, Arial, sans-serif}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6,.heading{font-family:Helvetica, Arial, sans-serif}.font-active{font-family:Noto Sans,Helvetica,Arial,sans-serif}.font-active h1,.font-active h2,.font-active h3,.font-active h4,.font-active h5,.font-active h6,.font-active .h1,.font-active .h2,.font-active .h3,.font-active .h4,.font-active .h5,.font-active .h6,.font-active .heading{font-family:Roboto Slab,Helvetica,Arial,sans-serif}
14 body{--code-font-family: Menlo,Monaco,Consolas,monospace;--font-weight: 400;--font-weight-bold: 700;--font-weight-heading: 400;--text-muted: #888;--gray-bg: rgba(0,0,0,0.025);--gray-text: #666;--menu-text: #bbb;--body-color: #333;--body-bg: #fff;--border-color: #ebebeb}.clearfix,.layout-projects .columns::after,.layout-project .columns::after,.layout-home .columns::after,.layout-welcome .columns::after{content:"";display:table;clear:both}.color-transition,.layout-projects .project-card,.layout-project .project-card,.layout-home .project-card,.layout-welcome .project-card{transition:background-color 1s ease, border-color 1s ease}.no-color-transition{transition:none !important}.layout-projects .columns,.layout-project .columns,.layout-home .columns,.layout-welcome .columns{margin-left:-1rem;display:flex;flex-wrap:wrap}.layout-projects .column,.layout-project .column,.layout-home .column,.layout-welcome .column{float:left;padding-left:1rem;margin-bottom:1rem;width:100%;display:flex}@media screen and (min-width: 42em){.layout-projects .column-1-2,.layout-project .column-1-2,.layout-home .column-1-2,.layout-welcome .column-1-2{width:50%}}@media print{.layout-projects .columns,.layout-project .columns,.layout-home .columns,.layout-welcome .columns{display:block}.layout-projects .column,.layout-project .column,.layout-home .column,.layout-welcome .column{display:block;width:50%}}.layout-projects .project-card,.layout-project .project-card,.layout-home .project-card,.layout-welcome .project-card{width:100%;color:var(--gray-text);background-color:var(--gray-bg);padding-bottom:.75rem;margin-bottom:1.5rem;overflow:hidden;box-shadow:0.125rem 0.125rem 1rem rgba(0,0,0,0.2);contain:content;page-break-inside:avoid}.layout-projects .project-card>a .project-card-img,.layout-project .project-card>a .project-card-img,.layout-home .project-card>a .project-card-img,.layout-welcome .project-card>a .project-card-img{margin-bottom:0;position:relative}.layout-projects .project-card>a .project-card-img img,.layout-project .project-card>a .project-card-img img,.layout-home .project-card>a .project-card-img img,.layout-welcome .project-card>a .project-card-img img{display:block;transition:transform 500ms}.layout-projects .project-card>a:hover .project-card-img img,.layout-projects .project-card>a:focus .project-card-img img,.layout-project .project-card>a:hover .project-card-img img,.layout-project .project-card>a:focus .project-card-img img,.layout-home .project-card>a:hover .project-card-img img,.layout-home .project-card>a:focus .project-card-img img,.layout-welcome .project-card>a:hover .project-card-img img,.layout-welcome .project-card>a:focus .project-card-img img{transition:transform 250ms;transform:scale(1.025)}.layout-projects .project-card>.project-card-title,.layout-projects .project-card>.project-card-text,.layout-project .project-card>.project-card-title,.layout-project .project-card>.project-card-text,.layout-home .project-card>.project-card-title,.layout-home .project-card>.project-card-text,.layout-welcome .project-card>.project-card-title,.layout-welcome .project-card>.project-card-text{text-align:center;padding:0 1rem}.layout-projects .project-card>.project-card-title,.layout-project .project-card>.project-card-title,.layout-home .project-card>.project-card-title,.layout-welcome .project-card>.project-card-title{display:block;font-size:1rem;margin-top:.75rem;margin-bottom:.25rem;color:inherit}.layout-projects .project-card>.project-card-text,.layout-project .project-card>.project-card-text,.layout-home .project-card>.project-card-text,.layout-welcome .project-card>.project-card-text{margin:.25rem 0}.layout-projects .column-1>.project-card>.project-card-title,.layout-project .column-1>.project-card>.project-card-title,.layout-home .column-1>.project-card>.project-card-title,.layout-welcome .column-1>.project-card>.project-card-title{font-size:1.17rem}.layout-projects .column-1>.project-card>.project-card-text,.layout-project .column-1>.project-card>.project-card-text,.layout-home .column-1>.project-card>.project-card-text,.layout-welcome .column-1>.project-card>.project-card-text{font-size:1rem}</style><link rel="preload" as="style" href="/assets/css/hydejack-8.1.1.css" id="_stylePreload"> 
14<script>setRel('_stylePreload');</script>
14<link rel="preload" as="style" href="/assets/icomoon/style.css" id="_iconsPreload"> 
14<script>setRel('_iconsPreload');</script>
14<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Roboto+Slab:400|Noto+Sans:400,400i,700,700i" id="_fontsPreload"> 
14<script>setRel('_fontsPreload');</script>
14 <noscript><link rel="stylesheet" href="/assets/css/hydejack-8.1.1.css"><link rel="stylesheet" href="/assets/icomoon/style.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Slab:400|Noto+Sans:400,400i,700,700i"><style> html { font-family: Noto Sans, Helvetica, Arial, sans-serif!important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .heading { font-family: Roboto Slab, Helvetica, Arial, sans-serif!important; }</style></noscript><style id="_pageStyle"> .content a:not(.btn){color:#15091d;border-color:rgba(21,9,29,0.2)}.content a:not(.btn):hover{border-color:#15091d}:focus{outline-color:#15091d !important}.btn-primary{color:#fff;background-color:#15091d;border-color:#15091d}.btn-primary:focus,.btn-primary.focus,.form-control:focus,.form-control.focus{box-shadow:0 0 0 3px rgba(21,9,29,0.5)}.btn-primary:hover,.btn-primary.hover{color:#fff;background-color:#000;border-color:#000}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#15091d;border-color:#15091d}.btn-primary:active,.btn-primary.active{color:#fff;background-color:#000;border-color:#000}body.dark-mode{--body-bg: #392d38;--border-color: #483846}::selection{color:#fff;background:#15091d}::-moz-selection{color:#fff;background:#15091d}</style><!--<![endif]--><body class="no-color-transition"><div id="_navbar" class="navbar fixed-top"><div class="content"><div class="nav-btn-bar"> <span class="sr-only">Jump to:</span> <a id="_menu" class="nav-btn no-hover fl" href="#_navigation"> <span class="sr-only">Navigation</span> <span class="icon-menu"></span> </a></div></div></div><hr class="sr-only" hidden /> <hy-push-state replace-ids="_main" link-selector="a[href]:not([href*='/assets/']):not(.external):not(.no-push-state)" duration="250" script-selector="script:not([type^='math/tex'])" prefetch ><main id="_main" class="content fade-in layout-welcome" role="main" data-color="rgb(21, 9, 29)" data-theme-color="rgb(47, 21, 45)" data-image="/assets/img/star-mountains-2400x1526.jpg" data-overlay ><article class="page" role="article"><header><h1 class="page-title">👋 Hi, Friend</h1><div class="hr pb0"></div></header><p>I spend a lot of time writing code. This site helps me collect and synthesize my thoughts, as well as catalogue my lessons learned and accomplishments. If nothing here is useful for you, at least check out these cool games:<ul><li><a href="https://boardgamegeek.com/boardgame/220/high-society">High Society</a>: Be the richest looking poor person without being the poorest person<li><a href="https://boardgamegeek.com/boardgame/98778/hanabi">Hanabi</a>: 🎆 Work together to create a dazzling fireworks show<li><a href="https://boardgamegeek.com/boardgame/11971/cockroach-poker">Cockroach Poker</a>: Deceive each other, and infest opponents with critters<li><a href="https://boardgamegeek.com/boardgame/131357/coup">Coup</a>: KILL EVERYONE</ul><h2 id="blog-posts">Blog Posts</h2><p>Like a diary, but even less interesting. Read my thoughts and leave comments about why yours are better.<ul class="related-posts mt2"><li> <a href="/blog/2019-02-25-cornerstone-js-a-new-look/" class="h4 flip-title"> <span>Cornerstone.js: A New Look</span> </a> <time class="heading faded fine" datetime="2019-02-25T00:00:00+00:00">25 Feb 2019</time><li> <a href="/blog/2017-10-06-graduating-from-bootstrap-with-help-from-atomic-design/" class="h4 flip-title"> <span>Graduating from Boostrap: With help from Atomic Design</span> </a> <time class="heading faded fine" datetime="2017-10-06T00:00:00+00:00">06 Oct 2017</time></ul><p class="read-more"> See <a class="heading flip-title" href="/posts/">Posts</a> for more<h2 id="projects">Projects</h2><p>Some doo-dads and widgets I’ve built or helped build. Curious to what I’ve been up to lately? I like to build in the open when I can. <a href="https://github.com/dannyrb">Follow me on GitHub 🐙</a><div class="columns mt2"><div class="column column-1-2"><article class="project-card" vocab="http://schema.org/" typeof="CreativeWork" resource="/projects/homeside-pro-mobile-app/#project" ><meta property="name" content="Homeside PRO (Android / iOS)"/><meta property="image" content="/assets/img/projects/homeside-pro-mobile-app.png"/> <a href="/projects/homeside-pro-mobile-app/" class="no-hover no-print-link flip-project" tabindex="-1"><div class="project-card-img img sixteen-nine"> <hy-img src="/assets/img/projects/homeside-pro-mobile-app.png" alt="Homeside PRO (Android / iOS)" srcset="/assets/img/projects/homeside-pro-mobile-app.png 1920w,/assets/img/projects/homeside-pro-mobile-app.png 960w,/assets/img/projects/homeside-pro-mobile-app.png 480w" sizes="(min-width: 90em) 22.5rem, (min-width: 54em) 19.5rem, (min-width: 42em) 17.5rem, 100vw" root-margin="512px" > <noscript><img data-ignore src="/assets/img/projects/homeside-pro-mobile-app.png" alt="Homeside PRO (Android / iOS)" srcset="/assets/img/projects/homeside-pro-mobile-app.png 1920w,/assets/img/projects/homeside-pro-mobile-app.png 960w,/assets/img/projects/homeside-pro-mobile-app.png 480w" sizes="(min-width: 90em) 22.5rem, (min-width: 54em) 19.5rem, (min-width: 42em) 17.5rem, 100vw" /></noscript> <span class="loading" slot="loading" hidden> <span class="icon-cog"></span> </span> </hy-img></div></a><h3 class="project-card-title"> <a href="/projects/homeside-pro-mobile-app/" class="flip-title" property="mainEntityOfPage">Homeside PRO (Android / iOS)</a></h3><p class="project-card-text fine" property="disambiguatingDescription"> Hybrid mobile app used by realty partners to view their consumers’ loan statuses.</article></div><div class="column column-1-2"><article class="project-card" vocab="http://schema.org/" typeof="CreativeWork" resource="/projects/quick-thank-you-cards/#project" ><meta property="name" content="Quick “Thank You” Cards"/><meta property="image" content="/assets/img/projects/quick-thank-you-cards.png"/> <a href="/projects/quick-thank-you-cards/" class="no-hover no-print-link flip-project" tabindex="-1"><div class="project-card-img img sixteen-nine"> <hy-img src="/assets/img/projects/quick-thank-you-cards.png" alt="Quick “Thank You” Cards" srcset="/assets/img/projects/quick-thank-you-cards.png 1920w,/assets/img/projects/quick-thank-you-cards.png 960w,/assets/img/projects/quick-thank-you-cards.png 480w" sizes="(min-width: 90em) 22.5rem, (min-width: 54em) 19.5rem, (min-width: 42em) 17.5rem, 100vw" root-margin="512px" > <noscript><img data-ignore src="/assets/img/projects/quick-thank-you-cards.png" alt="Quick “Thank You” Cards" srcset="/assets/img/projects/quick-thank-you-cards.png 1920w,/assets/img/projects/quick-thank-you-cards.png 960w,/assets/img/projects/quick-thank-you-cards.png 480w" sizes="(min-width: 90em) 22.5rem, (min-width: 54em) 19.5rem, (min-width: 42em) 17.5rem, 100vw" /></noscript> <span class="loading" slot="loading" hidden> <span class="icon-cog"></span> </span> </hy-img></div></a><h3 class="project-card-title"> <a href="/projects/quick-thank-you-cards/" class="flip-title" property="mainEntityOfPage">Quick “Thank You” Cards</a></h3><p class="project-card-text fine" property="disambiguatingDescription"> Design your postcard, pay $1-3, have it printed and mailed on your behalf.</article></div></div><p class="read-more mt0"> See <a class="heading flip-title" href="/projects/">Projects</a> for more</article><footer role="contentinfo"><hr/><p><small class="copyright">© 2019. All rights reserved. </small><hr class="sr-only"/></footer></main><hy-drawer class="" align="left" threshold="10" touch-events prevent-default ><header id="_sidebar" class="sidebar" role="banner"><div class="sidebar-bg sidebar-overlay" style="background-color:rgb(47, 21, 45);background-image:url(/assets/img/star-mountains-2400x1526.jpg)"></div><div class="sidebar-sticky"><div class="sidebar-about"> <a class="no-hover" href="/" tabindex="-1"> <img src="/assets/icons/icon.png" class="avatar" alt="Dannyrb" data-ignore /> </a><h2 class="h1"><a href="/">Dannyrb</a></h2><p class=""> 💻 Code, 🧠 Thoughts, and 📚 Me</div><nav class="sidebar-nav heading" role="navigation"> <span class="sr-only">Navigation:</span><ul><li> <a id="_navigation" href="/blog/" class="sidebar-nav-item" > Blog </a><li> <a href="/projects/" class="sidebar-nav-item" > Projects </a><li> <a href="/resume/" class="sidebar-nav-item" > Résumé </a></ul></nav><div class="sidebar-social"> <span class="sr-only">Social:</span><ul><li> <a href="https://twitter.com/dannyrbdev" title="Twitter" class="no-mark-external"> <span class="icon-twitter"></span> <span class="sr-only">Twitter</span> </a><li> <a href="https://github.com/dannyrb" title="GitHub" class="no-mark-external"> <span class="icon-github"></span> <span class="sr-only">GitHub</span> </a><li> <a href="mailto:[email protected]" title="Email" class="no-mark-external"> <span class="icon-mail"></span> <span class="sr-only">Email</span> </a><li> <a href="https://dannyrb.com/feed.xml" title="RSS" class="no-mark-external"> <span class="icon-rss2"></span> <span class="sr-only">RSS</span> </a></ul></div></div></header></hy-drawer><hr class="sr-only" hidden /> </hy-push-state> <!--[if !IE]><!----> 
14<script>loadJSDeferred(document.getElementById('_hrefJS').href);</script>
14 <!--<![endif]--> 
14<script>!function(w, d) { w.ga=w.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; /**/ ga('create', 'UA-103671826-1', 'auto'); /**/ var pushStateEl = d.getElementsByTagName('hy-push-state')[0]; var timeoutId; pushStateEl.addEventListener('hy-push-state-load', function() { w.clearTimeout(timeoutId); timeoutId = w.setTimeout(function() { ga('set', 'page', w.location.pathname); ga('send', 'pageview'); }, 500); }); d.addEventListener('hy--cookies-ok', function () { w.ga(function(tracker) { w.ga("set", "anonymizeIp", undefined); localStorage && localStorage.setItem("ga--client-id", tracker.get("clientId")); }); }); w.loadJSDeferred('https://www.google-analytics.com/analytics.js'); }(window, document);</script>
14 
14<script>!function(w, d) { if ('serviceWorker' in w.navigator) { /**/ w.navigator.serviceWorker.getRegistration() .then(r => r.unregister()) .catch(() => {}); /**/ } }(window, document);</script>
14<h2 class="sr-only" hidden>Templates (for web app):</h2><template id="_animation-template" hidden><div class="animation-main fixed-top"><div class="content"><div class="page"></div></div></div></template> <template id="_loading-template" hidden><div class="loading nav-btn fr"> <span class="sr-only">Loading…</span> <span class="icon-cog"></span></div></template> <template id="_error-template" hidden><div class="page"><h1 class="page-title">Error</h1><p class="lead"> Sorry, an error occurred while loading <a class="this-link" href=""></a>.</div></template> <template id="_back-template" hidden> <a id="_back" class="back nav-btn fl no-hover"> <span class="sr-only">Back</span> <span class="icon-arrow-left2"></span> </a> </template> <template id="_permalink-template" hidden> <a href="#" class="permalink"> <span class="sr-only">Permalink</span> <span class="icon-link"></span> </a> </template> <template id="_dark-mode-template" hidden> <button id="_dark-mode" class="nav-btn no-hover fl" > <span class="sr-only">Dark Mode</span> <span class="icon-contrast"></span> </button> </template></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.