<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Theaboutbox Tech Blog</title>
	<atom:link href="https://theaboutbox.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://theaboutbox.com</link>
	<description>Notes from the trenches with the occasional random thought</description>
	<lastBuildDate>Tue, 10 Sep 2024 23:35:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">211255192</site><cloud domain='theaboutbox.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>Theaboutbox Tech Blog</title>
		<link>https://theaboutbox.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://theaboutbox.com/osd.xml" title="Theaboutbox Tech Blog" />
	<atom:link rel='hub' href='https://theaboutbox.com/?pushpress=hub'/>
	<item>
		<title>Claude Artifacts &#8211; A Deep Dive</title>
		<link>https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/</link>
					<comments>https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Sat, 31 Aug 2024 20:47:54 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=91</guid>

					<description><![CDATA[Anthropic recently added a new feature to Claude: Artifacts, a &#8220;dedicated window to instantly see, iterate, and build on the work you create with Claude&#8221; and I immedeately felt that this will be a game-changer. It&#8217;s rough, but you can literally build a simple app by describing what you want on the left side, and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Anthropic recently added a new feature to Claude: <a href="https://www.anthropic.com/news/artifacts">Artifacts</a>, a &#8220;<em>dedicated window to instantly see, iterate, and build on the work you create with Claude</em>&#8221; and I immedeately felt that this will be a game-changer. It&#8217;s rough, but you can literally build a simple app by describing what you want on the left side, and Claude will write the code and run it on the right side. <em>That&#8217;s it.</em></p>



<h3 class="wp-block-heading">What are Artifacts?</h3>



<p>An artifact can be a document, a visualization, or a simple app or game. If Claude generates code, it will run in the side panel automatically and can be published online with a single click.</p>



<h3 class="wp-block-heading">Taking Artifacts for a Test Drive</h3>



<p>Large Language Models are pretty good at implementing the kinds of things that developers do all day every day because there is plenty of representative data in its training set. To see how good Claude is at doing something a little different, I gave it an off-the-wall example to see how well it adapts. I decided to try <a href="https://claude.site/artifacts/7e7766af-1d3b-487f-b732-eca030da41ef">Pong, with three paddles</a>. I started out with a simple prompt:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>I want to make a variation of Pong, but there are three paddles that move along the edges of a triangle.</p>
</blockquote>



<p>Claude&#8217;s first attempt was&#8230;something:</p>



<figure class="wp-block-image aligncenter size-large"><img width="512" height="344" data-attachment-id="103" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/pong-1-2/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif" data-orig-size="512,344" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pong-1" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=300" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=512" src="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=512" alt="" class="wp-image-103" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif 512w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=150 150w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=300 300w" sizes="(max-width: 512px) 100vw, 512px" /><figcaption class="wp-element-caption">Claude&#8217;s first attempt at creating a three-paddled pong game</figcaption></figure>



<h3 class="wp-block-heading">Iterating based on feedback</h3>



<p>But that&#8217;s okay. I gave Claude some feedback to see if it would fix the problem:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Instead of the paddles rotating, can they move along the edges of the triangle?</p>
</blockquote>



<p>Claude spent about 30 seconds updating the code and I ended up with a quirky but almost playable version:</p>



<figure class="wp-block-image aligncenter size-large"><img width="512" height="344" data-attachment-id="105" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/pong-2/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif" data-orig-size="512,344" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pong-2" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=300" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=512" src="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=512" alt="" class="wp-image-105" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif 512w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=150 150w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=300 300w" sizes="(max-width: 512px) 100vw, 512px" /><figcaption class="wp-element-caption">Claude&#8217;s second attempt is almost playable</figcaption></figure>



<p>It&#8217;s kinda janky, but it&#8217;s getting closer. Honestly, I really love the way the paddles move along with the mouse. It is intuitive and makes it quite simple to control three paddles with one trackpad. The biggest issue is that the paddles are, strangely, facing the wrong direction. So I provided some more feedback:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Can we have the paddles face the same direction as the edges of the triangle?</p>
</blockquote>



<figure class="wp-block-image aligncenter size-large"><img width="512" height="344" data-attachment-id="108" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/pong-3/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif" data-orig-size="512,344" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pong-3" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=300" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=512" src="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=512" alt="" class="wp-image-108" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif 512w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=150 150w, https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=300 300w" sizes="(max-width: 512px) 100vw, 512px" /><figcaption class="wp-element-caption">The third attempt has the right idea but is a bit buggy</figcaption></figure>



<p>You&#8217;ll also notice it is explaining the changes it&#8217;s made in a lot of detail. There are still some issues, like the ball slowing down when the paddles move and the score incrementing by more than 1 when it hits a paddle. I also wanted to introduce a level system so the ball would speed up as you successfully hit it more often. Over a couple more rounds of feedback, I ended up with the version linked below:</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://claude.site/artifacts/7e7766af-1d3b-487f-b732-eca030da41ef"><img loading="lazy" width="887" height="1023" data-attachment-id="96" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/image-2/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/image.png" data-orig-size="1070,1235" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=260" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=887" src="https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=887" alt="" class="wp-image-96" style="width:354px;height:auto" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=887 887w, https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=130 130w, https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=260 260w, https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=768 768w, https://theaboutbox.com/wp-content/uploads/2024/08/image.png 1070w" sizes="(max-width: 887px) 100vw, 887px" /></a><figcaption class="wp-element-caption">Three paddle pong MVP. Click the image to play.</figcaption></figure>



<p>I did not write a single line of code. I described what I wanted, iterated back and forth, and it figured how to control the three paddles with one trackpad and all of the ball bouncing physics, which is made a lot more complicated by having two of the walls at an angle.</p>



<h3 class="wp-block-heading">Where the context ends</h3>



<p>Unfortunately, after I got to that point, after my 14th iteration, Claude kept on introducing bugs. I would get errors and when it fixed the errors it would create new bugs. It&#8217;s a known problem with LLMs that they start to act strangely and slow down as conversations get longer and longer. But I wanted to fix an issue where the paddles do not move on mobile devices, and I wanted to add a button to pause the game.</p>



<p>So, I decided to start with a clean slate, started a new conversation and pasted the data into it:</p>



<figure class="wp-block-image aligncenter size-medium"><img loading="lazy" width="300" height="133" data-attachment-id="121" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/image-4/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png" data-orig-size="1408,628" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=300" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=1024" src="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=300" alt="" class="wp-image-121" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=300 300w, https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=600 600w, https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=150 150w" sizes="(max-width: 300px) 100vw, 300px" /><figcaption class="wp-element-caption">Starting a new chat</figcaption></figure>



<p>Boom! That worked the first time. I chatted back and forth for a few iterations to make some improvements:</p>



<ul class="wp-block-list">
<li>Added a pause button</li>



<li>Increased the speed of the ball at the start of the game</li>



<li>Increased the change of speed as the player levels up</li>
</ul>



<p>I ended up with this &#8220;final&#8221; version:</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://claude.site/artifacts/6b1c2770-f067-4ec7-aa81-ab1421488993"><img loading="lazy" width="842" height="1024" data-attachment-id="125" data-permalink="https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/image-5/" data-orig-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png" data-orig-size="1126,1370" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=247" data-large-file="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=842" src="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=842" alt="" class="wp-image-125" style="width:512px" srcset="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=842 842w, https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=123 123w, https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=247 247w, https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=768 768w, https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png 1126w" sizes="(max-width: 842px) 100vw, 842px" /></a><figcaption class="wp-element-caption">The game you didn&#8217;t know you needed.<br>Click the image to play</figcaption></figure>



<h3 class="wp-block-heading">Conclusion</h3>



<p>Having AI generate code is far from new. We&#8217;ve had that for a few years with ChatGPT and Github Copilot. What is new and powerful is the ability to iterate effortlessly combined with the ability to publish your results. It is early days, so it is best suited for &#8220;single serve&#8221; applications, but this is the first time I&#8217;ve been able create a simple app just by typing what I want in plain English and publish it on the Internet.</p>



<p>Next time, I will probably ask Claude not to explain itself, just write code. The more content that LLMs generate, the more likely they are to introduce a mistake.</p>



<p>I can think of some interesting real-world uses for something like this:</p>



<ul class="wp-block-list">
<li><strong>Interactive data visualizations</strong> &#8211; You can upload spreadsheets or pdf files and ask Claude to visualize data for you.</li>



<li><strong>Interactive wireframes</strong> &#8211; You can upload a drawing or screenshot of a user interface and ask Claude to create a live web-based version.</li>



<li><strong>Single-serve information applications</strong> &#8211; You can upload a document or some other information and create a simple site around it. Or upload your notes and have Claude create an interactive quiz.</li>
</ul>



<p>It is going to be exciting to see where this product, and this style of interactive development goes from here. I can see a world where AI is a pair programmer and I am just giving feedback and direction.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2024/08/31/claude-artifacts-a-deep-dive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">91</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2024/08/dallc2b7e-2024-08-31-14.51.41-a-detailed-image-showing-two-robots-interacting-with-a-video-game.-one-robot-is-sitting-at-a-futuristic-computer-programming-a-game-with-lines-of-cod.webp" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/dallc2b7e-2024-08-31-14.51.41-a-detailed-image-showing-two-robots-interacting-with-a-video-game.-one-robot-is-sitting-at-a-futuristic-computer-programming-a-game-with-lines-of-cod.webp" medium="image">
			<media:title type="html">DALL·E 2024-08-31 14.51.41 - A detailed image showing two robots interacting with a video game. One robot is sitting at a futuristic computer, programming a game with lines of cod</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/pong-1-1.gif?w=512" medium="image" />

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/pong-2.gif?w=512" medium="image" />

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/pong-3.gif?w=512" medium="image" />

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/image.png?w=887" medium="image" />

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/image-2.png?w=300" medium="image" />

		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/08/image-3.png?w=842" medium="image" />
	</item>
		<item>
		<title>Genieous: Part 1 &#8211; Motivation</title>
		<link>https://theaboutbox.com/2024/04/28/genieous-part-1-motivation/</link>
					<comments>https://theaboutbox.com/2024/04/28/genieous-part-1-motivation/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Sun, 28 Apr 2024 17:17:57 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[artificial-intelligence]]></category>
		<category><![CDATA[chatgpt]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=75</guid>

					<description><![CDATA[Last week, a colleague and I released an app: Genieous (App Store link). The concept is pretty simple: if you don&#8217;t know what to make with the food you have in the house, Genieous is a cheeky assistant that helps you create recipes. It&#8217;s a free app; you should download and try it. While we [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Last week, a colleague and I released an app: <a href="https://www.genieous.com">Genieous</a> (<a href="https://apps.apple.com/us/app/genieous/id6478636125">App Store link</a>). The concept is pretty simple: if you don&#8217;t know what to make with the food you have in the house, Genieous is a cheeky assistant that helps you create recipes. It&#8217;s a free app; you should download and try it.</p>



<p>While we hope that the genie can live off of tips and be self-sustaining, I had another motivation: AI is going to change the way we process information. Those who wish to wield AI as a tool should seek to understand it. And, the best way to understand anything is through real-world experience. Also, I frequently stare at the refrigerator wondering what to make for dinner, and I need inspiration.</p>



<p>I quickly realized that every benefit and challenge that exists in the world at large for AI also exists in this tiny little app, and it is a low-stakes way to explore ways of dealing with these issues. I&#8217;ll discuss all of these in more detail in future articles. These are some of the challenges that we needed to think through, even with this small-scale app:</p>



<h1 class="wp-block-heading">Strategy</h1>



<p>If you are thinking about incorporating AI into your product or business, one of the first questions you need to answer is: where will you get the most leverage out of using AI? With generative AI, especially large language models, you need to account for it giving wrong answers much of the time. </p>



<p>One way to think about this is in terms of <em>convexity</em>. The best framing I have found from this is from Nassim Nicholas Taleb who, in <a href="https://fooledbyrandomness.com/ConvexityScience.pdf">Understanding is a Poor Substitute for Convexity</a>, defines it as &#8220;<em>asymmetry between the gains (as they need to be large) and the errors (small or harmless)</em>&#8220;.</p>



<p>The domains that have the property that the benefit of being right far outweighs the cost of being wrong are the most appropriate places to deploy generative AI. In the case of <a href="https://www.genieous.com">Genieous</a>, cooking is naturally a trial-and-error process. If we can give someone a lot of ideas that they can take or leave as they see fit, the benefit (a great meal you can enjoy over and over again and impress people) far outweighs the drawbacks (a bad meal that you can throw away and order takeout instead).</p>



<h1 class="wp-block-heading">User Experience</h1>



<p>How do you take something that is very complex and open-ended and put it into a user-frendly product? How do you make the experience seamless and not feel like you are interacting with a chatbot? I really wanted to solve the problem of &#8220;what to make with the food I have&#8221; with the least amount of friction possible. I also wanted users to feel like they are focused on the problem at hand, rather than playing with a large language model.</p>



<h1 class="wp-block-heading">Model Selection</h1>



<p>There are thousands of different language models: ones that are small enough that can be run on-device to the top-of-the-line models from OpenAI, Google and Anthropic. They all have different capabilities and pricing models. Which one is the best for this application, assuming steadily growing usage? There are chat models and instruction tuned models, is one better than another?</p>



<h1 class="wp-block-heading">Prompt Engineering</h1>



<p>Language models can be very sensitive to how they are asked a question, and prompting techniques vary wildly across models. How should we ask an AI to generate recipes with a set list of ingredients. We want to get good results, but we also want it to be easy for the computer to interpret the response. And, since many vendors charge per input and output token, we want to be efficient in how we ask and what we ask for. Often, the &#8216;better&#8217; a model gets, the &#8216;slower&#8217; the generation can be.</p>



<h1 class="wp-block-heading">Evaluation</h1>



<p>I&#8217;ve used the word &#8216;better&#8217; a lot without saying anything about what it means to be &#8216;better&#8217;. It is impossible to make informed decisions about what model to use and how to interact with it without some way of evaluating how good the answers you are getting are. How will you know if changes are better or worse? What does it mean for an recipe to be good? Is it more important for the model to generate interesting and creative recipes, even if it adds an extra ingredient or two? Should the model generate a different list of recipes every time when given the same ingredients? If two different models generate the same recipe, which one does a better job?</p>



<p>In the very beginning, you&#8217;ll probably base a lot of this on &#8216;vibes&#8217;. But you&#8217;ll want to keep track of what models, prompts and settings result in the subjectively best output. As a product gets more mature, you&#8217;ll want to augment that with some sort of rubric for scoring model performance.</p>



<p>Evaluating model performance requires data, and you will want to start collecting as much as you can as early in the project as possible.</p>



<h1 class="wp-block-heading">Model Improvements</h1>



<p>New models come out all of the time and new research is coming out on techniques to make generation better. Providing context, changing parameters like model temperature and fine-tuning are all techniques that can be used to improve model performance.</p>



<h1 class="wp-block-heading">Alignment</h1>



<p>Alignment refers to the process of steering an AI towards &#8220;<em>a person&#8217;s or group&#8217;s intended goals, preferences or ethical principles.</em>&#8221; [<a href="https://en.wikipedia.org/wiki/AI_alignment">Wikipedia</a>] Even a lowly recipe creation app touches on alignment. If a person has allergies, health concerns, or dietary restrictions, an aligned recipe generation AI will provide recipes that takes their needs into account.</p>



<p>But what if someone intentionally provides a bunch of ingredients that are not edible? What is the right thing to do? Should the AI refuse to generate recipes? Should it provide a warning and do it anyways? Should it happily play along with the human making the request? These are issues anyone deploying AI needs to grapple with.</p>



<h1 class="wp-block-heading">Hallucinations</h1>



<p>Hallucinations refer to the tendency of large language models to generate text that is not grounded in reality. Everyone who has used ChatGPT has noticed sometimes it will just make things up. In <a href="https://blog.apiad.net/p/reliable-ai-is-harder-than-you-think">Why Reliable AI Requires a Paradigm Shift</a>, Alejandro Morfis writes:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Rather than storing explicit factual claims, LLMs implicitly encode information as statistical correlations between words and phrases. This means the models <strong>do not have a clear, well-defined understanding of what is true or false</strong>. They can just generate plausibly sounding text.</p>
</blockquote>



<p>This is a classic <a href="https://genius.com/11585921">it&#8217;s even worse that it appears</a> moment. <em>Everything</em> that large language models generate is a hallucination, luckily the statistically probable answer is quite often a good one.</p>



<h1 class="wp-block-heading">Toxicity</h1>



<p>Toxicity refers to the tendency of models to generate offensive content. Researchers struggle to refine this definition further, so it is often a &#8220;I know it when I see it&#8221; thing. A <a href="https://arxiv.org/pdf/2310.02357">recent paper on this subject</a> defines it as &#8220;<em>stress by contradiction of accepted morality and norms of interaction with respect to the situational and verbal context of interaction.</em>&#8221; A rich ethical debate can be had around this concept.</p>



<p>Even if there were objective criteria to define toxicity, it is impossible to eliminate. Again from <a href="https://blog.apiad.net/p/reliable-ai-is-harder-than-you-think">Why Reliable AI Requires a Paradigm Shift</a>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Recent research suggests that if there is a sentence that can be generated at all, no matter how low its base probability, then there is a prompt that will generate it with almost 100% certainty</p>
</blockquote>



<p>That means, if you allow free input, there is no way in practice to prevent a language model from producing toxic output.</p>



<p>In the case of <a href="https://www.genieous.com">Genieous</a>, we can also take this more literally: if the ingredients or the way they are handled would be toxic, then this is a problem. Some ingredients are always toxic, and there are others that are dangerous if not handled properly. (Chicken is one of the most under-rated dangerous ingredients based on food poisoning incidents.)</p>



<h1 class="wp-block-heading">Bias</h1>



<p><a href="https://aclanthology.org/2022.findings-aacl.24.pdf">On Measures of Biases and Harms in NLP</a> defines bias as a &#8220;<em>skew that produces a type of harm towards different social groups.</em>&#8221; Much of the time, bias happens because the data that a model is trained on is skewed towards particular groups, or is missing data representing other groups. That causes language models to encode biases in its weights. It is impossible to <em>eliminate</em> bias, but being able to measure it, understand it and improve is a worthy pursuit.</p>



<p>The harms from a lowly recipe app from biases is limited, but we want to please every palate, and drawing from the entire world&#8217;s culinary wisdom will produce better outcomes for everyone.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2024/04/28/genieous-part-1-motivation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">75</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2024/04/genie-kitchen-square.jpeg" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2024/04/genie-kitchen-square.jpeg" medium="image">
			<media:title type="html">genie-kitchen-square</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Is every billable hour &#8216;amateur hour&#8217;?</title>
		<link>https://theaboutbox.com/2023/09/07/is-every-billable-hour-amateur-hour/</link>
					<comments>https://theaboutbox.com/2023/09/07/is-every-billable-hour-amateur-hour/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Thu, 07 Sep 2023 18:54:24 +0000</pubDate>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Consulting]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=54</guid>

					<description><![CDATA[I read a great post on the benefits of FFP projects for consultants. It's not always the right choice, but it puts skin in the game to understand risks, set clear expectations, build repeatability and strive for mutual benefit.]]></description>
										<content:encoded><![CDATA[
<p>I have been thinking all morning about <a href="https://daedtech.com/every-billable-hour-is-amateur-hour">Every Billable Hour is Amateur Hour</a>. Erik argues compellingly against the pitfalls of freelancers building their ventures on Time and Materials (T&amp;M) projects. You should read the whole thing, but to summarize:</p>



<ul class="wp-block-list">
<li>T&amp;M can commoditize the service you offer, leading to downward rate pressure.</li>



<li>While T&amp;M promotes grinding, Firm Fixed Price (FFP) drives the balance of maximum value for minimum time.</li>



<li>Companies often regard T&amp;M contractors as employees, sans the paperwork.</li>
</ul>



<h2 class="wp-block-heading">Can you scale a T&amp;M consulting practice?</h2>



<p>It is possible to achieve scale with hourly billing: hire employees or subcontractors and charge enough margin to clients to cover bench time and administrative overhead. This is what most professional services firms do. It can be lucrative but it scales the perverse incentives too. The most successful tech consulting practices that take this approach tend to find a niche and provide staff-augmentation. One of my colleagues ran a practice sourcing security-cleared network engineers and IT operations people for classified DoD projects. The niche helps fight the commoditization and the business value to the client is in the firm&#8217;s ability to network and find difficult-to-source candidates.</p>



<p>The downsides also scale with the size of the practice. Once you hire people to provide services, you need to keep them utilized in order to make money. If you are a practice lead it is almost certain that a big part of your bonus is tied to hitting a utilization number for the people in your practice. The best way to hit utilization numbers is to optimize for projects where your people will grind the highest number of hours for the highest rate possible. Chances are these projects will not have enough in common to have any real repeatability. A consistent influx of projects and timely payments from clients is essential; otherwise, the system&#8217;s fragility becomes apparent, leading to erratic hiring and layoffs.</p>



<h2 class="wp-block-heading">Are there hybrid models?</h2>



<p>It is also not an &#8216;all-or-nothing&#8217; proposition. My wife&#8217;s public relations firm works on a T&amp;M basis with some clients and on a per-deliverable basis with others, having a price schedule for white papers, articles, press releases, social media posts, etc. In the IT world, it is common to build an application on a T&amp;M model and provide ongoing sustainment / managed services on a FFP basis.</p>



<h2 class="wp-block-heading">Pitfalls of Firm Fixed Price (FFP) Projects</h2>



<p>I completely agree with Erik&#8217;s view that FFP makes us have skin in the game when defining scope and correctly focuses us on providing the most value in the smallest amount of time. It also encourages us to develop unique IP and solutions that develop a unique edge. That said, FFP is scary. I could write a book on mistakes I&#8217;ve made throughout my career on negotiating and executing firm-fixed price projects, but here are some highlights:</p>



<h3 class="wp-block-heading">Don&#8217;t have 100% of the payment due upon acceptance</h3>



<p>Typically FFP projects define a total price with a series of milestone payments. There is an art to defining the milestones so that you can have healthy cash flow and customers feel comfortable, but never have all the money due at the end. If your customer pays you early in the project as promised you will probably not have issues at the end. When possible, it is nice to have a small &#8216;get started&#8217; payment to kick off the project, ensuring that everyone has skin in the game.</p>



<h3 class="wp-block-heading">Have some guard rails for time</h3>



<p>There should be some upper-bound on time. Every project has unknowns that affect the schedule. The upper bound should be high enough the client feels like it is really fixed-price but provide some leverage to change the scope if large enough unknowns are discovered.</p>



<h3 class="wp-block-heading">Be explicit with assumptions</h3>



<p>Do you require physical access to a facility? Software licenses? Do you require certain stakeholders to provide you information or feedback within a reasonable amount of time? Are there any other things that need to be in place in order to be successful? This is the time to think clearly about the risks that affect your ability to deliver value in a reasonable amount of time, discuss them with the client and agree on them.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2023/09/07/is-every-billable-hour-amateur-hour/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">54</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2023/09/dallc2b7e-2023-09-07-12.43.01-digital-art-of-a-consultant-walking-on-a-tightrope-over-a-canyon-between-two-lush-landscapes.-at-the-bottom-of-the-canyon-are-the-circles-of-hell-from.png" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2023/09/dallc2b7e-2023-09-07-12.43.01-digital-art-of-a-consultant-walking-on-a-tightrope-over-a-canyon-between-two-lush-landscapes.-at-the-bottom-of-the-canyon-are-the-circles-of-hell-from.png" medium="image">
			<media:title type="html">DALL·E 2023-09-07 12.43.01 - Digital art of a consultant walking on a tightrope over a canyon between two lush landscapes. At the bottom of the canyon are the circles of hell from</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Under-rated capabilities of Large Language Models: Introduction</title>
		<link>https://theaboutbox.com/2023/04/28/under-rated-capabilities-of-large-language-models-introduction/</link>
					<comments>https://theaboutbox.com/2023/04/28/under-rated-capabilities-of-large-language-models-introduction/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Sat, 29 Apr 2023 02:29:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=46</guid>

					<description><![CDATA[There is a lot of hype around AI and language models right now, but if we dig deep, there are some ways they perform surprisingly well.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Background</h2>



<p>Large Language Models have been with us for a couple of years. OpenAI released the <a href="https://en.wikipedia.org/wiki/GPT-3">GPT-3 model</a> on June 11, 2020. It generated a lot of buzz in technical circles, but the model was not packaged in a way that was usable by the masses. That changed on November 30, 2022 when OpenAI released <a href="https://chat.openai.com">ChatGPT</a>, running an <a href="https://en.wikipedia.org/wiki/ChatGPT">improved version of the GPT-3 Model</a> (GPT 3.5) and bringing AI / large language model capabilities to the masses.</p>



<p>ChatGPT is set up with a simple message-based interface, like iMessage or WhatsApp, that makes it easy for users to send text to the model and for the model to generate a response. It immediately showed promise writing essays, generating summaries, answering questions and performing basic computer programming tasks. Pretty quickly users realized that these models generate plausible text that is mostly, but not completely correct.</p>



<p>On March 14, 2023, OpenAI released GPT-4, a major upgrade from GPT-3. It accepts much longer input for questions, can do real math and analysis and it is much less likely to lie in its responses to a user.</p>



<h2 class="wp-block-heading">From Hope to Hype back to Hope again</h2>



<p>GPT-4 makes one heck of a first impression. It can take dozens of pages of context and extract information instantly. It can summarize and reason. It can generate websites and simple apps from a prompt and then incorporate suggestions. It came out 15 weeks after GPT 3.5. My feeling was, if this is the pace of progress now, the world is suddenly a different place than it was the day before.</p>



<p>After some time playing around with it, it still makes things up, often enough that it&#8217;s not possible to blindly trust it. It&#8217;s not going to turn every industry around overnight. It also seems like we are not careening towards a singularity any time soon. The industry&#8217;s focus is on <a href="https://www.datanami.com/2023/04/25/sam-altman-debunks-gpt-5-rumors-shifts-focus-to-improving-existing-models/">understanding and optimizing capabilities and making models more focused or reliable</a>.</p>



<p>Meanwhile, I&#8217;ve found the GPT models to be a great productivity boost for the parts of my work that are tedious, and I have been poking around the edges trying to find unexpected places where these models perform well because that&#8217;s where there will be unexpected advances. For example, large language models can gather information, formulate plans and guide their execution in a number of settings, <a href="https://arxiv.org/pdf/2304.05332.pdf">such as chemical engineering</a>. With some teasing, the<a href="https://arxiv.org/pdf/2205.11916.pdf">y can perform well at reasoning tasks</a></p>



<p>Stay tuned, we&#8217;ll dig into these and more, providing examples along the way.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2023/04/28/under-rated-capabilities-of-large-language-models-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2023/04/dallc2b7e-2023-04-28-16.17.50-an-abstract-oil-painting-that-metaphorically-points-to-the-under-rated-capabilities-of-large-language-models-like-logical-reasoning-goal-planning-ex.png" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2023/04/dallc2b7e-2023-04-28-16.17.50-an-abstract-oil-painting-that-metaphorically-points-to-the-under-rated-capabilities-of-large-language-models-like-logical-reasoning-goal-planning-ex.png" medium="image">
			<media:title type="html">DALL·E 2023-04-28 16.17.50 - an abstract oil painting that metaphorically points to the under-rated capabilities of large language models like logical reasoning, goal planning, ex</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Pyenv, Pipenv, Dotenv, oh-my-zsh challenges</title>
		<link>https://theaboutbox.com/2022/10/26/pyenv-pipenv-dotenv-oh-my-zsh-challenges/</link>
					<comments>https://theaboutbox.com/2022/10/26/pyenv-pipenv-dotenv-oh-my-zsh-challenges/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Wed, 26 Oct 2022 15:41:59 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=32</guid>

					<description><![CDATA[Filing this one for: I hope I find this post when I have this problem again. Like many developers, I have a need to juggle multiple python versions: Python 3.8 to run in AWS Lambda; Anaconda for machine learning models; Latest stable version for everyday development. It seems like these days, the multi-python toolchain looks [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Filing this one for: I hope I find this post when I have this problem again.</p>



<p>Like many developers, I have a need to juggle multiple python versions: Python 3.8 to run in AWS Lambda; Anaconda for machine learning models; Latest stable version for everyday development.</p>



<p>It seems like these days, the multi-python toolchain looks like this:</p>



<ul class="wp-block-list">
<li><code><a href="https://github.com/pyenv/pyenv">pyenv</a></code>  to install other python versions, along with <code>pyenv-virtualenv</code> to better support <code>conda</code>.</li>



<li><code><a href="https://docs.python.org/3/library/venv.html">venv</a></code>, generally managed by higher-level tools like <a href="https://python-poetry.org">Poetry</a>, <a href="https://pipenv.pypa.io/en/latest/">Pipenv</a> or <a href="https://github.com/pypa/hatch">Hatch</a>.</li>



<li><a href="https://pypi.org/project/python-dotenv/"><code>Dotenv</code></a> to keep track of environment variables that need to be provided to 12-factor applications.</li>
</ul>



<p>I am also a fan of <code><a href="https://github.com/ohmyzsh/ohmyzsh">oh-my-zsh</a></code> to automate some basic tasks like:</p>



<ul class="wp-block-list">
<li>Showing Git branch and commit status in the terminal</li>



<li>Activating a project&#8217;s virtual environment</li>



<li>Adding the variables in <code>.env</code> to the current environment</li>
</ul>



<p>But when I tried to get this all working on my new Mac, I could not activate <em>any</em> virtual environment. Ultimately I discovered it was because the shell would prompt me to source <code>.env</code>, and that prompt somehow messed up the activation process via the virtual environment. There seem to be two solutions:</p>



<ul class="wp-block-list">
<li>Tell <code>oh-my-zsh</code> to always source <code>.env</code>. This breaks the virtual environment the first time, so you need to <code>exit</code> and then <code>cd</code> back to the directory. Or,</li>



<li>Don&#8217;t use the <code>.env</code> plugin.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2022/10/26/pyenv-pipenv-dotenv-oh-my-zsh-challenges/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2022/10/image.png" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2022/10/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Self-Serving First Post</title>
		<link>https://theaboutbox.com/2022/10/07/self-serving-first-post/</link>
					<comments>https://theaboutbox.com/2022/10/07/self-serving-first-post/#respond</comments>
		
		<dc:creator><![CDATA[Cameron]]></dc:creator>
		<pubDate>Fri, 07 Oct 2022 16:45:08 +0000</pubDate>
				<category><![CDATA[Rants]]></category>
		<guid isPermaLink="false">http://theaboutbox.com/?p=29</guid>

					<description><![CDATA[After a long hiatus from screaming into the ether, I warm up my vocal chords again to shout into the void. Perhaps the void will shout back. Perhaps two years from now when I cannot figure out a basic problem, I will concoct some Google searches that will lead me back here to learn that [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>After a long hiatus from screaming into the ether, I warm up my vocal chords again to shout into the void. Perhaps the void will shout back. Perhaps two years from now when I cannot figure out a basic problem, I will concoct some Google searches that will lead me back here to learn that former-me solved this problem after way-too-much effort.</p>



<p>But now I find myself confronted with messy problems, and writing about them helps to give them some form and structure, and that’s enough, for now.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://theaboutbox.com/2022/10/07/self-serving-first-post/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">29</post-id>
		<media:thumbnail url="https://theaboutbox.com/wp-content/uploads/2022/10/dallc2b7e-2022-10-07-10.17.11-a-man-screaming-into-the-void-dystopian-cyberpunk-scene-digital-art.png" />
		<media:content url="https://theaboutbox.com/wp-content/uploads/2022/10/dallc2b7e-2022-10-07-10.17.11-a-man-screaming-into-the-void-dystopian-cyberpunk-scene-digital-art.png" medium="image">
			<media:title type="html">DALL·E 2022-10-07 10.17.11 - a man screaming into the void, dystopian cyberpunk scene, digital art</media:title>
		</media:content>

		<media:content url="https://2.gravatar.com/avatar/e8adb8c6b119b680a30f44dc16d1ee775c8785d28dcc7fb551af05afd75f543e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">camerooni2000</media:title>
		</media:content>
	</item>
	</channel>
</rss>
