mirror of
https://github.com/LukeHagar/jims-blog.git
synced 2025-12-06 04:20:07 +00:00
deploy: da38d83e95
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/telly-award/><img class=card-img-top src=/blogs/telly-award//banner.png alt="Let's get personal: computing has won a Telly award"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/telly-award/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Let's get personal: computing has won a Telly award">Let's get personal: computing has won a Telly award</h5></a><div class="card-text secondary-font"><p>This year is the 44th annual Telly Awards. The Telly Awards honor excellence in video and television across all screens.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/liblab-in-a-devcontainer/><img class=card-img-top src=/blogs/liblab-in-a-devcontainer//banner.png alt="Installing LibLab into a devcontainer using NPM"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/liblab-in-a-devcontainer/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Installing LibLab into a devcontainer using NPM">Installing LibLab into a devcontainer using NPM</h5></a><div class="card-text secondary-font"><p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace
|
||||
I recently started at LibLab as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I’m a big fan of as I love typesafety and the …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 4, 2023</span>
|
||||
<a href=/blogs/liblab-in-a-devcontainer/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/telly-award/><img class=card-img-top src=/blogs/telly-award//banner.png alt="Let's get personal: computing has won a Telly award"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/telly-award/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Let's get personal: computing has won a Telly award">Let's get personal: computing has won a Telly award</h5></a><div class="card-text secondary-font"><p>This year is the 44th annual Telly Awards. The Telly Awards honor excellence in video and television across all screens.
|
||||
The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 1, 2023</span>
|
||||
<a href=/blogs/telly-award/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/azure-functions-python-m1/><img class=card-img-top src=/blogs/azure-functions-python-m1//banner.png alt="Run Azure Functions with Python on Apple Silicon"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/azure-functions-python-m1/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Run Azure Functions with Python on Apple Silicon">Run Azure Functions with Python on Apple Silicon</h5></a><div class="card-text secondary-font"><p>If you are an Apple user and you want to build Azure Functions using Python, then you’ve been out of luck. The Azure Functions core tools don’t support Python functions on Arm64. There is a workaround, and this post shows you how.
|
||||
Arm64 support in Azure Functions Apple moved to an Arm64 …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 8, 2023</span>
|
||||
@@ -26,8 +28,5 @@ Although Teams has a lot …</p></div></div><div class="mt-auto post-footer bg-t
|
||||
So I launched ChatGPT and asked it to write this post! This is one of 2 posts written this way, so you …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 26, 2023</span>
|
||||
<a href=/blogs/cargo-fmt/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/cargo-clippy/><img class=card-img-top src=/blogs/cargo-clippy//banner.png alt="Lint Rust code with cargo clippy"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/cargo-clippy/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Lint Rust code with cargo clippy">Lint Rust code with cargo clippy</h5></a><div class="card-text secondary-font"><p>This blog post was a fun one to write - cos I didn’t! I actually learned about cargo clippy on a recent Crack the code interview with Rust live stream and decided a quick blog post would be fun.
|
||||
So I launched ChatGPT and asked it to write this post! This is one of 2 posts written this way, so …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 26, 2023</span>
|
||||
<a href=/blogs/cargo-clippy/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/running-ubuntu-on-a-mac/><img class=card-img-top src=/blogs/running-ubuntu-on-a-mac//banner.jpg alt="Run an Ubuntu VM on your Mac with a single command"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/running-ubuntu-on-a-mac/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Run an Ubuntu VM on your Mac with a single command">Run an Ubuntu VM on your Mac with a single command</h5></a><div class="card-text secondary-font"><p>I recently needed to run Linux so I could test out what Python version was installed, and how to upgrade it for some documentation I’m creating.
|
||||
I don’t have a spare machine to set up as a Linux box, and didn’t want to use a Raspberry Pi, I wanted a clean Ubuntu install.
|
||||
My …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 24, 2023</span>
|
||||
<a href=/blogs/running-ubuntu-on-a-mac/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class="page-item disabled"><a aria-disabled=true aria-label=First class=page-link role=button tabindex=-1><span aria-hidden=true>««</span></a></li><li class="page-item disabled"><a aria-disabled=true aria-label=Previous class=page-link role=button tabindex=-1><span aria-hidden=true>«</span></a></li><li class="page-item active"><a aria-current=page aria-label="Page 1" class=page-link role=button>1</a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/2/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/cargo-clippy/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class="page-item disabled"><a aria-disabled=true aria-label=First class=page-link role=button tabindex=-1><span aria-hidden=true>««</span></a></li><li class="page-item disabled"><a aria-disabled=true aria-label=Previous class=page-link role=button tabindex=-1><span aria-hidden=true>«</span></a></li><li class="page-item active"><a aria-current=page aria-label="Page 1" class=page-link role=button>1</a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/2/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Blogs on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 01 Jun 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/blogs/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Blogs on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 04 Aug 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/blogs/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
BIN
blogs/liblab-in-a-devcontainer/banner.png
Normal file
BIN
blogs/liblab-in-a-devcontainer/banner.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
BIN
blogs/liblab-in-a-devcontainer/devcontainer-add-feature.png
Normal file
BIN
blogs/liblab-in-a-devcontainer/devcontainer-add-feature.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
44
blogs/liblab-in-a-devcontainer/index.html
Normal file
44
blogs/liblab-in-a-devcontainer/index.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Installing LibLab into a devcontainer using NPM"><meta property="og:description" content="Installing LibLab into a devcontainer using NPM"><meta property="og:type" content="article"><meta property="og:url" content="https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/"><meta property="og:image" content="https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/banner.png"><meta property="article:section" content="blogs"><meta property="article:published_time" content="2023-08-04T00:00:00+00:00"><meta property="article:modified_time" content="2023-08-04T00:00:00+00:00"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/banner.png"><meta name=twitter:title content="Installing LibLab into a devcontainer using NPM"><meta name=twitter:description content="Installing LibLab into a devcontainer using NPM"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Installing LibLab into a devcontainer using NPM"><link rel=stylesheet href=/css/index.css><link rel=stylesheet href=/css/single.css><link rel=stylesheet href=/css/projects.css media=all><script defer src=/fontawesome-5/all-5.15.4.js></script><title>Installing LibLab into a devcontainer using NPM | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Installing LibLab into a devcontainer using NPM</h1><div class="text-left content">Jim Bennett
|
||||
<small>|</small>
|
||||
Aug 4, 2023</div></div></div></section><section id=single><div class=container><div class="row justify-content-center"><div class="col-sm-12 col-md-12 col-lg-9"><div class=pr-lg-4><div class=featured-image><img class=img-fluid src=banner.png alt="Installing LibLab into a devcontainer using NPM"></div><article class="page-content p-2"><blockquote><p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p></blockquote><p>I recently started at <a href=https://liblab.com>LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I’m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p><h2 id=devcontainers>Devcontainers</h2><p>I love <a href=https://containers.dev/>devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I’m creating a <a href=https://fastapi.tiangolo.com/>FastAPI</a> application, and building an SDK from that.</p><p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p><p><img src=python3-devcontainer.png alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p><p>Once in this container I can create my API, then build the SDK using LibLab.</p><h2 id=add-liblab-to-the-container>Add LibLab to the container</h2><p>LibLab is available as a <a href=https://developers.liblab.com/docs/getting-started>CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p><ul><li>Install it manually in the <code>postCreateCommand</code></li><li>Use a <code>DOCKERFILE</code> and install it there</li><li>Use the NPM package feature</li></ul><p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don’t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p><p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p><p><img src=devcontainer-feature-command-palette.png alt="The configure container features command palette option"></p><p><img src=devcontainer-add-feature.png alt="Selecting the NPM package feature from the command palette"></p><p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span>{
|
||||
</span></span><span style=display:flex><span> <span style=color:#960050;background-color:#1e0010>...</span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#f92672>"features"</span>: {
|
||||
</span></span><span style=display:flex><span> <span style=color:#f92672>"ghcr.io/devcontainers-contrib/features/npm-package:1"</span>: {}
|
||||
</span></span><span style=display:flex><span> }
|
||||
</span></span><span style=display:flex><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span>{
|
||||
</span></span><span style=display:flex><span> <span style=color:#960050;background-color:#1e0010>...</span>
|
||||
</span></span><span style=display:flex><span> <span style=color:#f92672>"features"</span>: {
|
||||
</span></span><span style=display:flex><span> <span style=color:#f92672>"ghcr.io/devcontainers-contrib/features/npm-package:1"</span>: {
|
||||
</span></span><span style=display:flex><span> <span style=color:#f92672>"package"</span>: <span style=color:#e6db74>"liblab"</span>
|
||||
</span></span><span style=display:flex><span> }
|
||||
</span></span><span style=display:flex><span> }
|
||||
</span></span><span style=display:flex><span>}
|
||||
</span></span></code></pre></div><h2 id=rebuild-the-container>Rebuild the container</h2><p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style=display:flex><span>The offical LibLab CLI
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span>VERSION
|
||||
</span></span><span style=display:flex><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span>USAGE
|
||||
</span></span><span style=display:flex><span> $ liblab <span style=color:#f92672>[</span>COMMAND<span style=color:#f92672>]</span>
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span>TOPICS
|
||||
</span></span><span style=display:flex><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style=display:flex><span>
|
||||
</span></span><span style=display:flex><span>COMMANDS
|
||||
</span></span><span style=display:flex><span> build Build SDK<span style=color:#f92672>(</span>s<span style=color:#f92672>)</span> and Docs <span style=color:#66d9ef>for</span> your API.
|
||||
</span></span><span style=display:flex><span> help Display help <span style=color:#66d9ef>for</span> liblab.
|
||||
</span></span><span style=display:flex><span> init Create a liblab folder <span style=color:#66d9ef>for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style=display:flex><span> login Login to your account.
|
||||
</span></span><span style=display:flex><span> logout Logout of your account.
|
||||
</span></span><span style=display:flex><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style=display:flex><span> pr Create a PR <span style=color:#66d9ef>for</span> all the generated SDKs.
|
||||
</span></span><span style=display:flex><span> register Register <span style=color:#66d9ef>for</span> a new liblab account.
|
||||
</span></span><span style=display:flex><span> reset-password Reset your password.
|
||||
</span></span><span style=display:flex><span> token Create a new login token <span style=color:#66d9ef>for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id=learn-more>Learn more</h2><p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p><ul><li><a href=https://linktr.ee/JimBobBennett>Contact me via social</a></li><li><a href=https://discord.gg/F8aECHbRkV>Join our Discord</a></li></ul></article></div></div><div class="col-sm-12 col-md-12 col-lg-3"><div class=sticky-sidebar><aside class=toc><h5>Table Of Contents</h5><div class=toc-content><nav id=TableOfContents><ul><li><a href=#devcontainers>Devcontainers</a></li><li><a href=#add-liblab-to-the-container>Add LibLab to the container</a></li><li><a href=#rebuild-the-container>Rebuild the container</a></li><li><a href=#learn-more>Learn more</a></li></ul></nav></div></aside><aside class=tags><h5>Tags</h5><ul class="tags-ul list-unstyled list-inline"><li class=list-inline-item><a href=https://jimbobbennett.dev/tags/liblab target=_blank>liblab</a></li><li class=list-inline-item><a href=https://jimbobbennett.dev/tags/devcontainer target=_blank>devcontainer</a></li><li class=list-inline-item><a href=https://jimbobbennett.dev/tags/codespace target=_blank>codespace</a></li><li class=list-inline-item><a href=https://jimbobbennett.dev/tags/vscode target=_blank>vscode</a></li><li class=list-inline-item><a href=https://jimbobbennett.dev/tags/npm target=_blank>npm</a></li></ul></aside></div></div></div><div class=row><div class="col-sm-12 col-md-12 col-lg-9 p-4"><div id=disqus_thread></div><script>var disqus_config=function(){this.page.url="https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/",this.page.identifier="f29bb1fd80cb53181b74ab952ae87044"};(function(){if(window.location.hostname=="localhost")return;var e=document,t=e.createElement("script");t.src="https://jimbobbennett.disqus.com/embed.js",t.setAttribute("data-timestamp",+new Date),(e.head||e.body).appendChild(t)})()</script><noscript>Please enable JavaScript to view the <a href=https://disqus.com/?ref_noscript>comments powered by Disqus.</a></noscript></div></div></div><button class="p-2 px-3" onclick=topFunction() id=topScroll>
|
||||
<i class="fas fa-angle-up"></i></button></section><script>var topScroll=document.getElementById("topScroll");window.onscroll=function(){scrollFunction()};function scrollFunction(){document.body.scrollTop>20||document.documentElement.scrollTop>20?topScroll.style.display="block":topScroll.style.display="none"}function topFunction(){document.body.scrollTop=0,document.documentElement.scrollTop=0}</script></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
BIN
blogs/liblab-in-a-devcontainer/python3-devcontainer.png
Normal file
BIN
blogs/liblab-in-a-devcontainer/python3-devcontainer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/installing-google-apps-in-a-virtual-machine/><img class=card-img-top src=/blogs/installing-google-apps-in-a-virtual-machine//banner.png alt="Installing Google Apps in a Marshmallow emulator"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/installing-google-apps-in-a-virtual-machine/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Installing Google Apps in a Marshmallow emulator">Installing Google Apps in a Marshmallow emulator</h5></a><div class="card-text secondary-font"><p>I’ve been trying to play with the Google Nearby Message API recently as this has capabilities to talk to Eddystone beacons. The problem I’ve come up against is that the example code uses the new Marshmallow permissions so I’m having a bit of a headache getting it working. …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">March 1, 2016</span>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/building-a-xamarin-android-app-part-6-2/><img class=card-img-top src=/blogs/building-a-xamarin-android-app-part-6-2//banner.png alt="Building a Xamarin Android app - part 6"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/building-a-xamarin-android-app-part-6-2/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Building a Xamarin Android app - part 6">Building a Xamarin Android app - part 6</h5></a><div class="card-text secondary-font"><p>This is the sixth part in the my series about building an Android app using Xamarin.Android. I highly recommend reading the rest of the series first. The previous parts are:
|
||||
Creating the basic app Defining our data Building view models Binding the view models to the UI Adding the add button Editing …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">March 24, 2016</span>
|
||||
<a href=/blogs/building-a-xamarin-android-app-part-6-2/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/installing-google-apps-in-a-virtual-machine/><img class=card-img-top src=/blogs/installing-google-apps-in-a-virtual-machine//banner.png alt="Installing Google Apps in a Marshmallow emulator"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/installing-google-apps-in-a-virtual-machine/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Installing Google Apps in a Marshmallow emulator">Installing Google Apps in a Marshmallow emulator</h5></a><div class="card-text secondary-font"><p>I’ve been trying to play with the Google Nearby Message API recently as this has capabilities to talk to Eddystone beacons. The problem I’ve come up against is that the example code uses the new Marshmallow permissions so I’m having a bit of a headache getting it working. …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">March 1, 2016</span>
|
||||
<a href=/blogs/installing-google-apps-in-a-virtual-machine/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/building-a-xamarin-android-app-part-5/><img class=card-img-top src=/blogs/building-a-xamarin-android-app-part-5//banner.png alt="Building a Xamarin Android app - part 5"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/building-a-xamarin-android-app-part-5/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Building a Xamarin Android app - part 5">Building a Xamarin Android app - part 5</h5></a><div class="card-text secondary-font"><p>This is the fifth part in the my series about building an Android app using Xamarin.Android. I highly recommend reading these first. The previous parts are:
|
||||
Creating the basic app Defining our data Building view models Binding the view models to the UI Adding the Add button Currently we have a nice …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">February 18, 2016</span>
|
||||
<a href=/blogs/building-a-xamarin-android-app-part-5/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/mvvmlight-navigation-and-appcompatactivity/><img class=card-img-top src=/blogs/mvvmlight-navigation-and-appcompatactivity//banner.png alt="MVVMLight navigation and AppCompatActivity"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/mvvmlight-navigation-and-appcompatactivity/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="MVVMLight navigation and AppCompatActivity">MVVMLight navigation and AppCompatActivity</h5></a><div class="card-text secondary-font"><p>As much as I’m loving MVVMLight it does have some limitations. The one I’ve hit recently is how well it doesn’t work when you are using AppCompat (though to be honest I think it’s more down to how hacky AppCompat seems to be).
|
||||
@@ -19,7 +21,5 @@ Time to think about data In the last post we put together the basic app shell, c
|
||||
My first one, an introduction to building your first iBeacon app using Xamarin.iOS is now up on YouTube! You can check it out below.
|
||||
This is my first …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 12, 2015</span>
|
||||
<a href=/blogs/building-ibeacon-apps-using-xamarin-ios-video-tutorial/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/freeibeacons/><img class=card-img-top src=/blogs/freeibeacons//banner.png alt="Free iBeacons"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/freeibeacons/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Free iBeacons">Free iBeacons</h5></a><div class="card-text secondary-font"><p></p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 20, 2015</span>
|
||||
<a href=/blogs/freeibeacons/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-dev-days-birmingham-2nd-august/><img class=card-img-top src=/blogs/xamarin-dev-days-birmingham-2nd-august//banner.png alt="Xamarin Dev Days - Birmingham, 2nd August"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-dev-days-birmingham-2nd-august/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Dev Days - Birmingham, 2nd August">Xamarin Dev Days - Birmingham, 2nd August</h5></a><div class="card-text secondary-font"><p>Xamarin have announced they are doing their first European Dev Day in Birmingham, hosted by the Birmingham Mobile Cross Platform User Group. This is a great user group organised by Dave Evans, and recently they kindly allowed by to jabber on at them about iBeacons.
|
||||
Details and tickets are available …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 27, 2015</span>
|
||||
<a href=/blogs/xamarin-dev-days-birmingham-2nd-august/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/9/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class="page-item active"><a aria-current=page aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/11/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/freeibeacons/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/9/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class="page-item active"><a aria-current=page aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/11/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/reviewed-xamarin-mobile-application-development/><img class=card-img-top src=/blogs/reviewed-xamarin-mobile-application-development//banner.png alt="Reviewed - Xamarin Mobile Application Development"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/reviewed-xamarin-mobile-application-development/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Reviewed - Xamarin Mobile Application Development">Reviewed - Xamarin Mobile Application Development</h5></a><div class="card-text secondary-font"><p>Xamarin Mobile Application Development By Dan Hermes (@ lexiconsystems) Recently I was lucky enough to get my hands on an early draft of Xamarin Mobile Application Development by Dan Hermes. This is a book aimed at the .Net developer who wants to get started with Xamarin, primarily with …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 27, 2015</span>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-dev-days-birmingham-2nd-august/><img class=card-img-top src=/blogs/xamarin-dev-days-birmingham-2nd-august//banner.png alt="Xamarin Dev Days - Birmingham, 2nd August"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-dev-days-birmingham-2nd-august/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Dev Days - Birmingham, 2nd August">Xamarin Dev Days - Birmingham, 2nd August</h5></a><div class="card-text secondary-font"><p>Xamarin have announced they are doing their first European Dev Day in Birmingham, hosted by the Birmingham Mobile Cross Platform User Group. This is a great user group organised by Dave Evans, and recently they kindly allowed by to jabber on at them about iBeacons.
|
||||
Details and tickets are available …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 27, 2015</span>
|
||||
<a href=/blogs/xamarin-dev-days-birmingham-2nd-august/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/reviewed-xamarin-mobile-application-development/><img class=card-img-top src=/blogs/reviewed-xamarin-mobile-application-development//banner.png alt="Reviewed - Xamarin Mobile Application Development"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/reviewed-xamarin-mobile-application-development/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Reviewed - Xamarin Mobile Application Development">Reviewed - Xamarin Mobile Application Development</h5></a><div class="card-text secondary-font"><p>Xamarin Mobile Application Development By Dan Hermes (@ lexiconsystems) Recently I was lucky enough to get my hands on an early draft of Xamarin Mobile Application Development by Dan Hermes. This is a book aimed at the .Net developer who wants to get started with Xamarin, primarily with …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 27, 2015</span>
|
||||
<a href=/blogs/reviewed-xamarin-mobile-application-development/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/the-slides-from-my-ibeacon-mini-hack-are-now-available/><img class=card-img-top src=/blogs/the-slides-from-my-ibeacon-mini-hack-are-now-available//banner.png alt="The slides from my iBeacon mini-hack are now available"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/the-slides-from-my-ibeacon-mini-hack-are-now-available/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="The slides from my iBeacon mini-hack are now available">The slides from my iBeacon mini-hack are now available</h5></a><div class="card-text secondary-font"><p>I had a great time hosting an iBeacon mini-hack with the Birmingham Xamarin Mobile Cross Platform User Group. A big thanks to Dave Evans for organising this.
|
||||
It was only a small group, which was great as I had enough Estimote iBeacons to give away to everyone. Due to hardware issues and phones not …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 9, 2015</span>
|
||||
<a href=/blogs/the-slides-from-my-ibeacon-mini-hack-are-now-available/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/ibeacons-and-lack-of-security/><img class=card-img-top src=/blogs/ibeacons-and-lack-of-security//banner.png alt="iBeacons and (lack of) security"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/ibeacons-and-lack-of-security/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="iBeacons and (lack of) security">iBeacons and (lack of) security</h5></a><div class="card-text secondary-font"><p>So in preparation for my upcoming iBeacon mini-hack I’ve been thinking about iBeacon security. For such a simple device, there is a lot of complex issues around their security to consider.
|
||||
@@ -16,6 +18,5 @@ I’ve been playing around with iBeacons a lot recently. They seem a really
|
||||
<a href=/blogs/binding-ios-libraries-in-xamarin/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/jimlib-xamarin-is-now-updated-to-the-unified-api/><img class=card-img-top src=/blogs/jimlib-xamarin-is-now-updated-to-the-unified-api//banner.png alt="JimLib.Xamarin is now updated to the Unified API"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/jimlib-xamarin-is-now-updated-to-the-unified-api/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="JimLib.Xamarin is now updated to the Unified API">JimLib.Xamarin is now updated to the Unified API</h5></a><div class="card-text secondary-font"><p>Finally, after fighting with Xamarin and having my Surface die and need to be reinstalled twice, I’ve managed to get JimLib.Xamarin updated to use the new Xamarin Unified API so it should be suitable for submitting new apps to the iPhone app store. I’ll be updating my first app Second …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">February 5, 2015</span>
|
||||
<a href=/blogs/jimlib-xamarin-is-now-updated-to-the-unified-api/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/im-on-itunes-again/><img class=card-img-top src=/blogs/im-on-itunes-again//banner.png alt="I'm on iTunes again!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/im-on-itunes-again/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="I'm on iTunes again!">I'm on iTunes again!</h5></a><div class="card-text secondary-font"><p>This time for an app, not for a podcast. One of my iTunes apps is finally complete and is now approved and up on iTunes:
|
||||
Second screen for Plex If you use Plex as your media server/player then you’ll love this app - it connects to your server and shows you what’s currently playing …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 29, 2015</span>
|
||||
<a href=/blogs/im-on-itunes-again/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/im-on-itunes/><img class=card-img-top src=/blogs/im-on-itunes//banner.png alt="I'm on iTunes!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/im-on-itunes/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="I'm on iTunes!">I'm on iTunes!</h5></a><div class="card-text secondary-font"><p>As mentioned before, I wrote a guest post for Core Java Interview Questions all about technical testing as part of the interview process. Sam, the sites editor, has been doing a podcast for the site and was kind enough to invite me along to discuss my blog post with him for an episode. What was …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 25, 2015</span>
|
||||
<a href=/blogs/im-on-itunes/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/10/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class="page-item active"><a aria-current=page aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/12/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/im-on-itunes-again/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/10/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class="page-item active"><a aria-current=page aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/12/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,7 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-unified-api/><img class=card-img-top src=/blogs/xamarin-unified-api//banner.png alt="Xamarin Unified API"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-unified-api/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Unified API">Xamarin Unified API</h5></a><div class="card-text secondary-font"><p>Recently Apple announced some changes to their requirements for apps submitted to the iOS app store. From the 1st February all new apps must support 64-bit (for updates to existing apps, it’s 1st June).
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/im-on-itunes/><img class=card-img-top src=/blogs/im-on-itunes//banner.png alt="I'm on iTunes!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/im-on-itunes/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="I'm on iTunes!">I'm on iTunes!</h5></a><div class="card-text secondary-font"><p>As mentioned before, I wrote a guest post for Core Java Interview Questions all about technical testing as part of the interview process. Sam, the sites editor, has been doing a podcast for the site and was kind enough to invite me along to discuss my blog post with him for an episode. What was …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 25, 2015</span>
|
||||
<a href=/blogs/im-on-itunes/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-unified-api/><img class=card-img-top src=/blogs/xamarin-unified-api//banner.png alt="Xamarin Unified API"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-unified-api/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Unified API">Xamarin Unified API</h5></a><div class="card-text secondary-font"><p>Recently Apple announced some changes to their requirements for apps submitted to the iOS app store. From the 1st February all new apps must support 64-bit (for updates to existing apps, it’s 1st June).
|
||||
Xamarin, not wanting to do anything the easy way have decided that as well as supporting …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 13, 2015</span>
|
||||
<a href=/blogs/xamarin-unified-api/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/christmas-geekery/><img class=card-img-top src=/blogs/christmas-geekery//banner.png alt="Christmas geekery"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/christmas-geekery/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Christmas geekery">Christmas geekery</h5></a><div class="card-text secondary-font"><p>Just a quick post to wish you all a very merry Christmas and a happy new year. Or a happy Saturnalia, or Festivus, or however you celebrate at this time of year.
|
||||
I’ll be spending the time playing with a few things. I’m looking forward to seeing how well Resharper 9 works with …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 24, 2014</span>
|
||||
@@ -18,6 +19,5 @@ Adding symbols to Xamarin crash reports for iOS - this article shows how to add
|
||||
<a href=/blogs/complexion-and-legal-issues/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/performance-tuning-a-website/><img class=card-img-top src=/blogs/performance-tuning-a-website//banner.png alt="Performance tuning a website"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/performance-tuning-a-website/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Performance tuning a website">Performance tuning a website</h5></a><div class="card-text secondary-font"><p>Despite the rise in fast home broadband, tuning your website for performance is still just as important as it was in the days of dial up. Although home connections can be fast in most first world countries (I used to have a 1Gb connection in Hong Kong), there are stil a lot of people in developing …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 13, 2014</span>
|
||||
<a href=/blogs/performance-tuning-a-website/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/fauxghost-a-clean-responsive-ghost-theme/><img class=card-img-top src=/blogs/fauxghost-a-clean-responsive-ghost-theme//banner.png alt="FauxGhost - a clean, responsive Ghost theme"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/fauxghost-a-clean-responsive-ghost-theme/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="FauxGhost - a clean, responsive Ghost theme">FauxGhost - a clean, responsive Ghost theme</h5></a><div class="card-text secondary-font"><p>This blog, like many others coming out recently, uses the Ghost blogging platform. This is a really nice, simple blogging platform with cheap hosting, built by some super smart people.
|
||||
The theme support for Ghost is excellent with loads of good themes available (some for money, some open source), …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 13, 2014</span>
|
||||
<a href=/blogs/fauxghost-a-clean-responsive-ghost-theme/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/weakevents-in-pcls/><img class=card-img-top src=/blogs/weakevents-in-pcls//banner.png alt="WeakEvents in PCLs"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/weakevents-in-pcls/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="WeakEvents in PCLs">WeakEvents in PCLs</h5></a><div class="card-text secondary-font"><p>One of the biggest causes of memory leaks I’ve seen in C# applications is events. Although C# can’t leak in the same way C++ can, it’s easy to unintentionally end up with references you weren’t expecting - and what a lot of people don’t realise or forget is that …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 7, 2014</span>
|
||||
<a href=/blogs/weakevents-in-pcls/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class="page-item active"><a aria-current=page aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/14/ aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/13/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/fauxghost-a-clean-responsive-ghost-theme/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class="page-item active"><a aria-current=page aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/14/ aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/13/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,7 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/weird-goings-on-with-xamarin/><img class=card-img-top src=/blogs/weird-goings-on-with-xamarin//banner.png alt="Weird goings on with Xamarin"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/weird-goings-on-with-xamarin/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Weird goings on with Xamarin">Weird goings on with Xamarin</h5></a><div class="card-text secondary-font"><p>Yesterday and today I had some weird things happening with Xamarin, so I thought it was work documenting them in case anyone else has the same issue.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/weakevents-in-pcls/><img class=card-img-top src=/blogs/weakevents-in-pcls//banner.png alt="WeakEvents in PCLs"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/weakevents-in-pcls/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="WeakEvents in PCLs">WeakEvents in PCLs</h5></a><div class="card-text secondary-font"><p>One of the biggest causes of memory leaks I’ve seen in C# applications is events. Although C# can’t leak in the same way C++ can, it’s easy to unintentionally end up with references you weren’t expecting - and what a lot of people don’t realise or forget is that …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 7, 2014</span>
|
||||
<a href=/blogs/weakevents-in-pcls/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/weird-goings-on-with-xamarin/><img class=card-img-top src=/blogs/weird-goings-on-with-xamarin//banner.png alt="Weird goings on with Xamarin"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/weird-goings-on-with-xamarin/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Weird goings on with Xamarin">Weird goings on with Xamarin</h5></a><div class="card-text secondary-font"><p>Yesterday and today I had some weird things happening with Xamarin, so I thought it was work documenting them in case anyone else has the same issue.
|
||||
First - Build errors. I upgraded to the latest Xamarin and suddenly building for an iPhone using Visual Studio was failing with an odd error:
|
||||
Failed …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 6, 2014</span>
|
||||
<a href=/blogs/weird-goings-on-with-xamarin/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/ndepend/><img class=card-img-top src=/blogs/ndepend//banner.png alt="NDepend - Part 1"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/ndepend/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="NDepend - Part 1">NDepend - Part 1</h5></a><div class="card-text secondary-font"><p>Patrick from NDepend reached out to me today to ask me to review NDepend. Having dabbled with it a while ago, I was more than happy to say yes and try out the latest version.
|
||||
@@ -19,7 +20,5 @@ To help with this …</p></div></div><div class="mt-auto post-footer bg-transpar
|
||||
<a href=/blogs/images-for-an-ios-app/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/todays-tea/><img class=card-img-top src=/blogs/todays-tea//banner.png alt="Todays tea"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/todays-tea/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Todays tea">Todays tea</h5></a><div class="card-text secondary-font"><p>Todays bubble tea is banana milk tea with bubbles. Quite nice, but a bit too sweet and the banana taste is a bit artificial.
|
||||
I also snapped a quick photo of my lunch yesterday being cooked fresh for me. One of the great things about thai street food is a lot of it is cooked in front of you so you …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 14, 2014</span>
|
||||
<a href=/blogs/todays-tea/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/bubbles-bubbles-bubbles-my-bubbles/><img class=card-img-top src=/blogs/bubbles-bubbles-bubbles-my-bubbles//banner.png alt="Bubbles, bubbles, bubbles. My bubbles!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/bubbles-bubbles-bubbles-my-bubbles/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Bubbles, bubbles, bubbles. My bubbles!">Bubbles, bubbles, bubbles. My bubbles!</h5></a><div class="card-text secondary-font"><p>More bubble tea today. Coffee milk tea with bubbles. Tastes of sweet coffee with an aftertaste of tea - weird but not unpleasant. Nice chewy bubbles.</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 11, 2014</span>
|
||||
<a href=/blogs/bubbles-bubbles-bubbles-my-bubbles/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/my-first-nuget-package/><img class=card-img-top src=/blogs/my-first-nuget-package//banner.png alt="My first NuGet package"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/my-first-nuget-package/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="My first NuGet package">My first NuGet package</h5></a><div class="card-text secondary-font"><p>For pretty much every project I’ve worked on I’ve used the same set of extensions and helper classes to make my life easier. For example:
|
||||
Fluent API on strings myString.IsNullOrEmpty() instead of string.IsNullOrEmpty(myString). An ObservableCollectionEx<T> class that allows adding …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 10, 2014</span>
|
||||
<a href=/blogs/my-first-nuget-package/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/12/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class="page-item active"><a aria-current=page aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/14/ aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/15/ aria-label="Page 15" class=page-link role=button>15</a></li><li class=page-item><a href=/blogs/page/14/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/bubbles-bubbles-bubbles-my-bubbles/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/12/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class="page-item active"><a aria-current=page aria-label="Page 13" class=page-link role=button>13</a></li><li class=page-item><a href=/blogs/page/14/ aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/15/ aria-label="Page 15" class=page-link role=button>15</a></li><li class=page-item><a href=/blogs/page/14/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/bubble-tea/><img class=card-img-top src=/blogs/bubble-tea//banner.png alt="Bubble Tea"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/bubble-tea/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Bubble Tea">Bubble Tea</h5></a><div class="card-text secondary-font"><p>After a post on FaceBook about enjoying some Bubble Tea, a friend of mine suggested that I should blog about it.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/my-first-nuget-package/><img class=card-img-top src=/blogs/my-first-nuget-package//banner.png alt="My first NuGet package"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/my-first-nuget-package/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="My first NuGet package">My first NuGet package</h5></a><div class="card-text secondary-font"><p>For pretty much every project I’ve worked on I’ve used the same set of extensions and helper classes to make my life easier. For example:
|
||||
Fluent API on strings myString.IsNullOrEmpty() instead of string.IsNullOrEmpty(myString). An ObservableCollectionEx<T> class that allows adding …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 10, 2014</span>
|
||||
<a href=/blogs/my-first-nuget-package/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/bubble-tea/><img class=card-img-top src=/blogs/bubble-tea//banner.png alt="Bubble Tea"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/bubble-tea/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Bubble Tea">Bubble Tea</h5></a><div class="card-text secondary-font"><p>After a post on FaceBook about enjoying some Bubble Tea, a friend of mine suggested that I should blog about it.
|
||||
Seeing as I am currently in Thailand, home of the best food in the world, I guess it makes sense to extend this to all food. Most of my meals are incredible food cooked fresh and …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 10, 2014</span>
|
||||
<a href=/blogs/bubble-tea/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/creating-a-nuget-pcl-that-works-with-xamarin-ios/><img class=card-img-top src=/blogs/creating-a-nuget-pcl-that-works-with-xamarin-ios//banner.png alt="Creating a NuGet PCL that works with Xamarin.ios"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/creating-a-nuget-pcl-that-works-with-xamarin-ios/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Creating a NuGet PCL that works with Xamarin.ios">Creating a NuGet PCL that works with Xamarin.ios</h5></a><div class="card-text secondary-font"><p>I’ve been playing with Xamarin.Forms recently to develop an iOS app. The aim is to use my portable open source Plex API in the app (more details of the app will come later once it’s ready to release).
|
||||
The basic concept of Xamarin.Forms is to have a core portable class library containing …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 7, 2014</span>
|
||||
@@ -18,7 +20,5 @@ Will be back and blogging again soon.</p></div></div><div class="mt-auto post-fo
|
||||
<a href=/blogs/setting-up-a-website-on-heroku/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/waiting-again/><img class=card-img-top src=/blogs/waiting-again//banner.png alt="Waiting again"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/waiting-again/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Waiting again">Waiting again</h5></a><div class="card-text secondary-font"><p>As I’ve mentioned before, I’m taking 6-9 months out of the rat race so I can do my own thing, including learning some new skills to take into the world of work. The skills in question are HTML/Javascript and Xamarin.
|
||||
Javascript is becoming ubiquitous, it’s the assembly language of …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 25, 2014</span>
|
||||
<a href=/blogs/waiting-again/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/synergy/><img class=card-img-top src=/blogs/synergy//banner.png alt=Synergy></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/synergy/ class="primary-font card-title"><h5 class="card-title bg-transparent" title=Synergy>Synergy</h5></a><div class="card-text secondary-font"><p>As you’ve probably seen from my other posts, I’m developing iOS apps using Visual Studio on Windows as my development environment, and a MacBook Pro for running the actual builds. This is a pain when I want to test. As good as Ripple is, it’s not as good as the actual iOS …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 16, 2014</span>
|
||||
<a href=/blogs/synergy/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/popping-my-open-source-cherry/><img class=card-img-top src=/blogs/popping-my-open-source-cherry//banner.png alt="Popping my open source cherry"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/popping-my-open-source-cherry/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Popping my open source cherry">Popping my open source cherry</h5></a><div class="card-text secondary-font"><p>Today the pull request for my first ever contribution to someone else’s open source project was accepted and merged.
|
||||
It was a small bug fix to Framework7 - a really cool HTML5 framework for building iOS 7 style apps. I’m using it for my first cordova project and what it outputs looks …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 10, 2014</span>
|
||||
<a href=/blogs/popping-my-open-source-cherry/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/13/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class="page-item active"><a aria-current=page aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/15/ aria-label="Page 15" class=page-link role=button>15</a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/synergy/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/13/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/12/ aria-label="Page 12" class=page-link role=button>12</a></li><li class=page-item><a href=/blogs/page/13/ aria-label="Page 13" class=page-link role=button>13</a></li><li class="page-item active"><a aria-current=page aria-label="Page 14" class=page-link role=button>14</a></li><li class=page-item><a href=/blogs/page/15/ aria-label="Page 15" class=page-link role=button>15</a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/lets-eat/><img class=card-img-top src=/blogs/lets-eat//banner.png alt="Lets eat!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/lets-eat/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Lets eat!">Lets eat!</h5></a><div class="card-text secondary-font"><p>So once again I’m waiting, this time whilst I download the XCode 6 preview. I’m working on a simple node application for photo management - uploading, storing, showing thumbnail previews and showing the pictures. Nothing complicated but more of my self learning of node and javascript. …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 2, 2014</span>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/popping-my-open-source-cherry/><img class=card-img-top src=/blogs/popping-my-open-source-cherry//banner.png alt="Popping my open source cherry"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/popping-my-open-source-cherry/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Popping my open source cherry">Popping my open source cherry</h5></a><div class="card-text secondary-font"><p>Today the pull request for my first ever contribution to someone else’s open source project was accepted and merged.
|
||||
It was a small bug fix to Framework7 - a really cool HTML5 framework for building iOS 7 style apps. I’m using it for my first cordova project and what it outputs looks …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 10, 2014</span>
|
||||
<a href=/blogs/popping-my-open-source-cherry/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/lets-eat/><img class=card-img-top src=/blogs/lets-eat//banner.png alt="Lets eat!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/lets-eat/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Lets eat!">Lets eat!</h5></a><div class="card-text secondary-font"><p>So once again I’m waiting, this time whilst I download the XCode 6 preview. I’m working on a simple node application for photo management - uploading, storing, showing thumbnail previews and showing the pictures. Nothing complicated but more of my self learning of node and javascript. …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 2, 2014</span>
|
||||
<a href=/blogs/lets-eat/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/using-visual-studio-to-develop-cordova-apps-part-2-angular/><img class=card-img-top src=/blogs/using-visual-studio-to-develop-cordova-apps-part-2-angular//banner.png alt="Using Visual Studio to develop Cordova apps part 2 - Creating an app"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/using-visual-studio-to-develop-cordova-apps-part-2-angular/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Using Visual Studio to develop Cordova apps part 2 - Creating an app">Using Visual Studio to develop Cordova apps part 2 - Creating an app</h5></a><div class="card-text secondary-font"><p>Building on the previous post in this series, I thought it would be fun to try to learn Angular.js and include this in my Cordova app. I could also do with so nice looking widgets, so I decided to have a play with TopCoat.
|
||||
First thing I need is an app to build. One of my current ‘First World …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 27, 2014</span>
|
||||
<a href=/blogs/using-visual-studio-to-develop-cordova-apps-part-2-angular/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/updating-my-blog/><img class=card-img-top src=/blogs/updating-my-blog//banner.png alt="What to do when you're stuck inside."></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/updating-my-blog/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="What to do when you're stuck inside.">What to do when you're stuck inside.</h5></a><div class="card-text secondary-font"><p>It’s a glorious day here, a perfect day to take my wife and daughter to the beach. Unfortunately we currently live in Bermuda, an island paradise with stunning beaches and clean water. Why is this unfortunate? Because the country is so badly run. Today is Bermuda day, and they are celebrating …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 26, 2014</span>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/irobot-create3-subscribe-to-messages/><img class=card-img-top src=/blogs/irobot-create3-subscribe-to-messages//banner.png alt="Subscribe to messages from an iRobot Create3 using ROS"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/irobot-create3-subscribe-to-messages/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Subscribe to messages from an iRobot Create3 using ROS">Subscribe to messages from an iRobot Create3 using ROS</h5></a><div class="card-text secondary-font"><p>In my last post I showed how I connected a Raspberry Pi to an iRobot Crete3 robot. In this post I show how to subscribe to messages sent by the robot to the Pi using rclpy, the ROS Python library.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/running-ubuntu-on-a-mac/><img class=card-img-top src=/blogs/running-ubuntu-on-a-mac//banner.jpg alt="Run an Ubuntu VM on your Mac with a single command"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/running-ubuntu-on-a-mac/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Run an Ubuntu VM on your Mac with a single command">Run an Ubuntu VM on your Mac with a single command</h5></a><div class="card-text secondary-font"><p>I recently needed to run Linux so I could test out what Python version was installed, and how to upgrade it for some documentation I’m creating.
|
||||
I don’t have a spare machine to set up as a Linux box, and didn’t want to use a Raspberry Pi, I wanted a clean Ubuntu install.
|
||||
My …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 24, 2023</span>
|
||||
<a href=/blogs/running-ubuntu-on-a-mac/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/irobot-create3-subscribe-to-messages/><img class=card-img-top src=/blogs/irobot-create3-subscribe-to-messages//banner.png alt="Subscribe to messages from an iRobot Create3 using ROS"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/irobot-create3-subscribe-to-messages/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Subscribe to messages from an iRobot Create3 using ROS">Subscribe to messages from an iRobot Create3 using ROS</h5></a><div class="card-text secondary-font"><p>In my last post I showed how I connected a Raspberry Pi to an iRobot Crete3 robot. In this post I show how to subscribe to messages sent by the robot to the Pi using rclpy, the ROS Python library.
|
||||
One downside to ROS is that the documentation needs some love. It covers in great detail how to do …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 22, 2022</span>
|
||||
<a href=/blogs/irobot-create3-subscribe-to-messages/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/irobot-create3-connect-a-pi/><img class=card-img-top src=/blogs/irobot-create3-connect-a-pi//banner.png alt="Connect a Raspberry Pi to an iRobot Create 3"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/irobot-create3-connect-a-pi/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Connect a Raspberry Pi to an iRobot Create 3">Connect a Raspberry Pi to an iRobot Create 3</h5></a><div class="card-text secondary-font"><p>iRobot, the makers of robotic vacuum cleaners also make educational robots designed for learning how to do robotics programming. I recently managed to get my hands on one of their new Create3 robots as part of the Microsoft Global Hackathon, one of the cool perks of working for Microsoft.
|
||||
These …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 21, 2022</span>
|
||||
@@ -18,7 +21,5 @@ My 8-year-old daughter bought me “Farts - a spotters guide” - a book
|
||||
Out the box this machine is amazing. It’s ridiculously fast, and lasts for ever on …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 31, 2021</span>
|
||||
<a href=/blogs/installing-scikit-learn-on-an-apple-m1/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/build-virtual-iot-lab/><img class=card-img-top src=/blogs/build-virtual-iot-lab//banner.png alt="Build a virtual IoT Lab with Raspberry Pis and Azure IoT Hub"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/build-virtual-iot-lab/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Build a virtual IoT Lab with Raspberry Pis and Azure IoT Hub">Build a virtual IoT Lab with Raspberry Pis and Azure IoT Hub</h5></a><div class="card-text secondary-font"><p>The rise of virtual education has led to sweeping changes in how students are taught. A lot of computer science lessons can be run with only small changes thanks to the cloud - Azure Lab Services can provide virtual machines with developer tooling, or GitHub Codespaces can replace the physical lab …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 11, 2020</span>
|
||||
<a href=/blogs/build-virtual-iot-lab/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/what-is-edge-computing/><img class=card-img-top src=/blogs/what-is-edge-computing//asaedge-highlevel-diagram.png alt="What is edge computing, why do it, why send IoT data to the cloud?"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/what-is-edge-computing/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="What is edge computing, why do it, why send IoT data to the cloud?">What is edge computing, why do it, why send IoT data to the cloud?</h5></a><div class="card-text secondary-font"><p>I recently had a student reach out to me with some great questions around Edge computing and how it matches to IoT, and indeed why even use the cloud with IoT. They have to write a paper on the difference between edge computing and just using the cloud, and were researching these terms and trying to …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 3, 2020</span>
|
||||
<a href=/blogs/what-is-edge-computing/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/control-holiday-lights-power-apps/><img class=card-img-top src=/blogs/control-holiday-lights-power-apps//app-controlled-lights.gif alt="Control holiday lights with Python, Azure IoT and Power Apps"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/control-holiday-lights-power-apps/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Control holiday lights with Python, Azure IoT and Power Apps">Control holiday lights with Python, Azure IoT and Power Apps</h5></a><div class="card-text secondary-font"><p>As the nights draw in here in the northern hemisphere, there are a number of winter celebrations that happen - and one thing they all have in common is lights.
|
||||
In the past I’ve just purchased strings of lights from the nearest retailer, strung them up to a tree or around my house, and fought …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 13, 2020</span>
|
||||
<a href=/blogs/control-holiday-lights-power-apps/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/ aria-label="Page 1" class=page-link role=button>1</a></li><li class="page-item active"><a aria-current=page aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/3/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/what-is-edge-computing/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/ aria-label="Page 1" class=page-link role=button>1</a></li><li class="page-item active"><a aria-current=page aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/3/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/run-visual-studio-code-on-a-raspberry-pi/><img class=card-img-top src=/blogs/run-visual-studio-code-on-a-raspberry-pi//banner.png alt="Run Visual Studio Code on a Raspberry Pi"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/run-visual-studio-code-on-a-raspberry-pi/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Run Visual Studio Code on a Raspberry Pi">Run Visual Studio Code on a Raspberry Pi</h5></a><div class="card-text secondary-font"><p>It’s finally here! An official supported version of VS Code that runs on a Raspberry Pi!
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/control-holiday-lights-power-apps/><img class=card-img-top src=/blogs/control-holiday-lights-power-apps//app-controlled-lights.gif alt="Control holiday lights with Python, Azure IoT and Power Apps"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/control-holiday-lights-power-apps/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Control holiday lights with Python, Azure IoT and Power Apps">Control holiday lights with Python, Azure IoT and Power Apps</h5></a><div class="card-text secondary-font"><p>As the nights draw in here in the northern hemisphere, there are a number of winter celebrations that happen - and one thing they all have in common is lights.
|
||||
In the past I’ve just purchased strings of lights from the nearest retailer, strung them up to a tree or around my house, and fought …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 13, 2020</span>
|
||||
<a href=/blogs/control-holiday-lights-power-apps/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/run-visual-studio-code-on-a-raspberry-pi/><img class=card-img-top src=/blogs/run-visual-studio-code-on-a-raspberry-pi//banner.png alt="Run Visual Studio Code on a Raspberry Pi"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/run-visual-studio-code-on-a-raspberry-pi/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Run Visual Studio Code on a Raspberry Pi">Run Visual Studio Code on a Raspberry Pi</h5></a><div class="card-text secondary-font"><p>It’s finally here! An official supported version of VS Code that runs on a Raspberry Pi!
|
||||
ICYMI: VS Code now officially supports @Raspberry_Pi too! 🍰
|
||||
➡️ Download the Linux ARM and ARM64 builds here: https://t.co/aMc3pDFkDu pic.twitter.com/gsATu20K4X
|
||||
— Visual Studio Code (@code) October …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">October 25, 2020</span>
|
||||
@@ -18,7 +20,5 @@ One of the upsides of working from home, especially when …</p></div></div><div
|
||||
I’ve been asked a few times for thoughts and tips around getting an internship at Microsoft. So in the spirit of “I didn’t have time to reply to you so I wrote this blog post”, I thought I’d provide a stack of resources useful to folks …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">October 17, 2019</span>
|
||||
<a href=/blogs/getting-an-internship-at-microsoft/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/visualising-locations-and-paths-on-a-map/><img class=card-img-top src=/blogs/visualising-locations-and-paths-on-a-map//banner.png alt="Visualizing locations and paths on a map with Azure Maps"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/visualising-locations-and-paths-on-a-map/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Visualizing locations and paths on a map with Azure Maps">Visualizing locations and paths on a map with Azure Maps</h5></a><div class="card-text secondary-font"><p>Learn how to show an Azure Maps control on a web page, and add pins and paths to the map</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 23, 2019</span>
|
||||
<a href=/blogs/visualising-locations-and-paths-on-a-map/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/are-you-where-you-should-be-checking-geofences-using-azure-maps/><img class=card-img-top src=/blogs/are-you-where-you-should-be-checking-geofences-using-azure-maps//banner.png alt="Are you where you should be? Checking Geofences using Azure Maps"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/are-you-where-you-should-be-checking-geofences-using-azure-maps/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Are you where you should be? Checking Geofences using Azure Maps">Are you where you should be? Checking Geofences using Azure Maps</h5></a><div class="card-text secondary-font"><p>A Geofence is a virtual boundary defined using an area on a map. Azure Maps has tools for checking if a coordinate is inside that Geofence. This post looks at how to do these checks.</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 10, 2019</span>
|
||||
<a href=/blogs/are-you-where-you-should-be-checking-geofences-using-azure-maps/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/streaming-serial-data-using-an-mxchip/><img class=card-img-top src=/blogs/streaming-serial-data-using-an-mxchip//banner.png alt="Streaming Serial data using an MXChip"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/streaming-serial-data-using-an-mxchip/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Streaming Serial data using an MXChip">Streaming Serial data using an MXChip</h5></a><div class="card-text secondary-font"><p>The MXChip board has 2 serial ports - one using the USB which is great for debugging, and one you can use to stream data from third party modules. This article shows you how!
|
||||
TL;DR - connect the TXD on the module to 1 on the MXChip, RXD to 2, then create a new Serial using UARTClass Serial1(UART_1); …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 4, 2019</span>
|
||||
<a href=/blogs/streaming-serial-data-using-an-mxchip/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/2/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/ aria-label="Page 1" class=page-link role=button>1</a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class="page-item active"><a aria-current=page aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/4/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/are-you-where-you-should-be-checking-geofences-using-azure-maps/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/2/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/ aria-label="Page 1" class=page-link role=button>1</a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class="page-item active"><a aria-current=page aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/4/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/save-your-users-from-typing-with-ai/><img class=card-img-top src=/blogs/save-your-users-from-typing-with-ai//banner.png alt="Save your users from typing with AI 🤖"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/save-your-users-from-typing-with-ai/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Save your users from typing with AI 🤖">Save your users from typing with AI 🤖</h5></a><div class="card-text secondary-font"><p>I’ve been playing a lot with the Azure Custom Vision Service - a great service to build image classification and object detection models with just a few images. To make it easier to test my models, I wanted to build a mobile app that connects to a custom vision project and uses that to …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 21, 2019</span>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/streaming-serial-data-using-an-mxchip/><img class=card-img-top src=/blogs/streaming-serial-data-using-an-mxchip//banner.png alt="Streaming Serial data using an MXChip"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/streaming-serial-data-using-an-mxchip/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Streaming Serial data using an MXChip">Streaming Serial data using an MXChip</h5></a><div class="card-text secondary-font"><p>The MXChip board has 2 serial ports - one using the USB which is great for debugging, and one you can use to stream data from third party modules. This article shows you how!
|
||||
TL;DR - connect the TXD on the module to 1 on the MXChip, RXD to 2, then create a new Serial using UARTClass Serial1(UART_1); …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 4, 2019</span>
|
||||
<a href=/blogs/streaming-serial-data-using-an-mxchip/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/save-your-users-from-typing-with-ai/><img class=card-img-top src=/blogs/save-your-users-from-typing-with-ai//banner.png alt="Save your users from typing with AI 🤖"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/save-your-users-from-typing-with-ai/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Save your users from typing with AI 🤖">Save your users from typing with AI 🤖</h5></a><div class="card-text secondary-font"><p>I’ve been playing a lot with the Azure Custom Vision Service - a great service to build image classification and object detection models with just a few images. To make it easier to test my models, I wanted to build a mobile app that connects to a custom vision project and uses that to …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 21, 2019</span>
|
||||
<a href=/blogs/save-your-users-from-typing-with-ai/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/building-a-live-caption-tool/><img class=card-img-top src=/blogs/building-a-live-caption-tool//banner.png alt="Building a live caption tool - part 1"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/building-a-live-caption-tool/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Building a live caption tool - part 1">Building a live caption tool - part 1</h5></a><div class="card-text secondary-font"><p>Learn how to build a live captioner using Python and the Azure Cognitive Services</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 2, 2019</span>
|
||||
<a href=/blogs/building-a-live-caption-tool/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/adding-try-net-to-vscode-launch-json/><img class=card-img-top src=/blogs/adding-try-net-to-vscode-launch-json//banner.png alt="Adding Try .NET to VSCode launch.json"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/adding-try-net-to-vscode-launch-json/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Adding Try .NET to VSCode launch.json">Adding Try .NET to VSCode launch.json</h5></a><div class="card-text secondary-font"><p>Learn how to launch Try .NET from VS Code using the debug menu instead of the terminal.</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 11, 2019</span>
|
||||
<a href=/blogs/adding-try-net-to-vscode-launch-json/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/trying-out-try-net/><img class=card-img-top src=/blogs/trying-out-try-net//banner.png alt="Trying out Try .NET"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/trying-out-try-net/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Trying out Try .NET">Trying out Try .NET</h5></a><div class="card-text secondary-font"><p>Try .NET is a new thing to come from the .NET teams that allows you to, well, try .NET. In a browser. You can think of it as a way to create interactive .NET documentation using .NET Core.
|
||||
@@ -12,9 +14,5 @@ What is Try .NET The experience or writing code in a browser itself isn’t
|
||||
<a href=/blogs/screen-sharing-a-raspberry-pi-from-a-mac/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-f/><img class=card-img-top src=/blogs/xamarin-f//banner.png alt="Xamarin ❤ F#"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-f/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin ❤ F#">Xamarin ❤ F#</h5></a><div class="card-text secondary-font"><p>Xamarin and Xamarin.Forms need no introduction. I’m sure by now you are well aware of these technologies and have seen many examples of building cross-platform mobile apps using C#. If not, I can highly recommend my book Xamarin in Action which if you follow this link and use code …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">February 16, 2019</span>
|
||||
<a href=/blogs/xamarin-f/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/internet-connected-fan/><img class=card-img-top src=/blogs/internet-connected-fan//banner.png alt="Prototyping your first cloud-connected IoT project using an MXChip board and Azure IoT hub."></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/internet-connected-fan/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Prototyping your first cloud-connected IoT project using an MXChip board and Azure IoT hub.">Prototyping your first cloud-connected IoT project using an MXChip board and Azure IoT hub.</h5></a><div class="card-text secondary-font"><p>Learn how to build an internet connected fan using the MXChip Azure IoT dev kit and Azure IoT Hub</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">February 6, 2019</span>
|
||||
<a href=/blogs/internet-connected-fan/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/travelling-with-children/><img class=card-img-top src=/blogs/travelling-with-children//banner.png alt="Flying long haul with young children"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/travelling-with-children/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Flying long haul with young children">Flying long haul with young children</h5></a><div class="card-text secondary-font"><p>A discussion came up at work the other day on flying long-haul with very young children (toddler age), so I though it would be good to share the tips that I shared with the discussion. My daughter is 6 and has been on over 40 flights, including a lot of long haul as a toddler so I’ve managed …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 22, 2019</span>
|
||||
<a href=/blogs/travelling-with-children/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/fabulous-santa-tracker/><img class=card-img-top src=/blogs/fabulous-santa-tracker//banner.png alt="Fabulous Santa Tracker"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/fabulous-santa-tracker/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Fabulous Santa Tracker">Fabulous Santa Tracker</h5></a><div class="card-text secondary-font"><p>‘Twas the night before Christmas, and all through the house…
|
||||
For millions of people worldwide, Christmas eve is a time of magic. Children are excited and unable to sleep because…
|
||||
Santa is coming tonight!!!!
|
||||
This is the one night of the year you want a stranger to come into your …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 24, 2018</span>
|
||||
<a href=/blogs/fabulous-santa-tracker/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/3/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class="page-item active"><a aria-current=page aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/5/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/travelling-with-children/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/3/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/2/ aria-label="Page 2" class=page-link role=button>2</a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class="page-item active"><a aria-current=page aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/5/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,10 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/open-anything-in-vs-code-using-a-macos-quick-action/><img class=card-img-top src=/blogs/open-anything-in-vs-code-using-a-macos-quick-action//banner.png alt="Open anything in VS Code using a MacOS quick action"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/open-anything-in-vs-code-using-a-macos-quick-action/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Open anything in VS Code using a MacOS quick action">Open anything in VS Code using a MacOS quick action</h5></a><div class="card-text secondary-font"><p>I’ve been getting fed up with the long winded process to open things in VS Code - you know, typing in the terminal, opening VS Code and dragging folders in, that sort of long, manual process… #FirstWorldProblems 😜
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/fabulous-santa-tracker/><img class=card-img-top src=/blogs/fabulous-santa-tracker//banner.png alt="Fabulous Santa Tracker"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/fabulous-santa-tracker/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Fabulous Santa Tracker">Fabulous Santa Tracker</h5></a><div class="card-text secondary-font"><p>‘Twas the night before Christmas, and all through the house…
|
||||
For millions of people worldwide, Christmas eve is a time of magic. Children are excited and unable to sleep because…
|
||||
Santa is coming tonight!!!!
|
||||
This is the one night of the year you want a stranger to come into your …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 24, 2018</span>
|
||||
<a href=/blogs/fabulous-santa-tracker/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/open-anything-in-vs-code-using-a-macos-quick-action/><img class=card-img-top src=/blogs/open-anything-in-vs-code-using-a-macos-quick-action//banner.png alt="Open anything in VS Code using a MacOS quick action"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/open-anything-in-vs-code-using-a-macos-quick-action/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Open anything in VS Code using a MacOS quick action">Open anything in VS Code using a MacOS quick action</h5></a><div class="card-text secondary-font"><p>I’ve been getting fed up with the long winded process to open things in VS Code - you know, typing in the terminal, opening VS Code and dragging folders in, that sort of long, manual process… #FirstWorldProblems 😜
|
||||
I thought it would be fun to automate the whole thing, using Automator! …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 13, 2018</span>
|
||||
<a href=/blogs/open-anything-in-vs-code-using-a-macos-quick-action/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/controlling-an-iot-device-from-your-phone/><img class=card-img-top src=/blogs/controlling-an-iot-device-from-your-phone//banner.png alt="Controlling an IoT device from your phone"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/controlling-an-iot-device-from-your-phone/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Controlling an IoT device from your phone">Controlling an IoT device from your phone</h5></a><div class="card-text secondary-font"><p>I’ve just finished watching the latest episode of Five Things, where Suz Hinton talks with Burke about Goo Goo Clusters and IoT devices.
|
||||
One of the devices Suz showed was the Azure IoT DevKit - an arduino compatible board made by MXChip that works beautifully with Azure, even down to having an …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 19, 2018</span>
|
||||
@@ -23,7 +27,5 @@ Create the binding …</p></div></div><div class="mt-auto post-footer bg-transpa
|
||||
Since then, the Custom Vision service has added ONNX export, meaning you can now run these …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 20, 2018</span>
|
||||
<a href=/blogs/running-ai-models-on-ios-android-and-windows-using-xamarin/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/running-custom-vision-models-on-a-windows-device/><img class=card-img-top src=/blogs/running-custom-vision-models-on-a-windows-device//banner.png alt="Running custom vision models on a Windows device"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/running-custom-vision-models-on-a-windows-device/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Running custom vision models on a Windows device">Running custom vision models on a Windows device</h5></a><div class="card-text secondary-font"><p>Recently I wrote about creating AI models using the Azure Custom Vision Service. In these posts I looked at creating and training models, running them online, then finally exporting the models to run on iOS using CoreML and Android using TensorFlow.
|
||||
Recently Microsoft announced another way to export …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 20, 2018</span>
|
||||
<a href=/blogs/running-custom-vision-models-on-a-windows-device/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/><img class=card-img-top src=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017//banner.png alt="Setting iOS permission descriptions in Visual Studio 2017"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Setting iOS permission descriptions in Visual Studio 2017">Setting iOS permission descriptions in Visual Studio 2017</h5></a><div class="card-text secondary-font"><p>I spend most of my developer day using Visual Studio for Mac, but occasionally I flip back to Visual Studio 2017 on Windows. Last time I flipped back I tried to build an app that uses the camera and I got stuck on one simple thing - setting the camera usage description.
|
||||
If you double click on the …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 5, 2018</span>
|
||||
<a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/4/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class="page-item active"><a aria-current=page aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/6/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/running-custom-vision-models-on-a-windows-device/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/4/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/3/ aria-label="Page 3" class=page-link role=button>3</a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class="page-item active"><a aria-current=page aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/6/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,8 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f/><img class=card-img-top src=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f//banner.png alt="What the @ - fixing weirdness in return JSON from Azure functions using F#"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="What the @ - fixing weirdness in return JSON from Azure functions using F#">What the @ - fixing weirdness in return JSON from Azure functions using F#</h5></a><div class="card-text secondary-font"><p>I’ve been playing a lot with F# recently, both to build Xamarin apps using Elmish.XamarinForms and for some Azure Functions. Whilst building an HTTP trigger I came across some weirdness when serializing a record type to JSON.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/><img class=card-img-top src=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017//banner.png alt="Setting iOS permission descriptions in Visual Studio 2017"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Setting iOS permission descriptions in Visual Studio 2017">Setting iOS permission descriptions in Visual Studio 2017</h5></a><div class="card-text secondary-font"><p>I spend most of my developer day using Visual Studio for Mac, but occasionally I flip back to Visual Studio 2017 on Windows. Last time I flipped back I tried to build an app that uses the camera and I got stuck on one simple thing - setting the camera usage description.
|
||||
If you double click on the …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">July 5, 2018</span>
|
||||
<a href=/blogs/setting-ios-permission-descriptions-in-visual-studio-2017/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f/><img class=card-img-top src=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f//banner.png alt="What the @ - fixing weirdness in return JSON from Azure functions using F#"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="What the @ - fixing weirdness in return JSON from Azure functions using F#">What the @ - fixing weirdness in return JSON from Azure functions using F#</h5></a><div class="card-text secondary-font"><p>I’ve been playing a lot with F# recently, both to build Xamarin apps using Elmish.XamarinForms and for some Azure Functions. Whilst building an HTTP trigger I came across some weirdness when serializing a record type to JSON.
|
||||
This is the relevant parts of my code:
|
||||
type Output = { TotalBalance …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 19, 2018</span>
|
||||
<a href=/blogs/what-the-fixing-weirdness-in-return-json-from-azure-functions-using-f/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/describing-a-photo-in-a-mobile-app-using-azure-computer-vision/><img class=card-img-top src=/blogs/describing-a-photo-in-a-mobile-app-using-azure-computer-vision//banner.png alt="Describing a photo in a mobile app using Azure Computer Vision"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/describing-a-photo-in-a-mobile-app-using-azure-computer-vision/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Describing a photo in a mobile app using Azure Computer Vision">Describing a photo in a mobile app using Azure Computer Vision</h5></a><div class="card-text secondary-font"><p>I recently gave an introduction to Xamarin talk at Imperial College, London and wanted to build a cool app to show off what you can do on mobile using the awesome Cognitive Services available on Azure. I only had about 30-40 minutes to not only introduce Xamarin, but build an app so I decided to …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 30, 2018</span>
|
||||
@@ -19,6 +21,5 @@ In the second part I accessed this …</p></div></div><div class="mt-auto post-f
|
||||
In the second part I accessed this …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 17, 2018</span>
|
||||
<a href=/blogs/identifying-my-daughters-toys-using-ai-part-3-offline-ios/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/identifying-my-daughters-toys-using-ai-part-2-using-the-model/><img class=card-img-top src=/blogs/identifying-my-daughters-toys-using-ai-part-2-using-the-model//banner.png alt="Identifying my daughters toys using AI - Part 2, using the model"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/identifying-my-daughters-toys-using-ai-part-2-using-the-model/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Identifying my daughters toys using AI - Part 2, using the model">Identifying my daughters toys using AI - Part 2, using the model</h5></a><div class="card-text secondary-font"><p>In the first part of this post I used the Azure Custom Vision service to create an image classifier to allow me to easily identify my daughters cuddly toys. Once created I tested it by uploading an image and seeing what tags the classifier found for the image.
|
||||
Although this works, it’s a long …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">January 2, 2018</span>
|
||||
<a href=/blogs/identifying-my-daughters-toys-using-ai-part-2-using-the-model/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/hiding-api-keys-from-git/><img class=card-img-top src=/blogs/hiding-api-keys-from-git//banner.png alt="Hiding API keys from Git"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/hiding-api-keys-from-git/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Hiding API keys from Git">Hiding API keys from Git</h5></a><div class="card-text secondary-font"><p>I’ve been working on a Xamarin app using Azure Cognitive Services to do image recognition, and one of the stumbling blocks I’ve faced is what to do with my API keys. I want to make the app open source as an example of how to use these services, but don’t want to check my API keys …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 28, 2017</span>
|
||||
<a href=/blogs/hiding-api-keys-from-git/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/5/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class="page-item active"><a aria-current=page aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/7/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/identifying-my-daughters-toys-using-ai-part-2-using-the-model/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/5/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/4/ aria-label="Page 4" class=page-link role=button>4</a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class="page-item active"><a aria-current=page aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/7/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,7 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/identifying-my-daughters-toys-using-ai/><img class=card-img-top src=/blogs/identifying-my-daughters-toys-using-ai//banner.png alt="Identifying my daughters toys using AI - Part 1, creating the model"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/identifying-my-daughters-toys-using-ai/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Identifying my daughters toys using AI - Part 1, creating the model">Identifying my daughters toys using AI - Part 1, creating the model</h5></a><div class="card-text secondary-font"><p>Prefer to watch instead of read? - https://youtu.be/3sjInlJcpBs
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/hiding-api-keys-from-git/><img class=card-img-top src=/blogs/hiding-api-keys-from-git//banner.png alt="Hiding API keys from Git"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/hiding-api-keys-from-git/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Hiding API keys from Git">Hiding API keys from Git</h5></a><div class="card-text secondary-font"><p>I’ve been working on a Xamarin app using Azure Cognitive Services to do image recognition, and one of the stumbling blocks I’ve faced is what to do with my API keys. I want to make the app open source as an example of how to use these services, but don’t want to check my API keys …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 28, 2017</span>
|
||||
<a href=/blogs/hiding-api-keys-from-git/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/identifying-my-daughters-toys-using-ai/><img class=card-img-top src=/blogs/identifying-my-daughters-toys-using-ai//banner.png alt="Identifying my daughters toys using AI - Part 1, creating the model"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/identifying-my-daughters-toys-using-ai/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Identifying my daughters toys using AI - Part 1, creating the model">Identifying my daughters toys using AI - Part 1, creating the model</h5></a><div class="card-text secondary-font"><p>Prefer to watch instead of read? - https://youtu.be/3sjInlJcpBs
|
||||
It’s currently just after Christmas, and my 4 year old daughter has received a fair few cuddly toys from Santa. These bring her total collection up to way too many, and like most parents I have a hard time remembering all their …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">December 27, 2017</span>
|
||||
<a href=/blogs/identifying-my-daughters-toys-using-ai/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/authenticating-your-xamarin-app-with-azure-and-facebook/><img class=card-img-top src=/blogs/authenticating-your-xamarin-app-with-azure-and-facebook//banner.png alt="Getting a users Facebook profile after Authenticating your Xamarin app with Azure"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/authenticating-your-xamarin-app-with-azure-and-facebook/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Getting a users Facebook profile after Authenticating your Xamarin app with Azure">Getting a users Facebook profile after Authenticating your Xamarin app with Azure</h5></a><div class="card-text secondary-font"><p>I’ve recently been looking at the authentication offered by Azure for use in a mobile app, specifically using social auth providers like Facebook to allow a user to sign up for my app. The auth setup is incredibly easy, with Azure taking care of a lot of the hard stuff. There are also loads of …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 17, 2017</span>
|
||||
<a href=/blogs/authenticating-your-xamarin-app-with-azure-and-facebook/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/creating-visual-studio-project-and-solution-templates-part-3-vs-for-mac-extension/><img class=card-img-top src=/blogs/creating-visual-studio-project-and-solution-templates-part-3-vs-for-mac-extension//banner.png alt="Creating Visual Studio project and solution templates - Part 3, VS for Mac extension"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/creating-visual-studio-project-and-solution-templates-part-3-vs-for-mac-extension/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Creating Visual Studio project and solution templates - Part 3, VS for Mac extension">Creating Visual Studio project and solution templates - Part 3, VS for Mac extension</h5></a><div class="card-text secondary-font"><p>In the first part of this set of posts I looked at creating a dotnet new project template, and in the second part I showed how you could easily add this to a Visual Studio for Windows extension. Lets now look at adding it to a Visual Studio for Mac extension, so that our template is available …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 8, 2017</span>
|
||||
@@ -16,8 +17,5 @@ Hit Refresh is inspired by refreshing your browser - it doesn’t reload eve
|
||||
One of the great things about the MVVM design pattern is that it allows us to maximize the code in our cross-platform model and view-model layers. This means we’ve written the …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 20, 2017</span>
|
||||
<a href=/blogs/ui-testing-your-xamarin-apps/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/firewall-issues-with-ios-simulators/><img class=card-img-top src=/blogs/firewall-issues-with-ios-simulators//banner.png alt="Firewall issues with iOS simulators"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/firewall-issues-with-ios-simulators/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Firewall issues with iOS simulators">Firewall issues with iOS simulators</h5></a><div class="card-text secondary-font"><p>I keep getting an annoying issue with my iOS simulators. When I run an app in a simulator that needs any form of network connection I get a dialog box popup from the built in Mac firewall asking if I want to allow incoming connections. Even though I click ‘allow’, I get asked this every …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">August 10, 2017</span>
|
||||
<a href=/blogs/firewall-issues-with-ios-simulators/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/game-of-phones-winter-is-coming/><img class=card-img-top src=/blogs/game-of-phones-winter-is-coming//banner.png alt="Game of Phones - Winter is coming"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/game-of-phones-winter-is-coming/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Game of Phones - Winter is coming">Game of Phones - Winter is coming</h5></a><div class="card-text secondary-font"><p>Winter of Xamarin - register now at http://aka.ms/winterofxamarin.</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 7, 2017</span>
|
||||
<a href=/blogs/game-of-phones-winter-is-coming/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/stay-warm-with-microsoft-xamarin/><img class=card-img-top src=/blogs/stay-warm-with-microsoft-xamarin//banner.png alt="Stay warm with Microsoft & Xamarin!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/stay-warm-with-microsoft-xamarin/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Stay warm with Microsoft & Xamarin!">Stay warm with Microsoft & Xamarin!</h5></a><div class="card-text secondary-font"><p>For those in New Zealand, Microsoft and Xamarin have announced some cool events:
|
||||
Brr! It’s getting cold outside. Microsoft has a plan to get you through winter with some awesome Xamarin events and competitions and apparel!
|
||||
Are you ready to sharpen your skills in a fun, fast-paced environment? …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 1, 2017</span>
|
||||
<a href=/blogs/stay-warm-with-microsoft-xamarin/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/6/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class="page-item active"><a aria-current=page aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/8/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/game-of-phones-winter-is-coming/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/6/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/5/ aria-label="Page 5" class=page-link role=button>5</a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class="page-item active"><a aria-current=page aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/8/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,9 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/specflow-support-in-visual-studio-for-mac/><img class=card-img-top src=/blogs/specflow-support-in-visual-studio-for-mac//banner.png alt="Specflow support in Visual Studio for Mac"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/specflow-support-in-visual-studio-for-mac/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Specflow support in Visual Studio for Mac">Specflow support in Visual Studio for Mac</h5></a><div class="card-text secondary-font"><p>Love Specflow and Visual Studio for Mac? Well you are in luck as there is now a working extension for Visual Studio for Mac to enable full specflow support including generating feature files with syntax highlighting.
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/stay-warm-with-microsoft-xamarin/><img class=card-img-top src=/blogs/stay-warm-with-microsoft-xamarin//banner.png alt="Stay warm with Microsoft & Xamarin!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/stay-warm-with-microsoft-xamarin/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Stay warm with Microsoft & Xamarin!">Stay warm with Microsoft & Xamarin!</h5></a><div class="card-text secondary-font"><p>For those in New Zealand, Microsoft and Xamarin have announced some cool events:
|
||||
Brr! It’s getting cold outside. Microsoft has a plan to get you through winter with some awesome Xamarin events and competitions and apparel!
|
||||
Are you ready to sharpen your skills in a fun, fast-paced environment? …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 1, 2017</span>
|
||||
<a href=/blogs/stay-warm-with-microsoft-xamarin/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/specflow-support-in-visual-studio-for-mac/><img class=card-img-top src=/blogs/specflow-support-in-visual-studio-for-mac//banner.png alt="Specflow support in Visual Studio for Mac"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/specflow-support-in-visual-studio-for-mac/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Specflow support in Visual Studio for Mac">Specflow support in Visual Studio for Mac</h5></a><div class="card-text secondary-font"><p>Love Specflow and Visual Studio for Mac? Well you are in luck as there is now a working extension for Visual Studio for Mac to enable full specflow support including generating feature files with syntax highlighting.
|
||||
It’s all open source and built upon the amazing work by Mike Jones. You can …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">June 1, 2017</span>
|
||||
<a href=/blogs/specflow-support-in-visual-studio-for-mac/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/opening-multiple-solutions-in-visual-studio-for-mac/><img class=card-img-top src=/blogs/opening-multiple-solutions-in-visual-studio-for-mac//banner.png alt="Opening multiple solutions in Visual Studio for Mac"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/opening-multiple-solutions-in-visual-studio-for-mac/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Opening multiple solutions in Visual Studio for Mac">Opening multiple solutions in Visual Studio for Mac</h5></a><div class="card-text secondary-font"><p>One area Macs are very different to Windows PCs is in the way documents are opened. Mac apps manage documents internally instead of being able to tap a start button again and open a second instance of your app to load a new document.
|
||||
This means that on Windows Xamarin developers can open multiple …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 23, 2017</span>
|
||||
@@ -24,6 +27,5 @@ As you can see from the image above, as the progress bar changes value, the UI u
|
||||
This means if you are planning on using my Xamarin Studio MvvmCross add-in then you won’t be able to find it.
|
||||
Luckily there …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 28, 2016</span>
|
||||
<a href=/blogs/missing-xamarin-studio-add-ins/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-dev-days/><img class=card-img-top src=/blogs/xamarin-dev-days//banner.png alt="Xamarin Dev Days!"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-dev-days/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Dev Days!">Xamarin Dev Days!</h5></a><div class="card-text secondary-font"><p>Our Xamarin Dev Days has been immortalized in a YouTube video! Thanks to Peace of Dreams for filming on the day.</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 27, 2016</span>
|
||||
<a href=/blogs/xamarin-dev-days/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/effects-in-xamarin-forms/><img class=card-img-top src=/blogs/effects-in-xamarin-forms//banner.png alt="Effects in Xamarin.Forms"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/effects-in-xamarin-forms/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Effects in Xamarin.Forms">Effects in Xamarin.Forms</h5></a><div class="card-text secondary-font"><p>Xamarin.Forms is pretty awesome, it provides an abstraction over the UI layer of iOS, Android and UWP apps allowing you to define you UI once either in code (C# or F#), or using XAML - an XML markup language. Write your UI once and it works natively on all devices rendering your UI using the native …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 26, 2016</span>
|
||||
<a href=/blogs/effects-in-xamarin-forms/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/7/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class="page-item active"><a aria-current=page aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/9/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/xamarin-dev-days/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/7/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/6/ aria-label="Page 6" class=page-link role=button>6</a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class="page-item active"><a aria-current=page aria-label="Page 8" class=page-link role=button>8</a></li><li class=page-item><a href=/blogs/page/9/ aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/9/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,6 +1,7 @@
|
||||
<!doctype html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=icon href=/fav.png type=image/png><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" media=print onload='this.media="all"'><noscript><link href="https://fonts.googleapis.com/css2?family=Alata&family=Lora&family=Muli:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto&family=Muli:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet></noscript><link rel=stylesheet href=/css/font.css media=all><meta property="og:title" content="Blogs"><meta property="og:description" content="Blog posts, videos and more from Jim"><meta property="og:type" content="website"><meta property="og:url" content="https://jimbobbennett.dev/blogs/"><meta property="og:image" content="https://jimbobbennett.dev/twitter-card-site.png"><meta property="og:site_name" content="JimBobBennett"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://jimbobbennett.dev/twitter-card-site.png"><meta name=twitter:title content="Blogs"><meta name=twitter:description content="Blog posts, videos and more from Jim"><meta name=twitter:site content="@jimbobbennett"><meta name=twitter:creator content="@jimbobbennett"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css integrity=sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 crossorigin=anonymous><link rel=stylesheet href=/css/header.css media=all><link rel=stylesheet href=/css/footer.css media=all><link rel=stylesheet href=/css/theme.css media=all><link rel="shortcut icon" type=image/png href=/fav.png><link rel="shortcut icon" sizes=192x192 href=/fav.png><link rel=apple-touch-icon href=/fav.png><link rel=alternate type=application/rss+xml href=https://jimbobbennett.dev/index.xml title=JimBobBennett><script type=text/javascript>(function(e,t,n,s,o,i,a){e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},i=t.createElement(s),i.async=1,i.src="https://www.clarity.ms/tag/"+o,a=t.getElementsByTagName(s)[0],a.parentNode.insertBefore(i,a)})(window,document,"clarity","script","dctc2ydykv")</script><style>:root{--text-color:#343a40;--text-secondary-color:#6c757d;--background-color:#000;--secondary-background-color:#64ffda1a;--primary-color:#007bff;--secondary-color:#f8f9fa;--text-color-dark:#e4e6eb;--text-secondary-color-dark:#b0b3b8;--background-color-dark:#000000;--secondary-background-color-dark:#212529;--primary-color-dark:#ffffff;--secondary-color-dark:#212529}body{background-color:#000;font-size:1rem;font-weight:400;line-height:1.5;text-align:left}</style><meta name=description content="Blogs of JimBobBennett"><link rel=stylesheet href=/css/index.css media=all><link rel=stylesheet href=/css/list.css media=all><link rel=stylesheet href=/css/projects.css media=all><title>Blogs | JimBobBennett</title></head><body class=light onload=loading()><header><nav class="pt-3 navbar navbar-expand-lg"><div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5"><a class="navbar-brand primary-font text-wrap" href=/><img src=/fav.png width=30 height=30 class="d-inline-block align-top">
|
||||
JimBobBennett</a>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-dev-days-auckland-19th-november-2016/><img class=card-img-top src=/blogs/xamarin-dev-days-auckland-19th-november-2016//banner.png alt="Xamarin Dev Days Auckland - 19th November 2016"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-dev-days-auckland-19th-november-2016/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Dev Days Auckland - 19th November 2016">Xamarin Dev Days Auckland - 19th November 2016</h5></a><div class="card-text secondary-font"><p>There’s only 1 week to go until the first Xamarin Dev Days in Auckland, hosted by the Auckland Xamarin Meetup on Saturday 19th November. We’ve got an awesome program lined up for this free day and evening, so we thought now would be a good time to share our plans. We have internationally …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 4, 2016</span>
|
||||
<button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation"><svg aria-hidden="true" height="24" viewBox="0 0 16 16" width="24" data-view-component="true"><path fill-rule="evenodd" d="M1 2.75A.75.75.0 011.75 2h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 2.75zm0 5A.75.75.0 011.75 7h12.5a.75.75.0 110 1.5H1.75A.75.75.0 011 7.75zM1.75 12a.75.75.0 100 1.5h12.5a.75.75.0 100-1.5H1.75z"/></svg></button><div class="collapse navbar-collapse text-wrap primary-font" id=navbarContent><ul class="navbar-nav ms-auto text-center"><li class="nav-item navbar-text"><a class=nav-link href=/ aria-label=home>Home</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#about aria-label=about>About</a></li><li class="nav-item navbar-text"><a class=nav-link href=/#projects aria-label=projects>Recent Highlights</a></li><li class="nav-item navbar-text"><a class=nav-link href=/blogs title="Blog posts">Blog</a></li><li class="nav-item navbar-text"><a class=nav-link href=/videos title=Videos>Videos</a></li><li class="nav-item navbar-text"><a class=nav-link href=/livestreams title=Livestreams>Livestreams</a></li><li class="nav-item navbar-text"><a class=nav-link href=/conferences title=Conferences>Conferences</a></li><li class="nav-item navbar-text"><a class=nav-link href=/resume title=Resume>Resume</a></li></ul></div></div></nav></header><div id=content><section id=projects><div class="container pt-5" id=list-page><div class="row justify-content-center px-3 px-md-5"><h1 class="text-left pb-2 content">Blogs</h1></div></div></section><div class="container pt-5" id=list-page><div class=row><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/effects-in-xamarin-forms/><img class=card-img-top src=/blogs/effects-in-xamarin-forms//banner.png alt="Effects in Xamarin.Forms"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/effects-in-xamarin-forms/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Effects in Xamarin.Forms">Effects in Xamarin.Forms</h5></a><div class="card-text secondary-font"><p>Xamarin.Forms is pretty awesome, it provides an abstraction over the UI layer of iOS, Android and UWP apps allowing you to define you UI once either in code (C# or F#), or using XAML - an XML markup language. Write your UI once and it works natively on all devices rendering your UI using the native …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 26, 2016</span>
|
||||
<a href=/blogs/effects-in-xamarin-forms/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-dev-days-auckland-19th-november-2016/><img class=card-img-top src=/blogs/xamarin-dev-days-auckland-19th-november-2016//banner.png alt="Xamarin Dev Days Auckland - 19th November 2016"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-dev-days-auckland-19th-november-2016/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Dev Days Auckland - 19th November 2016">Xamarin Dev Days Auckland - 19th November 2016</h5></a><div class="card-text secondary-font"><p>There’s only 1 week to go until the first Xamarin Dev Days in Auckland, hosted by the Auckland Xamarin Meetup on Saturday 19th November. We’ve got an awesome program lined up for this free day and evening, so we thought now would be a good time to share our plans. We have internationally …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">November 4, 2016</span>
|
||||
<a href=/blogs/xamarin-dev-days-auckland-19th-november-2016/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/using-ios-10-notifications-with-ibeacons/><img class=card-img-top src=/blogs/using-ios-10-notifications-with-ibeacons//banner.png alt="Using iOS 10 notifications with iBeacons"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/using-ios-10-notifications-with-ibeacons/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Using iOS 10 notifications with iBeacons">Using iOS 10 notifications with iBeacons</h5></a><div class="card-text secondary-font"><p>I’m a huge fan of iBeacons (and if you’re coming to MS Ignite NZ 2016 then you can hear me talk about them) and they are pretty easy to get started with on iOS. The most basic use case is beacon monitoring - when your app detects a signal from an iBeacon it can wake up and do some …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">October 22, 2016</span>
|
||||
<a href=/blogs/using-ios-10-notifications-with-ibeacons/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-in-action/><img class=card-img-top src=/blogs/xamarin-in-action//banner.png alt="Xamarin In Action"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-in-action/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin In Action">Xamarin In Action</h5></a><div class="card-text secondary-font"><p>Over the last few months I’ve been busily writing away on my first book - Xamarin In Action for Manning publications. Manning are a pretty serious publisher, they count Jon Skeet amongst their authors so it was quite an honor to be asked to write for them.
|
||||
The first 3 chapters are now …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">September 20, 2016</span>
|
||||
@@ -16,7 +17,5 @@ Recently I created my own add-in to help out …</p></div></div><div class="mt-a
|
||||
<a href=/blogs/fixing-issues-with-multidex-on-pre-lollipop-devices-on-windows/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/xamarin-evolve-2016-roundup/><img class=card-img-top src=/blogs/xamarin-evolve-2016-roundup//banner.png alt="Xamarin Evolve 2016 roundup"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/xamarin-evolve-2016-roundup/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Xamarin Evolve 2016 roundup">Xamarin Evolve 2016 roundup</h5></a><div class="card-text secondary-font"><p>As part of my work as a mobile developer at EROAD I blogged about my experiences at Xamarin Evolve this year. You can read it on LinkedIn</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 16, 2016</span>
|
||||
<a href=/blogs/xamarin-evolve-2016-roundup/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/my-talk-from-xamarin-evolve/><img class=card-img-top src=/blogs/my-talk-from-xamarin-evolve//banner.png alt="My talk from Xamarin Evolve 2016 is now on YouTube"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/my-talk-from-xamarin-evolve/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="My talk from Xamarin Evolve 2016 is now on YouTube">My talk from Xamarin Evolve 2016 is now on YouTube</h5></a><div class="card-text secondary-font"><p>My talk from Xamarin Evolve 2016 is now up on YouTube!
|
||||
Contextual awareness is a fast-growing trend in mobile development. In this session, Jim will take you through a quick overview of beacon technology, including Apple's iBeacons and Google's Eddystone, before diving into some code. We'll even …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">May 11, 2016</span>
|
||||
<a href=/blogs/my-talk-from-xamarin-evolve/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="col-lg-3 col-md-6 my-3"><div class="card h-100"><div class=card-head><a href=/blogs/building-a-xamarin-android-app-part-6-2/><img class=card-img-top src=/blogs/building-a-xamarin-android-app-part-6-2//banner.png alt="Building a Xamarin Android app - part 6"></a></div><div class="card-body bg-transparent p-4 shadow-sm"><a href=/blogs/building-a-xamarin-android-app-part-6-2/ class="primary-font card-title"><h5 class="card-title bg-transparent" title="Building a Xamarin Android app - part 6">Building a Xamarin Android app - part 6</h5></a><div class="card-text secondary-font"><p>This is the sixth part in the my series about building an Android app using Xamarin.Android. I highly recommend reading the rest of the series first. The previous parts are:
|
||||
Creating the basic app Defining our data Building view models Binding the view models to the UI Adding the add button Editing …</p></div></div><div class="mt-auto post-footer bg-transparent py-3"><span class="float-start bg-transparent">March 24, 2016</span>
|
||||
<a href=/blogs/building-a-xamarin-android-app-part-6-2/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/8/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class="page-item active"><a aria-current=page aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/10/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<a href=/blogs/my-talk-from-xamarin-evolve/ class="float-end btn btn-outline-info btn-sm">Read</a></div></div></div><div class="row justify-content-center"><div class="col-auto m-3"><ul class="pagination pagination-default"><li class=page-item><a href=/blogs/ aria-label=First class=page-link role=button><span aria-hidden=true>««</span></a></li><li class=page-item><a href=/blogs/page/8/ aria-label=Previous class=page-link role=button><span aria-hidden=true>«</span></a></li><li class=page-item><a href=/blogs/page/7/ aria-label="Page 7" class=page-link role=button>7</a></li><li class=page-item><a href=/blogs/page/8/ aria-label="Page 8" class=page-link role=button>8</a></li><li class="page-item active"><a aria-current=page aria-label="Page 9" class=page-link role=button>9</a></li><li class=page-item><a href=/blogs/page/10/ aria-label="Page 10" class=page-link role=button>10</a></li><li class=page-item><a href=/blogs/page/11/ aria-label="Page 11" class=page-link role=button>11</a></li><li class=page-item><a href=/blogs/page/10/ aria-label=Next class=page-link role=button><span aria-hidden=true>»</span></a></li><li class=page-item><a href=/blogs/page/15/ aria-label=Last class=page-link role=button><span aria-hidden=true>»»</span></a></li></ul></div></div></div></div></div><footer><div class="container py-4"><div class="row justify-content-center"><div class="col-md-4 text-center">© 2023 All Rights Reserved</div></div></div></div></footer><script src=https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js integrity=sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 crossorigin=anonymous></script>
|
||||
<script>document.body.className.includes("light")&&(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))</script><script>let loadingIcons;function loading(){myVar=setTimeout(showPage,100)}function showPage(){try{document.getElementById("loading-icons").style.display="block"}catch{}}</script><script>function createCopyButton(e,t){const n=document.createElement("button");n.className="copy-code-button",n.type="button",n.innerText="Copy",n.addEventListener("click",()=>copyCodeToClipboard(n,e,t)),addCopyButtonToDom(n,e)}async function copyCodeToClipboard(e,t,n){const s=t.querySelector("pre > code").innerText;try{n.writeText(s)}finally{codeWasCopied(e)}}function codeWasCopied(e){e.blur(),e.innerText="Copied!",setTimeout(function(){e.innerText="Copy"},2e3)}function addCopyButtonToDom(e,t){t.insertBefore(e,t.firstChild);const n=document.createElement("div");n.className="highlight-wrapper",t.parentNode.insertBefore(n,t),n.appendChild(t)}if(navigator&&navigator.clipboard)document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,navigator.clipboard));else{var script=document.createElement("script");script.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js",script.integrity="sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=",script.crossOrigin="anonymous",script.onload=function(){addCopyButtons(clipboard)},document.querySelectorAll(".highlight").forEach(e=>createCopyButton(e,script)),document.body.appendChild(script)}</script></body></html>
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>.NET Core on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in .NET Core on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 25 Oct 2017 06:42:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/.net-core/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>.NET Core on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in .NET Core on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 25 Oct 2017 06:42:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/.net-core/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>.net on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in .net on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>.net on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in .net on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>64-bit on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in 64-bit on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/64-bit/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>64-bit on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in 64-bit on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/64-bit/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>aar on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in aar on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/aar/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>aar on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in aar on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/aar/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>adafruit on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in adafruit on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/adafruit/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>adafruit on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in adafruit on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/adafruit/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>add-in on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in add-in on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 01 Jun 2017 08:10:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/add-in/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>add-in on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in add-in on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 01 Jun 2017 08:10:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/add-in/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>addin on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in addin on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 01 Jul 2016 23:56:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/addin/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>addin on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in addin on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 01 Jul 2016 23:56:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/addin/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in AI on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in AI on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>alpha on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in alpha on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 04 Aug 2014 02:46:47 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/alpha/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>alpha on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in alpha on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 04 Aug 2014 02:46:47 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/alpha/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Android on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Android on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 Jul 2018 16:59:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/android/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Android on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Android on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 Jul 2018 16:59:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/android/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>angular on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in angular on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 27 May 2014 00:10:02 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/angular/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>angular on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in angular on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 27 May 2014 00:10:02 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/angular/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>animation on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in animation on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 05 Jan 2017 08:43:11 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/animation/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>animation on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in animation on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 05 Jan 2017 08:43:11 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/animation/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>api on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in api on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 02 Mar 2018 20:27:18 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/api/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>api on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in api on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 02 Mar 2018 20:27:18 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/api/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>app service on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in app service on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/app-service/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>app service on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in app service on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/app-service/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appcenter on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appcenter on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 25 Sep 2018 14:15:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appcenter/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appcenter on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appcenter on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 25 Sep 2018 14:15:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appcenter/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AppCompat on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in AppCompat on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 Feb 2016 00:16:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appcompat/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AppCompat on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in AppCompat on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 Feb 2016 00:16:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appcompat/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apple Silicon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Apple Silicon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 24 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/apple-silicon/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apple Silicon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Apple Silicon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 24 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/apple-silicon/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>apple on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in apple on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/apple/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>apple on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in apple on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/apple/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>applesilicon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in applesilicon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/applesilicon/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>applesilicon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in applesilicon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/applesilicon/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appveyor on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appveyor on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 03:41:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appveyor/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appveyor on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appveyor on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 03:41:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appveyor/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appwrite on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appwrite on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appwrite/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>appwrite on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in appwrite on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/appwrite/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>arm64 on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in arm64 on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/arm64/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>arm64 on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in arm64 on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/arm64/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>authentication on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in authentication on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 17 Nov 2017 23:54:08 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/authentication/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>authentication on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in authentication on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 17 Nov 2017 23:54:08 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/authentication/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>automator on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in automator on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 13 Dec 2018 14:29:25 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/automator/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>automator on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in automator on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 13 Dec 2018 14:29:25 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/automator/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>avatar on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in avatar on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/avatar/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>avatar on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in avatar on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/avatar/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>az on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in az on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 08 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/az/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>az on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in az on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 08 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/az/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azure free on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azure free on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 19 Nov 2018 17:26:51 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azure-free/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azure free on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azure free on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 19 Nov 2018 17:26:51 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azure-free/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azure on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azure on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azure on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azure on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azurefunctions on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azurefunctions on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azurefunctions/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>azurefunctions on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in azurefunctions on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 08 May 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/azurefunctions/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>beta test on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in beta test on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 10 Oct 2014 01:28:54 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/beta-test/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>beta test on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in beta test on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 10 Oct 2014 01:28:54 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/beta-test/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>binaural on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in binaural on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 18 Nov 2014 21:45:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/binaural/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>binaural on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in binaural on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 18 Nov 2014 21:45:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/binaural/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>binding on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in binding on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/binding/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>binding on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in binding on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/binding/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blind on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in blind on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 18 Nov 2014 21:45:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/blind/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blind on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in blind on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 18 Nov 2014 21:45:01 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/blind/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blog on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in blog on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sat, 13 Sep 2014 07:46:23 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blog on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in blog on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sat, 13 Sep 2014 07:46:23 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>book on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in book on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 21 May 2018 09:03:04 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/book/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>book on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in book on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 21 May 2018 09:03:04 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/book/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>brand on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in brand on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/brand/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>brand on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in brand on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/brand/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bubble boy on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bubble boy on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 14 Aug 2014 02:11:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bubble-boy/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bubble boy on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bubble boy on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 14 Aug 2014 02:11:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bubble-boy/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bubble tea on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bubble tea on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 14 Aug 2014 02:11:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bubble-tea/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bubble tea on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bubble tea on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 14 Aug 2014 02:11:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bubble-tea/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bug on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bug on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bug/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>bug on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in bug on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/bug/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>build error on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in build error on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/build-error/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>build error on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in build error on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Jan 2015 22:37:52 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/build-error/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>business on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in business on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/business/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>business on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in business on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 29 Jul 2014 03:48:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/business/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>c# on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in c# on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/c#/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>c# on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in c# on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/c#/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>canon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in canon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 02 Apr 2019 09:38:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/canon/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>canon on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in canon on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 02 Apr 2019 09:38:50 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/canon/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cda on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cda on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 02 May 2018 13:16:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cda/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cda on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cda on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 02 May 2018 13:16:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cda/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>charge on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in charge on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 01 Aug 2014 06:29:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/charge/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>charge on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in charge on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 01 Aug 2014 06:29:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/charge/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>children on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in children on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 22 Jan 2019 11:34:28 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/children/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>children on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in children on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 22 Jan 2019 11:34:28 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/children/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>chocolate on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in chocolate on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 10 Aug 2014 02:20:45 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/chocolate/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>chocolate on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in chocolate on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 10 Aug 2014 02:20:45 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/chocolate/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cli on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cli on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 08 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cli on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cli on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 08 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cognitive services on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cognitive services on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 21 Jul 2019 21:52:08 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cognitive-services/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cognitive services on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cognitive services on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 21 Jul 2019 21:52:08 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cognitive-services/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>community on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in community on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 14 Jan 2022 22:44:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/community/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>community on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in community on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 14 Jan 2022 22:44:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/community/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>COMPILETODALVIK on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in COMPILETODALVIK on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/compiletodalvik/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>COMPILETODALVIK on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in COMPILETODALVIK on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 10 Sep 2018 11:22:55 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/compiletodalvik/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>component on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in component on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 24 Feb 2015 21:29:51 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/component/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>component on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in component on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 24 Feb 2015 21:29:51 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/component/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>computer vision on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in computer vision on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 30 May 2018 16:05:41 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/computer-vision/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>computer vision on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in computer vision on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 30 May 2018 16:05:41 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/computer-vision/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>conference on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in conference on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 10 May 2017 08:48:31 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/conference/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>conference on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in conference on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 10 May 2017 08:48:31 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/conference/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>continuous deployment on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in continuous deployment on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 03:41:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/continuous-deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>continuous deployment on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in continuous deployment on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 03:41:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/continuous-deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>control on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in control on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 05:02:19 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/control/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>control on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in control on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Aug 2014 05:02:19 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/control/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cordova on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Cordova on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 10 Jun 2014 22:06:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cordova/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cordova on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Cordova on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 10 Jun 2014 22:06:57 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cordova/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CoreML on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in CoreML on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 Feb 2018 15:22:18 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/coreml/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CoreML on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in CoreML on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 Feb 2018 15:22:18 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/coreml/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cosmos db on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cosmos db on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 05 Dec 2019 23:17:04 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cosmos-db/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cosmos db on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in cosmos db on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 05 Dec 2019 23:17:04 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/cosmos-db/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>crash on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in crash on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 May 2016 08:20:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/crash/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>crash on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in crash on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 May 2016 08:20:16 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/crash/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>css on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in css on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sat, 13 Sep 2014 10:52:26 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/css/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>css on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in css on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sat, 13 Sep 2014 10:52:26 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/css/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>custom vision on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in custom vision on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 Jul 2018 16:29:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/custom-vision/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>custom vision on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in custom vision on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 20 Jul 2018 16:29:53 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/custom-vision/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>database on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in database on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 15 Jan 2016 21:12:13 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/database/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>database on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in database on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 15 Jan 2016 21:12:13 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/database/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>debugging on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in debugging on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Nov 2018 17:52:15 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/debugging/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>debugging on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in debugging on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 13 Nov 2018 17:52:15 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/debugging/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>design on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in design on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 13 Jan 2016 17:26:15 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/design/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>design on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in design on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 13 Jan 2016 17:26:15 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/design/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>desk on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in desk on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 May 2014 13:04:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/desk/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>desk on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in desk on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 May 2014 13:04:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/desk/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dev days on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dev days on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 27 Nov 2016 08:43:54 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dev-days/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dev days on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dev days on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 27 Nov 2016 08:43:54 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dev-days/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Development on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Development on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 16 Jun 2014 11:52:09 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/development/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Development on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in Development on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 16 Jun 2014 11:52:09 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/development/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>disqus on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in disqus on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 May 2014 13:04:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/disqus/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>disqus on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in disqus on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Mon, 26 May 2014 13:04:22 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/disqus/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dnsimple on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dnsimple on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dnsimple/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dnsimple on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dnsimple on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dnsimple/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>docker on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in docker on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>docker on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in docker on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Thu, 02 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>docs on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in docs on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>docs on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in docs on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 04 Jun 2019 10:27:34 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>domain.com on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in domain.com on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/domain.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>domain.com on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in domain.com on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/domain.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>domain on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in domain on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/domain/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>domain on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in domain on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Wed, 27 Nov 2019 01:55:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/domain/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dotnet new on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dotnet new on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 11 Jun 2019 10:31:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dotnet-new/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dotnet new on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in dotnet new on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 11 Jun 2019 10:31:32 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/dotnet-new/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>eddystone on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in eddystone on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 22 Jan 2016 17:40:47 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/eddystone/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>eddystone on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in eddystone on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Fri, 22 Jan 2016 17:40:47 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/eddystone/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>edge on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in edge on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/edge/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>edge on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in edge on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 21 Apr 2020 18:00:00 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/edge/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>elmish on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in elmish on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 06 May 2018 15:00:40 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/elmish/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>elmish on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in elmish on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Sun, 06 May 2018 15:00:40 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/elmish/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>emulator on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in emulator on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 01 Mar 2016 08:49:37 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/emulator/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>emulator on JimBobBennett</title><link>https://jimbobbennett.dev</link><description>Recent content in emulator on JimBobBennett</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>jim@jimbobbennett.io (Jim Bennett)</managingEditor><webMaster>jim@jimbobbennett.io (Jim Bennett)</webMaster><lastBuildDate>Tue, 01 Mar 2016 08:49:37 +0000</lastBuildDate><atom:link href="https://jimbobbennett.dev/categories/emulator/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing LibLab into a devcontainer using NPM</title><link>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/liblab-in-a-devcontainer/</guid><description><blockquote>
|
||||
<p>In this post we look at how to add NPM packages to a devcontainer to use in VS Code locally or in a GitHub codespace</p>
|
||||
</blockquote>
|
||||
<p>I recently started at <a href="https://liblab.com">LibLab</a> as a Principal Developer Advocate. LibLab is a tool that converts APIs into language SDKs, something I&rsquo;m a big fan of as I love typesafety and the inherent documentation that comes with a good SDK. Obviously my first job was to dive into building out an API and creating an SDK from it.</p>
|
||||
<h2 id="devcontainers">Devcontainers</h2>
|
||||
<p>I love <a href="https://containers.dev/">devcontainers</a> - they allow me to create a repo that anyone can open and instantly have a fully configured environment that just works! My standard process when creating any sample code is to start with a devcontainer. In this case, I&rsquo;m creating a <a href="https://fastapi.tiangolo.com/">FastAPI</a> application, and building an SDK from that.</p>
|
||||
<p>I start with a Python container - this is a pre-configured container that I can just spin up inside VS Code.</p>
|
||||
<p><img src="python3-devcontainer.png" alt="The Python 3 devcontainers option in the vs code select dev container configuration"></p>
|
||||
<p>Once in this container I can create my API, then build the SDK using LibLab.</p>
|
||||
<h2 id="add-liblab-to-the-container">Add LibLab to the container</h2>
|
||||
<p>LibLab is available as a <a href="https://developers.liblab.com/docs/getting-started">CLI that you install via NPM</a>. There are a number of ways you can install NPM packages in the container:</p>
|
||||
<ul>
|
||||
<li>Install it manually in the <code>postCreateCommand</code></li>
|
||||
<li>Use a <code>DOCKERFILE</code> and install it there</li>
|
||||
<li>Use the NPM package feature</li>
|
||||
</ul>
|
||||
<p>I went for option 3 - use the NPM package feature. This avoids having to create a <code>DOCKERFILE</code> and configure my <code>devcontainer.json</code> to use it, and means I don&rsquo;t have to add more to my <code>postCreateCommand</code> which already installs pip packages.</p>
|
||||
<p>You can add this feature manually into the <code>devcontainer.json</code> file, or use the command palette:</p>
|
||||
<p><img src="devcontainer-feature-command-palette.png" alt="The configure container features command palette option"></p>
|
||||
<p><img src="devcontainer-add-feature.png" alt="Selecting the NPM package feature from the command palette"></p>
|
||||
<p>To add manually, add the <code>ghcr.io/devcontainers-contrib/features/npm-package:1</code> feature:</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {}
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><p>Once added, the feature is configured using the <code>package</code> and <code>version</code> parameters. THe <code>package</code> should be set to <code>liblab</code>, the name of the NPM package for LibLab. The <code>version</code> parameter defaults to <code>latest</code> and I always want the latest LibLab CLI installed, so this can be left out.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010">...</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;features&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ghcr.io/devcontainers-contrib/features/npm-package:1&#34;</span>: {
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;package&#34;</span>: <span style="color:#e6db74">&#34;liblab&#34;</span>
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span> }
|
||||
</span></span><span style="display:flex;"><span>}
|
||||
</span></span></code></pre></div><h2 id="rebuild-the-container">Rebuild the container</h2>
|
||||
<p>Once this is set up you can rebuild the container and the LibLab SDK will be available in your terminal!</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vscode ➜ /workspaces/python $ liblab
|
||||
</span></span><span style="display:flex;"><span>The offical LibLab CLI
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>VERSION
|
||||
</span></span><span style="display:flex;"><span> liblab/0.9.20 linux-arm64 node-v18.17.0
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>USAGE
|
||||
</span></span><span style="display:flex;"><span> $ liblab <span style="color:#f92672">[</span>COMMAND<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>TOPICS
|
||||
</span></span><span style="display:flex;"><span> hooks Bootstrap an SDKs hooks.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>COMMANDS
|
||||
</span></span><span style="display:flex;"><span> build Build SDK<span style="color:#f92672">(</span>s<span style="color:#f92672">)</span> and Docs <span style="color:#66d9ef">for</span> your API.
|
||||
</span></span><span style="display:flex;"><span> help Display help <span style="color:#66d9ef">for</span> liblab.
|
||||
</span></span><span style="display:flex;"><span> init Create a liblab folder <span style="color:#66d9ef">for</span> housing files relevant to SDK and Doc generation.
|
||||
</span></span><span style="display:flex;"><span> login Login to your account.
|
||||
</span></span><span style="display:flex;"><span> logout Logout of your account.
|
||||
</span></span><span style="display:flex;"><span> post-build Run extra tasks after code generation.
|
||||
</span></span><span style="display:flex;"><span> pr Create a PR <span style="color:#66d9ef">for</span> all the generated SDKs.
|
||||
</span></span><span style="display:flex;"><span> register Register <span style="color:#66d9ef">for</span> a new liblab account.
|
||||
</span></span><span style="display:flex;"><span> reset-password Reset your password.
|
||||
</span></span><span style="display:flex;"><span> token Create a new login token <span style="color:#66d9ef">for</span> CI/CD.
|
||||
</span></span></code></pre></div><h2 id="learn-more">Learn more</h2>
|
||||
<p>Want to learn more about LibLab for automating the generation of SDKs from your APIs? Get in touch.</p>
|
||||
<ul>
|
||||
<li><a href="https://linktr.ee/JimBobBennett">Contact me via social</a></li>
|
||||
<li><a href="https://discord.gg/F8aECHbRkV">Join our Discord</a></li>
|
||||
</ul></description></item><item><title>Let's get personal: computing has won a Telly award</title><link>https://jimbobbennett.dev/blogs/telly-award/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>jim@jimbobbennett.io (Jim Bennett)</author><guid>https://jimbobbennett.dev/blogs/telly-award/</guid><description><p>This year is the 44th annual <a href="https://www.tellyawards.com">Telly Awards</a>. The Telly Awards honor excellence in video and television across all screens.</p>
|
||||
<p>The Telly Awards was founded in 1979 to honor excellence in local, regional and cable television commercials with non-broadcast video and television programming added soon after. With the recent evolution and rise of digital video (web series, VR, 360 and beyond), the Telly Awards today also reflects and celebrates this exciting new era of the moving image on and offline.</p>
|
||||
<p>The Telly Awards annually showcases the best work created within television and across video, for all screens. Receiving over 12,000 entries from all 50 states and 5 continents, Telly Award winners represent work from some of the most respected advertising agencies, television stations, production companies and publishers from around the world. The Telly Awards recognizes work that has been created on the behalf of a client, for a specific brand and/or company (including your own) or self-directed as a creative endeavor.</p>
|
||||
<p>This year we entered the <strong>Build a 3D Printed Clippy Powered by ChatGPT from OpenAI, Azure Cognitive Services</strong> episode of Let&rsquo;s get personal: computing, and we won a <a href="https://www.tellyawards.com/winners/2023/online/general-talk-show-interview">Silver award in the online talk show/interview category</a>!</p>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user