<?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/"
	>

<channel>
	<title>Software &#8211; About Things | A Hans Scharler Blog</title>
	<atom:link href="https://nothans.com/tag/software/feed" rel="self" type="application/rss+xml" />
	<link>https://nothans.com</link>
	<description>Life, Comedy, Games, Tech, Marketing, and Community</description>
	<lastBuildDate>Wed, 26 Mar 2025 19:54:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/nothans.com/wp-content/uploads/2023/02/cropped-settings.png?fit=32%2C32&#038;ssl=1</url>
	<title>Software &#8211; About Things | A Hans Scharler Blog</title>
	<link>https://nothans.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">114568856</site>	<item>
		<title>Empathic AI Prompting for Programmers: Treating Your AI as a Coding Buddy</title>
		<link>https://nothans.com/empathic-ai-prompting-for-programmers-treating-your-ai-as-a-coding-buddy</link>
					<comments>https://nothans.com/empathic-ai-prompting-for-programmers-treating-your-ai-as-a-coding-buddy#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 19:54:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5089</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>I want to share something that I have that has helped me shift my viewpoint when I use AI tools to program. I am calling it empathic AI prompting. This is about treating your AI assistant (GitHub Copilot or AI models via Cursor or Windsurf) as a collaborator rather than a code vending machine. It&#8217;s a simple mindset shift that has made my interactions with AI both more productive and more enjoyable. I have also been using it to talk to colleagues and friends. I know people who have cut off ChatGPT based on their experience in January 2023. A lot has changed since then. Others tell me AI is bad at (insert whatever it may be)&#8230; I was telling them to think of it as AI is bad at that <em>right now</em>.</p>



<p>Empathic AI prompting is all about understanding and empathizing with your AI&#8217;s responses. Instead of getting frustrated when the AI gives a suboptimal answer, imagine <em>why</em> it might have produced that output. If you’ve ever done pair programming or mentored a junior developer, the idea is similar: when they make a mistake or an odd suggestion, you don’t just yell “wrong!” and walk away. You try to see what assumptions or misunderstandings led to that result, and then you guide them. With AI, you should do the same – treat it like a well-intentioned colleague who can email HR. </p>



<p>Why care? This mindset turns AI into a true coding partner and helps you understand more about programming. It might sound counterintuitive at first, but I am betting that this is what the future of programming looks like. It will be a required skill.</p>



<p>An article over at <a href="https://huggingface.co/blog/luigi12345/iterative-prompting#:~:text=Iterative%20prompting%20is%20more%20than,ready">HuggingFace</a> triggered me into this new way of thinking&#8230; Luigi says, “iterative prompting is a methodology for transforming AI into a coding partner&#8230; The key is to think of AI as a collaborator – guide it, refine its responses, and iterate until the desired results are achieved.” Another programmer, Steve Yegge from <a href="https://sourcegraph.com/blog/chat-oriented-programming-in-action#:~:text=With%20the%20advent%20of%20LLMs%2C,of%20the%20software%20creation%20lifecycle">Sourcegraph</a> even gave it a new name: <strong>CHOP (Chat-Oriented Programming)</strong> to describe this new style of coding “via iterative prompt refinement”.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="500" height="500" data-attachment-id="5091" data-permalink="https://nothans.com/empathic-ai-prompting-for-programmers-treating-your-ai-as-a-coding-buddy/image-7-21" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?fit=500%2C500&amp;ssl=1" data-orig-size="500,500" data-comments-opened="0" 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="Ted Lasso meme for Empathic AI Prompting for Programmers:" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?fit=500%2C500&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?resize=500%2C500&#038;ssl=1" alt="" class="wp-image-5091" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?w=500&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-7.png?resize=150%2C150&amp;ssl=1 150w" sizes="(max-width: 500px) 100vw, 500px" /></figure>
</div>


<p>Here are some of my tips to build this skill:</p>



<ul class="wp-block-list">
<li><strong>Be curious, not critical:</strong> If the AI’s output is off, ask yourself <em>why</em> it might have thought that was okay.</li>



<li><strong>Look for clues in the response:</strong> Often the wrong answer reveals how the AI interpreted your prompt. Maybe your question was ambiguous or missing detail.</li>



<li><strong>Refine and iterate:</strong> Using those insights, clarify your prompt or provide more context, then try again.</li>



<li><strong>Collaborate step-by-step:</strong> Just like you’d work through a problem with a human, iteratively build the solution with the AI, rather than expecting perfect results first try.</li>
</ul>



<p>This approach not only leads to better results, but also turns prompting into a learning experience. I often find that by analyzing an AI’s mistake, I understand the problem better myself! It’s a two-way street of learning.</p>



<p>Recently, I was working on a content-based recommendation feature for my blog. Whenever I publish a new blog post, I want to automatically recommend a few relevant forum posts from our developer community forums. Rather than writing the entire recommendation engine from scratch (with vectors, TF-IDF, and maybe cosine similarity), I decided to build this with Windsurf and its AI model&#8217;s help. Both the forum posts and blog posts are textua,l and a large language model might do a decent job of understanding which ones are related.</p>



<p>My first prompt to Claude Sonnet 3.5: <em>My new blog post is about building content-based recommenders in Python, and I have a list of forum post titles. The task:<strong> </strong>pick the top 3 forum threads that would be most relevant to someone reading my blog post.</em></p>


<h3 class="wp-block-heading" id="the-initial-prompt-and-a-surprise-in-the-output">The Initial Prompt (and a Surprise in the Output)</h3>


<p>Here&#8217;s the initial code and prompt I gave to the AI assistant (in a Python-like pseudo-code format for illustration):</p>



<pre class="wp-block-code"><code>blog_post = """\
Building a Content-Based Recommendation System in Python.
In this post, we explore how to recommend relevant content using textual similarity.
We use techniques like TF-IDF vectorization and cosine similarity to find related posts.
"""

forum_posts = &#91;
    "How to implement content-based recommender with TF-IDF",
    "Collaborative filtering vs content-based: pros and cons",
    "Python 3.9 release - new features and improvements",
    "Best laptop for programming in 2025",
    "Calculating cosine similarity for text matching in Python"
]

# Initial prompt to AI
prompt = f"""
Given the new blog post:\n\"\"\"\n{blog_post}\n\"\"\"\n
and the following forum post titles:\n- {forum_posts&#91;0]}\n- {forum_posts&#91;1]}\n- {forum_posts&#91;2]}\n- {forum_posts&#91;3]}\n- {forum_posts&#91;4]}\n
Please list the top 3 forum posts that are most relevant to the blog post's content.
"""
response = call_ai_model(prompt)  # Hypothetical function to get AI result
print(response)
</code></pre>



<p>When I ran this, the AI <em>did</em> return three forum posts, but the result made me raise an eyebrow:</p>



<pre class="wp-block-code"><code>1. **Python 3.9 release - new features and improvements** – (Talk about Python updates)
2. **Collaborative filtering vs content-based: pros and cons** – (Discussion comparing recommendation approaches)
3. **How to implement content-based recommender with TF-IDF** – (Guide on content-based recommendations)
</code></pre>



<p>At first glance, the AI’s answer isn’t horrible – it found two very relevant posts (the ones about recommender systems). But it also picked <strong>“Python 3.9 release – new features”</strong> as the top recommendation, which is clearly <em>off-topic</em>. A blog reader interested in content-based recommendations probably doesn’t care about the general Python 3.9 release notes. So what happened?</p>


<h4 class="wp-block-heading" id="empathic-analysis-of-the-ais-output">Empathic Analysis of the AI’s Output</h4>


<p>Instead of cursing my AI assistant for being “dumb,” I put on my Ted Lasso hat or maybe mustache. I asked myself: <em>Why might the AI have thought the Python 3.9 forum post was relevant?</em></p>



<p>After a moment, it clicked: the AI probably latched onto the keyword “Python” in both the blog and that forum title. My prompt didn’t stress <em>what</em> aspect of the content to match on, so the model might have defaulted to some simplistic notion of relevance, like overlapping keywords. The blog post text mentions “Python” (since the tutorial is in Python), and the forum post about Python 3.9 obviously mentions “Python” too – bingo, a naive content match! Meanwhile, the forum post about “Calculating cosine similarity for text matching” didn’t explicitly scream “recommender system” to the model, so it got ignored in favor of the more superficially similar Python thread.</p>



<p>In other words, the AI wasn’t <em>trying</em> to be obtuse; it was following my instructions as best it could. The mistake was actually <em>understandable given the prompt</em>. I realized I needed to clarify what “relevant” means in this context. This is the essence of empathic prompting: I learned something about how the AI interpreted my request, and now I can adjust my approach to guide it better.</p>


<h3 class="wp-block-heading" id="refining-the-prompt-for-a-better-result">Refining the Prompt for a Better Result</h3>


<p>I wrote a new prompt. I wanted to tell the AI to focus on topical relevance (i.e., content about recommendation systems), and to ignore posts that are only tangentially related (like generic Python news). I also decided to explicitly mention the technique <strong>cosine similarity</strong> to nudge it toward that forum post it ignored. Essentially, I gave the AI a bit more context and a gentle steer in the right direction.</p>



<p>Here&#8217;s the refined prompt and the code:</p>



<pre class="wp-block-code"><code># Refined prompt with more guidance
refined_prompt = f"""
We have a blog post about building a content-based recommendation system (using TF-IDF and cosine similarity in Python).
The blog post is about recommending relevant content based on text similarity.

Consider the following forum post titles:
- {forum_posts&#91;0]}
- {forum_posts&#91;1]}
- {forum_posts&#91;2]}
- {forum_posts&#91;3]}
- {forum_posts&#91;4]}

Now, **pick the top 3 forum posts that are most relevant to the blog post's topic (content-based recommendations)**.
Focus on posts about recommendation systems or text similarity (TF-IDF, cosine similarity), *not* general Python news or unrelated topics.
"""
response = call_ai_model(refined_prompt)
print(response)
</code></pre>



<p>And the AI’s new response:</p>



<pre class="wp-block-code"><code>1. **How to implement content-based recommender with TF-IDF** – A forum thread directly about content-based recommendation using TF-IDF, which is exactly the technique discussed in the blog.
2. **Collaborative filtering vs content-based: pros and cons** – A discussion comparing content-based methods with collaborative filtering, which complements the blog post's topic.
3. **Calculating cosine similarity for text matching in Python** – A thread about cosine similarity (a core part of content-based recommendations), very relevant to the blog post.
</code></pre>



<p>The irrelevant Python 3.9 post is gone, replaced by the cosine similarity thread that we actually want. Notice how I didn&#8217;t tell the AI explicitly which ones to choose; I simply guided it by clarifying what &#8220;relevant&#8221; really means here. The AI did the rest on its own once it understood my intentions better.</p>



<p>A little empathy went a long way: by imagining what the AI was thinking before and adjusting my wording, I got a much better result. In a way, it felt like I <strong>debugged my prompt</strong> by examining the AI&#8217;s &#8220;mistake&#8221; and then fixing the <em>cause</em> of that mistake.</p>


<h2 class="wp-block-heading" id="let-me-try-explaining-this-again">Let Me Try Explaining This Again</h2>


<ul class="wp-block-list">
<li><strong>Think of the AI as a teammate.</strong> It’s not a perfect genius that will always get everything right, nor is it a dumb tool to be dismissed when it errs. Like any human collaborator, it has its own way of “thinking” (albeit a very alien, statistical one!). Engage with it, guide it, and be patient when it needs a second try. As I reminded myself, <em>treat AI-generated code or answers as you would a human junior developer&#8217;s output.</em> You’d review it, figure out reasoning, and help improve it – do the same with the AI output.</li>



<li><strong>Use mistakes as insights.</strong> When the AI goes off track, don’t just reject the output – inspect it. Is there a pattern to the misunderstanding? Maybe <strong>your question was ambiguous</strong> or assumed knowledge the AI didn’t have. In our case, “relevant” was too vague without context. Often, an AI’s “mistake” is really a mirror held up to our prompt: it reflects how our request could be interpreted. This is incredibly useful for honing our own communication and problem decomposition skills.</li>



<li><strong>Iterate and refine.</strong> The first answer is rarely the final answer. Professional developers know that software design is an iterative process – turns out, prompt design is iterative too. You might start with a rough prompt, see what the AI does, then refine the prompt multiple times. This iterative loop is at the heart of chat-oriented programming (CHOP) and effective prompt engineering. It’s not cheating or a failure to redo the prompt; it’s part of the workflow. Each iteration is a chance to incorporate what you learned from the last output.</li>



<li><strong>Keep a casual, curious mindset.</strong> One thing I enjoy about working with an AI is that I can think out loud. If the AI says something weird, I can literally ask it “why did you do that?” or I can just introspect and adjust. Treating it like a game or puzzle is a bit of fun – “hmm, the AI misunderstood me, how can I say this differently?” Maintaining that curiosity (and even humor) makes the process less frustrating. Remember, the AI has a lot more patience than we do and doesn’t mind if you rephrase the question five times before you get it right</li>
</ul>



<p>Empathic prompting is a skill that takes time to develop. You have to consistently reset your expectations as models get better and IDEs improve, but it pays off.</p>



<p>Articles and Videos that you need to read/watch, or AI summarize:</p>



<ul class="wp-block-list">
<li><a href="https://medium.com/@rajanikethreddy/the-right-way-to-use-ai-for-coding-and-how-it-transformed-my-workflow-75eed29526f4">The Right Way to Use AI for Coding (And How It Transformed My Workflow)</a></li>



<li><a href="https://sourcegraph.com/blog/chat-oriented-programming-in-action#:~:text=With%20the%20advent%20of%20LLMs%2C,of%20the%20software%20creation%20lifecycle">Chat-oriented programming (CHOP) in action</a></li>



<li><a href="https://huggingface.co/blog/luigi12345/iterative-prompting#:~:text=Iterative%20prompting%20is%20more%20than,ready" data-type="link" data-id="https://huggingface.co/blog/luigi12345/iterative-prompting#:~:text=Iterative%20prompting%20is%20more%20than,ready">Mastering Iterative Prompting for Optimized AI Code Generation</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/empathic-ai-prompting-for-programmers-treating-your-ai-as-a-coding-buddy/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5089</post-id>	</item>
		<item>
		<title>[TIL] How to Use CSS Custom Properties (or CSS Variables)</title>
		<link>https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables</link>
					<comments>https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Mon, 07 Oct 2024 16:54:31 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cursor]]></category>
		<category><![CDATA[web applications]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4825</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>I have been working on an <a href="https://github.com/nothans/if">interactive fiction web app</a> to explore storytelling with my son. I am always learning when building web apps&#8230; And, if I am not careful, I will stick to my old ways. In this latest work, I wanted to dark theme the Infinite IF app, which required many adjustments to my CSS stylesheets. There has to be a better way! I decided to stop and research what I was doing. I discovered CSS Custom Properties (also known as CSS variables)! I should have known about these from my work before, but I have been using Bootstrap or other frameworks that take care of many things behind the scenes. With my latest app work, I have been focused on using pure JavaScript and CSS.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://github.com/nothans/if"><img data-recalc-dims="1" decoding="async" width="629" height="501" data-attachment-id="4826" data-permalink="https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables/image-3-24" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?fit=629%2C501&amp;ssl=1" data-orig-size="629,501" data-comments-opened="0" 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="Infinite IF | Interactive Fiction App Powered by AI" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?fit=629%2C501&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?resize=629%2C501&#038;ssl=1" alt="" class="wp-image-4826" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?w=629&amp;ssl=1 629w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?resize=300%2C240&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-3.png?resize=80%2C64&amp;ssl=1 80w" sizes="(max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Dark Theme with CSS Variables for <a href="https://nothans.com/if/">Infinite IF | Interactive Fiction App</a></figcaption></figure>
</div>

<h2 class="wp-block-heading" id="how-to-use-css-custom-properties">How to Use CSS Custom Properties</h2>


<p>Using CSS variables starts with defining them. This is usually done within the <code>:root</code> pseudo-class, meaning the variables are available globally across your HTML document.</p>



<pre class="wp-block-code"><code>:root {
    --primary-color: #4CAF50;
    --secondary-color: #ff6347;
}</code></pre>



<p>Here, <code>--primary-color</code> and <code>--secondary-color</code> are custom properties holding color values that you can use throughout your CSS. Once defined, you can use these variables anywhere in your stylesheets by referencing them with the <code>var()</code> function.</p>



<pre class="wp-block-code"><code>body {
    background-color: var(--primary-color);
    color: var(--secondary-color);
}</code></pre>



<p>If you are not catching it&#8230; Your style code only needs to reference the color variables, and you only have to change the color values in one place!</p>


<h2 class="wp-block-heading" id="what-are-all-of-the-css-variables-what-are-the-limitations">What are all of the CSS Variables? What are the limitations?</h2>


<p>CSS variables can hold almost any value you typically write directly into your CSS rules. This flexibility allows for powerful theming and reusability across your stylesheets. The primary limitation is that CSS variables cannot store CSS selectors or entire CSS rules; they are meant for values only.</p>


<h3 class="wp-block-heading" id="color-values">Color Values</h3>


<ul class="wp-block-list">
<li>Hexadecimal (e.g., <code>#ff6347</code>)</li>



<li>RGB (e.g., <code>rgb(255, 99, 71)</code>)</li>



<li>RGBA (e.g., <code>rgba(255, 99, 71, 0.5)</code>)</li>



<li>HSL (e.g., <code>hsl(9, 100%, 64%)</code>)</li>



<li>HSLA (e.g., <code>hsla(9, 100%, 64%, 0.5)</code>)</li>



<li>Named colors (e.g., <code>red</code>, <code>blue</code>)</li>
</ul>


<h3 class="wp-block-heading" id="dimension-values">Dimension Values</h3>


<ul class="wp-block-list">
<li>Length (e.g., <code>10px</code>, <code>2em</code>, <code>5vh</code>)</li>



<li>Percentage (e.g., <code>50%</code>)</li>



<li>Viewport-based lengths (e.g., <code>vh</code>, <code>vw</code>, <code>vmin</code>, <code>vmax</code>)</li>
</ul>


<h3 class="wp-block-heading" id="font-and-text-values">Font and Text Values</h3>


<ul class="wp-block-list">
<li>Font sizes (e.g., <code>16px</code>, <code>1.5rem</code>)</li>



<li>Font families (e.g., <code>"Times New Roman"</code>, <code>Arial</code>)</li>



<li>Text shadows (e.g., <code>1px 1px 2px black</code>)</li>



<li>Font weights (e.g., <code>bold</code>, <code>700</code>)</li>
</ul>


<h3 class="wp-block-heading" id="timing-values">Timing Values</h3>


<ul class="wp-block-list">
<li>Duration (e.g., <code>0.3s</code>, <code>200ms</code>)</li>



<li>Timing functions (e.g., <code>ease-in</code>, <code>linear</code>)</li>
</ul>


<h3 class="wp-block-heading" id="urls-and-image-values">URLs and Image Values</h3>


<ul class="wp-block-list">
<li>Image URLs (e.g., <code>url('path/to/image.jpg')</code>)</li>



<li>Gradients (e.g., <code>linear-gradient(to right, red, blue)</code>)</li>
</ul>


<h3 class="wp-block-heading" id="miscellaneous-and-custom-values">Miscellaneous and Custom Values</h3>


<ul class="wp-block-list">
<li>Border details (e.g., <code>1px solid black</code>)</li>



<li>Box shadows (e.g., <code>10px 10px 5px grey</code>)</li>



<li>Transformations (e.g., <code>rotate(45deg)</code>, <code>scale(1.2)</code>)</li>



<li>Transitions (e.g., <code>all 0.3s ease</code>)</li>



<li>Grid template areas (e.g., <code>'header header header'</code>)</li>



<li>Arbitrary numbers (e.g., <code>300</code>, <code>0.5</code>), often used in calculations or for defining custom scales</li>



<li>Custom values of any combination of strings or values (e.g., <code>--custom-shadow: 2px 2px 5px rgba(0,0,0,0.5);</code>)</li>
</ul>


<h2 class="wp-block-heading" id="when-to-use-css-custom-properties">When to Use CSS Custom Properties</h2>


<p><strong>Theming</strong>: CSS variables make theming a website incredibly straightforward. You can change your site&#8217;s theme by altering the values of your variables.</p>



<pre class="wp-block-code"><code>:root {
    --primary-color: #333;
    --background-color: #fff;
}

&#91;data-theme="dark"] {
    --primary-color: #ccc;
    --background-color: #222;
}

body {
    background-color: var(--background-color);
    color: var(--primary-color);
}</code></pre>



<p><strong>Responsive Design</strong>: You can use CSS variables to streamline responsive designs. For example, you can define font sizes that change with the viewport size.</p>



<pre class="wp-block-code"><code>:root {
    --base-font-size: 16px;
}

@media (max-width: 600px) {
    :root {
        --base-font-size: 14px;
    }
}

body {
    font-size: var(--base-font-size);
}</code></pre>


<h4 class="wp-block-heading" id="im-with-it">I&#8217;m &#8220;with it&#8221;.</h4>


<p>Discovering CSS variables has opened up a new dimension in CSS for me and is helping me keep up with the times.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" decoding="async" width="576" height="254" data-attachment-id="4829" data-permalink="https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables/dr-evil-macarena-css-custom-properties" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/dr-evil-macarena-css-custom-properties.gif?fit=576%2C254&amp;ssl=1" data-orig-size="576,254" data-comments-opened="0" 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="dr-evil-macarena-css-custom-properties" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/dr-evil-macarena-css-custom-properties.gif?fit=576%2C254&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/dr-evil-macarena-css-custom-properties.gif?resize=576%2C254&#038;ssl=1" alt="I'm &quot;with it&quot; - Dr. Evil Macarena GIF for CSS Custom Properties" class="wp-image-4829"/><figcaption class="wp-element-caption">I&#8217;m &#8220;with it&#8221; &#8211; Dr. Evil Macarena GIF for CSS Custom Properties</figcaption></figure>
</div>


<p><em>Please share what you learn as you learn it. We are in this together.</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="581" data-attachment-id="4832" data-permalink="https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables/image-5-21" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?fit=1017%2C788&amp;ssl=1" data-orig-size="1017,788" data-comments-opened="0" 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-5" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?fit=750%2C581&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?resize=750%2C581&#038;ssl=1" alt="" class="wp-image-4832" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?w=1017&amp;ssl=1 1017w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?resize=300%2C232&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?resize=768%2C595&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/10/image-5.png?resize=750%2C581&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">Cursor and Infinite IF Using CSS Custom Properties</figcaption></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/til-how-to-use-css-custom-properties-or-css-variables/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4825</post-id>	</item>
		<item>
		<title>[TIL] How to Use Live Server in Visual Studio Code</title>
		<link>https://nothans.com/til-how-to-use-live-server-in-visual-studio-code</link>
					<comments>https://nothans.com/til-how-to-use-live-server-in-visual-studio-code#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Tue, 01 Oct 2024 16:31:05 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Cursor]]></category>
		<category><![CDATA[Visual Studio Code]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4816</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>Geroge and I <a href="https://github.com/nothans/shoot">have been working</a> on a modern retro arcade game in HTML, CSS, and JavaScript called, &#8220;Shoot&#8221;. We made a bunch of edits within Visual Studio Code and Cursor and then opened the HTML in Chrome to see the changes. Lots of changes and refreshes of the page. But, when we changed the audio to use the Web Audio API, the app stopped playing sounds when it ran directly from an HTML file. I researched the error messages and found that sounds via the Web Audio API need to be served from a web server to get around CORS issues with local files. In researching options, I learned about the <a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">Live Server</a> extension for Visual Studio Code.</p>



<p><strong>Live Server</strong> is a Visual Studio Code extension that allows developers to run a local development server directly from the editor. It provides a quick and easy way to preview HTML, CSS, and JavaScript files in the browser with live-reloading capabilities. When you change your code, the browser automatically updates without needing to refresh manually. This makes it ideal for fast development and debugging. It also works well with single-page applications and supports multiple file types. With just a right-click on an HTML file and selecting &#8220;Open with Live Server,&#8221; you can immediately launch a server and start developing.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/Hh6-DXx9RAs?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div><figcaption class="wp-element-caption">Live Server Extension Installation and Demo Video</figcaption></figure>


<h2 class="wp-block-heading" id="live-server-extension-in-visual-studio-code-stepbystep">Live Server Extension in Visual Studio Code Step-by-Step</h2>

<h3 class="wp-block-heading" id="step-1-install-the-live-server-extension">Step 1: Install the Live Server Extension</h3>


<ol class="wp-block-list">
<li>Open <strong>Visual Studio Code</strong>.</li>



<li>Go to the <strong>Extensions</strong> view by clicking the Extensions icon on the left sidebar (or press <code>Ctrl+Shift+X</code>).</li>



<li>In the search bar, type &#8220;Live Server.&#8221;</li>



<li>Click on the <strong>Live Server</strong> extension (by Ritwick Dey) and then click the <strong>Install</strong> button.</li>
</ol>


<h3 class="wp-block-heading" id="step-2-open-your-html-file">Step 2: Open Your HTML File</h3>


<ol class="wp-block-list">
<li>After installing the Live Server extension, open the HTML file you want to run.</li>



<li>Right-click on the HTML file in the editor or in the file explorer.</li>
</ol>


<h3 class="wp-block-heading" id="step-3-start-live-server">Step 3: Start Live Server</h3>


<ol class="wp-block-list">
<li>Choose the option <strong>Open with Live Server</strong> from the right-click context menu. This will start a local development server and open your HTML file in your default web browser.</li>



<li>The server will automatically update whenever you make changes to the HTML, CSS, or JavaScript files, making debugging easier.</li>
</ol>


<h3 class="wp-block-heading" id="step-4-debugging-html-with-developer-tools">Step 4: Debugging HTML with Developer Tools</h3>


<ol class="wp-block-list">
<li>Once the HTML file is running in the browser, open the browser’s developer tools (press <code>F12</code> or <code>Ctrl+Shift+I</code> in most browsers).</li>



<li>Use the <strong>Elements</strong>, <strong>Console</strong>, and <strong>Network</strong> tabs to debug your HTML, CSS, and JavaScript in real-time.</li>
</ol>


<h3 class="wp-block-heading" id="step-5-additional-debugging-options-for-javascript">Step 5: Additional Debugging Options for JavaScript</h3>


<p>If you need to debug JavaScript in VS Code, you can also attach a debugger. Here&#8217;s how:</p>



<ol class="wp-block-list">
<li><strong>Install the Debugger for Chrome/Edge Extension (Optional)</strong>:
<ul class="wp-block-list">
<li>Install the <strong>Debugger for Chrome</strong> or <strong>Debugger for Edge</strong> extension from the VS Code extensions marketplace.</li>



<li>This allows you to attach a VS Code debugger to the browser session for step-through debugging.</li>
</ul>
</li>



<li><strong>Set Up a Launch Configuration</strong>:
<ul class="wp-block-list">
<li>Go to the <strong>Run and Debug</strong> view (on the left sidebar or press <code>Ctrl+Shift+D</code>).</li>



<li>Click on <strong>create a launch.json file</strong>.</li>



<li>Select <strong>Chrome</strong> (or Edge) as the environment.</li>



<li>A <code>launch.json</code> configuration file will be created, which allows you to configure your debugging session.</li>



<li>Set up the URL to point to the Live Server URL (e.g., <code>http://127.0.0.1:5500/index.html</code>).</li>
</ul>
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/til-how-to-use-live-server-in-visual-studio-code/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4816</post-id>	</item>
		<item>
		<title>The Final Programming Language is Language</title>
		<link>https://nothans.com/the-final-programming-language-is-language</link>
					<comments>https://nothans.com/the-final-programming-language-is-language#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Thu, 09 Mar 2023 16:10:26 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Prompt Engineering]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=3687</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>My first programming class was in C. The class started with two weeks of pseudocode. We wrote out descriptions of what the code does. Our professor was trying to get us to think through software versus the semantic expression of a particular programming language. We were writing English statements that eventually turned into sections of C code. In a giant twist of fate, our course was teaching C so that we could build a matrix solver. Now, I work at MathWorks, creators of the most advanced matrix solver, MATLAB which literally stands for <span style="text-decoration: underline;">mat</span>rix <span style="text-decoration: underline;">lab</span>oratory.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="3693" data-permalink="https://nothans.com/the-final-programming-language-is-language/image-3-7" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?fit=1027%2C1369&amp;ssl=1" data-orig-size="1027,1369" data-comments-opened="0" 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="Hans Scharler holding a C programming book" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?fit=750%2C1000&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?resize=474%2C632&#038;ssl=1" alt="" class="wp-image-3693" width="474" height="632" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?resize=768%2C1024&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?resize=225%2C300&amp;ssl=1 225w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?resize=750%2C1000&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-3.png?w=1027&amp;ssl=1 1027w" sizes="auto, (max-width: 474px) 100vw, 474px" /><figcaption class="wp-element-caption">Hans Scharler holding <em>The C Programming Language Book</em></figcaption></figure>
</div>

<h2 class="wp-block-heading" id="what-is-pseudocode">What is pseudocode?</h2>


<p>Pseudocode is a high-level, informal description of a computer program or algorithm that uses natural language and simple syntax to outline the logic of the program or algorithm. It is not a programming language, but rather a way of expressing a program or algorithm in a way that is easy for humans to understand. Pseudocode is often used as a tool for planning and designing programs before they are implemented in a specific programming language. It is also used in teaching and documentation to explain the steps of a program or algorithm in a way that is accessible to readers who may not have programming experience or who are not familiar with a particular programming language. Pseudocode typically includes common programming constructs such as loops, conditional statements, and functions, but does not include specific syntax or code examples.</p>


<h2 class="wp-block-heading" id="going-full-circle">Going Full Circle</h2>


<p>In my <a href="https://nothans.com/how-i-learned-to-program" data-type="post" data-id="2180">long history with programming</a>, I wasn&#8217;t always thinking about pseudocode. Programming quickly devolves into the syntax and language specific quirks, but I do realize I was learning how to think through how I solve problems with code. Software engineers and developers have developed their own processes to breakdown complex applications to a series of sections. In the era of large language models and code generation, this is now what I refer to as prompting. Pseudocode is now prompting a LLM or codex to generate specific code responses. Does AI make a programmer obsolete? I argue that AI will unilaterally benefit humans who understand how to breakdown complexity and build up complexity. Humans who leverage AI will become a different specie of humans.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8220;Language is the final programming language.&#8221;</p>
<cite>Hans Scharler</cite></blockquote>



<p>Tools like ChatGPT effortlessly spit out code based on prompts. If you are better at prompting, you are better at writing code. Prompting is just a series words in a language, but not a programming language. Anyone can now write HTML with the English language. Are you going to ignore this super power or are you going to leverage it?</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="574" data-attachment-id="3694" data-permalink="https://nothans.com/the-final-programming-language-is-language/image-4-7" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?fit=982%2C752&amp;ssl=1" data-orig-size="982,752" data-comments-opened="0" 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-4" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?fit=750%2C574&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?resize=750%2C574&#038;ssl=1" alt="" class="wp-image-3694" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?w=982&amp;ssl=1 982w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?resize=300%2C230&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?resize=768%2C588&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/03/image-4.png?resize=750%2C574&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">ChatGPT Prompt: Create a table of made up fantasy city names in HTML where one column is the city name and other column is a population size</figcaption></figure>
</div>

<h2 class="wp-block-heading" id="pseudocode-is-now-prompt-engineering">Pseudocode is Now Prompt Engineering</h2>


<p>Pseudocode and prompt engineering are both techniques used in software development to help with designing and planning the structure and logic of a program or algorithm.</p>



<p>Pseudocode is a high-level description of a program or algorithm that is written in natural language and simple syntax. It allows developers to outline the steps and structure of a program without getting bogged down in the specifics of a particular programming language. Pseudocode can be used to plan out the logic of a program before writing any actual code.</p>



<p>Prompt engineering, on the other hand, is a technique used in natural language processing and machine learning to create high-quality prompts that guide the language model towards producing desired outputs. It involves designing and refining the prompts used to generate text, which can be used to train and fine-tune language models.</p>


<h2 class="wp-block-heading" id="tips-for-getting-better-at-prompting-for-programming">Tips for Getting Better at Prompting for Programming</h2>


<p>I have some advice if you want to start thinking like a software engineer and start learning how to prompt a language model like ChatGPT.</p>



<ol class="wp-block-list">
<li><strong>Break down the problem</strong>: The first step in prompt engineering is to break down the problem you want to solve into smaller, more manageable pieces. This requires you to think critically about the problem and identify the key factors that will influence the outcome.</li>



<li><strong>Identify the key inputs and outputs:</strong> Once you have broken down the problem, identify the key inputs and outputs of the system. This will help you design effective prompts that guide the model towards producing the desired outputs.</li>



<li><strong>Use clear and concise language: </strong>Just like in software development, clear and concise language is essential when using prompt engineering. Use language that is easy to understand and avoids ambiguity or confusion.</li>



<li><strong>Test and iterate: </strong>Prompt engineering is an iterative process, just like software development. Test your prompts and make adjustments based on the results you get. Continuously refine and improve your prompts to achieve the best possible outcomes.</li>



<li><strong>Consider edge cases: </strong>As a software engineer, you are familiar with the importance of edge cases in testing and development. When using prompt engineering, consider the edge cases that may impact the accuracy and performance of your model.</li>
</ol>



<p>By thinking like a software engineer, you can effectively leverage prompt engineering to create high-quality prompts that guide natural language processing and machine learning models towards producing the desired outputs.</p>



<p><strong>What do you think? Join our <a rel="noreferrer noopener" href="/discord" target="_blank">community</a>. Let&#8217;s discuss.</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/the-final-programming-language-is-language/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3687</post-id>	</item>
		<item>
		<title>Adding Images to EAGLE PCB Layouts</title>
		<link>https://nothans.com/adding-images-to-eagle-pcb-layouts</link>
					<comments>https://nothans.com/adding-images-to-eagle-pcb-layouts#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Wed, 07 Jul 2010 14:56:00 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[EAGLE]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Instructables]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SparkFun]]></category>
		<category><![CDATA[Tweaks]]></category>
		<guid isPermaLink="false">http://nothans.com/adding-images-to-eagle-pcb-layouts</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p>Over at <a title="Add artwork to a PCB using Eagle" href="http://www.instructables.com/id/Adding-Custom-Graphics-to-EAGLE-PCB-Layouts/" target="_blank" rel="noopener noreferrer">Instructables</a>, I created a tutorial on how to add custom graphics to EAGLE PCB layouts. EAGLE is a very popular layout tool for electronic circuit boards known as PCBs. The tool is powerful but some things are not obvious. We were working on a PCB layout and wanted to add our logo to the design. After spending the afternoon searching around, I finally decided to brute-force the process. I figured it out and now I can replicate the process of adding images to EAGLE. I thought that  I would share what I’ve learned so it will be easier for you.</p>
<p>For this Instructable, you will need an installed copy of <a title="Download EAGLE PCB from Cadsoft" href="http://www.cadsoft.de/" target="_blank" rel="noopener noreferrer">EAGLE</a> and a PCB Layout that you want to add some graphics to. I am using <a title="SparkFun EAGLE PCB Tutorial" href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=109" target="_blank" rel="noopener noreferrer">SparkFun</a>’s FT232RL USB-to-Serial Breakout PCB (<a title="SpakFun Tutorial Files on EAGLE" href="http://www.sparkfun.com/tutorial/BeginningEmbedded/FT232-Breakout-v10.zip" target="_blank" rel="noopener noreferrer">EAGLE Files</a>) for example purposes.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/adding-images-to-eagle-pcb-layouts/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">680</post-id>	</item>
		<item>
		<title>Will Windows 7 be better than Vista?</title>
		<link>https://nothans.com/will-windows-7-be-better-than-vista</link>
					<comments>https://nothans.com/will-windows-7-be-better-than-vista#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Wed, 16 Sep 2009 04:59:00 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[windows vista]]></category>
		<category><![CDATA[windows xp]]></category>
		<guid isPermaLink="false">http://nothans.com/will-windows-7-be-better-than-vista</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p>“Will Windows 7 be better than Vista?” is the wrong question to be asking. We should be asking, “Will Windows 7 be better than XP?”</p>
<p>Chris Hernandez of Microsoft posted on his blog, “One of the main goals with Windows 7 in general has been to be better than Vista.” Chris’ quote scares me. Being better than Vista is not what I am looking for. I want an OS that makes me want to upgrade from XP. XP has served me well and I want a clear upgrade path. What are the killer new features? What makes Win7 an “upgrade”?</p>
<p>I have been using Windows 7 on my laptop for a few months. I do like some UI improvements, but compared to XP it misses the mark. Compared to Vista, Win7 is better. Although, Win7 requires pretty good hardware to install where XP is able to install on  my pieced together machines with parts 8-10 years old in some cases. I hope by the time Windows 7 is on the shelf, someone figures out that we are not looking for an upgrade from Vista, we are looking for a real upgrade to XP.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/will-windows-7-be-better-than-vista/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">692</post-id>	</item>
		<item>
		<title>UberNote for an Ubermensch</title>
		<link>https://nothans.com/ubernote-for-an-ubermensch</link>
					<comments>https://nothans.com/ubernote-for-an-ubermensch#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Sun, 16 Dec 2007 23:03:00 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubernote]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[web applications]]></category>
		<guid isPermaLink="false">http://nothans.com/ubernote-for-an-ubermensch</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p>“Web 2.0” is a bonafide buzzword. What happened to versions 1.1 through 1.9? What does 2.0 mean exactly? To me, Web 2.0 defines the separation of static web pages to truly dynamic and useful web applications. There will be other versions, but this is the first clear step in my mind.</p>
<p>Examples of Web 2.0 applications are Google Mail, Basecamp Project Manager, and UberNote &#8211; Note Management.</p>
<p>I recently became aware of UberNote by reading through articles at <a href="http://www.thetechbrief.com/2007/12/16/get-uber-with-ubernote/" target="_blank" rel="noopener noreferrer">The Tech Brief</a>. The UberNote application (almost wanted to call it software because you forget that this is a web application since it is so useful and easy to use) allows for quick note-taking, advanced editing, and intuitive tagging.</p>
<p>I am a note-taker. I always have a notebook in my pocket, so I never miss a fleeting idea – maybe one about how toothbrushes with a blue strip fade prematurely while using whitening toothpaste – wouldn’t want to lose that gem. There are times that I email thoughts to myself, leave voice mails on my Skype (which are the only voicemails I get), write on the back of a placemat at a diner – you get the idea. After getting invited to use the UberNote site, I have been putting my thoughts online and have found this a way to keep track of my little thought nuggets that will return literally tens of dollars someday in the future.</p>
<p>I recommend trying <a href="http://www.ubernote.com" target="_blank" rel="noopener noreferrer">UberNote</a>, joining their forums, and helping them shape their initial product offering. Check it out soon, so you don’t miss Web 2.0 and before the Web moves to 3.0 and maybe even Web 3.0 beta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/ubernote-for-an-ubermensch/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">707</post-id>	</item>
	</channel>
</rss>
