feat: Ports all existing articles and images.
This commit is contained in:
@@ -66,36 +66,36 @@ refrigerant charge losses. It should be noted that this is not true for..." name
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-19-calculate-seer-degradation-by-age.png"/>
|
||||
<p>This is a quick tech-tip to learn how to calculate the degradation of SEER based<br />
|
||||
<p>This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.</p>
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and<br />
|
||||
refrigerant charge losses. It should be noted that this is not true for all<br />
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code><br />
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for all
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code>
|
||||
of the average degradation based on systems tested.</p>
|
||||
<h2>Formula</h2>
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator<br />
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator
|
||||
coil / air handler.</p>
|
||||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||||
<p>| Where | |<br />
|
||||
| –––– | —————————————— | — |<br />
|
||||
| $SEER_d$ | Degradated SEER rating |<br />
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |<br />
|
||||
| M | Maintenance factor, 0.01-0.03 |<br />
|
||||
<p>| Where | |
|
||||
| –––– | —————————————— | — |
|
||||
| $SEER_d$ | Degradated SEER rating |
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |
|
||||
| M | Maintenance factor, 0.01-0.03 |
|
||||
| age | The age of the equipment, in years |</p>
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is<br />
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%<br />
|
||||
degradation per year, however there are some<br />
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a><br />
|
||||
that show that this can actually be as high as 5% or above depending on climate.<br />
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”<br />
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%
|
||||
degradation per year, however there are some
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a>
|
||||
that show that this can actually be as high as 5% or above depending on climate.
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”
|
||||
of degradation would be.</p>
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the<br />
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower<br />
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to<br />
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple<br />
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple
|
||||
stages).</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when<br />
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when
|
||||
installed and the system is 15 years old.</p>
|
||||
<p>Plugging those numbers into our formula.</p>
|
||||
<hr />
|
||||
@@ -105,8 +105,8 @@ installed and the system is 15 years old.</p>
|
||||
<h4>Highest Rage (5% degradation / year)</h4>
|
||||
<p>$$ SEER_d = 13 \times (1 - 0.05)^{15} = 6 $$</p>
|
||||
<hr />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER<br />
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge<br />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge
|
||||
losses can be as low as 6 SEER.</p>
|
||||
<p>Thanks for learning how to estimate SEER degradation based on equipment age!</p>
|
||||
</article>
|
||||
@@ -143,7 +143,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -157,7 +156,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -188,6 +186,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,52 +64,52 @@ online interactions is tone and other subtleties..." name="og:description"/>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-12-12-cancel-this.gif"/>
|
||||
<p>This post is going to be hard to put into words, it’s going to seem egotistical at points, but know<br />
|
||||
that my actions / feelings online are the same as they are if you met me in person. The problem with<br />
|
||||
online interactions is tone and other subtleties do not come across, so it’s hard to tell when<br />
|
||||
<p>This post is going to be hard to put into words, it’s going to seem egotistical at points, but know
|
||||
that my actions / feelings online are the same as they are if you met me in person. The problem with
|
||||
online interactions is tone and other subtleties do not come across, so it’s hard to tell when
|
||||
someone is joking or being serious.</p>
|
||||
<h2>The Meat</h2>
|
||||
<p>It has been brought to my attention that someone out there thinks that I’m sexist and should not<br />
|
||||
speak at the HVAC School symposium because of it. They are holding a curse word against me that I<br />
|
||||
said two years ago, in the moment A) it was fitting and B) it was one of those times that my mouth<br />
|
||||
<p>It has been brought to my attention that someone out there thinks that I’m sexist and should not
|
||||
speak at the HVAC School symposium because of it. They are holding a curse word against me that I
|
||||
said two years ago, in the moment A) it was fitting and B) it was one of those times that my mouth
|
||||
was working faster than my brain (raise your hand if that’s ever happened to you).</p>
|
||||
<p>I am an open book, I am not afraid of showing failures and strengths. I’ve never claimed to be<br />
|
||||
perfect (well, actually I have but it’s always a joke). I’m not at all condoning what I’ve said in<br />
|
||||
the past, nor will I repeat it out of context now, but I communicate with people like adults and I<br />
|
||||
look at people as piers. We do not always have to agree with one another, conflict helps us learn<br />
|
||||
where to grow, but we also can not expect people to change to fit our wants / needs, that’s just not<br />
|
||||
<p>I am an open book, I am not afraid of showing failures and strengths. I’ve never claimed to be
|
||||
perfect (well, actually I have but it’s always a joke). I’m not at all condoning what I’ve said in
|
||||
the past, nor will I repeat it out of context now, but I communicate with people like adults and I
|
||||
look at people as piers. We do not always have to agree with one another, conflict helps us learn
|
||||
where to grow, but we also can not expect people to change to fit our wants / needs, that’s just not
|
||||
how it works.</p>
|
||||
<p>I do not at all agree with the tactics used by whomever is behind this. I would happily discuss this<br />
|
||||
in private or out in the open. You can find all my contact / social information in the sidebar of<br />
|
||||
this website and I’ve offered up my cell phone number in private groups that we are all probably a<br />
|
||||
<p>I do not at all agree with the tactics used by whomever is behind this. I would happily discuss this
|
||||
in private or out in the open. You can find all my contact / social information in the sidebar of
|
||||
this website and I’ve offered up my cell phone number in private groups that we are all probably a
|
||||
part of.</p>
|
||||
<h2>The Potatoes</h2>
|
||||
<p>I am a father of 3 girls, I have a sister, talk crap about my mom and you’ll find out who I am! I<br />
|
||||
love women, I have no problem with women in the trades, I encourage women who are in the trades. I<br />
|
||||
try to help every person that I can, if I can. I have failed more times than you can imagine! I am<br />
|
||||
self taught in about everything I do, so I give of it freely. I have all kinds of work to do to grow<br />
|
||||
into the man that I should be, but at the same time, I am not afraid to be the man that I am today.<br />
|
||||
<p>I am a father of 3 girls, I have a sister, talk crap about my mom and you’ll find out who I am! I
|
||||
love women, I have no problem with women in the trades, I encourage women who are in the trades. I
|
||||
try to help every person that I can, if I can. I have failed more times than you can imagine! I am
|
||||
self taught in about everything I do, so I give of it freely. I have all kinds of work to do to grow
|
||||
into the man that I should be, but at the same time, I am not afraid to be the man that I am today.
|
||||
I will greet you by whatever pronoun you want to be referred as.</p>
|
||||
<p>I would love to say that I don’t judge people, but I do, just as I’m being judged! I am fine with<br />
|
||||
someone judging me and having opinions about me, I mean that is our right. I will not say that<br />
|
||||
person is wrong, because in their mind they’re right. What I will not do is stop being myself. I<br />
|
||||
know for a fact that I’ve helped more people than this person has gotten “cancelled”. I will<br />
|
||||
continue to help people in the trades, homeowners, or people in need. I also will not remain quiet!<br />
|
||||
I will give my opinion like it or not. There are people in my corner that really know me and my<br />
|
||||
<p>I would love to say that I don’t judge people, but I do, just as I’m being judged! I am fine with
|
||||
someone judging me and having opinions about me, I mean that is our right. I will not say that
|
||||
person is wrong, because in their mind they’re right. What I will not do is stop being myself. I
|
||||
know for a fact that I’ve helped more people than this person has gotten “cancelled”. I will
|
||||
continue to help people in the trades, homeowners, or people in need. I also will not remain quiet!
|
||||
I will give my opinion like it or not. There are people in my corner that really know me and my
|
||||
intentions.</p>
|
||||
<h2>Final Words</h2>
|
||||
<p>The trades are rough around the edges, just as am I. The trades are a slow turning ship (just look<br />
|
||||
at how many still do not follow proper practices, etc. even with the capabilities and resources<br />
|
||||
<p>The trades are rough around the edges, just as am I. The trades are a slow turning ship (just look
|
||||
at how many still do not follow proper practices, etc. even with the capabilities and resources
|
||||
available today).</p>
|
||||
<p>If you are new / coming into the trades then I hope you are not overly sensitive to foul language<br />
|
||||
and other inappropriate comments. Thick skin is valuable in the trades, but at the same time don’t<br />
|
||||
be afraid to speak up if something offends you. Remember we are adults, we can handle disagreements<br />
|
||||
like adults (well, some of us can). Adults can learn from those of any age, they can reflect on<br />
|
||||
<p>If you are new / coming into the trades then I hope you are not overly sensitive to foul language
|
||||
and other inappropriate comments. Thick skin is valuable in the trades, but at the same time don’t
|
||||
be afraid to speak up if something offends you. Remember we are adults, we can handle disagreements
|
||||
like adults (well, some of us can). Adults can learn from those of any age, they can reflect on
|
||||
their own behavior and make their own decisions.</p>
|
||||
<p>I personally think that being offended is not a bad thing, it causes us to reflect / repair our<br />
|
||||
foundational beliefs. I hope that we can stop with this “cancel culture” of today, stop hiding<br />
|
||||
<p>I personally think that being offended is not a bad thing, it causes us to reflect / repair our
|
||||
foundational beliefs. I hope that we can stop with this “cancel culture” of today, stop hiding
|
||||
behind a keyboard, and be a diverse community.</p>
|
||||
<p>To wrap things up, I just want to reiterate that I am not at all mad at whomever is behind this. To<br />
|
||||
<p>To wrap things up, I just want to reiterate that I am not at all mad at whomever is behind this. To
|
||||
everyone out there who has shown me love and support, I greatly appreciate it.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
@@ -145,7 +145,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -159,7 +158,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -190,6 +188,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
266
deploy/articles/2023/coil-bypass-overview/index.html
Normal file
266
deploy/articles/2023/coil-bypass-overview/index.html
Normal file
@@ -0,0 +1,266 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Coil Bypass Overview
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-08-10-coil-bypass-overview.png" name="twitter:image"/>
|
||||
<meta content="Coil Bypass Overview" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/coil-bypass-overview/" name="og:url"/>
|
||||
<meta content="Coil Bypass Overview" name="og:title"/>
|
||||
<meta content="This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-08-10-coil-bypass-overview.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Coil Bypass Overview
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-08-10-coil-bypass-overview.png"/>
|
||||
<p>This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the challenges of this style of
|
||||
system.</p>
|
||||
<h2>What is a Coil Bypass</h2>
|
||||
<p>A coil bypass is not to be mistaken for a zoning system bypass, where airflow is “relieved” from the supply side of the system back into the
|
||||
return. Instead, a coil bypass diverts a portion of the airflow around the coil using a bypass damper(s). The bypass can serve several
|
||||
functions depending on the application, but in general it allows for a constant volume of air to be delivered to the space while the output
|
||||
of the coil can be shifted towards more or less dehumidification. In other words, it decouples the total system airflow from the coil
|
||||
airflow.</p>
|
||||
<p>The bypassed air mixes with the supply air stream to act as a reheat source, however unlike a typical reheat source it does not add more
|
||||
sensible load to the structure, instead it just brings the supply air temperature closer to the existing home’s temperature while still
|
||||
covering the latent and sensible loads of the home. A warmer duct system reduces the losses of the duct to unconditioned spaces as well as
|
||||
reduces the risk for duct condensation.</p>
|
||||
<p>The coil bypass strategy, as far as I know, was pioneered by <a href="https://www.linkedin.com/in/harry-boody-9b8a4366/">Harry Boody</a> of Energy
|
||||
Innovations and Scientific Environmental Design, Inc. However their websites are no longer active, so I’m not sure if they are still active
|
||||
in the HVAC design space or not.</p>
|
||||
<h2>The Problem</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Why</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Question</td>
|
||||
<td>Why would we want to utilize a strategy such as the coil bypass?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Answer</td>
|
||||
<td>Improved indoor air quality (IAQ)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>ASHRAE’s recommandation for the amount of air changes per hour (ACH) in a residential structure to be in the range of 3-5 ACH, and in
|
||||
general the higher the better, along with a MERV 13+ filter. In some / most cases the system airflow does not meet that criteria, especially
|
||||
low load homes or high volume homes.</p>
|
||||
<p>For example, let’s imagine a single story ranch home that is 2,500 square feet with 9 foot ceilings. This home is relatively tight
|
||||
construction and after doing the heating and cooling loads we’ve selected a 2.5 Ton system for this home. It is located in a green grass
|
||||
climate that needs some priority on dehumidification and requires an airflow of 350 CFM/Ton (875 CFM).</p>
|
||||
<p>We determine the volume of the conditioned space.</p>
|
||||
<p>2,500 x 9 = 22,500 ft^3</p>
|
||||
<p><img src="/articles/images/2023-08-10-volume-equation.png" alt="volume-equation" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where:</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>V</strong></td>
|
||||
<td><em>is the volume of the home</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>ACH</strong></td>
|
||||
<td><em>is the desired air changes per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>60</strong></td>
|
||||
<td><em>conversion from hours to minutes</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Below is a table of the required CFM to meet the different air changes per hour.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th align="center">CFM</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>(22,500 x 3)/60</td>
|
||||
<td align="center"><strong><em>1,125 @ 3 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 4)/60</td>
|
||||
<td align="center"><strong><em>1,500 @ 4 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 5)/60</td>
|
||||
<td align="center"><strong><em>1,875 @ 5 ACH</em></strong></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>As you can see we have a discrepency of meeting even the low end of 3 ACH. The high end of 5 ACH is over 2x the airflow for our 2.5 Ton
|
||||
system. The coil bypass strategy is one viable way, by decoupling the total system airflow from the coil airflow without, which eliminates
|
||||
the need of an auxilary fan / system that circulates air through some sort of filtration system.</p>
|
||||
<h3>Multi-Stage Systems</h3>
|
||||
<p>A challenge with multi-stage systems, even when sized properly, is that we often run at part-load conditions, and spend the majority of the
|
||||
time in lower stages. The lower stages often do worse at dehumidification than when running at full load.</p>
|
||||
<p>When the equipment runs in lower stages on a traditional system the total system airflow is reduced even further from the recommended air
|
||||
changes per hour. This reduced airflow also causes the throw of the air from the registers to be reduced which can lead to increased odds of
|
||||
stratification, poor air mixing, and increased potential for poor mean radiant temperatures (MRT) of the surfaces. The decreased airflow in
|
||||
low stages, lowers the velocity in the duct system, while low velocity is not a concern, it does increase the duct gains and increase the
|
||||
possibility of condensation on the ducts when they’re located outside of the thermal envelope of the building.</p>
|
||||
<p>Let’s imagine we have a duct system that has high wall registers located in a soffit at the interior wall that moves 100 CFM and we are
|
||||
trying to throw the air to the exterior wall which includes a window. The wall is @ 12 feet from the register. We’ve selected a register
|
||||
that meets the criteria, at high stage airflow it has a throw of 11.5 feet (shown as the green rectangle). When the system runs in low
|
||||
stage, the airflow is reduced to 70% of high stage (70 CFM), which would give us a throw from the register of @ 7 feet (shown as the red
|
||||
rectangle).</p>
|
||||
<p><img src="/articles/images/2023-08-10-register-throw.png" alt="register-throw" /></p>
|
||||
<p>The reduced flow through the register causes the air to only make it about 60% across the room before reaching it’s terminal velocity, which
|
||||
can cause the room to feel uncomfortable since the air never reaches the exterior wall and window.</p>
|
||||
<p>By decoupling the fan from the coil airflow it is possible to run in low stages, still have adequate dehumidification performance out of the
|
||||
system, and achieve the proper throw from the registers.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In this article we’ve begun to scratch the surface of what a coil bypass strategy is in an HVAC system, as well as some of the challenges
|
||||
that it can help solve. We’ve learned about why we may desire to decouple the total system airflow from the coil airflow.</p>
|
||||
<p>In future articles we will continue to explore some of the features, benefits, and challenges presented by such a strategy.</p>
|
||||
<h2>Related Resources</h2>
|
||||
<p><a href="https://hvacrschool.com/bypass-dehumidification-airflow-hvac-design/">HVAC School - Bypass Dehumidification / Airflow HVAC Design</a></p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Free quotes != good
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-10-04-free-quotes-are-bad-for-the-industry.png" name="twitter:image"/>
|
||||
<meta content="Free quotes != good" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/free-quotes-are-bad-for-the-industry/" name="og:url"/>
|
||||
<meta content="Free quotes != good" name="og:title"/>
|
||||
<meta content="I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-10-04-free-quotes-are-bad-for-the-industry.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Free quotes != good
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">October 04, 2023</span>934 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-04-free-quotes-are-bad-for-the-industry.png"/>
|
||||
<p>I found myself re-reading the
|
||||
<a href="https://www.acca.org/communities/community-home/librarydocuments/viewdocument?DocumentKey=b1d2a39d-fda8-4af9-b8de-0ae579bfe24a">ACCA Quality Installation Standard</a>
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling “prior to installation” items.</p>
|
||||
<h2>Prior to installation</h2>
|
||||
<ol>
|
||||
<li>Ensure ventilation calculations are performed.</li>
|
||||
<li>Building heat gain / loss calculation (Manual-J / Manual-N)
|
||||
<ol>
|
||||
<li>Room x room for new construction or duct modifications.</li>
|
||||
<li>Block load for existing (can use original if available).</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>Proper equipment capacity selection (Manual-S / Manual-CS)</li>
|
||||
<li>Properly matched systems (AHRI or CEE-AHRI)</li>
|
||||
</ol>
|
||||
<p>Let’s break the above items down to a rough estimated time to complete each of the items.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Item</th>
|
||||
<th>Time (minutes)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ventilation calculations</td>
|
||||
<td>15</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Manual-J (data gathering)</td>
|
||||
<td>30</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Manual-J (data entry / calculation)</td>
|
||||
<td>30</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Manual-S</td>
|
||||
<td>15</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AHRI</td>
|
||||
<td>15</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Total</strong></td>
|
||||
<td>105</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p><em>The above items are obviously just estimations and the person’s experience in the different areas / tools they use. Some of the items are
|
||||
probably on the low side while others are probably on the high side.</em></p>
|
||||
</blockquote>
|
||||
<p>This is 1.75 hours just to do the calculations required to meet the QI Standard. This does not include any of the time spent with the
|
||||
customer building value in you or your product recommendations.</p>
|
||||
<p>When you want to not guess at some of the calculations then a blower door test is generally required in order to understand the leakage of
|
||||
the home, which adds even more time to the estimation process. Depending on the understanding you are looking for, the blower door test can
|
||||
add 30-180 minutes. This takes the total time to 2.25-4.75 hours.</p>
|
||||
<h2>Pushing boxes</h2>
|
||||
<p>The majority of residential HVAC companies make the bulk of their income off of equipment sales, so they have to “feed the beast” by
|
||||
skipping steps in both the installation of equipment and the sales process in order to close jobs and keep the ship afloat.</p>
|
||||
<p><img src="/articles/images/2023-10-04-sinking-boat.png" alt="sinking-boat" /></p>
|
||||
<p>This has helped contribute to these industry statistics:<a href="DOE" title="2018">^1</a></p>
|
||||
<ul>
|
||||
<li><strong>Incorrect refrigerant charge in greater than 50-80% of systems.</strong></li>
|
||||
<li><strong>Improper airflow:</strong>
|
||||
<ul>
|
||||
<li><strong>70% above the rated 0.5” w.c.</strong></li>
|
||||
<li><strong>47% above 0.7” w.c.</strong></li>
|
||||
<li><strong>85% undersized / inappropriate filter.</strong></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>70-80% of systems have at least one fault.</strong></li>
|
||||
<li><strong>90-100% if duct leakage is considered.</strong></li>
|
||||
</ul>
|
||||
<h2>Consumer responsibility</h2>
|
||||
<p>Let me be clear, I don’t think that all the blame is on the industry here. The culture today is that everyone wants things for free and
|
||||
fast. They have been conditioned by online services and box stores. Should we not cater to those that aren’t willing to do their leg work?
|
||||
Is it really our fault, if they don’t care?</p>
|
||||
<h2>Liability</h2>
|
||||
<p>While it’s generally easy to shrug our shoulders and think that it’s ok to just continue on because all the competitors are doing the same
|
||||
thing. There is at least the possibility that skipping steps can come back to bite you. If things ever went to litigation and the steps
|
||||
outlined in the QI Standard are ignored, then there is high odds you would loose.</p>
|
||||
<p>No matter what you do to try and protect yourself (having customers sign-off, etc) does not adequately protect your company from litigation.
|
||||
There are stories out there where contractors were still held liable for not performing load calculations even though the consumer signed
|
||||
off on it, because it is not inline with “industry best practices.”</p>
|
||||
<h1>Summary</h1>
|
||||
<p>This has led me to the conclusion that free quotes are just bad for the industry in general. The path forward is a challenge (changing
|
||||
perception is hard). I don’t know that I have answers on what the best path forward is, to be frank, but I do know that our current <em>status
|
||||
quo</em> is subpar to say the least.</p>
|
||||
<p>Unfortunately, I don’t think the change is going to come from the industry, but that it’s going to require the consumer base to be more
|
||||
educated and demand more from the industry. There have been many organizations that have dedicated years to changing the skill levels of
|
||||
technicians in the industry, they are very well needed / don’t mistake my words here, however unless a company has faced litigation or
|
||||
facing requests on a regular basis that demand better results, then why would a company change!?!</p>
|
||||
<p>I’ve been trying (unsuccessfully) to get rid of free quotes for 5+ years in my company. We try to educate customers during maintenance
|
||||
visits and when scheduling equipment estimates, however only about 10-20% choose to go down our paid Home Performance Assessment path. Our
|
||||
installation process does follow the QI Standard for the items that pertain to the setup / commissioning of the installed equipment, however
|
||||
there is just no sustainable way for us to completely follow the items outlined in this article without charging for our time, because at
|
||||
the end of the day we still have to be competitive in our market.</p>
|
||||
<p>There are days that I can justify our actions to myself and also days that I just want to throw in the towel / not sacrifice our integrity.
|
||||
Integrity is something that I take very seriously, after all our companies tag line is <em>“Since 1954, Integrity is in the Housh!”</em></p>
|
||||
<p>As mentioned, I’m not sure what the best path forward is! I hate to not have answers, but some problems are just complex and somewhat beyond
|
||||
our control.</p>
|
||||
<p>Let me know what you think some good solutions are.</p>
|
||||
<ul>
|
||||
<li>Does your company follow the QI Standard?</li>
|
||||
<li>What are resources that you’ve found helpful in educating your customers?</li>
|
||||
</ul>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,48 +68,48 @@ I have always had a love and passion for..." name="og:description"/>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-27-heat-recovery-chiller.png"/>
|
||||
<p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so<br />
|
||||
I’m doing it now. I did discuss this on<br />
|
||||
<p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
<a href="https://hvacrschool.com/podcasts/is-the-future-of-air-conditioning-self-contained-propane-chillers/">this episode of the HVAC School Podcast.</a></p>
|
||||
<h2>Heat Recovery Chillers</h2>
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that<br />
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most<br />
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds<br />
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds
|
||||
in this article, but offer an overview of what I feel would be my dream system.</p>
|
||||
<h2>The Source</h2>
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional<br />
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would<br />
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to<br />
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style<br />
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the<br />
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of<br />
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level<br />
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level
|
||||
performance without the need of a field.</p>
|
||||
<h2>Indoor Portion</h2>
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.<br />
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load<br />
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems<br />
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more<br />
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more
|
||||
aggressively by having storage during peak load conditions.</p>
|
||||
<p><img src="/articles/images/2023-10-27-buffers2.png" alt="buffer" /></p>
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what<br />
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the<br />
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra<br />
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps<br />
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).<br />
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in<br />
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could<br />
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.<br />
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat<br />
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat
|
||||
exchanger that would be used to supply domestic hot water.</p>
|
||||
<h2>Distribution System</h2>
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,<br />
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,
|
||||
however I’m going to model it as a 4-pipe hydronic air handler.</p>
|
||||
<p><img src="/articles/images/2023-10-27-ah.png" alt="ah" /></p>
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in<br />
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan<br />
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from<br />
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high<br />
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high
|
||||
velocity systems, and even ductless styles.</p>
|
||||
<h2>Disadvantages</h2>
|
||||
<ol>
|
||||
@@ -118,7 +118,7 @@ velocity systems, and even ductless styles.</p>
|
||||
<li>Lack of understanding / technicians afraid to work on this style system.</li>
|
||||
<li>Potentially higher upfront costs.</li>
|
||||
<li>Lack of design or planning could cause unhappy clients (same with traditional)</li>
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement<br />
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement
|
||||
for traditional boiler systems)</li>
|
||||
</ol>
|
||||
<h2>Advantages</h2>
|
||||
@@ -132,11 +132,11 @@ for traditional boiler systems)</li>
|
||||
<li>Easier transition to natural / flammable refrigerants</li>
|
||||
</ol>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the<br />
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and<br />
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish<br />
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to<br />
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water<br />
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water
|
||||
-> water heat pump for higher temperature distribution, incorporate solar collectors, and so on.</p>
|
||||
<p>Thank you for reading all the way to the end!</p>
|
||||
</article>
|
||||
@@ -173,7 +173,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -187,7 +186,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -218,6 +216,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -66,50 +66,50 @@ article I’d like to take a minute to layout some of the things that give..." n
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-30-hope.png"/>
|
||||
<p>This is a piggy-back article off of<br />
|
||||
<p>This is a piggy-back article off of
|
||||
<a href="https://mhoush.com/posts/20231018224631-the-struggle/">The Struggle</a> article that I had recently.</p>
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this<br />
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I<br />
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I
|
||||
focus on to try and kick myself out of the rut I can get into sometimes.</p>
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being<br />
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be<br />
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When<br />
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When
|
||||
we’re feeling cynical, it’s easy to feed the negativity, although it’s rarely helpful.</p>
|
||||
<h2>Hope</h2>
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m<br />
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous<br />
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous
|
||||
article.</p>
|
||||
<blockquote>
|
||||
<p>My problems are very much “first world problems”.</p>
|
||||
</blockquote>
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.<br />
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on<br />
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on
|
||||
things outside of myself.</p>
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push<br />
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on<br />
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on
|
||||
amazon”, etc.</p>
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or<br />
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or
|
||||
father. When you’re looking up at the stars and realize how small you actually are.</p>
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else<br />
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else
|
||||
appreciates it, but you. The times when your guard is completely down and you laugh with abandon.</p>
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with<br />
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with
|
||||
your pets. The songs of nature, insects, birds, etc. The sounds of waves / water in the distance.</p>
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes<br />
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem<br />
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem
|
||||
you’ve pondered for days / months / years.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,<br />
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for<br />
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not<br />
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing<br />
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing
|
||||
with. Be compassionate (including showing yourself compassion).</p>
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be<br />
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down<br />
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down
|
||||
regularly so that you can look back on them when you feel out of balance.</p>
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.<br />
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.
|
||||
When you focus on blessings then the negativity will fade.</p>
|
||||
<p>What impact are you going to leave with what little time we have?</p>
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and<br />
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and
|
||||
that I appreciate <em>you!</em></p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
@@ -145,7 +145,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -159,7 +158,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -190,6 +188,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -123,6 +123,77 @@ The struggle
|
||||
It has been one of those “when it rains, it pours” type of weeks. As...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/free-quotes-are-bad-for-the-industry/">Free quotes != good</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">October 04, 2023</span>934 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/free-quotes-are-bad-for-the-industry/">I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/calculate-seer-degradation-by-age/">Calculate SEER Degradation by Age</a>
|
||||
@@ -137,6 +208,86 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/why-mini-splits-stink/">Why Mini Splits Stink</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 14, 2023</span>758 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/why-mini-splits-stink/">In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/rss-feed/">In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/coil-bypass-overview/">This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -158,6 +309,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
206
deploy/articles/2023/introducing-psychrometrics-cli/index.html
Normal file
206
deploy/articles/2023/introducing-psychrometrics-cli/index.html
Normal file
@@ -0,0 +1,206 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Introducing Psychrometrics CLI
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream...." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-18-introducing-psychrometrics-cli.png" name="twitter:image"/>
|
||||
<meta content="Introducing Psychrometrics CLI" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/introducing-psychrometrics-cli/" name="og:url"/>
|
||||
<meta content="Introducing Psychrometrics CLI" name="og:title"/>
|
||||
<meta content="Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream...." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-18-introducing-psychrometrics-cli.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Introducing Psychrometrics CLI
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-18-introducing-psychrometrics-cli.png"/>
|
||||
<p>Today, I’m releasing a command line application that is built on top of my
|
||||
<a href="https://github.com/swift-psychrometrics/swift-psychrometrics">swift-psychrometrics</a> package, that I open sourced over 2 years ago.</p>
|
||||
<p>The application consists of many calculations / conversions for psychrometric properties of an air stream. The tool works for both imperial
|
||||
and metric units. The application will work natively on macOS, but can also be ran through a <code>docker</code> container on other platforms.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I spend a lot of time in my terminal, because I can work so much more efficiently. I discovered many years ago that the more I can do using
|
||||
simple applications and keyboard over a mouse and a web browser or native application the more I can accomplish. I understand this is
|
||||
intimidating for many who think they are <em>“not good with computers”.</em> I can assure that was me several years ago, I would only encourage you
|
||||
to not be afraid and give it a shot. We are at a time in society where it is easier than ever to get informed and learned new skills.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>For complete installation instructions, you can view the <a href="https://github.com/swift-psychrometrics/psychrometrics-cli">github</a> repository.</p>
|
||||
<p>The following instructions are based on using macOS.</p>
|
||||
<h3>Open your terminal application.</h3>
|
||||
<p>Personally, I use <a href="https://iterm2.com/">iTerm2</a>, however you can use the default <code>Terminal</code> app. Found at
|
||||
<code>/Applications/Utilities/Terminal.app</code>.</p>
|
||||
<h2>Install Homebrew</h2>
|
||||
<p>We use <a href="https://brew.sh">Homebrew</a> for package distribution of the pre-built application binaries. You can follow their instructions to
|
||||
install.</p>
|
||||
<h3>Tap our custom formula tap.</h3>
|
||||
<pre><code class="language-bash">brew tap swift-psychrometrics/formula
|
||||
</code></pre>
|
||||
<h3>Install the psychrometrics application</h3>
|
||||
<pre><code class="language-bash">brew install psychrometrics
|
||||
</code></pre>
|
||||
<p>That’s it!</p>
|
||||
<h2>Usage</h2>
|
||||
<p>I will run through a couple of the commands that are supplied with the application and show what you can expect the outputs to be.</p>
|
||||
<h3>Properties</h3>
|
||||
<p>The following command will output a bunch of the psychrometric properties of an air stream. There are several ways to call it, but generally
|
||||
you will supply the dry bulb temperature and the relative humidity.</p>
|
||||
<p>Below, we calculate the psychrometric properties based on 75°F and 50% humidity.</p>
|
||||
<pre><code class="language-bash">psychrometrics --dry-bulb 75 --relative-humidity 50
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-properties.png" alt="properties-output" /></p>
|
||||
<h3>Dehumidifier Sizing</h3>
|
||||
<p>If you’ve read some of my recent articles on calculating the
|
||||
<a href="https://mhoush.com/posts/sizing-dehumidifier-by-latent-load/">dehumidifier size required based on the latent load</a>, the application also
|
||||
ships with a calculation that will do this for you and has the ability to calculate it at different <code>coverages</code> that you can supply.</p>
|
||||
<p>For example if we’ve done a load calculation and determined that we have a latent load of <code>4,334 BTU/h</code> then we could run the following
|
||||
command to see what size dehumidifier is needed for <code>100%, 85%, and 70%</code> of the latent load.</p>
|
||||
<pre><code class="language-bash">psychrometrics dh size --coverage 100 85 70 --verbose 4334
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-dh-size.png" alt="dh-size" /></p>
|
||||
<h3>Pounds of Water Removed</h3>
|
||||
<p>I also recently wrote an article about <a href="https://mhoush.com/posts/pounds-of-water-removed/">calculating the pounds of water removed</a> from an
|
||||
air stream given the grains of moisture removed.</p>
|
||||
<p>Below is an example of calculating the pounds of water removed per hour based on the example in the article (14 delta-grains)</p>
|
||||
<pre><code class="language-bash">psychrometrics dh pounds-removed --delta 14 --cfm 797 --verbose
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-pounds-removed.png" alt="pounds-removed" /></p>
|
||||
<h3>Help</h3>
|
||||
<p>You can use <code>--help</code> option to show help and the list of commands provided.</p>
|
||||
<p><img src="/articles/images/2023-09-18-help.png" alt="help" /></p>
|
||||
<p>If you have any questions then feel free to email or message me. I hope some of you may find this application useful.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,321 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Introduction to Programming for HVAC Part-1
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-21-introduction-to-programming-for-hvac-1.png" name="twitter:image"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-1" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/introduction-to-programming-for-hvac-1/" name="og:url"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-1" name="og:title"/>
|
||||
<meta content="This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-21-introduction-to-programming-for-hvac-1.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Introduction to Programming for HVAC Part-1
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-21-introduction-to-programming-for-hvac-1.png"/>
|
||||
<p>This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I think if nothing else, this series can help gain knowledge, tips, and tricks to make you more comfortable with your computer. I hope that
|
||||
you will at least learn how to use your <code>terminal</code> application and more specifically <code>vim</code> motions and keybindings (more on that in another
|
||||
article).</p>
|
||||
<p>The goal of this article is to just get a machine setup with tools and to start exploring. I am a shill for <code>macOS</code>, so all of these will be
|
||||
specifically geared towards that and my workflows, most everything that is showcased should also work on <code>linux</code> machines (not sure about
|
||||
<code>windows</code>), although you may have to search for specific instructions on installing software for other platforms.</p>
|
||||
<p>What I have learned on my journey in programming is that the more you can lean on small software packages that focus on a single task, but
|
||||
do them well, the better. The less you use your mouse, the more productive you can be. The more you can work with <code>text</code> files and formats
|
||||
the more portable and transformable your workflows can be.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>The first thing that we will focus on is becoming familiar with the terminal application. On macOS the terminal application is located at
|
||||
<code>/Applications/Utilities/Terminal.app</code>. However, rather than click around to find it, you can use the <code>⌘<space></code> to pull up your spotlight
|
||||
search, then type <code>Terminal</code> to select the terminal application.</p>
|
||||
<p><img src="/articles/images/2023-09-21-spotlight.png" alt="spotlight" /></p>
|
||||
<h3>Terminal Overview</h3>
|
||||
<p>Your terminal is a program that allows you to run programs by typing commands into it’s window. There are a lot of built-in commands and a
|
||||
bunch that you can install. The terminal is very customizable (and once familiar, you will constantly be tweaking / adjusting to suit your
|
||||
needs). Right now customization is not what we will focus on, however in future articles I will provide tips and tricks on customizing it.
|
||||
Right now, we only need to know how to open it up and type in commands.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal.png" alt="terminal" /></p>
|
||||
<p>Below is an image / explanation of what the default status line includes.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal-line.png" alt="terminal-line" /></p>
|
||||
<h3>Learn Basic Commands (Built-in)</h3>
|
||||
<p>Here are a few basic commands that you should familiarize yourself with, as you will use them often when working inside of a terminal.</p>
|
||||
<h3>Change Directory</h3>
|
||||
<p><code>cd</code> (change directory) is the command that allows you to move around your file system when inside the terminal.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> <code>~</code> is a representation of your <code>Home</code> directory.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/Documents
|
||||
</code></pre>
|
||||
<p>The above command will move you into your Documents directory.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If there are spaces in the name of the directory you try to move to then the easiest way is to wrap the name in quotes.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd "~/Documents/Product Concepts"
|
||||
</code></pre>
|
||||
<p>Some other things to understand when moving around / supplying arguments to the <code>cd</code> command.</p>
|
||||
<p>You can use <code>..</code> to go backwards / move up to the parent directory. For example, say we are in the <code>~/Documents</code> directory, to go back up to
|
||||
the home directory we could use the following:</p>
|
||||
<pre><code class="language-bash">cd ..
|
||||
</code></pre>
|
||||
<p>These can be chained together as well. For example say we are located in the <code>~/Documents/Product Concepts</code> directory, we could use the
|
||||
following to go up two directory levels back to the home directory.</p>
|
||||
<pre><code class="language-bash">cd ../..
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Pro-Tip:</strong> You can use the <code><tab></code> key when navigating to auto-complete, generally typing a few characters followed with the <code><tab></code> key
|
||||
will auto-complete for you.</p>
|
||||
</blockquote>
|
||||
<h3>List files</h3>
|
||||
<p>Use <code>ls</code> to output a list of files and directories where you are located.</p>
|
||||
<pre><code class="language-bash">ls
|
||||
</code></pre>
|
||||
<p><em>Example Output when in my ~/Documents directory</em></p>
|
||||
<pre><code class="language-bash">Estimates.app
|
||||
InkscapeDrawings
|
||||
KwikModel
|
||||
MyAparment
|
||||
NCISummit
|
||||
Personal
|
||||
Product Concepts
|
||||
Receipts.receipts
|
||||
RingCentral
|
||||
SketchUP
|
||||
Tech-Tips
|
||||
desktop.ini
|
||||
espanso-migrate-backup
|
||||
espanso-migrate-backup-2
|
||||
</code></pre>
|
||||
<p>Using options with <code>ls</code> to show more statistics and hidden files. There are often hidden files on your computer that are used for
|
||||
application support or other purposes, these files are not shown using the default command. Hidden files start with a <code>.</code>, below is an
|
||||
example of showing hidden files in your home directory.</p>
|
||||
<pre><code class="language-bash">ls -la ~/
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Above I added the <code>~/</code> which will allow you to list the files in your home directory even if you currently are not there in your
|
||||
terminal, if you were already there (for example by using <code>cd ~/</code> then you would not need to use that at the end of the command.</p>
|
||||
</blockquote>
|
||||
<p><em>Example Output</em></p>
|
||||
<pre><code>total 168
|
||||
drwxr-xr-x+ 46 michael staff 1472 Sep 22 10:45 .
|
||||
drwxr-xr-x 6 root admin 192 Sep 22 09:08 ..
|
||||
-r-------- 1 michael staff 7 Apr 8 2021 .CFUserTextEncoding
|
||||
-rw-r--r--@ 1 michael staff 14340 Sep 18 10:15 .DS_Store
|
||||
drwx------+ 5 michael staff 160 Sep 20 17:03 .Trash
|
||||
-rw-r--r-- 1 michael staff 186 Sep 12 15:20 .actrc
|
||||
drwxr-xr-x 4 michael staff 128 Dec 13 2021 .bin
|
||||
drwxr-xr-x 3 michael staff 96 Mar 6 2023 .bundle
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 11:40 .cabal
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 15:20 .cache
|
||||
drwxr-xr-x 13 michael staff 416 Aug 10 08:47 .config
|
||||
drwx------ 3 michael staff 96 Jun 21 2021 .cups
|
||||
drwxr-xr-x 12 michael staff 384 Sep 15 15:22 .docker
|
||||
drwxr-xr-x 20 michael staff 640 Sep 19 08:11 .dotfiles
|
||||
drwxr-xr-x 4 michael staff 128 Jul 26 2021 .gem
|
||||
drwxr-xr-x 3 michael staff 96 Oct 11 2021 .jssc
|
||||
-rw------- 1 michael staff 20 Sep 22 10:45 .lesshst
|
||||
drwxr-x--- 3 michael staff 96 Mar 29 08:47 .lldb
|
||||
drwxr-xr-x 8 michael staff 256 Mar 1 2023 .local
|
||||
drwxr-xr-x 4 root staff 128 Apr 12 2021 .newtek
|
||||
drwxr-xr-x 5 michael staff 160 Dec 13 2021 .npm
|
||||
-rw------- 1 michael staff 27436 Apr 10 10:21 .psql_history
|
||||
drwxr-xr-x 7 michael staff 224 Apr 18 2022 .ssh
|
||||
drwxr-xr-x 6 michael staff 192 Sep 21 09:06 .swiftpm
|
||||
lrwxr-xr-x 1 michael staff 25 Dec 27 2021 .tmux.conf -> .dotfiles/tmux/.tmux.conf
|
||||
drwxr-xr-x 8 michael staff 256 Mar 27 16:14 .twilio-cli
|
||||
drwxr-xr-x 6 michael staff 192 Sep 18 11:08 .vim
|
||||
-rw------- 1 michael staff 23086 Sep 21 09:45 .viminfo
|
||||
-rw-r--r-- 1 michael staff 254 Sep 21 09:32 .wget-hsts
|
||||
lrwxr-xr-x 1 michael staff 43 Jan 3 2022 .zshenv -> /Users/michael/.dotfiles/zsh/config/.zshenv
|
||||
drwxr-xr-x 8 michael staff 256 Dec 14 2021 AmazonWorkDocsCompanion
|
||||
drwx------@ 4 michael staff 128 Dec 13 2021 Applications
|
||||
lrwxr-xr-x 1 michael staff 40 Jun 6 12:00 Applications (Parallels) -> /Volumes/Bucket/Applications (Parallels)
|
||||
drwx------@ 30 michael staff 960 Sep 21 08:54 Desktop
|
||||
drwx------@ 19 michael staff 608 Sep 14 10:15 Documents
|
||||
drwx------@ 21 michael staff 672 Sep 21 09:43 Downloads
|
||||
drwx------+ 115 michael staff 3680 Sep 14 10:04 Library
|
||||
drwxr-xr-x 3 michael staff 96 Sep 8 13:06 LocalProjects
|
||||
lrwxr-xr-x 1 michael staff 29 Dec 30 2021 Movies -> /Volumes/Bucket/Videos/Movies
|
||||
lrwxr-xr-x 1 michael staff 21 Dec 30 2021 Music -> /Volumes/Bucket/Music
|
||||
drwx------@ 2 michael staff 64 Mar 6 2023 Parallels
|
||||
drwx------@ 7 michael staff 224 Sep 14 09:52 Pictures
|
||||
drwxr-x---+ 4 michael staff 128 Apr 8 2021 Public
|
||||
drwxr-xr-x+ 3 michael staff 96 Sep 14 09:52 Sites
|
||||
drwxr-xr-x 3 michael staff 96 Jun 7 2021 WorkDocs Drive
|
||||
drwxr-xr-x 3 michael staff 96 Sep 18 11:36 go
|
||||
</code></pre>
|
||||
<p>As you can see, I have a lot of hidden files and folders, your output will probably look much different than mine.</p>
|
||||
<h3>Clearing the Terminal</h3>
|
||||
<p>Often times you may want to clear the terminal screen. You can use the <code>clear</code> command to clear the screen of the terminal.</p>
|
||||
<pre><code class="language-bash">clear
|
||||
</code></pre>
|
||||
<p>Or use a keyboard shortcut <code>⌃l</code> (<code><control>l</code>)</p>
|
||||
<h3>Creating Directories</h3>
|
||||
<p>Use <code>mkdir</code> (make directory) to create a directory.</p>
|
||||
<p>First, let’s move into the <code>tmp</code> directory, the <code>tmp</code> directory is a directory on your file system that is typically used for applications
|
||||
to write temporary logs / files to, it get’s erased everytime your computer is restarted. We can use the <code>cd</code> command that we learned
|
||||
earlier.</p>
|
||||
<pre><code class="language-bash">cd /tmp
|
||||
</code></pre>
|
||||
<p>Next, let’s create a new directory called “MyDirectory”.</p>
|
||||
<pre><code class="language-bash">mkdir MyDirectory
|
||||
</code></pre>
|
||||
<h4>Gotcha’s with ‘mkdir’</h4>
|
||||
<p>By default you can’t create directories that are multiple levels deep, unless the directories already existed or we provide the <code>-p</code> option.
|
||||
For example, if we want to create a directory at <code>/tmp/MyOtherDirectory/Nested/Deeply</code> then we could use the following command when inside
|
||||
the <code>tmp</code> directory.</p>
|
||||
<pre><code class="language-bash">mkdir -p MyOtherDirectory/Nested/Deeply
|
||||
</code></pre>
|
||||
<p>Now, try out using the <code><tab></code> key with the <code>cd</code> command to navigate to the <code>Deeply</code> folder.</p>
|
||||
<pre><code class="language-bash">cd MyOther <tab> <tab> <tab>
|
||||
</code></pre>
|
||||
<h3>Open Command</h3>
|
||||
<p>You can use the open command to open files or folders in the default application for the file type.</p>
|
||||
<p>For example, if we want to open a <code>Finder</code> window while in the <code>/tmp</code> directory, we can use the following command:</p>
|
||||
<pre><code class="language-bash">open .
|
||||
</code></pre>
|
||||
<h3>Manual Pages</h3>
|
||||
<p>Lastly, to learn more about commands you can use the <code>man <command></code>. To bring up the manual pages for the command in the terminal. You can
|
||||
use the arrow keys to navigate around the manual pages and type the letter <code>q</code> to quit / close the manual pages.</p>
|
||||
<pre><code class="language-bash">man ls
|
||||
</code></pre>
|
||||
<p>That is it for the first installment in this series. I hope you learned something and have better understanding of using your terminal.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,214 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Introduction to Programming for HVAC Part-2
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-22-introduction-to-programming-for-hvac-2.png" name="twitter:image"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-2" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/introduction-to-programming-for-hvac-2/" name="og:url"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-2" name="og:title"/>
|
||||
<meta content="In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-22-introduction-to-programming-for-hvac-2.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Introduction to Programming for HVAC Part-2
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-22-introduction-to-programming-for-hvac-2.png"/>
|
||||
<p>In this article, learn about installing a package manager. If you missed it, check out the
|
||||
<a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first</a> article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.</p>
|
||||
<h2>What is a Package Manager</h2>
|
||||
<p>A package manager is a piece of software that helps to install software and manage updates for your system. For me, the first thing that I
|
||||
do with a new machine is install <code>Homebrew</code>. <a href="https://brew.sh">Homebrew</a> is my preferred package manager for <code>macOS</code>.</p>
|
||||
<h2>Why</h2>
|
||||
<p>A package manager is nice because often software relies / requires other dependencies in order to work properly. By using a package manager
|
||||
it will make sure that the correct dependencies are installed for the software that you need to run. It allows you to be able to update and
|
||||
manage software through a centralized interface.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>Installation is simple. Open up your terminal and enter the following command (easiest to just copy / paste from the homepage linked above).</p>
|
||||
<pre><code class="language-bash">/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
</code></pre>
|
||||
<p>This will prompt you for your password in order to create some directories and install the required software for <code>brew</code> to work. The
|
||||
installation may take some time, while it downloads the command line tools for <code>Xcode</code>.</p>
|
||||
<p>When completed, follow the <code>Next Steps</code> and copy / paste the command listed, that should look like below.</p>
|
||||
<pre><code class="language-bash">(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/<you>/.zprofile
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-22-brew-output.png" alt="brew-output" /></p>
|
||||
<p>The first line of this command sets up some things in your shell profile (which we have not discussed yet) that will make <code>Homebrew</code>
|
||||
available to you anytime you start a new session in your terminal. The second line of the command makes it available in your current
|
||||
terminal session.</p>
|
||||
<p>Next run the following command and make sure that everything is setup correctly.</p>
|
||||
<pre><code class="language-bash">brew doctor
|
||||
</code></pre>
|
||||
<p>Which should output the following:</p>
|
||||
<pre><code>Your system is ready to brew.
|
||||
</code></pre>
|
||||
<h3>Terminology</h3>
|
||||
<p>Homebrew calls command line applications <code>formula</code> and normal graphical applications <code>casks</code>. It has the ability to install both styles of
|
||||
applications.</p>
|
||||
<h2>Search Command</h2>
|
||||
<p>The following command is used to search for software packages:</p>
|
||||
<pre><code class="language-bash">brew search chrome
|
||||
</code></pre>
|
||||
<h2>Open a Homepage</h2>
|
||||
<p>The following command can be used to view the homepage of a formula or cask in your browser:</p>
|
||||
<pre><code class="language-bash">brew home google-chrome
|
||||
</code></pre>
|
||||
<h2>Update Homebrew</h2>
|
||||
<p>The following command is used to update homebrew:</p>
|
||||
<pre><code class="language-bash">brew update
|
||||
</code></pre>
|
||||
<h2>Update packages installed on your system</h2>
|
||||
<p>The following command is used to update software that is installed / managed by homebrew.</p>
|
||||
<pre><code class="language-bash">brew upgrade
|
||||
</code></pre>
|
||||
<p>You can combine the update and upgrade commands, which will update homebrew and upgrade all the software it manages on you machine with the
|
||||
following command.</p>
|
||||
<pre><code class="language-bash">brew update && brew upgrade
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>That is it for this article. I will say that for me, when I find a piece of software that I want to use, I generally try to search for it in
|
||||
<code>brew</code> first, before installing it via other means.</p>
|
||||
<p>I hope you’ve found this article helpful. In the next article we will start to use the skills that we’ve learned in these first two articles
|
||||
and write our first program / script.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,228 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Introduction to Programming for HVAC Part-3
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-24-introduction-to-programming-for-hvac-3.png" name="twitter:image"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-3" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/introduction-to-programming-for-hvac-3/" name="og:url"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-3" name="og:title"/>
|
||||
<meta content="In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-24-introduction-to-programming-for-hvac-3.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Introduction to Programming for HVAC Part-3
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-24-introduction-to-programming-for-hvac-3.png"/>
|
||||
<p>In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up <a href="https://mhoush.com/series/programming-for-hvac/">here</a> before continuing with this article.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we
|
||||
will write, that will remove the background from an image.</p>
|
||||
<h3>Creating a scripts directory</h3>
|
||||
<p>We learned in the <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first article</a> how to use our terminal. Today we are
|
||||
going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.</p>
|
||||
<p><strong>Create a directory</strong></p>
|
||||
<pre><code class="language-bash">mkdir -p ~/.local/bin
|
||||
</code></pre>
|
||||
<p>The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> The <code>-p</code> option allows us to create nested directories if the parent directory doesn’t exist.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<h3>Hello World</h3>
|
||||
<p>It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get
|
||||
started.</p>
|
||||
<p><strong>Creating our script file:</strong></p>
|
||||
<pre><code class="language-bash">touch hello-world.sh
|
||||
</code></pre>
|
||||
<p><strong>Now open the file:</strong></p>
|
||||
<pre><code class="language-bash">open hello-world.sh
|
||||
</code></pre>
|
||||
<p>The above command should open the file in the <code>TextEdit</code> application. In order to make the text edit application to not auto-capitalize
|
||||
words and play more nicely, we need to adjust some settings. Open the settings by pressing <code>⌘,</code>.</p>
|
||||
<p>In the <strong>Format</strong> section, select <em>Plain text</em> and in the <strong>Options</strong> section de-select <em>Check spelling as you type</em>.</p>
|
||||
<p><img src="/articles/images/2023-09-24-text-settings.png" alt="text-settings" /></p>
|
||||
<p>At this point for changes to take place, you will need to close the file and re-open.</p>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> In your terminal you can run the last command in your history by using the <code>↑</code> (Up) arrow key.</p>
|
||||
</blockquote>
|
||||
<p>Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:</p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo 'Hello World!'
|
||||
</code></pre>
|
||||
<p>The first line is referred to as the <code>shebang</code>, this tells your computer which shell interperter to run your file. I have not explained the
|
||||
shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the <code>sh</code> posix
|
||||
shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just
|
||||
about any machine you were on).</p>
|
||||
<p>The second line we are using the built-in <code>echo</code> command and passing it the ‘Hello World!’ argument.</p>
|
||||
<p>Now save and close the file <code>⌘s</code> (to save) <code>⌘q</code> (to quit the text edit application).</p>
|
||||
<p><strong>Run the program from your terminal:</strong></p>
|
||||
<pre><code class="language-bash">/bin/sh hello-world.sh
|
||||
</code></pre>
|
||||
<p>You should see that <code>Hello World!</code> was printed to your console.</p>
|
||||
<p><img src="/articles/images/2023-09-24-hello-output.png" alt="hello-output" /></p>
|
||||
<h3>Make Executable</h3>
|
||||
<p>Now that we have our basic script working, let’s make it an executable.</p>
|
||||
<p><strong>In your terminal, type the following:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x hello-world.sh
|
||||
</code></pre>
|
||||
<p>This will change the mode of the file type to be an executable.</p>
|
||||
<p>Now move / rename the file so we don’t have to call it using <code>.sh</code> extension:</p>
|
||||
<pre><code class="language-bash">mv hello-world.sh hello-world
|
||||
</code></pre>
|
||||
<p>Now that the file is executable, we can execute it by just calling the name of the file.</p>
|
||||
<pre><code class="language-bash">./hello-world
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> We have to prefix the file name with <code>./</code> in the above command so that it knows where to find our file. The <code>./</code> is saying run
|
||||
this file in our current directory. In the future we will setup our shell so that it knows to look in our <code>~/.local/bin</code> directory for
|
||||
scripts, so that we can call them without this prefix.</p>
|
||||
</blockquote>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program
|
||||
from our terminal. I should mention that the <code>TextEdit</code> application is generally not how you would program, people typically use what is
|
||||
known as an <code>IDE (integrated development environment)</code>, however I chose to use the <code>TextEdit</code> application because it is built-in to <code>macOS</code>
|
||||
and allowed us to accomplish our goal without downloading other software.</p>
|
||||
<p>In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time.
|
||||
Thank you for reading to this point.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,294 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Introduction to Programming for HVAC Part-4
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-26-introduction-to-programming-for-hvac-4.png" name="twitter:image"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-4" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/introduction-to-programming-for-hvac-4/" name="og:url"/>
|
||||
<meta content="Introduction to Programming for HVAC Part-4" name="og:title"/>
|
||||
<meta content="This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-26-introduction-to-programming-for-hvac-4.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Introduction to Programming for HVAC Part-4
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-26-introduction-to-programming-for-hvac-4.png"/>
|
||||
<p>This article builds upon our <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-3/">last</a> article, so make sure to catch up
|
||||
before continuing with this article.</p>
|
||||
<h2>Arguments</h2>
|
||||
<p>Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments are
|
||||
supplied to shell scripts are separated by a space <code>" "</code>, as opposed to options which start with a <code>-<character></code> or <code>--<word></code>.</p>
|
||||
<p>To illustrate this, let’s change our <code>hello-world</code> script we wrote in the last article.</p>
|
||||
<p><strong>Move into our scripts directory:</strong></p>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<p><strong>Make a copy of the hello-world script:</strong></p>
|
||||
<pre><code class="language-bash">cp hello-world greet
|
||||
</code></pre>
|
||||
<p>Above we make a copy of the hello-world file and name the copy <code>greet</code>.</p>
|
||||
<p><strong>Open the greet file:</strong></p>
|
||||
<pre><code class="language-bash">open -a TextEdit greet
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Because the greet file is an executable, in order to open it in the <code>TextEdit</code> application we must supply the <code>-a</code> option.
|
||||
Otherwise it will just run our <code>greet</code> program in another terminal. Use <code>man open</code> to read more about the open command.</p>
|
||||
</blockquote>
|
||||
<p><strong>Edit the greet file:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo "Hello, ${1}!"
|
||||
</code></pre>
|
||||
<p>Make sure to save <code>⌘s</code> the file.</p>
|
||||
<p>Take note that the quotes need to be changed to <code>"</code> (double quotes) from our original <code>hello-world</code> program.</p>
|
||||
<p>The <code>${1}</code> is indicating that we will insert / interpret the first argument passed to our program and insert it at that location. Arguments
|
||||
are interpreted in order they are passed in with <code>${0}</code> always representing the filename of the program that is called (generally not needed
|
||||
/ used in your scripts).</p>
|
||||
<p><strong>Test it out:</strong></p>
|
||||
<pre><code class="language-bash">./greet Michael
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-26-greet-output.png" alt="greet-output" /></p>
|
||||
<p>If you’d like to supply multiple words (or arguments that contain spaces) as a single argument then you can wrap them in quotes.</p>
|
||||
<pre><code class="language-bash">./greet "Michael Housh"
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Wrapping in quotes is especially useful for commands that take file paths, if any of the folders or file names contain spaces.</p>
|
||||
</blockquote>
|
||||
<h2>More Useful Program</h2>
|
||||
<p>At this point, it’s time to build a more useful program that we can use. First, we must download some dependencies for our program.</p>
|
||||
<p><strong>Install imagemagick:</strong></p>
|
||||
<pre><code class="language-bash">brew install imagemagick
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you’d like to check out the documentation / website for imagemagick you can run <code>brew home imagemagick</code>.</p>
|
||||
</blockquote>
|
||||
<p>This will take a bit for brew to install imagemagick and it’s dependencies. When it’s completed, we can check to make sure that imagemagick
|
||||
is installed by running the following command.</p>
|
||||
<pre><code class="language-bash">magick --version
|
||||
</code></pre>
|
||||
<p>It should output something along the lines of this below.</p>
|
||||
<pre><code class="language-bash">Version: ImageMagick 7.1.1-17 Q16-HDRI aarch64 21569 https://imagemagick.org
|
||||
Copyright: (C) 1999 ImageMagick Studio LLC
|
||||
License: https://imagemagick.org/script/license.php
|
||||
Features: Cipher DPC HDRI Modules OpenMP(5.0)
|
||||
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
|
||||
Compiler: gcc (4.2)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Don’t forget, you can use the <code>clear</code> command to clear the terminal.</p>
|
||||
</blockquote>
|
||||
<p><strong>Create our script:</strong></p>
|
||||
<pre><code class="language-bash">touch mktrans
|
||||
</code></pre>
|
||||
<p>We are going to name our script <code>mktrans</code> as a short for make transparent.</p>
|
||||
<p><strong>Open the file:</strong></p>
|
||||
<pre><code class="language-bash">open mktrans
|
||||
</code></pre>
|
||||
<p><strong>The program:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/bash
|
||||
|
||||
# The input file path, passed in as the first argument.
|
||||
inputfile="${1}"
|
||||
|
||||
# The color to make transparent, optionally passed in as the second argument.
|
||||
# by default we handle / make white backgrounds transparent.
|
||||
color="${2:-white}"
|
||||
|
||||
# Use the built-in basename command to normalize the input file name
|
||||
# this will convert a file path, such as ~/Pictures/my-image.png to my-image.png.
|
||||
fullfilename=$(basename -- "$inputfile")
|
||||
|
||||
# Use the text of the `fullfilename` up to the first '.' as the file name.
|
||||
filename="${fullfilename%%.*}"
|
||||
|
||||
# Use the text after the last '.' as the file extension.
|
||||
extension="${fullfilename##*.}"
|
||||
|
||||
# Create the output file name to use.
|
||||
#
|
||||
# For an input file of `input.png`, our output name would be
|
||||
# `input-transparent.png`.
|
||||
#
|
||||
# This will output the file in the directory that we are
|
||||
# in when we use our script (which may different than where
|
||||
# the image is located)
|
||||
outputfile="${filename}-transparent.${extension}"
|
||||
|
||||
# Make the magick happen :)
|
||||
convert "${inputfile}" -fuzz 10% -transparent "${color}" "${outputfile}"
|
||||
|
||||
</code></pre>
|
||||
<p>I’ve included comments in the program above, which is good practice, as there is high odds that you will forget what is going on when / if
|
||||
you open the file up in the future to look at it. We are using a lot of what is called parameter expansion magic in this file. You can read
|
||||
up more on what we are doing in the <a href="https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html">bash documentation</a>.</p>
|
||||
<p>This script is far from perfect, there are a lot of things to be improved upon. For example, if you download / save the banner image of this
|
||||
post and run this script, it will also remove some color in the wizards beard, eyes, and eye brows. However, it does work very well for my
|
||||
general use case, which is to remove the background from screenshots of pdf documents. It should be noted that it will not work on all types
|
||||
of images, some image types do not allow transparency, so it is safest to call this with input image being a <code>.png</code> image type, however you
|
||||
can use the <code>imagemagick</code> program that we downloaded to convert other image types to <code>.png</code>, but that will be left up to you to figure out.</p>
|
||||
<h2>Using Our Program</h2>
|
||||
<p>This is going to assume that you have download the banner image at the top of this article. You can do this by right-clicking and choosing
|
||||
<code>Save As</code>. This should save the image in your downloads folder, and you can keep the name of <code>part4-banner.png</code>.</p>
|
||||
<p><strong>Make the program executable:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x mktrans
|
||||
</code></pre>
|
||||
<p><strong>Make the image background transparent:</strong></p>
|
||||
<pre><code class="language-bash">./mktrans ~/Downloads/part4-banner.png
|
||||
</code></pre>
|
||||
<p><strong>Open the image:</strong></p>
|
||||
<pre><code class="language-bash">open part4-banner-transparent.png
|
||||
</code></pre>
|
||||
<p>It should look like below.</p>
|
||||
<p><img src="/articles/images/2023-09-26-part4-banner-transparent.png" alt="banner-transparent" /></p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you are viewing this site in <em>light</em> mode, the image does not look that bad. Hit the moon button in the top above my profile
|
||||
image to see some of the flaws of our program.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Remove the image from the <code>~/.local/bin</code> by using <code>rm part4-banner-transparent.png</code>. Be aware that the <code>rm</code> command can not be
|
||||
undone, so use with caution / knowledge. It is safer, until you are more comfortable to use the <code>Finder</code> application and move the file to
|
||||
the trash. In <code>Finder</code>, you can show hidden directories by typing <code>⌘.</code> or go directly to the folder by typing <code>⇧⌘G</code> (shift + command + G)
|
||||
and in the pop-up typing <code>~/.local/bin</code>.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p>That is it for this article. In the upcoming articles we will setup our <code>shell</code> environment so that we can use the commands we’ve built
|
||||
without having to navigate to the <code>~/.local/bin</code> directory. Thank you for reading to the end, I hope you’re finding this series helpful.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -70,26 +70,26 @@ This..." name="og:description"/>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-12-14-most-important-job.gif"/>
|
||||
<p>This short tech tip is about something one of my good friends in the trade told me a long time ago,<br />
|
||||
<p>This short tech tip is about something one of my good friends in the trade told me a long time ago,
|
||||
that has stuck with me through the years. It is a simple phrase / mindset.</p>
|
||||
<blockquote>
|
||||
<p>“The current job you’re on, is the most important job of your day”.</p>
|
||||
</blockquote>
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.<br />
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use<br />
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging<br />
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging
|
||||
out there.</p>
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted<br />
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem<br />
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an<br />
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few<br />
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few
|
||||
and far between, but I do want to acknowledge that scenario does also exist.</p>
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.<br />
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in<br />
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a<br />
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business<br />
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business
|
||||
standpoint.</p>
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope<br />
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope
|
||||
you find it helpful and it sticks with you through your career as it has mine.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
@@ -125,7 +125,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -139,7 +138,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -170,6 +168,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
221
deploy/articles/2023/pounds-of-water-removed/index.html
Normal file
221
deploy/articles/2023/pounds-of-water-removed/index.html
Normal file
@@ -0,0 +1,221 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Pounds of Water Removed
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-08-pounds-of-water-removed.png" name="twitter:image"/>
|
||||
<meta content="Pounds of Water Removed" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/pounds-of-water-removed/" name="og:url"/>
|
||||
<meta content="Pounds of Water Removed" name="og:title"/>
|
||||
<meta content="This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-08-pounds-of-water-removed.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Pounds of Water Removed
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-08-pounds-of-water-removed.png"/>
|
||||
<p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
175
deploy/articles/2023/rss-feed/index.html
Normal file
175
deploy/articles/2023/rss-feed/index.html
Normal file
@@ -0,0 +1,175 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Rss Feed
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-08-10-rss-feed.gif" name="twitter:image"/>
|
||||
<meta content="Rss Feed" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/rss-feed/" name="og:url"/>
|
||||
<meta content="Rss Feed" name="og:title"/>
|
||||
<meta content="In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-08-10-rss-feed.gif" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Rss Feed
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-08-10-rss-feed.gif"/>
|
||||
<p>In this article I will show how to add this site’s rss feed. In particular, we will be using <a href="https://netnewswire.com">NetNewsWire</a> as the
|
||||
rss reader.</p>
|
||||
<h2>What is an RSS Feed</h2>
|
||||
<p>An RSS feed will show you new posts, generally from a blog, without having to remember to check the website at regular intervals or signup
|
||||
for an email list for notifications.</p>
|
||||
<p>NetNewsWire puts an RSS feed as:</p>
|
||||
<p><strong>It’s like podcasts</strong> - but for <em>reading.</em></p>
|
||||
<p>You consume an RSS feed, using an RSS reader application or extension in your browser.</p>
|
||||
<h2>Step One</h2>
|
||||
<p>First find and download an RSS reader, you can download <a href="https://netnewswire.com">NetNewsWire</a> for macOS from the link, or for iOS from the
|
||||
<a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210">AppStore</a>.</p>
|
||||
<h2>Step Two</h2>
|
||||
<p>Add the rss feed to stay up to date when I publish new articles.</p>
|
||||
<ol>
|
||||
<li>Click the plus in the right side of the sidebar and select <code>New Feed...</code></li>
|
||||
<li>In the URL field add: <code>https://mhoush.com/articles/feed.xml</code></li>
|
||||
<li>Optionally give it a name</li>
|
||||
<li>Click the <code>Add</code> button.</li>
|
||||
</ol>
|
||||
<p><img src="/articles/images/2023-08-10-rss-feed.gif" alt="rss gif" /></p>
|
||||
<p>That’s it.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,209 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Dehumidifier Sizing by Latent Load
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to..." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-15-sizing-dehumidifier-by-latent-load.png" name="twitter:image"/>
|
||||
<meta content="Dehumidifier Sizing by Latent Load" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/sizing-dehumidifier-by-latent-load/" name="og:url"/>
|
||||
<meta content="Dehumidifier Sizing by Latent Load" name="og:title"/>
|
||||
<meta content="This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to..." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-15-sizing-dehumidifier-by-latent-load.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Dehumidifier Sizing by Latent Load
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-15-sizing-dehumidifier-by-latent-load.png"/>
|
||||
<p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -66,71 +66,71 @@ It has been one of those “when it rains, it pours” type of weeks. As..." nam
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-18-the-struggle.png"/>
|
||||
<p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If<br />
|
||||
<p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.</p>
|
||||
<h2>The struggle</h2>
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby<br />
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby
|
||||
/ complainer, which is not my intention, but here it goes.</p>
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived<br />
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9<br />
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and<br />
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still<br />
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and<br />
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and
|
||||
they’ve basically just been making her comfortable.</p>
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,<br />
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be<br />
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be
|
||||
a long recovery time.</p>
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /<br />
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread<br />
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread
|
||||
throughout the living room(s).</p>
|
||||
<p>An online friend lost her mother.</p>
|
||||
<p>All of these things have just got me emotional.</p>
|
||||
<h2>My secrets</h2>
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I<br />
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still<br />
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still
|
||||
drink on occasion, but not as I once did.</p>
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being<br />
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people<br />
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most<br />
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is<br />
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on<br />
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on
|
||||
occasion lead me into turmoil when I find out some true identity / personality of someone.</p>
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want<br />
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to<br />
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me<br />
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for<br />
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my<br />
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but<br />
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but
|
||||
truthfully I do not.</p>
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot<br />
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to<br />
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t<br />
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future<br />
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future
|
||||
pondering, perhaps).</p>
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what<br />
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not<br />
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time<br />
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having<br />
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having
|
||||
thoughtful / genuine responses.</p>
|
||||
<h2>Community</h2>
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems<br />
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of<br />
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not<br />
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not
|
||||
most of the time, not saying it can’t be / in absolute terms).</p>
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for<br />
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for<br />
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their<br />
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their
|
||||
best to lift me up when I’m down.</p>
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the<br />
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the<br />
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges<br />
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges
|
||||
;)</p>
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m<br />
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks<br />
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together<br />
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of<br />
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was<br />
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and<br />
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and
|
||||
it’s basic AF), but that truly made me feel useful / great after being down in the dumps for a bit.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I’ve probably rambled enough and am losing direction here, so I will end with a few things.</p>
|
||||
@@ -140,43 +140,43 @@ it’s basic AF), but that truly made me feel useful / great after being down in
|
||||
<li>Spend time with your loved ones, while you can.</li>
|
||||
<li>Tell someone you love them.</li>
|
||||
</ol>
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I<br />
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I
|
||||
left you off, I’m sorry and please do not take it personally.</p>
|
||||
<ol>
|
||||
<li>Bryan Orr
|
||||
<ul>
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and<br />
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,<br />
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,
|
||||
mostly all the following names would not even be in my vocabulary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ty Branaman (forget exactly how to spell his last name).
|
||||
<ul>
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be<br />
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be
|
||||
positive all the time, however it brings me hope and joy everytime!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dustin (mother f’n) Cole
|
||||
<ul>
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I<br />
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I
|
||||
can rely on him anytime I need it!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Genry Garcia
|
||||
<ul>
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,<br />
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,
|
||||
baby)!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Chris Hughes
|
||||
<ul>
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and<br />
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and
|
||||
he’s a great motivator because of his action items :)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Eric Kaiser
|
||||
<ul>
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because<br />
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because
|
||||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -187,26 +187,26 @@ of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</li>
|
||||
<li>HVAChicks Jennifer (I’ll butcher her last name from memory)
|
||||
<ul>
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I<br />
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I
|
||||
can’t wait to meet her in person one day soon!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HVAC Overtime Crew
|
||||
<ul>
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream<br />
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream
|
||||
on Friday’s. And I interact with A-Team a lot and really appreciate him / them!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Alicia Hollon
|
||||
<ul>
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,<br />
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,
|
||||
love you babe!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt<br />
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt
|
||||
currently. My mother is the kindest gentlest soul that I’ve ever met. I look up to all 5’ of her!</p>
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today<br />
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today
|
||||
and tomorrow!</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
@@ -242,7 +242,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -256,7 +255,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -287,6 +285,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
196
deploy/articles/2023/why-mini-splits-stink/index.html
Normal file
196
deploy/articles/2023/why-mini-splits-stink/index.html
Normal file
@@ -0,0 +1,196 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Why Mini Splits Stink
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/static/prism.css" rel="stylesheet"/>
|
||||
<meta content="In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles...." name="description"/>
|
||||
<meta content="summary_large_image" name="twitter:card"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-14-why-mini-splits-stink.png" name="twitter:image"/>
|
||||
<meta content="Why Mini Splits Stink" name="twitter:image:alt"/>
|
||||
<meta content="http://localhost:3000/articles/images//articles/2023/why-mini-splits-stink/" name="og:url"/>
|
||||
<meta content="Why Mini Splits Stink" name="og:title"/>
|
||||
<meta content="In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles...." name="og:description"/>
|
||||
<meta content="http://localhost:3000/articles/images/2023-09-14-why-mini-splits-stink.png" name="og:image"/>
|
||||
<meta content="1014" name="og:image:width"/>
|
||||
<meta content="530" name="og:image:height"/>
|
||||
<script crossorigin="anonymous" src="https://kit.fontawesome.com/f209982030.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<article class="prose">
|
||||
<h1>
|
||||
Why Mini Splits Stink
|
||||
</h1>
|
||||
<div class="-mt-6">
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 14, 2023</span>758 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-14-why-mini-splits-stink.png"/>
|
||||
<p>In this general article, I explain why I don’t generally like to use mini-splits.</p>
|
||||
<h2>The Positive Sides</h2>
|
||||
<p>When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles. These units do offer really high efficiency and becuase they’re “ductless” you don’t have duct gains/losses.</p>
|
||||
<p>These units are common in many other countries and have been around for a long time. They do are generally quick and fairly easy to install,
|
||||
but are mostly a pain in the tail to work on.</p>
|
||||
<p>So, the plus side to these units are that they are really efficient, they generally have models that have a high-heat output for colder
|
||||
climates, although this option is becoming more prevelant in traditional unitary style heat pumps as well. You do not have heat gains or
|
||||
losses due to ductwork being in unconditioned spaces.</p>
|
||||
<h2>The Down Sides</h2>
|
||||
<p>Most mini-split systems do not do the greatest at humidity removal. This is partially because they use proprietary algorithms to control the
|
||||
blower and compressor. They do achieve long run-times, which is often good for comfort stand points, however there is generally not a good
|
||||
way to control / hack them to work towards achieving good IAQ.</p>
|
||||
<p>These units offer next to no filtration, so in order to have filtration you need to utilize a stand-alone / portable filtration means. Which
|
||||
a lot of the portable filtration systems have problems of their own (come bundled with UV / PCO technology or other “space” technology that
|
||||
can lead to their own IAQ problems). It also introduces another fan, which may / may not be that efficient. In other words, when considering
|
||||
other items to make them more comparable to what a traditional system offers, are they really that much more efficient?</p>
|
||||
<p>These systems also do not have a good method of offering basic fresh air control / management, so other systems, such as an ERV need to be
|
||||
installed to handle the fresh air requirements of the building.</p>
|
||||
<p>The controls for these systems are often hard to understand / use. They do allow you to change fan speeds, but they control the compressor.
|
||||
The fans often run all the time, which is not necessarily a bad thing, but they don’t really offer many ramping profiles or adjustments to
|
||||
change the blower speed when the compressor is off vs. on.</p>
|
||||
<p>These systems get dirty quickly, are generally a pain to clean properly, and are not easily repairable. Manufacturer support is often poor,
|
||||
the documents aren’t always translated very well, and most technicians hate to work on them.</p>
|
||||
<h1>What about ducted models?</h1>
|
||||
<p>But what about the ducted models? Well, the ducted models are a step in the right direction. You can use filters on them, although some of
|
||||
the manufacturer’s do not recommend installing better / improved filter cabinets (like a 4-5” media filter), however we have done that
|
||||
successfully many times and always include media filters as an option on our installations, but you do need to make sure that they have a
|
||||
very low pressure drop, as they a lot are not designed for very much static pressure.</p>
|
||||
<p>The ducted models still generally have the same control problems, previously mentioned. If you read my introduction to the
|
||||
<a href="https://mhoush.com/posts/coil-bypass-overview/">coil-bypass-system</a>, you have a basic understanding that even most traditional systems /
|
||||
designers do not focus on the proper air-changes in a structure to maintain proper IAQ levels.</p>
|
||||
<p>You can’t easily pair mini-splits with larger fan-coils because they are “communicating” style systems.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Don’t get me wrong, there are applications that are well suited for mini-splits. These are often applications like sun-rooms, garages, small
|
||||
server-rooms / network storage rooms, and many others. But in my opinion these are not at all my favorite and are generally really far down
|
||||
my list of options that I want to recommend to my clients.</p>
|
||||
<p>As an industry, I feel we need to step back and refocus on the pillars of IAQ. Filtration, fresh-air, and humidity control. The
|
||||
manufacturers / government should put less emphasis on chasing efficiency just to shoot ourselves in the foot and loose the qualities that
|
||||
make traditional / unitary style systems cover more if not all of the 3 pillars of proper IAQ.</p>
|
||||
<p>There’s plenty that I did not cover and I’m sure I missed some things, but just needed to rant for a few minutes… Thank you for making it
|
||||
to the end!</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
Written by
|
||||
</h2>
|
||||
<div class="flex flex-col lg:flex-row gap-8">
|
||||
<div class="flex-[0_0_120px]">
|
||||
<img class="w-[120px] h-[120px] rounded-full" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
<div class="prose">
|
||||
<h3 class="!m-0">
|
||||
Michael Housh
|
||||
</h3>
|
||||
<p class="text-gray">
|
||||
HVAC business owner with over 27 years of experience. Writes articles about HVAC,
|
||||
Programming, Home-Performance, and Building Science
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-16">
|
||||
<h2 class="text-4xl font-extrabold mb-8">
|
||||
More articles
|
||||
</h2>
|
||||
<div class="grid lg:grid-cols-2 gap-10">
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2025/vapor-htmx-todo-app/">Vapor + HTMX</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">January 05, 2025</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2024/free-as-in-freedom/">Free As In Freedom</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">April 09, 2024</span><a href="/articles/tag/general/">general</a>, <a href="/articles/tag/open-source/">open-source</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<p class="prose mt-8">
|
||||
<a href="/articles/">› See all articles</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,25 +68,25 @@ converted to other formats, such as html, pdf, docx, and many more. All..." name
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-21-you-should-learn-markdown.png"/>
|
||||
<p>This is a quick article about why you should learn markdown.</p>
|
||||
<h2>What is markdown</h2>
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily<br />
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on<br />
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on
|
||||
this website are written in markdown, here’s an image of this article written in markdown.</p>
|
||||
<p><img src="/articles/images/2023-10-21-markdown.png" alt="markdown" /></p>
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your<br />
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software<br />
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing<br />
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing
|
||||
research papers or even books.</p>
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,<br />
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to<br />
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of<br />
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using<br />
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more<br />
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more
|
||||
professional, however I am working on solutions to migrate those to be markdown based.</p>
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client<br />
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many<br />
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many
|
||||
common document related tasks.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>You can learn more about the syntax used for markdown at<br />
|
||||
<p>You can learn more about the syntax used for markdown at
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">markdownguide.org</a>.</p>
|
||||
<h3>A non-exhaustive list of where you can use Markdown and editors.</h3>
|
||||
<table>
|
||||
@@ -118,7 +118,7 @@ common document related tasks.</p>
|
||||
<p>You can use tools such as <a href="https://pandoc.org/#">pandoc</a> to convert Markdown files to other formats.</p>
|
||||
<p><img src="/articles/images/2023-10-21-pandoc.gif" alt="pandoc" /></p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /<br />
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /
|
||||
content creation.</p>
|
||||
<p>Thanks for reading until the end!</p>
|
||||
</article>
|
||||
@@ -155,7 +155,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -169,7 +168,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -200,6 +198,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,50 +68,50 @@ job, overshadowing the intricate skill set and technical expertise required in..
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-02-27-elevating-hvac.png"/>
|
||||
<p>This is a guest post from my good friend, <strong>Ty Branaman</strong>.</p>
|
||||
<h2>Introduction:</h2>
|
||||
<p>Heating, Ventilation, and Air Conditioning (HVAC) is often mistakenly categorized as a simple labor<br />
|
||||
job, overshadowing the intricate skill set and technical expertise required in this field. Labor<br />
|
||||
jobs are also very important positions needed to keep society running. HVAC, like other skilled<br />
|
||||
trades, demands a high level of knowledge, precision, and adaptability. This article aims to shed<br />
|
||||
light on the misconception surrounding HVAC, emphasizing its status as a skilled trade that plays a<br />
|
||||
<p>Heating, Ventilation, and Air Conditioning (HVAC) is often mistakenly categorized as a simple labor
|
||||
job, overshadowing the intricate skill set and technical expertise required in this field. Labor
|
||||
jobs are also very important positions needed to keep society running. HVAC, like other skilled
|
||||
trades, demands a high level of knowledge, precision, and adaptability. This article aims to shed
|
||||
light on the misconception surrounding HVAC, emphasizing its status as a skilled trade that plays a
|
||||
pivotal role in creating comfortable and efficient living and working environments.</p>
|
||||
<h2>Technical Proficiency:</h2>
|
||||
<p>One of the defining features that distinguish HVAC as a skilled trade is the level of technical<br />
|
||||
proficiency required. HVAC professionals must have a deep understanding of thermodynamics, fluid<br />
|
||||
mechanics, electrical circuits, Psychrometrics and air properties. This knowledge is essential for<br />
|
||||
<p>One of the defining features that distinguish HVAC as a skilled trade is the level of technical
|
||||
proficiency required. HVAC professionals must have a deep understanding of thermodynamics, fluid
|
||||
mechanics, electrical circuits, Psychrometrics and air properties. This knowledge is essential for
|
||||
designing, installing, and maintaining HVAC systems that operate seamlessly and efficiently.</p>
|
||||
<h2>System Design and Installation:</h2>
|
||||
<p>HVAC professionals are involved in the intricate process of designing and installing heating,<br />
|
||||
ventilation, and air conditioning systems. This task requires not only a thorough understanding of<br />
|
||||
the physical principles governing HVAC but also the ability to tailor solutions to meet the unique<br />
|
||||
needs of each space. Proper system design and installation are crucial for achieving optimal energy<br />
|
||||
<p>HVAC professionals are involved in the intricate process of designing and installing heating,
|
||||
ventilation, and air conditioning systems. This task requires not only a thorough understanding of
|
||||
the physical principles governing HVAC but also the ability to tailor solutions to meet the unique
|
||||
needs of each space. Proper system design and installation are crucial for achieving optimal energy
|
||||
efficiency and performance.</p>
|
||||
<h2>Diagnostic Skills:</h2>
|
||||
<p>Troubleshooting and diagnosing issues in HVAC systems require a keen analytical mind and<br />
|
||||
problem-solving skills. Skilled HVAC technicians possess the ability to identify and rectify<br />
|
||||
problems efficiently, ensuring minimal downtime and disruption to the comfort of occupants. This<br />
|
||||
<p>Troubleshooting and diagnosing issues in HVAC systems require a keen analytical mind and
|
||||
problem-solving skills. Skilled HVAC technicians possess the ability to identify and rectify
|
||||
problems efficiently, ensuring minimal downtime and disruption to the comfort of occupants. This
|
||||
diagnostic acumen is a hallmark of a trade that goes beyond routine labor.</p>
|
||||
<h2>Adaptability to Advanced Technologies:</h2>
|
||||
<p>The HVAC industry is in a constant state of evolution, with new technologies and innovations<br />
|
||||
continuously being introduced. Skilled HVAC professionals are adaptable and stay abreast of these<br />
|
||||
advancements. From smart thermostats to energy-efficient systems, they integrate cutting-edge<br />
|
||||
<p>The HVAC industry is in a constant state of evolution, with new technologies and innovations
|
||||
continuously being introduced. Skilled HVAC professionals are adaptable and stay abreast of these
|
||||
advancements. From smart thermostats to energy-efficient systems, they integrate cutting-edge
|
||||
technologies to provide state-of-the-art solutions for their clients.</p>
|
||||
<h2>Safety and Compliance:</h2>
|
||||
<p>Safety is paramount in the HVAC trade. Professionals must adhere to strict safety protocols to<br />
|
||||
protect both themselves and the occupants of the spaces they work in. Additionally, compliance with<br />
|
||||
industry regulations and codes is a testament to the skilled nature of the trade, ensuring that HVAC<br />
|
||||
<p>Safety is paramount in the HVAC trade. Professionals must adhere to strict safety protocols to
|
||||
protect both themselves and the occupants of the spaces they work in. Additionally, compliance with
|
||||
industry regulations and codes is a testament to the skilled nature of the trade, ensuring that HVAC
|
||||
systems meet the highest standards of safety and efficiency.</p>
|
||||
<h2>Continual Learning and Certification:</h2>
|
||||
<p>Unlike a labor job, HVAC professionals engage in continual learning to stay current with industry<br />
|
||||
trends and technological advancements. Many pursue certifications and attend training programs to<br />
|
||||
enhance their skills and expand their knowledge base. This commitment to ongoing education is a<br />
|
||||
<p>Unlike a labor job, HVAC professionals engage in continual learning to stay current with industry
|
||||
trends and technological advancements. Many pursue certifications and attend training programs to
|
||||
enhance their skills and expand their knowledge base. This commitment to ongoing education is a
|
||||
hallmark of skilled trades.</p>
|
||||
<h2>Conclusion:</h2>
|
||||
<p>Heating, Ventilation, and Air Conditioning is undeniably a skilled trade that goes beyond the<br />
|
||||
perception of a labor job. Labor jobs are also very important to the function of society and I have<br />
|
||||
proudly done these jobs myself. The technical proficiency, problem-solving abilities, adaptability,<br />
|
||||
and commitment to safety make HVAC professionals essential contributors to the creation of<br />
|
||||
comfortable and efficient indoor environments. It is crucial to recognize and appreciate the skill<br />
|
||||
set inherent in the HVAC trade, as it plays a vital role in shaping the quality of life for<br />
|
||||
<p>Heating, Ventilation, and Air Conditioning is undeniably a skilled trade that goes beyond the
|
||||
perception of a labor job. Labor jobs are also very important to the function of society and I have
|
||||
proudly done these jobs myself. The technical proficiency, problem-solving abilities, adaptability,
|
||||
and commitment to safety make HVAC professionals essential contributors to the creation of
|
||||
comfortable and efficient indoor environments. It is crucial to recognize and appreciate the skill
|
||||
set inherent in the HVAC trade, as it plays a vital role in shaping the quality of life for
|
||||
individuals and the functionality of diverse spaces.</p>
|
||||
<ul>
|
||||
<li>Ty Branaman</li>
|
||||
@@ -150,7 +150,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -164,7 +163,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -195,6 +193,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,67 +62,67 @@
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
<p>This is a hot take kind of article, but here it goes the rant.</p>
|
||||
<h2>This applies to me and you.</h2>
|
||||
<p>I’m writing this to remind myself somethings that I too often take for granted. I am going to<br />
|
||||
preface this whole article by saying that everything I’m going to lay out / mention is something<br />
|
||||
that I am personally guilty of. This is an open reminder and call out of things that I feel should<br />
|
||||
<p>I’m writing this to remind myself somethings that I too often take for granted. I am going to
|
||||
preface this whole article by saying that everything I’m going to lay out / mention is something
|
||||
that I am personally guilty of. This is an open reminder and call out of things that I feel should
|
||||
change.</p>
|
||||
<h1>Our perspective is flawed</h1>
|
||||
<p>Nobody can dispute that the advances in technology have greatly improved our lives. Like anything,<br />
|
||||
<p>Nobody can dispute that the advances in technology have greatly improved our lives. Like anything,
|
||||
though, there is a trade off.</p>
|
||||
<h2>What is FOSS</h2>
|
||||
<p>FOSS is an acronym for “Free and Open Source Software”. It is generally about how software is<br />
|
||||
licensed, meaning that the source code is available in the public for review, allowing a broader<br />
|
||||
spectrum of people than the originators of the code to have input, look for bugs, redistribute the<br />
|
||||
software, contribute, etc. It does not however mean that the software should be no cost to the end<br />
|
||||
<p>FOSS is an acronym for “Free and Open Source Software”. It is generally about how software is
|
||||
licensed, meaning that the source code is available in the public for review, allowing a broader
|
||||
spectrum of people than the originators of the code to have input, look for bugs, redistribute the
|
||||
software, contribute, etc. It does not however mean that the software should be no cost to the end
|
||||
user.</p>
|
||||
<p>This is where the word “freedom” comes into it. Overtime, as a society, we generally now think of<br />
|
||||
FOSS as “free” software. This takes what was originally a noble / courageous idea and devalues it to<br />
|
||||
the point that we now expect things to be free. It encourages corporate greed to take advantage of<br />
|
||||
people who created something to solve a particular need, or as a hobby, expecting the creator to<br />
|
||||
handle the burden of maintaining / patching bugs while they profit from it. Don’t get me wrong,<br />
|
||||
these corporations will also contribute back, sometimes even donate money to the creators. I am not<br />
|
||||
at all opposed to capitalism, nor saying that these corporations are in the wrong. At the end of the<br />
|
||||
<p>This is where the word “freedom” comes into it. Overtime, as a society, we generally now think of
|
||||
FOSS as “free” software. This takes what was originally a noble / courageous idea and devalues it to
|
||||
the point that we now expect things to be free. It encourages corporate greed to take advantage of
|
||||
people who created something to solve a particular need, or as a hobby, expecting the creator to
|
||||
handle the burden of maintaining / patching bugs while they profit from it. Don’t get me wrong,
|
||||
these corporations will also contribute back, sometimes even donate money to the creators. I am not
|
||||
at all opposed to capitalism, nor saying that these corporations are in the wrong. At the end of the
|
||||
day, <strong><em>we</em></strong> created this problem.</p>
|
||||
<h2>Current state and how we got here</h2>
|
||||
<p>Software services / giants create applications that we come to rely on. They tempt / bait us with<br />
|
||||
them being “free” or cheap, but that is because <strong><em>we</em></strong> are their target. They bloat the software<br />
|
||||
with tracking and telemetry to capture data about us and sell us more products and services. Once<br />
|
||||
again, if you’re pro-capitalism, it’s somewhat hard to blame them for this. We’re the gullible sheep<br />
|
||||
<p>Software services / giants create applications that we come to rely on. They tempt / bait us with
|
||||
them being “free” or cheap, but that is because <strong><em>we</em></strong> are their target. They bloat the software
|
||||
with tracking and telemetry to capture data about us and sell us more products and services. Once
|
||||
again, if you’re pro-capitalism, it’s somewhat hard to blame them for this. We’re the gullible sheep
|
||||
who will blindly eat out their grain bins.</p>
|
||||
<p>I can remember back in the day when there were music pirating services on the internet (napster is<br />
|
||||
the one that comes to mind). As a giant music buff, I quickly jumped on board with services like<br />
|
||||
these. Back in those days, I was young, didn’t make very much money, so it was hard to afford the<br />
|
||||
latest and greatest tunes. I also remember back in this time frame a lawsuit from the metal giants<br />
|
||||
Metallica (other’s words not mine ;)). At the time I remember thinking, like many others, that<br />
|
||||
Metallica didn’t need the money, but then a comment from Lars Ulrich the band’s drummer struck a<br />
|
||||
cord with me (pun intended). I’ll will paraphrase here, but it was something along the lines of<br />
|
||||
“We’re not pursuing this for us, but for all of those (musicians) that come after us”. After this<br />
|
||||
<p>I can remember back in the day when there were music pirating services on the internet (napster is
|
||||
the one that comes to mind). As a giant music buff, I quickly jumped on board with services like
|
||||
these. Back in those days, I was young, didn’t make very much money, so it was hard to afford the
|
||||
latest and greatest tunes. I also remember back in this time frame a lawsuit from the metal giants
|
||||
Metallica (other’s words not mine ;)). At the time I remember thinking, like many others, that
|
||||
Metallica didn’t need the money, but then a comment from Lars Ulrich the band’s drummer struck a
|
||||
cord with me (pun intended). I’ll will paraphrase here, but it was something along the lines of
|
||||
“We’re not pursuing this for us, but for all of those (musicians) that come after us”. After this
|
||||
and reflection, I decided that I would not pirate music anymore.</p>
|
||||
<p>Fast forward, now the majority do not purchases music / albums, we typically utilize streaming<br />
|
||||
services (myself included), sure it may be more fair to the artists than pirating was, it can be<br />
|
||||
argued that it’s easier today for independent artists to become known / discovered, I’m also in no<br />
|
||||
way saying the old school music industry wasn’t a giant pile of dog poo, but I am saying that who is<br />
|
||||
<p>Fast forward, now the majority do not purchases music / albums, we typically utilize streaming
|
||||
services (myself included), sure it may be more fair to the artists than pirating was, it can be
|
||||
argued that it’s easier today for independent artists to become known / discovered, I’m also in no
|
||||
way saying the old school music industry wasn’t a giant pile of dog poo, but I am saying that who is
|
||||
really winning(?), it’s the Spotify’s and Apple Music’s of the world, that’s who.</p>
|
||||
<p>I’m also reminded of the great “MeasureQuick is now charging for services” that happened in the HVAC<br />
|
||||
industry. I have personally never complained and have always supported this decision, because it is<br />
|
||||
not sustainable to run a software company and not charge for services, generally. Sure, you may not<br />
|
||||
like their pricing model, etc. Where I think they went wrong was not charging from the beginning, as<br />
|
||||
it sets the wrong expectation that is presumably hard to recover from. There are those who took some<br />
|
||||
of Jim’s words / opinions in a way different from how I do / did, which is fine, we’re all entitled<br />
|
||||
to our opinions. What is often forgotten is that we’re all also entitled to change those opinions.<br />
|
||||
<p>I’m also reminded of the great “MeasureQuick is now charging for services” that happened in the HVAC
|
||||
industry. I have personally never complained and have always supported this decision, because it is
|
||||
not sustainable to run a software company and not charge for services, generally. Sure, you may not
|
||||
like their pricing model, etc. Where I think they went wrong was not charging from the beginning, as
|
||||
it sets the wrong expectation that is presumably hard to recover from. There are those who took some
|
||||
of Jim’s words / opinions in a way different from how I do / did, which is fine, we’re all entitled
|
||||
to our opinions. What is often forgotten is that we’re all also entitled to change those opinions.
|
||||
Heck, I will probably be shouting a different story tomorrow, so be it!</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>What I would like to encourage people to do is to support software development. If an application is<br />
|
||||
free, but has a donate button consider giving a donation. If an application is free and they don’t<br />
|
||||
want to charge that’s fine too, however I would say to be suspicous, meaning is it free because<br />
|
||||
<p>What I would like to encourage people to do is to support software development. If an application is
|
||||
free, but has a donate button consider giving a donation. If an application is free and they don’t
|
||||
want to charge that’s fine too, however I would say to be suspicous, meaning is it free because
|
||||
<strong><em>you</em></strong> are the product?!?</p>
|
||||
<p>I would also encourage you to be active in communities and organizations that foster community (HVAC<br />
|
||||
School is a great example). Show appreciation and encouragement, but at the same time don’t be<br />
|
||||
<p>I would also encourage you to be active in communities and organizations that foster community (HVAC
|
||||
School is a great example). Show appreciation and encouragement, but at the same time don’t be
|
||||
afraid to be critical or speak up.</p>
|
||||
<p>At the end of the day, I hope to lift up my brothers and sisters, help to fight against the<br />
|
||||
<p>At the end of the day, I hope to lift up my brothers and sisters, help to fight against the
|
||||
corporations who abuse the little guy’s and hopefully feel good about my decisions.</p>
|
||||
<p>Over the last few weeks, I have been going through my software and services and looking for those<br />
|
||||
donation buttons and giving back a little bit for the software that makes my life better. Help<br />
|
||||
<p>Over the last few weeks, I have been going through my software and services and looking for those
|
||||
donation buttons and giving back a little bit for the software that makes my life better. Help
|
||||
change the narrative and remember that it’s about <strong><em>Freedom not Free</em></strong>.</p>
|
||||
<h3>Links</h3>
|
||||
<ul>
|
||||
@@ -137,7 +137,7 @@ change the narrative and remember that it’s about <strong><em>Freedom not Free
|
||||
<li><a href="https://themes.gohugo.io/themes/poison/">Hugo Theme</a></li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> I do not use any trackers or analytics on this site to respect your privacy. So feel<br />
|
||||
<p><strong>Note:</strong> I do not use any trackers or analytics on this site to respect your privacy. So feel
|
||||
free to contact me directly to share feedback or let me know how I’m doing.</p>
|
||||
</blockquote>
|
||||
</article>
|
||||
@@ -174,7 +174,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -188,7 +187,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/pgp-encryption-introduction/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-04-pgp-encryption-introduction.gif"/>
|
||||
In this article I introduce PGP and show a use case for me, which perhaps you can use as well.
|
||||
What is PGP
|
||||
PGP stands for Pretty Good Privacy, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
@@ -222,6 +220,12 @@ cryptographic privacy and authentication and is...
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -110,6 +110,12 @@ job, overshadowing the intricate skill set and technical expertise required in..
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,67 +68,67 @@ cryptographic privacy and authentication and is..." name="og:description"/>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-04-pgp-encryption-introduction.gif"/>
|
||||
<p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
@@ -171,7 +171,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -185,7 +184,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -216,6 +214,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,19 +64,19 @@ any warranty on your UNVR as we are using it for..." name="og:description"/>
|
||||
</div>
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-03-15-unvr-as-nas.png"/>
|
||||
<p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH & Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -85,14 +85,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -105,11 +105,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -130,13 +130,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://<USER>@<UNVR_IP></code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -> General -> Login Items -> Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -> General -> Login Items -> Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -> General -> Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p>
|
||||
</article>
|
||||
@@ -173,7 +173,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -187,7 +186,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -218,6 +216,12 @@ Programming, Home-Performance, and Building Science
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -69,6 +69,12 @@
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -61,8 +61,8 @@
|
||||
</div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
<h2>Introduction</h2>
|
||||
<p>This post is a quick example of creating a very basic todo web application using <code>Vapor</code> a swift web<br />
|
||||
framework and <code>Htmx</code>, with no custom javascript required.</p>
|
||||
<p>This post is a quick example of creating a very basic todo web application using <code>Vapor</code> a swift web framework and <code>Htmx</code>, with no custom
|
||||
javascript required.</p>
|
||||
<p><a href="https://docs.vapor.codes">Vapor</a></p>
|
||||
<p><a href="https://htmx.org">Htmx</a></p>
|
||||
<h2>Getting Started</h2>
|
||||
@@ -73,23 +73,21 @@ framework and <code>Htmx</code>, with no custom javascript required.</p>
|
||||
<p><img src="/articles/images/2025-01-05-vapor.gif" alt="" /></p>
|
||||
<pre><code class="language-bash">vapor new todo-htmx --fluent.db sqlite --leaf
|
||||
</code></pre>
|
||||
<p>The above command will generate a new project that uses an <code>SQLite</code> database along with vapor’s<br />
|
||||
<code>Leaf</code> templating engine. You can move into the project directory and browse around the files that<br />
|
||||
are generated.</p>
|
||||
<p>The above command will generate a new project that uses an <code>SQLite</code> database along with vapor’s <code>Leaf</code> templating engine. You can move into
|
||||
the project directory and browse around the files that are generated.</p>
|
||||
<pre><code class="language-bash">cd todo-htmx
|
||||
</code></pre>
|
||||
<h2>Update the Controller</h2>
|
||||
<p>Open the <code>Sources/App/Controllers/TodoController.swift</code> file. This file handles the api routes for<br />
|
||||
our <code>Todo</code> database model. Personally I like to prefix these routes with <code>api</code>.</p>
|
||||
<p>Open the <code>Sources/App/Controllers/TodoController.swift</code> file. This file handles the api routes for our <code>Todo</code> database model. Personally I
|
||||
like to prefix these routes with <code>api</code>.</p>
|
||||
<p>Update the first line in the <code>boot(routes: RoutesBuilder)</code> function to look like this.</p>
|
||||
<pre><code class="language-swift">let todos = routes.grouped("api", "todos")
|
||||
</code></pre>
|
||||
<p>Everything else can stay the same. This changes these routes to be exposed at<br />
|
||||
<code>http://localhost:8080/api/todos</code>, which will allow our routes that return html views to be able to<br />
|
||||
be exposed at <code>http://localhost:8080/todos</code>.</p>
|
||||
<p>Everything else can stay the same. This changes these routes to be exposed at <code>http://localhost:8080/api/todos</code>, which will allow our routes
|
||||
that return html views to be able to be exposed at <code>http://localhost:8080/todos</code>.</p>
|
||||
<h2>Update the Todo Model</h2>
|
||||
<p>A todo is not very valuable without a way to tell if it needs to be completed or not. So, let’s add<br />
|
||||
a field to our database model (<code>Sources/App/Models/Todo.swift</code>).</p>
|
||||
<p>A todo is not very valuable without a way to tell if it needs to be completed or not. So, let’s add a field to our database model
|
||||
(<code>Sources/App/Models/Todo.swift</code>).</p>
|
||||
<p>Update the file to include the following:</p>
|
||||
<pre><code class="language-swift">import Fluent
|
||||
import struct Foundation.UUID
|
||||
@@ -126,8 +124,7 @@ final class Todo: Model, @unchecked Sendable {
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>Since we added a field to our database model, we also need to update the migration file<br />
|
||||
(<code>Sources/App/Migrations/CreateTodo.swift</code>).</p>
|
||||
<p>Since we added a field to our database model, we also need to update the migration file (<code>Sources/App/Migrations/CreateTodo.swift</code>).</p>
|
||||
<pre><code class="language-swift">import Fluent
|
||||
|
||||
struct CreateTodo: AsyncMigration {
|
||||
@@ -144,11 +141,10 @@ struct CreateTodo: AsyncMigration {
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>This just adds our new field to the database schema when we run the migrations, which we will do<br />
|
||||
later on in the tutorial.</p>
|
||||
<p>This just adds our new field to the database schema when we run the migrations, which we will do later on in the tutorial.</p>
|
||||
<h3>Update the Data Transfer Object</h3>
|
||||
<p>We also need to add the <code>complete</code> field to our data transfer object (<code>DTO</code>). This model is used as<br />
|
||||
an intermediate between our database and the user.</p>
|
||||
<p>We also need to add the <code>complete</code> field to our data transfer object (<code>DTO</code>). This model is used as an intermediate between our database and
|
||||
the user.</p>
|
||||
<pre><code class="language-swift">import Fluent
|
||||
import Vapor
|
||||
|
||||
@@ -170,11 +166,9 @@ struct TodoDTO: Content {
|
||||
}
|
||||
</code></pre>
|
||||
<h2>Generate the View Templates</h2>
|
||||
<p>Our index template was already generated at <code>Resources/Views/index.leaf</code>, open the file and edit the<br />
|
||||
contents to match the following.</p>
|
||||
<p>Our index template was already generated at <code>Resources/Views/index.leaf</code>, open the file and edit the contents to match the following.</p>
|
||||
<blockquote>
|
||||
<p>Note: You can learn more about the<br />
|
||||
<a href="https://docs.vapor.codes/leaf/getting-started/">leaf templating engine here.</a></p>
|
||||
<p>Note: You can learn more about the <a href="https://docs.vapor.codes/leaf/getting-started/">leaf templating engine here.</a></p>
|
||||
</blockquote>
|
||||
<pre><code class="language-html"><!doctype html>
|
||||
<html lang="en">
|
||||
@@ -200,15 +194,12 @@ contents to match the following.</p>
|
||||
</body>
|
||||
</html>
|
||||
</code></pre>
|
||||
<p>The important parts here are the <code><script></code> tag in the head element which will include <code>Htmx</code> in our<br />
|
||||
project.</p>
|
||||
<p>The important parts here are the <code><script></code> tag in the head element which will include <code>Htmx</code> in our project.</p>
|
||||
<p>The head element also contains a link to a custom <code>css</code> stylesheet that we will create shortly.</p>
|
||||
<p>We add a <code>form</code> element that will be used to generate a new todo item in the database. This is a<br />
|
||||
basic / standard html form, but we are using <code>Htmx</code> to post the form contents to the route<br />
|
||||
<code>POST http://localhost:8080/todos</code>, which we will create shortly.</p>
|
||||
<p>Then there’s the <code>table</code> element that will contain the contents of our todos. When the page is<br />
|
||||
loaded it will use <code>Htmx</code> to fetch the todos from <code>GET http://localhost:8080/todos</code> route, which we<br />
|
||||
will create shortly.</p>
|
||||
<p>We add a <code>form</code> element that will be used to generate a new todo item in the database. This is a basic / standard html form, but we are
|
||||
using <code>Htmx</code> to post the form contents to the route <code>POST http://localhost:8080/todos</code>, which we will create shortly.</p>
|
||||
<p>Then there’s the <code>table</code> element that will contain the contents of our todos. When the page is loaded it will use <code>Htmx</code> to fetch the todos
|
||||
from <code>GET http://localhost:8080/todos</code> route, which we will create shortly.</p>
|
||||
<h3>Todos Table Template</h3>
|
||||
<p>Create a new view template that will return our populated table of todos.</p>
|
||||
<pre><code class="language-bash">touch Resources/Views/todos.leaf
|
||||
@@ -249,14 +240,12 @@ will create shortly.</p>
|
||||
#endfor
|
||||
</table>
|
||||
</code></pre>
|
||||
<p>Here, we just create a table that is 3 columns wide from a list of todos that we will pass in to the<br />
|
||||
template. We use <code>Htmx</code> to handle updating a todo if a user clicks a checkbox to mark the todo as<br />
|
||||
<code>complete</code>, we also add a button in the last column of the table that we use <code>Htmx</code> to handle<br />
|
||||
deleting a todo from the database.</p>
|
||||
<p>Here, we just create a table that is 3 columns wide from a list of todos that we will pass in to the template. We use <code>Htmx</code> to handle
|
||||
updating a todo if a user clicks a checkbox to mark the todo as <code>complete</code>, we also add a button in the last column of the table that we use
|
||||
<code>Htmx</code> to handle deleting a todo from the database.</p>
|
||||
<h2>Controllers</h2>
|
||||
<p>The controllers handle the routes that our website exposes. The project template creates a<br />
|
||||
controller for us that handles <code>JSON</code> / <code>API</code> requests, but we do need to make a couple of changes<br />
|
||||
to the file (<code>Sources/App/Controllers/TodoController.swift</code>).</p>
|
||||
<p>The controllers handle the routes that our website exposes. The project template creates a controller for us that handles <code>JSON</code> / <code>API</code>
|
||||
requests, but we do need to make a couple of changes to the file (<code>Sources/App/Controllers/TodoController.swift</code>).</p>
|
||||
<pre><code class="language-swift">import Fluent
|
||||
import Vapor
|
||||
|
||||
@@ -308,16 +297,13 @@ struct TodoController: RouteCollection {
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
<p>The primary changes here are to add the <code>update(req: Request)</code> function at the bottom, which handles<br />
|
||||
updating a todo that has already been created. This will be used when a user clicks on the checkbox<br />
|
||||
to mark a todo as complete or incomplete.</p>
|
||||
<p>We also change the route in the <code>boot(routes: RoutesBuilder)</code> method to make all these routes<br />
|
||||
accessible at <code>/api/todos</code> instead of the original <code>/todos</code> as we will use the <code>/todos</code> routes for<br />
|
||||
returning our views from our view controller.</p>
|
||||
<p>The primary changes here are to add the <code>update(req: Request)</code> function at the bottom, which handles updating a todo that has already been
|
||||
created. This will be used when a user clicks on the checkbox to mark a todo as complete or incomplete.</p>
|
||||
<p>We also change the route in the <code>boot(routes: RoutesBuilder)</code> method to make all these routes accessible at <code>/api/todos</code> instead of the
|
||||
original <code>/todos</code> as we will use the <code>/todos</code> routes for returning our views from our view controller.</p>
|
||||
<h3>Todo View Controller</h3>
|
||||
<p>Next we need to create our view controller, it is what will be used to handle routes that should<br />
|
||||
return <code>html</code> content for our website. This controller will actually use the api controller to do<br />
|
||||
the majority of it’s work.</p>
|
||||
<p>Next we need to create our view controller, it is what will be used to handle routes that should return <code>html</code> content for our website. This
|
||||
controller will actually use the api controller to do the majority of it’s work.</p>
|
||||
<p>The easiest thing is to make a copy of the current api controller:</p>
|
||||
<pre><code class="language-bash">cp Sources/App/Controllers/TodoController.swift Sources/App/Controllers/TodoViewController.swift
|
||||
</code></pre>
|
||||
@@ -365,9 +351,8 @@ struct TodoViewController: RouteCollection {
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>Here we use the api controller to do the heavy lifting of communicating with the database, then we<br />
|
||||
just always return / render the <code>todos.leaf</code> template that we created earlier, which will update our<br />
|
||||
web page with the list of todos retreived from the database.</p>
|
||||
<p>Here we use the api controller to do the heavy lifting of communicating with the database, then we just always return / render the
|
||||
<code>todos.leaf</code> template that we created earlier, which will update our web page with the list of todos retreived from the database.</p>
|
||||
<blockquote>
|
||||
<p>Note: There are better ways to handle this, however this is just a simple example.</p>
|
||||
</blockquote>
|
||||
@@ -389,29 +374,29 @@ func routes(_ app: Application) throws {
|
||||
try app.register(collection: TodoViewController())
|
||||
}
|
||||
</code></pre>
|
||||
<p>Here, we just add the <code>TodoViewController</code> at the bottom so vapor will be able to handle those<br />
|
||||
routes and also update the title to be <code>Todos</code> (in the first <code>app.get</code> near the top).</p>
|
||||
<p>Here, we just add the <code>TodoViewController</code> at the bottom so vapor will be able to handle those routes and also update the title to be
|
||||
<code>Todos</code> (in the first <code>app.get</code> near the top).</p>
|
||||
<h2>Build and Run</h2>
|
||||
<p>At this point we should be able to build and run the application.</p>
|
||||
<p>First, let’s make sure the project builds.</p>
|
||||
<pre><code class="language-bash">swift build
|
||||
</code></pre>
|
||||
<p>This may take a minute if it’s the first time building the project as it has to fetch the<br />
|
||||
dependencies. If you experience problems here then make sure you don’t have typos in your files.</p>
|
||||
<p>This may take a minute if it’s the first time building the project as it has to fetch the dependencies. If you experience problems here then
|
||||
make sure you don’t have typos in your files.</p>
|
||||
<p>Next, we need to run the database migrations.</p>
|
||||
<pre><code class="language-bash">swift run App migrate
|
||||
</code></pre>
|
||||
<p>Finally, we can run the application.</p>
|
||||
<pre><code class="language-bash">swift run App
|
||||
</code></pre>
|
||||
<p>You should be able to open your browser and type in the url: <code>http://localhost:8080</code> to view the<br />
|
||||
application. You can experiment with adding a new todo using the form.</p>
|
||||
<p>You should be able to open your browser and type in the url: <code>http://localhost:8080</code> to view the application. You can experiment with adding
|
||||
a new todo using the form.</p>
|
||||
<blockquote>
|
||||
<p>Note: To stop the application use <code>Ctrl-c</code></p>
|
||||
</blockquote>
|
||||
<h2>Bonus Styles</h2>
|
||||
<p>Hopefully you weren’t blinded the first time you opened the application. You can add custom styles<br />
|
||||
by creating a <code>css</code> file (<code>Public/css/main.css</code>).</p>
|
||||
<p>Hopefully you weren’t blinded the first time you opened the application. You can add custom styles by creating a <code>css</code> file
|
||||
(<code>Public/css/main.css</code>).</p>
|
||||
<pre><code class="language-bash">mkdir Public/css
|
||||
touch Public/css/main.css
|
||||
</code></pre>
|
||||
@@ -444,8 +429,8 @@ td {
|
||||
margin-left: 20px;
|
||||
}
|
||||
</code></pre>
|
||||
<p>Currently vapor does not know to serve files from the <code>Public</code> directory, so we need to update the<br />
|
||||
<code>Sources/App/configure.swift</code> file, by uncommenting the line near the top.</p>
|
||||
<p>Currently vapor does not know to serve files from the <code>Public</code> directory, so we need to update the <code>Sources/App/configure.swift</code> file, by
|
||||
uncommenting the line near the top.</p>
|
||||
<pre><code class="language-swift">import Fluent
|
||||
import FluentSQLiteDriver
|
||||
import Leaf
|
||||
@@ -471,7 +456,7 @@ public func configure(_ app: Application) async throws {
|
||||
<pre><code class="language-bash">swift run App
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope you enjoyed this quick example of using <code>Htmx</code> with <code>Vapor</code>. You can view the source files at<br />
|
||||
<p>I hope you enjoyed this quick example of using <code>Htmx</code> with <code>Vapor</code>. You can view the source files at
|
||||
<a href="https://github.com/m-housh/todo-htmx">here</a>.</p>
|
||||
</article>
|
||||
<div class="border-t border-light mt-8 pt-8">
|
||||
@@ -507,7 +492,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -521,7 +505,6 @@ Programming, Home-Performance, and Building Science
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/pgp-encryption-introduction/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-04-pgp-encryption-introduction.gif"/>
|
||||
In this article I introduce PGP and show a use case for me, which perhaps you can use as well.
|
||||
What is PGP
|
||||
PGP stands for Pretty Good Privacy, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
@@ -555,6 +538,12 @@ cryptographic privacy and authentication and is...
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
BIN
deploy/articles/images/2023-08-10-coil-bypass-overview.png
LFS
Normal file
BIN
deploy/articles/images/2023-08-10-coil-bypass-overview.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-08-10-register-throw.png
LFS
Normal file
BIN
deploy/articles/images/2023-08-10-register-throw.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-08-10-rss-feed.gif
LFS
Normal file
BIN
deploy/articles/images/2023-08-10-rss-feed.gif
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-08-10-volume-equation.png
LFS
Normal file
BIN
deploy/articles/images/2023-08-10-volume-equation.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-08-formula.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-08-formula.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-08-pounds-of-water-removed.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-08-pounds-of-water-removed.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-08-solution.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-08-solution.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-14-why-mini-splits-stink.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-14-why-mini-splits-stink.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-15-pints-per-day-example.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-15-pints-per-day-example.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-15-pints-per-day-example2.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-15-pints-per-day-example2.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-15-pints-per-day.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-15-pints-per-day.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-15-sizing-dehumidifier-by-latent-load.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-15-sizing-dehumidifier-by-latent-load.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-18-dh-size.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-18-dh-size.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-18-help.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-18-help.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-18-introducing-psychrometrics-cli.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-18-introducing-psychrometrics-cli.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-18-pounds-removed.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-18-pounds-removed.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-18-properties.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-18-properties.png
LFS
Normal file
Binary file not shown.
Binary file not shown.
BIN
deploy/articles/images/2023-09-21-introduction-to-programming-for-hvac-1.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-21-introduction-to-programming-for-hvac-1.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-21-spotlight.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-21-spotlight.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-21-terminal-line.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-21-terminal-line.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-21-terminal.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-21-terminal.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-22-brew-output.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-22-brew-output.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-22-introduction-to-programming-for-hvac-2.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-22-introduction-to-programming-for-hvac-2.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-24-hello-output.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-24-hello-output.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-24-introduction-to-programming-for-hvac-3.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-24-introduction-to-programming-for-hvac-3.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-24-text-settings.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-24-text-settings.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-26-greet-output.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-26-greet-output.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-26-introduction-to-programming-for-hvac-4.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-26-introduction-to-programming-for-hvac-4.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-09-26-part4-banner-transparent.png
LFS
Normal file
BIN
deploy/articles/images/2023-09-26-part4-banner-transparent.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-10-04-free-quotes-are-bad-for-the-industry.png
LFS
Normal file
BIN
deploy/articles/images/2023-10-04-free-quotes-are-bad-for-the-industry.png
LFS
Normal file
Binary file not shown.
BIN
deploy/articles/images/2023-10-04-sinking-boat.png
LFS
Normal file
BIN
deploy/articles/images/2023-10-04-sinking-boat.png
LFS
Normal file
Binary file not shown.
@@ -52,7 +52,6 @@
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2025/vapor-htmx-todo-app/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2025-01-05-vapor-htmx-todo-app.png"/>
|
||||
Build an example application using Vapor and HTMX.
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -73,7 +72,6 @@
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/free-as-in-freedom/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-09-free-as-in-freedom.png"/>
|
||||
Salute to open-source software engineers
|
||||
</div></a>
|
||||
</p>
|
||||
@@ -87,7 +85,6 @@
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/pgp-encryption-introduction/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-04-04-pgp-encryption-introduction.gif"/>
|
||||
In this article I introduce PGP and show a use case for me, which perhaps you can use as well.
|
||||
What is PGP
|
||||
PGP stands for Pretty Good Privacy, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
@@ -104,7 +101,6 @@ cryptographic privacy and authentication and is...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/unvr-as-nas/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-03-15-unvr-as-nas.png"/>
|
||||
In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for...
|
||||
@@ -120,7 +116,6 @@ any warranty on your UNVR as we are using it for...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2024/elevating-hvac/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2024-02-27-elevating-hvac.png"/>
|
||||
This is a guest post from my good friend, Ty Branaman.
|
||||
Introduction:
|
||||
Heating, Ventilation, and Air Conditioning (HVAC) is often mistakenly categorized as a simple labor
|
||||
@@ -144,7 +139,6 @@ job, overshadowing the intricate skill set and technical expertise required in..
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/most-important-job/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-12-14-most-important-job.gif"/>
|
||||
This short tech tip is about something one of my good friends in the trade told me a long time ago,
|
||||
that has stuck with me through the years. It is a simple phrase / mindset.
|
||||
|
||||
@@ -163,7 +157,6 @@ This...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/cancel-this/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-12-12-cancel-this.gif"/>
|
||||
This post is going to be hard to put into words, it’s going to seem egotistical at points, but know
|
||||
that my actions / feelings online are the same as they are if you met me in person. The problem with
|
||||
online interactions is tone and other subtleties...
|
||||
@@ -179,7 +172,6 @@ online interactions is tone and other subtleties...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/hope/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-30-hope.png"/>
|
||||
This is a piggy-back article off of
|
||||
The Struggle article that I had recently.
|
||||
I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this
|
||||
@@ -196,7 +188,6 @@ article I’d like to take a minute to layout some of the things that give...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/heat-recovery-chiller/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-27-heat-recovery-chiller.png"/>
|
||||
This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
this episode of the HVAC School Podcast.
|
||||
@@ -214,7 +205,6 @@ I have always had a love and passion for...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/you-should-learn-markdown/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-21-you-should-learn-markdown.png"/>
|
||||
This is a quick article about why you should learn markdown.
|
||||
What is markdown
|
||||
Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
@@ -231,7 +221,6 @@ converted to other formats, such as html, pdf, docx, and many more. All...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/the-struggle/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-10-18-the-struggle.png"/>
|
||||
This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.
|
||||
The struggle
|
||||
@@ -239,6 +228,87 @@ It has been one of those “when it rains, it pours” type of weeks. As...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/free-quotes-are-bad-for-the-industry/">Free quotes != good</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">October 04, 2023</span><a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/free-quotes-are-bad-for-the-industry/"><div>
|
||||
I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/"><div>
|
||||
This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/"><div>
|
||||
In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/"><div>
|
||||
In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/"><div>
|
||||
This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/calculate-seer-degradation-by-age/">Calculate SEER Degradation by Age</a>
|
||||
@@ -248,7 +318,6 @@ It has been one of those “when it rains, it pours” type of weeks. As...
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/calculate-seer-degradation-by-age/"><div>
|
||||
<img alt="banner" src="http://localhost:3000/articles/images/2023-09-19-calculate-seer-degradation-by-age.png"/>
|
||||
This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.
|
||||
The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
@@ -256,6 +325,98 @@ refrigerant charge losses. It should be noted that this is not true for...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/"><div>
|
||||
Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/"><div>
|
||||
This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/why-mini-splits-stink/">Why Mini Splits Stink</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 14, 2023</span><a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/why-mini-splits-stink/"><div>
|
||||
In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles....
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span><a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/pounds-of-water-removed/"><div>
|
||||
This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span><a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/rss-feed/"><div>
|
||||
In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h2>
|
||||
<div class="text-gray gray-links text-sm mb-4">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span><a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p>
|
||||
<a href="/articles/2023/coil-bypass-overview/"><div>
|
||||
This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...
|
||||
</div></a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -279,6 +440,12 @@ refrigerant charge losses. It should be noted that this is not true for...
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,76 +6,76 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/the-struggle/</id>
|
||||
<title>The Struggle</title>
|
||||
<updated>2025-02-19T20:53:34Z</updated>
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If<br />
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.</p>
|
||||
<h2>The struggle</h2>
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby<br />
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby
|
||||
/ complainer, which is not my intention, but here it goes.</p>
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived<br />
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9<br />
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and<br />
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still<br />
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and<br />
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and
|
||||
they’ve basically just been making her comfortable.</p>
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,<br />
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be<br />
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be
|
||||
a long recovery time.</p>
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /<br />
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread<br />
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread
|
||||
throughout the living room(s).</p>
|
||||
<p>An online friend lost her mother.</p>
|
||||
<p>All of these things have just got me emotional.</p>
|
||||
<h2>My secrets</h2>
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I<br />
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still<br />
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still
|
||||
drink on occasion, but not as I once did.</p>
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being<br />
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people<br />
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most<br />
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is<br />
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on<br />
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on
|
||||
occasion lead me into turmoil when I find out some true identity / personality of someone.</p>
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want<br />
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to<br />
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me<br />
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for<br />
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my<br />
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but<br />
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but
|
||||
truthfully I do not.</p>
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot<br />
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to<br />
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t<br />
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future<br />
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future
|
||||
pondering, perhaps).</p>
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what<br />
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not<br />
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time<br />
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having<br />
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having
|
||||
thoughtful / genuine responses.</p>
|
||||
<h2>Community</h2>
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems<br />
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of<br />
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not<br />
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not
|
||||
most of the time, not saying it can’t be / in absolute terms).</p>
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for<br />
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for<br />
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their<br />
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their
|
||||
best to lift me up when I’m down.</p>
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the<br />
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the<br />
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges<br />
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges
|
||||
;)</p>
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m<br />
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks<br />
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together<br />
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of<br />
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was<br />
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and<br />
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and
|
||||
it’s basic AF), but that truly made me feel useful / great after being down in the dumps for a bit.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I’ve probably rambled enough and am losing direction here, so I will end with a few things.</p>
|
||||
@@ -85,43 +85,43 @@ it’s basic AF), but that truly made me feel useful / great after being down in
|
||||
<li>Spend time with your loved ones, while you can.</li>
|
||||
<li>Tell someone you love them.</li>
|
||||
</ol>
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I<br />
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I
|
||||
left you off, I’m sorry and please do not take it personally.</p>
|
||||
<ol>
|
||||
<li>Bryan Orr
|
||||
<ul>
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and<br />
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,<br />
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,
|
||||
mostly all the following names would not even be in my vocabulary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ty Branaman (forget exactly how to spell his last name).
|
||||
<ul>
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be<br />
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be
|
||||
positive all the time, however it brings me hope and joy everytime!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dustin (mother f’n) Cole
|
||||
<ul>
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I<br />
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I
|
||||
can rely on him anytime I need it!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Genry Garcia
|
||||
<ul>
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,<br />
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,
|
||||
baby)!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Chris Hughes
|
||||
<ul>
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and<br />
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and
|
||||
he’s a great motivator because of his action items :)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Eric Kaiser
|
||||
<ul>
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because<br />
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because
|
||||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -132,26 +132,26 @@ of guidance he has given in the past. He truly wants to help teach people.</l
|
||||
</li>
|
||||
<li>HVAChicks Jennifer (I’ll butcher her last name from memory)
|
||||
<ul>
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I<br />
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I
|
||||
can’t wait to meet her in person one day soon!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HVAC Overtime Crew
|
||||
<ul>
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream<br />
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream
|
||||
on Friday’s. And I interact with A-Team a lot and really appreciate him / them!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Alicia Hollon
|
||||
<ul>
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,<br />
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,
|
||||
love you babe!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt<br />
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt
|
||||
currently. My mother is the kindest gentlest soul that I’ve ever met. I look up to all 5’ of her!</p>
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today<br />
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today
|
||||
and tomorrow!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -73,6 +73,12 @@ It has been one of those “when it rains, it pours” type of weeks. As...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,53 +6,53 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/heat-recovery-chiller/</id>
|
||||
<title>Heat Recovery Chiller</title>
|
||||
<updated>2025-02-19T21:08:37Z</updated>
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so<br />
|
||||
I’m doing it now. I did discuss this on<br />
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
<a href="https://hvacrschool.com/podcasts/is-the-future-of-air-conditioning-self-contained-propane-chillers/">this episode of the HVAC School Podcast.</a></p>
|
||||
<h2>Heat Recovery Chillers</h2>
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that<br />
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most<br />
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds<br />
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds
|
||||
in this article, but offer an overview of what I feel would be my dream system.</p>
|
||||
<h2>The Source</h2>
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional<br />
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would<br />
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to<br />
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style<br />
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the<br />
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of<br />
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level<br />
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level
|
||||
performance without the need of a field.</p>
|
||||
<h2>Indoor Portion</h2>
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.<br />
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load<br />
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems<br />
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more<br />
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more
|
||||
aggressively by having storage during peak load conditions.</p>
|
||||
<p><img src="/articles/images/2023-10-27-buffers2.png" alt="buffer" /></p>
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what<br />
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the<br />
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra<br />
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps<br />
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).<br />
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in<br />
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could<br />
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.<br />
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat<br />
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat
|
||||
exchanger that would be used to supply domestic hot water.</p>
|
||||
<h2>Distribution System</h2>
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,<br />
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,
|
||||
however I’m going to model it as a 4-pipe hydronic air handler.</p>
|
||||
<p><img src="/articles/images/2023-10-27-ah.png" alt="ah" /></p>
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in<br />
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan<br />
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from<br />
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high<br />
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high
|
||||
velocity systems, and even ductless styles.</p>
|
||||
<h2>Disadvantages</h2>
|
||||
<ol>
|
||||
@@ -61,7 +61,7 @@ velocity systems, and even ductless styles.</p>
|
||||
<li>Lack of understanding / technicians afraid to work on this style system.</li>
|
||||
<li>Potentially higher upfront costs.</li>
|
||||
<li>Lack of design or planning could cause unhappy clients (same with traditional)</li>
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement<br />
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement
|
||||
for traditional boiler systems)</li>
|
||||
</ol>
|
||||
<h2>Advantages</h2>
|
||||
@@ -75,11 +75,11 @@ for traditional boiler systems)</li>
|
||||
<li>Easier transition to natural / flammable refrigerants</li>
|
||||
</ol>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the<br />
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and<br />
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish<br />
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to<br />
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water<br />
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water
|
||||
-&gt; water heat pump for higher temperature distribution, incorporate solar collectors, and so on.</p>
|
||||
<p>Thank you for reading all the way to the end!</p></content>
|
||||
</entry>
|
||||
|
||||
@@ -74,6 +74,12 @@ I have always had a love and passion for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
191
deploy/articles/tag/design/feed.xml
Normal file
191
deploy/articles/tag/design/feed.xml
Normal file
@@ -0,0 +1,191 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/design/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/coil-bypass-overview/</id>
|
||||
<title>Coil Bypass Overview</title>
|
||||
<updated>2025-02-20T15:14:48Z</updated>
|
||||
<content type="html"><p>This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the challenges of this style of
|
||||
system.</p>
|
||||
<h2>What is a Coil Bypass</h2>
|
||||
<p>A coil bypass is not to be mistaken for a zoning system bypass, where airflow is “relieved” from the supply side of the system back into the
|
||||
return. Instead, a coil bypass diverts a portion of the airflow around the coil using a bypass damper(s). The bypass can serve several
|
||||
functions depending on the application, but in general it allows for a constant volume of air to be delivered to the space while the output
|
||||
of the coil can be shifted towards more or less dehumidification. In other words, it decouples the total system airflow from the coil
|
||||
airflow.</p>
|
||||
<p>The bypassed air mixes with the supply air stream to act as a reheat source, however unlike a typical reheat source it does not add more
|
||||
sensible load to the structure, instead it just brings the supply air temperature closer to the existing home’s temperature while still
|
||||
covering the latent and sensible loads of the home. A warmer duct system reduces the losses of the duct to unconditioned spaces as well as
|
||||
reduces the risk for duct condensation.</p>
|
||||
<p>The coil bypass strategy, as far as I know, was pioneered by <a href="https://www.linkedin.com/in/harry-boody-9b8a4366/">Harry Boody</a> of Energy
|
||||
Innovations and Scientific Environmental Design, Inc. However their websites are no longer active, so I’m not sure if they are still active
|
||||
in the HVAC design space or not.</p>
|
||||
<h2>The Problem</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Why</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Question</td>
|
||||
<td>Why would we want to utilize a strategy such as the coil bypass?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Answer</td>
|
||||
<td>Improved indoor air quality (IAQ)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>ASHRAE’s recommandation for the amount of air changes per hour (ACH) in a residential structure to be in the range of 3-5 ACH, and in
|
||||
general the higher the better, along with a MERV 13+ filter. In some / most cases the system airflow does not meet that criteria, especially
|
||||
low load homes or high volume homes.</p>
|
||||
<p>For example, let’s imagine a single story ranch home that is 2,500 square feet with 9 foot ceilings. This home is relatively tight
|
||||
construction and after doing the heating and cooling loads we’ve selected a 2.5 Ton system for this home. It is located in a green grass
|
||||
climate that needs some priority on dehumidification and requires an airflow of 350 CFM/Ton (875 CFM).</p>
|
||||
<p>We determine the volume of the conditioned space.</p>
|
||||
<p>2,500 x 9 = 22,500 ft^3</p>
|
||||
<p><img src="/articles/images/2023-08-10-volume-equation.png" alt="volume-equation" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where:</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>V</strong></td>
|
||||
<td><em>is the volume of the home</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>ACH</strong></td>
|
||||
<td><em>is the desired air changes per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>60</strong></td>
|
||||
<td><em>conversion from hours to minutes</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Below is a table of the required CFM to meet the different air changes per hour.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th align="center">CFM</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>(22,500 x 3)/60</td>
|
||||
<td align="center"><strong><em>1,125 @ 3 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 4)/60</td>
|
||||
<td align="center"><strong><em>1,500 @ 4 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 5)/60</td>
|
||||
<td align="center"><strong><em>1,875 @ 5 ACH</em></strong></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>As you can see we have a discrepency of meeting even the low end of 3 ACH. The high end of 5 ACH is over 2x the airflow for our 2.5 Ton
|
||||
system. The coil bypass strategy is one viable way, by decoupling the total system airflow from the coil airflow without, which eliminates
|
||||
the need of an auxilary fan / system that circulates air through some sort of filtration system.</p>
|
||||
<h3>Multi-Stage Systems</h3>
|
||||
<p>A challenge with multi-stage systems, even when sized properly, is that we often run at part-load conditions, and spend the majority of the
|
||||
time in lower stages. The lower stages often do worse at dehumidification than when running at full load.</p>
|
||||
<p>When the equipment runs in lower stages on a traditional system the total system airflow is reduced even further from the recommended air
|
||||
changes per hour. This reduced airflow also causes the throw of the air from the registers to be reduced which can lead to increased odds of
|
||||
stratification, poor air mixing, and increased potential for poor mean radiant temperatures (MRT) of the surfaces. The decreased airflow in
|
||||
low stages, lowers the velocity in the duct system, while low velocity is not a concern, it does increase the duct gains and increase the
|
||||
possibility of condensation on the ducts when they’re located outside of the thermal envelope of the building.</p>
|
||||
<p>Let’s imagine we have a duct system that has high wall registers located in a soffit at the interior wall that moves 100 CFM and we are
|
||||
trying to throw the air to the exterior wall which includes a window. The wall is @ 12 feet from the register. We’ve selected a register
|
||||
that meets the criteria, at high stage airflow it has a throw of 11.5 feet (shown as the green rectangle). When the system runs in low
|
||||
stage, the airflow is reduced to 70% of high stage (70 CFM), which would give us a throw from the register of @ 7 feet (shown as the red
|
||||
rectangle).</p>
|
||||
<p><img src="/articles/images/2023-08-10-register-throw.png" alt="register-throw" /></p>
|
||||
<p>The reduced flow through the register causes the air to only make it about 60% across the room before reaching it’s terminal velocity, which
|
||||
can cause the room to feel uncomfortable since the air never reaches the exterior wall and window.</p>
|
||||
<p>By decoupling the fan from the coil airflow it is possible to run in low stages, still have adequate dehumidification performance out of the
|
||||
system, and achieve the proper throw from the registers.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In this article we’ve begun to scratch the surface of what a coil bypass strategy is in an HVAC system, as well as some of the challenges
|
||||
that it can help solve. We’ve learned about why we may desire to decouple the total system airflow from the coil airflow.</p>
|
||||
<p>In future articles we will continue to explore some of the features, benefits, and challenges presented by such a strategy.</p>
|
||||
<h2>Related Resources</h2>
|
||||
<p><a href="https://hvacrschool.com/bypass-dehumidification-airflow-hvac-design/">HVAC School - Bypass Dehumidification / Airflow HVAC Design</a></p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
96
deploy/articles/tag/design/index.html
Normal file
96
deploy/articles/tag/design/index.html
Normal file
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in design
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/design/feed.xml" rel="alternate" title="mhoush: articles with tag design" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/coil-bypass-overview/">This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/design/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,41 +6,41 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/calculate-seer-degradation-by-age/</id>
|
||||
<title>Calculate SEER Degradation by Age</title>
|
||||
<updated>2025-02-19T21:55:30Z</updated>
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based<br />
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.</p>
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and<br />
|
||||
refrigerant charge losses. It should be noted that this is not true for all<br />
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code><br />
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for all
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code>
|
||||
of the average degradation based on systems tested.</p>
|
||||
<h2>Formula</h2>
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator<br />
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator
|
||||
coil / air handler.</p>
|
||||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||||
<p>| Where | |<br />
|
||||
| –––– | —————————————— | — |<br />
|
||||
| $SEER_d$ | Degradated SEER rating |<br />
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |<br />
|
||||
| M | Maintenance factor, 0.01-0.03 |<br />
|
||||
<p>| Where | |
|
||||
| –––– | —————————————— | — |
|
||||
| $SEER_d$ | Degradated SEER rating |
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |
|
||||
| M | Maintenance factor, 0.01-0.03 |
|
||||
| age | The age of the equipment, in years |</p>
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is<br />
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%<br />
|
||||
degradation per year, however there are some<br />
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a><br />
|
||||
that show that this can actually be as high as 5% or above depending on climate.<br />
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”<br />
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%
|
||||
degradation per year, however there are some
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a>
|
||||
that show that this can actually be as high as 5% or above depending on climate.
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”
|
||||
of degradation would be.</p>
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the<br />
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower<br />
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to<br />
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple<br />
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple
|
||||
stages).</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when<br />
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when
|
||||
installed and the system is 15 years old.</p>
|
||||
<p>Plugging those numbers into our formula.</p>
|
||||
<hr />
|
||||
@@ -50,9 +50,143 @@ installed and the system is 15 years old.</p>
|
||||
<h4>Highest Rage (5% degradation / year)</h4>
|
||||
<p>$$ SEER_d = 13 \times (1 - 0.05)^{15} = 6 $$</p>
|
||||
<hr />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER<br />
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge<br />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge
|
||||
losses can be as low as 6 SEER.</p>
|
||||
<p>Thanks for learning how to estimate SEER degradation based on equipment age!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -52,6 +52,33 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -73,6 +100,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,11 +6,11 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
@@ -25,50 +25,50 @@
|
||||
<id>http://localhost:3000/articles/2023/hope/</id>
|
||||
<title>Hope</title>
|
||||
<updated>2025-02-19T21:13:20Z</updated>
|
||||
<content type="html"><p>This is a piggy-back article off of<br />
|
||||
<content type="html"><p>This is a piggy-back article off of
|
||||
<a href="https://mhoush.com/posts/20231018224631-the-struggle/">The Struggle</a> article that I had recently.</p>
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this<br />
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I<br />
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I
|
||||
focus on to try and kick myself out of the rut I can get into sometimes.</p>
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being<br />
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be<br />
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When<br />
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When
|
||||
we’re feeling cynical, it’s easy to feed the negativity, although it’s rarely helpful.</p>
|
||||
<h2>Hope</h2>
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m<br />
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous<br />
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous
|
||||
article.</p>
|
||||
<blockquote>
|
||||
<p>My problems are very much “first world problems”.</p>
|
||||
</blockquote>
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.<br />
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on<br />
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on
|
||||
things outside of myself.</p>
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push<br />
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on<br />
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on
|
||||
amazon”, etc.</p>
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or<br />
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or
|
||||
father. When you’re looking up at the stars and realize how small you actually are.</p>
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else<br />
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else
|
||||
appreciates it, but you. The times when your guard is completely down and you laugh with abandon.</p>
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with<br />
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with
|
||||
your pets. The songs of nature, insects, birds, etc. The sounds of waves / water in the distance.</p>
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes<br />
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem<br />
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem
|
||||
you’ve pondered for days / months / years.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,<br />
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for<br />
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not<br />
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing<br />
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing
|
||||
with. Be compassionate (including showing yourself compassion).</p>
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be<br />
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down<br />
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down
|
||||
regularly so that you can look back on them when you feel out of balance.</p>
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.<br />
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.
|
||||
When you focus on blessings then the negativity will fade.</p>
|
||||
<p>What impact are you going to leave with what little time we have?</p>
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and<br />
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and
|
||||
that I appreciate <em>you!</em></p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
@@ -77,25 +77,25 @@ that I appreciate <em>you!</em></p></content>
|
||||
<updated>2025-02-19T20:51:49Z</updated>
|
||||
<content type="html"><p>This is a quick article about why you should learn markdown.</p>
|
||||
<h2>What is markdown</h2>
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily<br />
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on<br />
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on
|
||||
this website are written in markdown, here’s an image of this article written in markdown.</p>
|
||||
<p><img src="/articles/images/2023-10-21-markdown.png" alt="markdown" /></p>
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your<br />
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software<br />
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing<br />
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing
|
||||
research papers or even books.</p>
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,<br />
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to<br />
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of<br />
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using<br />
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more<br />
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more
|
||||
professional, however I am working on solutions to migrate those to be markdown based.</p>
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client<br />
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many<br />
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many
|
||||
common document related tasks.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>You can learn more about the syntax used for markdown at<br />
|
||||
<p>You can learn more about the syntax used for markdown at
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">markdownguide.org</a>.</p>
|
||||
<h3>A non-exhaustive list of where you can use Markdown and editors.</h3>
|
||||
<table>
|
||||
@@ -127,7 +127,7 @@ common document related tasks.</p>
|
||||
<p>You can use tools such as <a href="https://pandoc.org/#">pandoc</a> to convert Markdown files to other formats.</p>
|
||||
<p><img src="/articles/images/2023-10-21-pandoc.gif" alt="pandoc" /></p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /<br />
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /
|
||||
content creation.</p>
|
||||
<p>Thanks for reading until the end!</p></content>
|
||||
</entry>
|
||||
@@ -135,71 +135,71 @@ content creation.</p>
|
||||
<id>http://localhost:3000/articles/2023/the-struggle/</id>
|
||||
<title>The Struggle</title>
|
||||
<updated>2025-02-19T20:53:34Z</updated>
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If<br />
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.</p>
|
||||
<h2>The struggle</h2>
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby<br />
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby
|
||||
/ complainer, which is not my intention, but here it goes.</p>
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived<br />
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9<br />
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and<br />
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still<br />
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and<br />
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and
|
||||
they’ve basically just been making her comfortable.</p>
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,<br />
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be<br />
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be
|
||||
a long recovery time.</p>
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /<br />
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread<br />
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread
|
||||
throughout the living room(s).</p>
|
||||
<p>An online friend lost her mother.</p>
|
||||
<p>All of these things have just got me emotional.</p>
|
||||
<h2>My secrets</h2>
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I<br />
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still<br />
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still
|
||||
drink on occasion, but not as I once did.</p>
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being<br />
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people<br />
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most<br />
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is<br />
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on<br />
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on
|
||||
occasion lead me into turmoil when I find out some true identity / personality of someone.</p>
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want<br />
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to<br />
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me<br />
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for<br />
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my<br />
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but<br />
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but
|
||||
truthfully I do not.</p>
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot<br />
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to<br />
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t<br />
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future<br />
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future
|
||||
pondering, perhaps).</p>
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what<br />
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not<br />
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time<br />
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having<br />
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having
|
||||
thoughtful / genuine responses.</p>
|
||||
<h2>Community</h2>
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems<br />
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of<br />
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not<br />
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not
|
||||
most of the time, not saying it can’t be / in absolute terms).</p>
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for<br />
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for<br />
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their<br />
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their
|
||||
best to lift me up when I’m down.</p>
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the<br />
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the<br />
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges<br />
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges
|
||||
;)</p>
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m<br />
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks<br />
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together<br />
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of<br />
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was<br />
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and<br />
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and
|
||||
it’s basic AF), but that truly made me feel useful / great after being down in the dumps for a bit.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I’ve probably rambled enough and am losing direction here, so I will end with a few things.</p>
|
||||
@@ -209,43 +209,43 @@ it’s basic AF), but that truly made me feel useful / great after being down in
|
||||
<li>Spend time with your loved ones, while you can.</li>
|
||||
<li>Tell someone you love them.</li>
|
||||
</ol>
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I<br />
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I
|
||||
left you off, I’m sorry and please do not take it personally.</p>
|
||||
<ol>
|
||||
<li>Bryan Orr
|
||||
<ul>
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and<br />
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,<br />
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,
|
||||
mostly all the following names would not even be in my vocabulary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ty Branaman (forget exactly how to spell his last name).
|
||||
<ul>
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be<br />
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be
|
||||
positive all the time, however it brings me hope and joy everytime!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dustin (mother f’n) Cole
|
||||
<ul>
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I<br />
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I
|
||||
can rely on him anytime I need it!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Genry Garcia
|
||||
<ul>
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,<br />
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,
|
||||
baby)!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Chris Hughes
|
||||
<ul>
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and<br />
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and
|
||||
he’s a great motivator because of his action items :)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Eric Kaiser
|
||||
<ul>
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because<br />
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because
|
||||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -256,26 +256,26 @@ of guidance he has given in the past. He truly wants to help teach people.</l
|
||||
</li>
|
||||
<li>HVAChicks Jennifer (I’ll butcher her last name from memory)
|
||||
<ul>
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I<br />
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I
|
||||
can’t wait to meet her in person one day soon!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HVAC Overtime Crew
|
||||
<ul>
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream<br />
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream
|
||||
on Friday’s. And I interact with A-Team a lot and really appreciate him / them!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Alicia Hollon
|
||||
<ul>
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,<br />
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,
|
||||
love you babe!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt<br />
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt
|
||||
currently. My mother is the kindest gentlest soul that I’ve ever met. I look up to all 5’ of her!</p>
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today<br />
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today
|
||||
and tomorrow!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -123,6 +123,12 @@ It has been one of those “when it rains, it pours” type of weeks. As...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,74 +6,74 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,14 +77,40 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/rss-feed/</id>
|
||||
<title>Rss Feed</title>
|
||||
<updated>2025-02-20T16:50:11Z</updated>
|
||||
<content type="html"><p>In this article I will show how to add this site’s rss feed. In particular, we will be using <a href="https://netnewswire.com">NetNewsWire</a> as the
|
||||
rss reader.</p>
|
||||
<h2>What is an RSS Feed</h2>
|
||||
<p>An RSS feed will show you new posts, generally from a blog, without having to remember to check the website at regular intervals or signup
|
||||
for an email list for notifications.</p>
|
||||
<p>NetNewsWire puts an RSS feed as:</p>
|
||||
<p><strong>It’s like podcasts</strong> - but for <em>reading.</em></p>
|
||||
<p>You consume an RSS feed, using an RSS reader application or extension in your browser.</p>
|
||||
<h2>Step One</h2>
|
||||
<p>First find and download an RSS reader, you can download <a href="https://netnewswire.com">NetNewsWire</a> for macOS from the link, or for iOS from the
|
||||
<a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210">AppStore</a>.</p>
|
||||
<h2>Step Two</h2>
|
||||
<p>Add the rss feed to stay up to date when I publish new articles.</p>
|
||||
<ol>
|
||||
<li>Click the plus in the right side of the sidebar and select <code>New Feed...</code></li>
|
||||
<li>In the URL field add: <code>https://mhoush.com/articles/feed.xml</code></li>
|
||||
<li>Optionally give it a name</li>
|
||||
<li>Click the <code>Add</code> button.</li>
|
||||
</ol>
|
||||
<p><img src="/articles/images/2023-08-10-rss-feed.gif" alt="rss gif" /></p>
|
||||
<p>That’s it.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -51,6 +51,20 @@ used as NAS (network attached storage). Be aware that this should be done with c
|
||||
any warranty on your UNVR as we are using it for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/rss-feed/">In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -72,6 +86,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -110,6 +110,77 @@ Markdown is a “mark-up” language. It allows you to write content in plain te
|
||||
converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/free-quotes-are-bad-for-the-industry/">Free quotes != good</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">October 04, 2023</span>934 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/free-quotes-are-bad-for-the-industry/">I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/calculate-seer-degradation-by-age/">Calculate SEER Degradation by Age</a>
|
||||
@@ -124,6 +195,72 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/why-mini-splits-stink/">Why Mini Splits Stink</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 14, 2023</span>758 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/why-mini-splits-stink/">In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/coil-bypass-overview/">This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -145,6 +282,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,53 +6,53 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/heat-recovery-chiller/</id>
|
||||
<title>Heat Recovery Chiller</title>
|
||||
<updated>2025-02-19T21:08:37Z</updated>
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so<br />
|
||||
I’m doing it now. I did discuss this on<br />
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
<a href="https://hvacrschool.com/podcasts/is-the-future-of-air-conditioning-self-contained-propane-chillers/">this episode of the HVAC School Podcast.</a></p>
|
||||
<h2>Heat Recovery Chillers</h2>
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that<br />
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most<br />
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds<br />
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds
|
||||
in this article, but offer an overview of what I feel would be my dream system.</p>
|
||||
<h2>The Source</h2>
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional<br />
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would<br />
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to<br />
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style<br />
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the<br />
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of<br />
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level<br />
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level
|
||||
performance without the need of a field.</p>
|
||||
<h2>Indoor Portion</h2>
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.<br />
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load<br />
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems<br />
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more<br />
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more
|
||||
aggressively by having storage during peak load conditions.</p>
|
||||
<p><img src="/articles/images/2023-10-27-buffers2.png" alt="buffer" /></p>
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what<br />
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the<br />
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra<br />
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps<br />
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).<br />
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in<br />
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could<br />
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.<br />
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat<br />
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat
|
||||
exchanger that would be used to supply domestic hot water.</p>
|
||||
<h2>Distribution System</h2>
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,<br />
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,
|
||||
however I’m going to model it as a 4-pipe hydronic air handler.</p>
|
||||
<p><img src="/articles/images/2023-10-27-ah.png" alt="ah" /></p>
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in<br />
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan<br />
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from<br />
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high<br />
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high
|
||||
velocity systems, and even ductless styles.</p>
|
||||
<h2>Disadvantages</h2>
|
||||
<ol>
|
||||
@@ -61,7 +61,7 @@ velocity systems, and even ductless styles.</p>
|
||||
<li>Lack of understanding / technicians afraid to work on this style system.</li>
|
||||
<li>Potentially higher upfront costs.</li>
|
||||
<li>Lack of design or planning could cause unhappy clients (same with traditional)</li>
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement<br />
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement
|
||||
for traditional boiler systems)</li>
|
||||
</ol>
|
||||
<h2>Advantages</h2>
|
||||
@@ -75,11 +75,11 @@ for traditional boiler systems)</li>
|
||||
<li>Easier transition to natural / flammable refrigerants</li>
|
||||
</ol>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the<br />
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and<br />
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish<br />
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to<br />
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water<br />
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water
|
||||
-&gt; water heat pump for higher temperature distribution, incorporate solar collectors, and so on.</p>
|
||||
<p>Thank you for reading all the way to the end!</p></content>
|
||||
</entry>
|
||||
|
||||
@@ -74,6 +74,12 @@ I have always had a love and passion for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,13 +77,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
|
||||
@@ -72,6 +72,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,13 +77,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
|
||||
@@ -72,6 +72,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,7 +6,7 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/free-as-in-freedom/</id>
|
||||
<title>Free As In Freedom</title>
|
||||
|
||||
@@ -70,6 +70,12 @@
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,74 +6,74 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,14 +5,14 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
@@ -20,67 +20,67 @@
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
@@ -94,19 +94,19 @@ to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -115,14 +115,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -135,11 +135,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -160,13 +160,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
@@ -176,25 +176,25 @@ for Time Machine Backups. <code>System Settings -&gt; General -&gt
|
||||
<updated>2025-02-19T20:51:49Z</updated>
|
||||
<content type="html"><p>This is a quick article about why you should learn markdown.</p>
|
||||
<h2>What is markdown</h2>
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily<br />
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on<br />
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on
|
||||
this website are written in markdown, here’s an image of this article written in markdown.</p>
|
||||
<p><img src="/articles/images/2023-10-21-markdown.png" alt="markdown" /></p>
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your<br />
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software<br />
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing<br />
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing
|
||||
research papers or even books.</p>
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,<br />
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to<br />
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of<br />
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using<br />
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more<br />
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more
|
||||
professional, however I am working on solutions to migrate those to be markdown based.</p>
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client<br />
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many<br />
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many
|
||||
common document related tasks.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>You can learn more about the syntax used for markdown at<br />
|
||||
<p>You can learn more about the syntax used for markdown at
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">markdownguide.org</a>.</p>
|
||||
<h3>A non-exhaustive list of where you can use Markdown and editors.</h3>
|
||||
<table>
|
||||
@@ -226,8 +226,467 @@ common document related tasks.</p>
|
||||
<p>You can use tools such as <a href="https://pandoc.org/#">pandoc</a> to convert Markdown files to other formats.</p>
|
||||
<p><img src="/articles/images/2023-10-21-pandoc.gif" alt="pandoc" /></p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /<br />
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /
|
||||
content creation.</p>
|
||||
<p>Thanks for reading until the end!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-4/</id>
|
||||
<title>Introduction to Programming for HVAC Part-4</title>
|
||||
<updated>2025-02-20T16:31:35Z</updated>
|
||||
<content type="html"><p>This article builds upon our <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-3/">last</a> article, so make sure to catch up
|
||||
before continuing with this article.</p>
|
||||
<h2>Arguments</h2>
|
||||
<p>Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments are
|
||||
supplied to shell scripts are separated by a space <code>&quot; &quot;</code>, as opposed to options which start with a <code>-&lt;character&gt;</code> or <code>--&lt;word&gt;</code>.</p>
|
||||
<p>To illustrate this, let’s change our <code>hello-world</code> script we wrote in the last article.</p>
|
||||
<p><strong>Move into our scripts directory:</strong></p>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<p><strong>Make a copy of the hello-world script:</strong></p>
|
||||
<pre><code class="language-bash">cp hello-world greet
|
||||
</code></pre>
|
||||
<p>Above we make a copy of the hello-world file and name the copy <code>greet</code>.</p>
|
||||
<p><strong>Open the greet file:</strong></p>
|
||||
<pre><code class="language-bash">open -a TextEdit greet
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Because the greet file is an executable, in order to open it in the <code>TextEdit</code> application we must supply the <code>-a</code> option.
|
||||
Otherwise it will just run our <code>greet</code> program in another terminal. Use <code>man open</code> to read more about the open command.</p>
|
||||
</blockquote>
|
||||
<p><strong>Edit the greet file:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo &quot;Hello, ${1}!&quot;
|
||||
</code></pre>
|
||||
<p>Make sure to save <code>⌘s</code> the file.</p>
|
||||
<p>Take note that the quotes need to be changed to <code>&quot;</code> (double quotes) from our original <code>hello-world</code> program.</p>
|
||||
<p>The <code>${1}</code> is indicating that we will insert / interpret the first argument passed to our program and insert it at that location. Arguments
|
||||
are interpreted in order they are passed in with <code>${0}</code> always representing the filename of the program that is called (generally not needed
|
||||
/ used in your scripts).</p>
|
||||
<p><strong>Test it out:</strong></p>
|
||||
<pre><code class="language-bash">./greet Michael
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-26-greet-output.png" alt="greet-output" /></p>
|
||||
<p>If you’d like to supply multiple words (or arguments that contain spaces) as a single argument then you can wrap them in quotes.</p>
|
||||
<pre><code class="language-bash">./greet &quot;Michael Housh&quot;
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Wrapping in quotes is especially useful for commands that take file paths, if any of the folders or file names contain spaces.</p>
|
||||
</blockquote>
|
||||
<h2>More Useful Program</h2>
|
||||
<p>At this point, it’s time to build a more useful program that we can use. First, we must download some dependencies for our program.</p>
|
||||
<p><strong>Install imagemagick:</strong></p>
|
||||
<pre><code class="language-bash">brew install imagemagick
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you’d like to check out the documentation / website for imagemagick you can run <code>brew home imagemagick</code>.</p>
|
||||
</blockquote>
|
||||
<p>This will take a bit for brew to install imagemagick and it’s dependencies. When it’s completed, we can check to make sure that imagemagick
|
||||
is installed by running the following command.</p>
|
||||
<pre><code class="language-bash">magick --version
|
||||
</code></pre>
|
||||
<p>It should output something along the lines of this below.</p>
|
||||
<pre><code class="language-bash">Version: ImageMagick 7.1.1-17 Q16-HDRI aarch64 21569 https://imagemagick.org
|
||||
Copyright: (C) 1999 ImageMagick Studio LLC
|
||||
License: https://imagemagick.org/script/license.php
|
||||
Features: Cipher DPC HDRI Modules OpenMP(5.0)
|
||||
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
|
||||
Compiler: gcc (4.2)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Don’t forget, you can use the <code>clear</code> command to clear the terminal.</p>
|
||||
</blockquote>
|
||||
<p><strong>Create our script:</strong></p>
|
||||
<pre><code class="language-bash">touch mktrans
|
||||
</code></pre>
|
||||
<p>We are going to name our script <code>mktrans</code> as a short for make transparent.</p>
|
||||
<p><strong>Open the file:</strong></p>
|
||||
<pre><code class="language-bash">open mktrans
|
||||
</code></pre>
|
||||
<p><strong>The program:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/bash
|
||||
|
||||
# The input file path, passed in as the first argument.
|
||||
inputfile=&quot;${1}&quot;
|
||||
|
||||
# The color to make transparent, optionally passed in as the second argument.
|
||||
# by default we handle / make white backgrounds transparent.
|
||||
color=&quot;${2:-white}&quot;
|
||||
|
||||
# Use the built-in basename command to normalize the input file name
|
||||
# this will convert a file path, such as ~/Pictures/my-image.png to my-image.png.
|
||||
fullfilename=$(basename -- &quot;$inputfile&quot;)
|
||||
|
||||
# Use the text of the `fullfilename` up to the first '.' as the file name.
|
||||
filename=&quot;${fullfilename%%.*}&quot;
|
||||
|
||||
# Use the text after the last '.' as the file extension.
|
||||
extension=&quot;${fullfilename##*.}&quot;
|
||||
|
||||
# Create the output file name to use.
|
||||
#
|
||||
# For an input file of `input.png`, our output name would be
|
||||
# `input-transparent.png`.
|
||||
#
|
||||
# This will output the file in the directory that we are
|
||||
# in when we use our script (which may different than where
|
||||
# the image is located)
|
||||
outputfile=&quot;${filename}-transparent.${extension}&quot;
|
||||
|
||||
# Make the magick happen :)
|
||||
convert &quot;${inputfile}&quot; -fuzz 10% -transparent &quot;${color}&quot; &quot;${outputfile}&quot;
|
||||
|
||||
</code></pre>
|
||||
<p>I’ve included comments in the program above, which is good practice, as there is high odds that you will forget what is going on when / if
|
||||
you open the file up in the future to look at it. We are using a lot of what is called parameter expansion magic in this file. You can read
|
||||
up more on what we are doing in the <a href="https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html">bash documentation</a>.</p>
|
||||
<p>This script is far from perfect, there are a lot of things to be improved upon. For example, if you download / save the banner image of this
|
||||
post and run this script, it will also remove some color in the wizards beard, eyes, and eye brows. However, it does work very well for my
|
||||
general use case, which is to remove the background from screenshots of pdf documents. It should be noted that it will not work on all types
|
||||
of images, some image types do not allow transparency, so it is safest to call this with input image being a <code>.png</code> image type, however you
|
||||
can use the <code>imagemagick</code> program that we downloaded to convert other image types to <code>.png</code>, but that will be left up to you to figure out.</p>
|
||||
<h2>Using Our Program</h2>
|
||||
<p>This is going to assume that you have download the banner image at the top of this article. You can do this by right-clicking and choosing
|
||||
<code>Save As</code>. This should save the image in your downloads folder, and you can keep the name of <code>part4-banner.png</code>.</p>
|
||||
<p><strong>Make the program executable:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x mktrans
|
||||
</code></pre>
|
||||
<p><strong>Make the image background transparent:</strong></p>
|
||||
<pre><code class="language-bash">./mktrans ~/Downloads/part4-banner.png
|
||||
</code></pre>
|
||||
<p><strong>Open the image:</strong></p>
|
||||
<pre><code class="language-bash">open part4-banner-transparent.png
|
||||
</code></pre>
|
||||
<p>It should look like below.</p>
|
||||
<p><img src="/articles/images/2023-09-26-part4-banner-transparent.png" alt="banner-transparent" /></p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you are viewing this site in <em>light</em> mode, the image does not look that bad. Hit the moon button in the top above my profile
|
||||
image to see some of the flaws of our program.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Remove the image from the <code>~/.local/bin</code> by using <code>rm part4-banner-transparent.png</code>. Be aware that the <code>rm</code> command can not be
|
||||
undone, so use with caution / knowledge. It is safer, until you are more comfortable to use the <code>Finder</code> application and move the file to
|
||||
the trash. In <code>Finder</code>, you can show hidden directories by typing <code>⌘.</code> or go directly to the folder by typing <code>⇧⌘G</code> (shift + command + G)
|
||||
and in the pop-up typing <code>~/.local/bin</code>.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p>That is it for this article. In the upcoming articles we will setup our <code>shell</code> environment so that we can use the commands we’ve built
|
||||
without having to navigate to the <code>~/.local/bin</code> directory. Thank you for reading to the end, I hope you’re finding this series helpful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-3/</id>
|
||||
<title>Introduction to Programming for HVAC Part-3</title>
|
||||
<updated>2025-02-20T16:20:56Z</updated>
|
||||
<content type="html"><p>In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up <a href="https://mhoush.com/series/programming-for-hvac/">here</a> before continuing with this article.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we
|
||||
will write, that will remove the background from an image.</p>
|
||||
<h3>Creating a scripts directory</h3>
|
||||
<p>We learned in the <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first article</a> how to use our terminal. Today we are
|
||||
going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.</p>
|
||||
<p><strong>Create a directory</strong></p>
|
||||
<pre><code class="language-bash">mkdir -p ~/.local/bin
|
||||
</code></pre>
|
||||
<p>The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> The <code>-p</code> option allows us to create nested directories if the parent directory doesn’t exist.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<h3>Hello World</h3>
|
||||
<p>It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get
|
||||
started.</p>
|
||||
<p><strong>Creating our script file:</strong></p>
|
||||
<pre><code class="language-bash">touch hello-world.sh
|
||||
</code></pre>
|
||||
<p><strong>Now open the file:</strong></p>
|
||||
<pre><code class="language-bash">open hello-world.sh
|
||||
</code></pre>
|
||||
<p>The above command should open the file in the <code>TextEdit</code> application. In order to make the text edit application to not auto-capitalize
|
||||
words and play more nicely, we need to adjust some settings. Open the settings by pressing <code>⌘,</code>.</p>
|
||||
<p>In the <strong>Format</strong> section, select <em>Plain text</em> and in the <strong>Options</strong> section de-select <em>Check spelling as you type</em>.</p>
|
||||
<p><img src="/articles/images/2023-09-24-text-settings.png" alt="text-settings" /></p>
|
||||
<p>At this point for changes to take place, you will need to close the file and re-open.</p>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> In your terminal you can run the last command in your history by using the <code>↑</code> (Up) arrow key.</p>
|
||||
</blockquote>
|
||||
<p>Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:</p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo 'Hello World!'
|
||||
</code></pre>
|
||||
<p>The first line is referred to as the <code>shebang</code>, this tells your computer which shell interperter to run your file. I have not explained the
|
||||
shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the <code>sh</code> posix
|
||||
shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just
|
||||
about any machine you were on).</p>
|
||||
<p>The second line we are using the built-in <code>echo</code> command and passing it the ‘Hello World!’ argument.</p>
|
||||
<p>Now save and close the file <code>⌘s</code> (to save) <code>⌘q</code> (to quit the text edit application).</p>
|
||||
<p><strong>Run the program from your terminal:</strong></p>
|
||||
<pre><code class="language-bash">/bin/sh hello-world.sh
|
||||
</code></pre>
|
||||
<p>You should see that <code>Hello World!</code> was printed to your console.</p>
|
||||
<p><img src="/articles/images/2023-09-24-hello-output.png" alt="hello-output" /></p>
|
||||
<h3>Make Executable</h3>
|
||||
<p>Now that we have our basic script working, let’s make it an executable.</p>
|
||||
<p><strong>In your terminal, type the following:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x hello-world.sh
|
||||
</code></pre>
|
||||
<p>This will change the mode of the file type to be an executable.</p>
|
||||
<p>Now move / rename the file so we don’t have to call it using <code>.sh</code> extension:</p>
|
||||
<pre><code class="language-bash">mv hello-world.sh hello-world
|
||||
</code></pre>
|
||||
<p>Now that the file is executable, we can execute it by just calling the name of the file.</p>
|
||||
<pre><code class="language-bash">./hello-world
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> We have to prefix the file name with <code>./</code> in the above command so that it knows where to find our file. The <code>./</code> is saying run
|
||||
this file in our current directory. In the future we will setup our shell so that it knows to look in our <code>~/.local/bin</code> directory for
|
||||
scripts, so that we can call them without this prefix.</p>
|
||||
</blockquote>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program
|
||||
from our terminal. I should mention that the <code>TextEdit</code> application is generally not how you would program, people typically use what is
|
||||
known as an <code>IDE (integrated development environment)</code>, however I chose to use the <code>TextEdit</code> application because it is built-in to <code>macOS</code>
|
||||
and allowed us to accomplish our goal without downloading other software.</p>
|
||||
<p>In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time.
|
||||
Thank you for reading to this point.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-2/</id>
|
||||
<title>Introduction to Programming for HVAC Part-2</title>
|
||||
<updated>2025-02-20T16:16:09Z</updated>
|
||||
<content type="html"><p>In this article, learn about installing a package manager. If you missed it, check out the
|
||||
<a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first</a> article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.</p>
|
||||
<h2>What is a Package Manager</h2>
|
||||
<p>A package manager is a piece of software that helps to install software and manage updates for your system. For me, the first thing that I
|
||||
do with a new machine is install <code>Homebrew</code>. <a href="https://brew.sh">Homebrew</a> is my preferred package manager for <code>macOS</code>.</p>
|
||||
<h2>Why</h2>
|
||||
<p>A package manager is nice because often software relies / requires other dependencies in order to work properly. By using a package manager
|
||||
it will make sure that the correct dependencies are installed for the software that you need to run. It allows you to be able to update and
|
||||
manage software through a centralized interface.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>Installation is simple. Open up your terminal and enter the following command (easiest to just copy / paste from the homepage linked above).</p>
|
||||
<pre><code class="language-bash">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
|
||||
</code></pre>
|
||||
<p>This will prompt you for your password in order to create some directories and install the required software for <code>brew</code> to work. The
|
||||
installation may take some time, while it downloads the command line tools for <code>Xcode</code>.</p>
|
||||
<p>When completed, follow the <code>Next Steps</code> and copy / paste the command listed, that should look like below.</p>
|
||||
<pre><code class="language-bash">(echo; echo 'eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;') &gt;&gt; /Users/&lt;you&gt;/.zprofile
|
||||
eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-22-brew-output.png" alt="brew-output" /></p>
|
||||
<p>The first line of this command sets up some things in your shell profile (which we have not discussed yet) that will make <code>Homebrew</code>
|
||||
available to you anytime you start a new session in your terminal. The second line of the command makes it available in your current
|
||||
terminal session.</p>
|
||||
<p>Next run the following command and make sure that everything is setup correctly.</p>
|
||||
<pre><code class="language-bash">brew doctor
|
||||
</code></pre>
|
||||
<p>Which should output the following:</p>
|
||||
<pre><code>Your system is ready to brew.
|
||||
</code></pre>
|
||||
<h3>Terminology</h3>
|
||||
<p>Homebrew calls command line applications <code>formula</code> and normal graphical applications <code>casks</code>. It has the ability to install both styles of
|
||||
applications.</p>
|
||||
<h2>Search Command</h2>
|
||||
<p>The following command is used to search for software packages:</p>
|
||||
<pre><code class="language-bash">brew search chrome
|
||||
</code></pre>
|
||||
<h2>Open a Homepage</h2>
|
||||
<p>The following command can be used to view the homepage of a formula or cask in your browser:</p>
|
||||
<pre><code class="language-bash">brew home google-chrome
|
||||
</code></pre>
|
||||
<h2>Update Homebrew</h2>
|
||||
<p>The following command is used to update homebrew:</p>
|
||||
<pre><code class="language-bash">brew update
|
||||
</code></pre>
|
||||
<h2>Update packages installed on your system</h2>
|
||||
<p>The following command is used to update software that is installed / managed by homebrew.</p>
|
||||
<pre><code class="language-bash">brew upgrade
|
||||
</code></pre>
|
||||
<p>You can combine the update and upgrade commands, which will update homebrew and upgrade all the software it manages on you machine with the
|
||||
following command.</p>
|
||||
<pre><code class="language-bash">brew update &amp;&amp; brew upgrade
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>That is it for this article. I will say that for me, when I find a piece of software that I want to use, I generally try to search for it in
|
||||
<code>brew</code> first, before installing it via other means.</p>
|
||||
<p>I hope you’ve found this article helpful. In the next article we will start to use the skills that we’ve learned in these first two articles
|
||||
and write our first program / script.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-1/</id>
|
||||
<title>Introduction to Programming for HVAC Part-1</title>
|
||||
<updated>2025-02-20T16:12:06Z</updated>
|
||||
<content type="html"><p>This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I think if nothing else, this series can help gain knowledge, tips, and tricks to make you more comfortable with your computer. I hope that
|
||||
you will at least learn how to use your <code>terminal</code> application and more specifically <code>vim</code> motions and keybindings (more on that in another
|
||||
article).</p>
|
||||
<p>The goal of this article is to just get a machine setup with tools and to start exploring. I am a shill for <code>macOS</code>, so all of these will be
|
||||
specifically geared towards that and my workflows, most everything that is showcased should also work on <code>linux</code> machines (not sure about
|
||||
<code>windows</code>), although you may have to search for specific instructions on installing software for other platforms.</p>
|
||||
<p>What I have learned on my journey in programming is that the more you can lean on small software packages that focus on a single task, but
|
||||
do them well, the better. The less you use your mouse, the more productive you can be. The more you can work with <code>text</code> files and formats
|
||||
the more portable and transformable your workflows can be.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>The first thing that we will focus on is becoming familiar with the terminal application. On macOS the terminal application is located at
|
||||
<code>/Applications/Utilities/Terminal.app</code>. However, rather than click around to find it, you can use the <code>⌘&lt;space&gt;</code> to pull up your spotlight
|
||||
search, then type <code>Terminal</code> to select the terminal application.</p>
|
||||
<p><img src="/articles/images/2023-09-21-spotlight.png" alt="spotlight" /></p>
|
||||
<h3>Terminal Overview</h3>
|
||||
<p>Your terminal is a program that allows you to run programs by typing commands into it’s window. There are a lot of built-in commands and a
|
||||
bunch that you can install. The terminal is very customizable (and once familiar, you will constantly be tweaking / adjusting to suit your
|
||||
needs). Right now customization is not what we will focus on, however in future articles I will provide tips and tricks on customizing it.
|
||||
Right now, we only need to know how to open it up and type in commands.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal.png" alt="terminal" /></p>
|
||||
<p>Below is an image / explanation of what the default status line includes.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal-line.png" alt="terminal-line" /></p>
|
||||
<h3>Learn Basic Commands (Built-in)</h3>
|
||||
<p>Here are a few basic commands that you should familiarize yourself with, as you will use them often when working inside of a terminal.</p>
|
||||
<h3>Change Directory</h3>
|
||||
<p><code>cd</code> (change directory) is the command that allows you to move around your file system when inside the terminal.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> <code>~</code> is a representation of your <code>Home</code> directory.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/Documents
|
||||
</code></pre>
|
||||
<p>The above command will move you into your Documents directory.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If there are spaces in the name of the directory you try to move to then the easiest way is to wrap the name in quotes.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd &quot;~/Documents/Product Concepts&quot;
|
||||
</code></pre>
|
||||
<p>Some other things to understand when moving around / supplying arguments to the <code>cd</code> command.</p>
|
||||
<p>You can use <code>..</code> to go backwards / move up to the parent directory. For example, say we are in the <code>~/Documents</code> directory, to go back up to
|
||||
the home directory we could use the following:</p>
|
||||
<pre><code class="language-bash">cd ..
|
||||
</code></pre>
|
||||
<p>These can be chained together as well. For example say we are located in the <code>~/Documents/Product Concepts</code> directory, we could use the
|
||||
following to go up two directory levels back to the home directory.</p>
|
||||
<pre><code class="language-bash">cd ../..
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Pro-Tip:</strong> You can use the <code>&lt;tab&gt;</code> key when navigating to auto-complete, generally typing a few characters followed with the <code>&lt;tab&gt;</code> key
|
||||
will auto-complete for you.</p>
|
||||
</blockquote>
|
||||
<h3>List files</h3>
|
||||
<p>Use <code>ls</code> to output a list of files and directories where you are located.</p>
|
||||
<pre><code class="language-bash">ls
|
||||
</code></pre>
|
||||
<p><em>Example Output when in my ~/Documents directory</em></p>
|
||||
<pre><code class="language-bash">Estimates.app
|
||||
InkscapeDrawings
|
||||
KwikModel
|
||||
MyAparment
|
||||
NCISummit
|
||||
Personal
|
||||
Product Concepts
|
||||
Receipts.receipts
|
||||
RingCentral
|
||||
SketchUP
|
||||
Tech-Tips
|
||||
desktop.ini
|
||||
espanso-migrate-backup
|
||||
espanso-migrate-backup-2
|
||||
</code></pre>
|
||||
<p>Using options with <code>ls</code> to show more statistics and hidden files. There are often hidden files on your computer that are used for
|
||||
application support or other purposes, these files are not shown using the default command. Hidden files start with a <code>.</code>, below is an
|
||||
example of showing hidden files in your home directory.</p>
|
||||
<pre><code class="language-bash">ls -la ~/
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Above I added the <code>~/</code> which will allow you to list the files in your home directory even if you currently are not there in your
|
||||
terminal, if you were already there (for example by using <code>cd ~/</code> then you would not need to use that at the end of the command.</p>
|
||||
</blockquote>
|
||||
<p><em>Example Output</em></p>
|
||||
<pre><code>total 168
|
||||
drwxr-xr-x+ 46 michael staff 1472 Sep 22 10:45 .
|
||||
drwxr-xr-x 6 root admin 192 Sep 22 09:08 ..
|
||||
-r-------- 1 michael staff 7 Apr 8 2021 .CFUserTextEncoding
|
||||
-rw-r--r--@ 1 michael staff 14340 Sep 18 10:15 .DS_Store
|
||||
drwx------+ 5 michael staff 160 Sep 20 17:03 .Trash
|
||||
-rw-r--r-- 1 michael staff 186 Sep 12 15:20 .actrc
|
||||
drwxr-xr-x 4 michael staff 128 Dec 13 2021 .bin
|
||||
drwxr-xr-x 3 michael staff 96 Mar 6 2023 .bundle
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 11:40 .cabal
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 15:20 .cache
|
||||
drwxr-xr-x 13 michael staff 416 Aug 10 08:47 .config
|
||||
drwx------ 3 michael staff 96 Jun 21 2021 .cups
|
||||
drwxr-xr-x 12 michael staff 384 Sep 15 15:22 .docker
|
||||
drwxr-xr-x 20 michael staff 640 Sep 19 08:11 .dotfiles
|
||||
drwxr-xr-x 4 michael staff 128 Jul 26 2021 .gem
|
||||
drwxr-xr-x 3 michael staff 96 Oct 11 2021 .jssc
|
||||
-rw------- 1 michael staff 20 Sep 22 10:45 .lesshst
|
||||
drwxr-x--- 3 michael staff 96 Mar 29 08:47 .lldb
|
||||
drwxr-xr-x 8 michael staff 256 Mar 1 2023 .local
|
||||
drwxr-xr-x 4 root staff 128 Apr 12 2021 .newtek
|
||||
drwxr-xr-x 5 michael staff 160 Dec 13 2021 .npm
|
||||
-rw------- 1 michael staff 27436 Apr 10 10:21 .psql_history
|
||||
drwxr-xr-x 7 michael staff 224 Apr 18 2022 .ssh
|
||||
drwxr-xr-x 6 michael staff 192 Sep 21 09:06 .swiftpm
|
||||
lrwxr-xr-x 1 michael staff 25 Dec 27 2021 .tmux.conf -&gt; .dotfiles/tmux/.tmux.conf
|
||||
drwxr-xr-x 8 michael staff 256 Mar 27 16:14 .twilio-cli
|
||||
drwxr-xr-x 6 michael staff 192 Sep 18 11:08 .vim
|
||||
-rw------- 1 michael staff 23086 Sep 21 09:45 .viminfo
|
||||
-rw-r--r-- 1 michael staff 254 Sep 21 09:32 .wget-hsts
|
||||
lrwxr-xr-x 1 michael staff 43 Jan 3 2022 .zshenv -&gt; /Users/michael/.dotfiles/zsh/config/.zshenv
|
||||
drwxr-xr-x 8 michael staff 256 Dec 14 2021 AmazonWorkDocsCompanion
|
||||
drwx------@ 4 michael staff 128 Dec 13 2021 Applications
|
||||
lrwxr-xr-x 1 michael staff 40 Jun 6 12:00 Applications (Parallels) -&gt; /Volumes/Bucket/Applications (Parallels)
|
||||
drwx------@ 30 michael staff 960 Sep 21 08:54 Desktop
|
||||
drwx------@ 19 michael staff 608 Sep 14 10:15 Documents
|
||||
drwx------@ 21 michael staff 672 Sep 21 09:43 Downloads
|
||||
drwx------+ 115 michael staff 3680 Sep 14 10:04 Library
|
||||
drwxr-xr-x 3 michael staff 96 Sep 8 13:06 LocalProjects
|
||||
lrwxr-xr-x 1 michael staff 29 Dec 30 2021 Movies -&gt; /Volumes/Bucket/Videos/Movies
|
||||
lrwxr-xr-x 1 michael staff 21 Dec 30 2021 Music -&gt; /Volumes/Bucket/Music
|
||||
drwx------@ 2 michael staff 64 Mar 6 2023 Parallels
|
||||
drwx------@ 7 michael staff 224 Sep 14 09:52 Pictures
|
||||
drwxr-x---+ 4 michael staff 128 Apr 8 2021 Public
|
||||
drwxr-xr-x+ 3 michael staff 96 Sep 14 09:52 Sites
|
||||
drwxr-xr-x 3 michael staff 96 Jun 7 2021 WorkDocs Drive
|
||||
drwxr-xr-x 3 michael staff 96 Sep 18 11:36 go
|
||||
</code></pre>
|
||||
<p>As you can see, I have a lot of hidden files and folders, your output will probably look much different than mine.</p>
|
||||
<h3>Clearing the Terminal</h3>
|
||||
<p>Often times you may want to clear the terminal screen. You can use the <code>clear</code> command to clear the screen of the terminal.</p>
|
||||
<pre><code class="language-bash">clear
|
||||
</code></pre>
|
||||
<p>Or use a keyboard shortcut <code>⌃l</code> (<code>&lt;control&gt;l</code>)</p>
|
||||
<h3>Creating Directories</h3>
|
||||
<p>Use <code>mkdir</code> (make directory) to create a directory.</p>
|
||||
<p>First, let’s move into the <code>tmp</code> directory, the <code>tmp</code> directory is a directory on your file system that is typically used for applications
|
||||
to write temporary logs / files to, it get’s erased everytime your computer is restarted. We can use the <code>cd</code> command that we learned
|
||||
earlier.</p>
|
||||
<pre><code class="language-bash">cd /tmp
|
||||
</code></pre>
|
||||
<p>Next, let’s create a new directory called “MyDirectory”.</p>
|
||||
<pre><code class="language-bash">mkdir MyDirectory
|
||||
</code></pre>
|
||||
<h4>Gotcha’s with ‘mkdir’</h4>
|
||||
<p>By default you can’t create directories that are multiple levels deep, unless the directories already existed or we provide the <code>-p</code> option.
|
||||
For example, if we want to create a directory at <code>/tmp/MyOtherDirectory/Nested/Deeply</code> then we could use the following command when inside
|
||||
the <code>tmp</code> directory.</p>
|
||||
<pre><code class="language-bash">mkdir -p MyOtherDirectory/Nested/Deeply
|
||||
</code></pre>
|
||||
<p>Now, try out using the <code>&lt;tab&gt;</code> key with the <code>cd</code> command to navigate to the <code>Deeply</code> folder.</p>
|
||||
<pre><code class="language-bash">cd MyOther &lt;tab&gt; &lt;tab&gt; &lt;tab&gt;
|
||||
</code></pre>
|
||||
<h3>Open Command</h3>
|
||||
<p>You can use the open command to open files or folders in the default application for the file type.</p>
|
||||
<p>For example, if we want to open a <code>Finder</code> window while in the <code>/tmp</code> directory, we can use the following command:</p>
|
||||
<pre><code class="language-bash">open .
|
||||
</code></pre>
|
||||
<h3>Manual Pages</h3>
|
||||
<p>Lastly, to learn more about commands you can use the <code>man &lt;command&gt;</code>. To bring up the manual pages for the command in the terminal. You can
|
||||
use the arrow keys to navigate around the manual pages and type the letter <code>q</code> to quit / close the manual pages.</p>
|
||||
<pre><code class="language-bash">man ls
|
||||
</code></pre>
|
||||
<p>That is it for the first installment in this series. I hope you learned something and have better understanding of using your terminal.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -90,6 +90,63 @@ Markdown is a “mark-up” language. It allows you to write content in plain te
|
||||
converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -111,6 +168,12 @@ converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
deploy/articles/tag/psychrometric-chart/feed.xml
Normal file
84
deploy/articles/tag/psychrometric-chart/feed.xml
Normal file
@@ -0,0 +1,84 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/psychrometric-chart/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
83
deploy/articles/tag/psychrometric-chart/index.html
Normal file
83
deploy/articles/tag/psychrometric-chart/index.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in psychrometric-chart
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/psychrometric-chart/feed.xml" rel="alternate" title="mhoush: articles with tag psychrometric-chart" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/psychrometric-chart/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
143
deploy/articles/tag/psychrometrics/feed.xml
Normal file
143
deploy/articles/tag/psychrometrics/feed.xml
Normal file
@@ -0,0 +1,143 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/psychrometrics/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introducing-psychrometrics-cli/</id>
|
||||
<title>Introducing Psychrometrics CLI</title>
|
||||
<updated>2025-02-20T16:03:19Z</updated>
|
||||
<content type="html"><p>Today, I’m releasing a command line application that is built on top of my
|
||||
<a href="https://github.com/swift-psychrometrics/swift-psychrometrics">swift-psychrometrics</a> package, that I open sourced over 2 years ago.</p>
|
||||
<p>The application consists of many calculations / conversions for psychrometric properties of an air stream. The tool works for both imperial
|
||||
and metric units. The application will work natively on macOS, but can also be ran through a <code>docker</code> container on other platforms.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I spend a lot of time in my terminal, because I can work so much more efficiently. I discovered many years ago that the more I can do using
|
||||
simple applications and keyboard over a mouse and a web browser or native application the more I can accomplish. I understand this is
|
||||
intimidating for many who think they are <em>“not good with computers”.</em> I can assure that was me several years ago, I would only encourage you
|
||||
to not be afraid and give it a shot. We are at a time in society where it is easier than ever to get informed and learned new skills.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>For complete installation instructions, you can view the <a href="https://github.com/swift-psychrometrics/psychrometrics-cli">github</a> repository.</p>
|
||||
<p>The following instructions are based on using macOS.</p>
|
||||
<h3>Open your terminal application.</h3>
|
||||
<p>Personally, I use <a href="https://iterm2.com/">iTerm2</a>, however you can use the default <code>Terminal</code> app. Found at
|
||||
<code>/Applications/Utilities/Terminal.app</code>.</p>
|
||||
<h2>Install Homebrew</h2>
|
||||
<p>We use <a href="https://brew.sh">Homebrew</a> for package distribution of the pre-built application binaries. You can follow their instructions to
|
||||
install.</p>
|
||||
<h3>Tap our custom formula tap.</h3>
|
||||
<pre><code class="language-bash">brew tap swift-psychrometrics/formula
|
||||
</code></pre>
|
||||
<h3>Install the psychrometrics application</h3>
|
||||
<pre><code class="language-bash">brew install psychrometrics
|
||||
</code></pre>
|
||||
<p>That’s it!</p>
|
||||
<h2>Usage</h2>
|
||||
<p>I will run through a couple of the commands that are supplied with the application and show what you can expect the outputs to be.</p>
|
||||
<h3>Properties</h3>
|
||||
<p>The following command will output a bunch of the psychrometric properties of an air stream. There are several ways to call it, but generally
|
||||
you will supply the dry bulb temperature and the relative humidity.</p>
|
||||
<p>Below, we calculate the psychrometric properties based on 75°F and 50% humidity.</p>
|
||||
<pre><code class="language-bash">psychrometrics --dry-bulb 75 --relative-humidity 50
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-properties.png" alt="properties-output" /></p>
|
||||
<h3>Dehumidifier Sizing</h3>
|
||||
<p>If you’ve read some of my recent articles on calculating the
|
||||
<a href="https://mhoush.com/posts/sizing-dehumidifier-by-latent-load/">dehumidifier size required based on the latent load</a>, the application also
|
||||
ships with a calculation that will do this for you and has the ability to calculate it at different <code>coverages</code> that you can supply.</p>
|
||||
<p>For example if we’ve done a load calculation and determined that we have a latent load of <code>4,334 BTU/h</code> then we could run the following
|
||||
command to see what size dehumidifier is needed for <code>100%, 85%, and 70%</code> of the latent load.</p>
|
||||
<pre><code class="language-bash">psychrometrics dh size --coverage 100 85 70 --verbose 4334
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-dh-size.png" alt="dh-size" /></p>
|
||||
<h3>Pounds of Water Removed</h3>
|
||||
<p>I also recently wrote an article about <a href="https://mhoush.com/posts/pounds-of-water-removed/">calculating the pounds of water removed</a> from an
|
||||
air stream given the grains of moisture removed.</p>
|
||||
<p>Below is an example of calculating the pounds of water removed per hour based on the example in the article (14 delta-grains)</p>
|
||||
<pre><code class="language-bash">psychrometrics dh pounds-removed --delta 14 --cfm 797 --verbose
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-pounds-removed.png" alt="pounds-removed" /></p>
|
||||
<h3>Help</h3>
|
||||
<p>You can use <code>--help</code> option to show help and the list of commands provided.</p>
|
||||
<p><img src="/articles/images/2023-09-18-help.png" alt="help" /></p>
|
||||
<p>If you have any questions then feel free to email or message me. I hope some of you may find this application useful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
96
deploy/articles/tag/psychrometrics/index.html
Normal file
96
deploy/articles/tag/psychrometrics/index.html
Normal file
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in psychrometrics
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/psychrometrics/feed.xml" rel="alternate" title="mhoush: articles with tag psychrometrics" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/psychrometrics/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,75 +5,75 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,20 +5,564 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/free-as-in-freedom/</id>
|
||||
<title>Free As In Freedom</title>
|
||||
<updated>2025-02-19T21:39:28Z</updated>
|
||||
<summary>Salute to open-source software engineers</summary>
|
||||
<link href="http://localhost:3000/articles/2024/free-as-in-freedom/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2024/free-as-in-freedom/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-4/</id>
|
||||
<title>Introduction to Programming for HVAC Part-4</title>
|
||||
<updated>2025-02-20T16:31:35Z</updated>
|
||||
<content type="html"><p>This article builds upon our <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-3/">last</a> article, so make sure to catch up
|
||||
before continuing with this article.</p>
|
||||
<h2>Arguments</h2>
|
||||
<p>Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments are
|
||||
supplied to shell scripts are separated by a space <code>&quot; &quot;</code>, as opposed to options which start with a <code>-&lt;character&gt;</code> or <code>--&lt;word&gt;</code>.</p>
|
||||
<p>To illustrate this, let’s change our <code>hello-world</code> script we wrote in the last article.</p>
|
||||
<p><strong>Move into our scripts directory:</strong></p>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<p><strong>Make a copy of the hello-world script:</strong></p>
|
||||
<pre><code class="language-bash">cp hello-world greet
|
||||
</code></pre>
|
||||
<p>Above we make a copy of the hello-world file and name the copy <code>greet</code>.</p>
|
||||
<p><strong>Open the greet file:</strong></p>
|
||||
<pre><code class="language-bash">open -a TextEdit greet
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Because the greet file is an executable, in order to open it in the <code>TextEdit</code> application we must supply the <code>-a</code> option.
|
||||
Otherwise it will just run our <code>greet</code> program in another terminal. Use <code>man open</code> to read more about the open command.</p>
|
||||
</blockquote>
|
||||
<p><strong>Edit the greet file:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo &quot;Hello, ${1}!&quot;
|
||||
</code></pre>
|
||||
<p>Make sure to save <code>⌘s</code> the file.</p>
|
||||
<p>Take note that the quotes need to be changed to <code>&quot;</code> (double quotes) from our original <code>hello-world</code> program.</p>
|
||||
<p>The <code>${1}</code> is indicating that we will insert / interpret the first argument passed to our program and insert it at that location. Arguments
|
||||
are interpreted in order they are passed in with <code>${0}</code> always representing the filename of the program that is called (generally not needed
|
||||
/ used in your scripts).</p>
|
||||
<p><strong>Test it out:</strong></p>
|
||||
<pre><code class="language-bash">./greet Michael
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-26-greet-output.png" alt="greet-output" /></p>
|
||||
<p>If you’d like to supply multiple words (or arguments that contain spaces) as a single argument then you can wrap them in quotes.</p>
|
||||
<pre><code class="language-bash">./greet &quot;Michael Housh&quot;
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Wrapping in quotes is especially useful for commands that take file paths, if any of the folders or file names contain spaces.</p>
|
||||
</blockquote>
|
||||
<h2>More Useful Program</h2>
|
||||
<p>At this point, it’s time to build a more useful program that we can use. First, we must download some dependencies for our program.</p>
|
||||
<p><strong>Install imagemagick:</strong></p>
|
||||
<pre><code class="language-bash">brew install imagemagick
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you’d like to check out the documentation / website for imagemagick you can run <code>brew home imagemagick</code>.</p>
|
||||
</blockquote>
|
||||
<p>This will take a bit for brew to install imagemagick and it’s dependencies. When it’s completed, we can check to make sure that imagemagick
|
||||
is installed by running the following command.</p>
|
||||
<pre><code class="language-bash">magick --version
|
||||
</code></pre>
|
||||
<p>It should output something along the lines of this below.</p>
|
||||
<pre><code class="language-bash">Version: ImageMagick 7.1.1-17 Q16-HDRI aarch64 21569 https://imagemagick.org
|
||||
Copyright: (C) 1999 ImageMagick Studio LLC
|
||||
License: https://imagemagick.org/script/license.php
|
||||
Features: Cipher DPC HDRI Modules OpenMP(5.0)
|
||||
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
|
||||
Compiler: gcc (4.2)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Don’t forget, you can use the <code>clear</code> command to clear the terminal.</p>
|
||||
</blockquote>
|
||||
<p><strong>Create our script:</strong></p>
|
||||
<pre><code class="language-bash">touch mktrans
|
||||
</code></pre>
|
||||
<p>We are going to name our script <code>mktrans</code> as a short for make transparent.</p>
|
||||
<p><strong>Open the file:</strong></p>
|
||||
<pre><code class="language-bash">open mktrans
|
||||
</code></pre>
|
||||
<p><strong>The program:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/bash
|
||||
|
||||
# The input file path, passed in as the first argument.
|
||||
inputfile=&quot;${1}&quot;
|
||||
|
||||
# The color to make transparent, optionally passed in as the second argument.
|
||||
# by default we handle / make white backgrounds transparent.
|
||||
color=&quot;${2:-white}&quot;
|
||||
|
||||
# Use the built-in basename command to normalize the input file name
|
||||
# this will convert a file path, such as ~/Pictures/my-image.png to my-image.png.
|
||||
fullfilename=$(basename -- &quot;$inputfile&quot;)
|
||||
|
||||
# Use the text of the `fullfilename` up to the first '.' as the file name.
|
||||
filename=&quot;${fullfilename%%.*}&quot;
|
||||
|
||||
# Use the text after the last '.' as the file extension.
|
||||
extension=&quot;${fullfilename##*.}&quot;
|
||||
|
||||
# Create the output file name to use.
|
||||
#
|
||||
# For an input file of `input.png`, our output name would be
|
||||
# `input-transparent.png`.
|
||||
#
|
||||
# This will output the file in the directory that we are
|
||||
# in when we use our script (which may different than where
|
||||
# the image is located)
|
||||
outputfile=&quot;${filename}-transparent.${extension}&quot;
|
||||
|
||||
# Make the magick happen :)
|
||||
convert &quot;${inputfile}&quot; -fuzz 10% -transparent &quot;${color}&quot; &quot;${outputfile}&quot;
|
||||
|
||||
</code></pre>
|
||||
<p>I’ve included comments in the program above, which is good practice, as there is high odds that you will forget what is going on when / if
|
||||
you open the file up in the future to look at it. We are using a lot of what is called parameter expansion magic in this file. You can read
|
||||
up more on what we are doing in the <a href="https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html">bash documentation</a>.</p>
|
||||
<p>This script is far from perfect, there are a lot of things to be improved upon. For example, if you download / save the banner image of this
|
||||
post and run this script, it will also remove some color in the wizards beard, eyes, and eye brows. However, it does work very well for my
|
||||
general use case, which is to remove the background from screenshots of pdf documents. It should be noted that it will not work on all types
|
||||
of images, some image types do not allow transparency, so it is safest to call this with input image being a <code>.png</code> image type, however you
|
||||
can use the <code>imagemagick</code> program that we downloaded to convert other image types to <code>.png</code>, but that will be left up to you to figure out.</p>
|
||||
<h2>Using Our Program</h2>
|
||||
<p>This is going to assume that you have download the banner image at the top of this article. You can do this by right-clicking and choosing
|
||||
<code>Save As</code>. This should save the image in your downloads folder, and you can keep the name of <code>part4-banner.png</code>.</p>
|
||||
<p><strong>Make the program executable:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x mktrans
|
||||
</code></pre>
|
||||
<p><strong>Make the image background transparent:</strong></p>
|
||||
<pre><code class="language-bash">./mktrans ~/Downloads/part4-banner.png
|
||||
</code></pre>
|
||||
<p><strong>Open the image:</strong></p>
|
||||
<pre><code class="language-bash">open part4-banner-transparent.png
|
||||
</code></pre>
|
||||
<p>It should look like below.</p>
|
||||
<p><img src="/articles/images/2023-09-26-part4-banner-transparent.png" alt="banner-transparent" /></p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you are viewing this site in <em>light</em> mode, the image does not look that bad. Hit the moon button in the top above my profile
|
||||
image to see some of the flaws of our program.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Remove the image from the <code>~/.local/bin</code> by using <code>rm part4-banner-transparent.png</code>. Be aware that the <code>rm</code> command can not be
|
||||
undone, so use with caution / knowledge. It is safer, until you are more comfortable to use the <code>Finder</code> application and move the file to
|
||||
the trash. In <code>Finder</code>, you can show hidden directories by typing <code>⌘.</code> or go directly to the folder by typing <code>⇧⌘G</code> (shift + command + G)
|
||||
and in the pop-up typing <code>~/.local/bin</code>.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p>That is it for this article. In the upcoming articles we will setup our <code>shell</code> environment so that we can use the commands we’ve built
|
||||
without having to navigate to the <code>~/.local/bin</code> directory. Thank you for reading to the end, I hope you’re finding this series helpful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-3/</id>
|
||||
<title>Introduction to Programming for HVAC Part-3</title>
|
||||
<updated>2025-02-20T16:20:56Z</updated>
|
||||
<content type="html"><p>In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up <a href="https://mhoush.com/series/programming-for-hvac/">here</a> before continuing with this article.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we
|
||||
will write, that will remove the background from an image.</p>
|
||||
<h3>Creating a scripts directory</h3>
|
||||
<p>We learned in the <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first article</a> how to use our terminal. Today we are
|
||||
going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.</p>
|
||||
<p><strong>Create a directory</strong></p>
|
||||
<pre><code class="language-bash">mkdir -p ~/.local/bin
|
||||
</code></pre>
|
||||
<p>The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> The <code>-p</code> option allows us to create nested directories if the parent directory doesn’t exist.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<h3>Hello World</h3>
|
||||
<p>It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get
|
||||
started.</p>
|
||||
<p><strong>Creating our script file:</strong></p>
|
||||
<pre><code class="language-bash">touch hello-world.sh
|
||||
</code></pre>
|
||||
<p><strong>Now open the file:</strong></p>
|
||||
<pre><code class="language-bash">open hello-world.sh
|
||||
</code></pre>
|
||||
<p>The above command should open the file in the <code>TextEdit</code> application. In order to make the text edit application to not auto-capitalize
|
||||
words and play more nicely, we need to adjust some settings. Open the settings by pressing <code>⌘,</code>.</p>
|
||||
<p>In the <strong>Format</strong> section, select <em>Plain text</em> and in the <strong>Options</strong> section de-select <em>Check spelling as you type</em>.</p>
|
||||
<p><img src="/articles/images/2023-09-24-text-settings.png" alt="text-settings" /></p>
|
||||
<p>At this point for changes to take place, you will need to close the file and re-open.</p>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> In your terminal you can run the last command in your history by using the <code>↑</code> (Up) arrow key.</p>
|
||||
</blockquote>
|
||||
<p>Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:</p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo 'Hello World!'
|
||||
</code></pre>
|
||||
<p>The first line is referred to as the <code>shebang</code>, this tells your computer which shell interperter to run your file. I have not explained the
|
||||
shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the <code>sh</code> posix
|
||||
shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just
|
||||
about any machine you were on).</p>
|
||||
<p>The second line we are using the built-in <code>echo</code> command and passing it the ‘Hello World!’ argument.</p>
|
||||
<p>Now save and close the file <code>⌘s</code> (to save) <code>⌘q</code> (to quit the text edit application).</p>
|
||||
<p><strong>Run the program from your terminal:</strong></p>
|
||||
<pre><code class="language-bash">/bin/sh hello-world.sh
|
||||
</code></pre>
|
||||
<p>You should see that <code>Hello World!</code> was printed to your console.</p>
|
||||
<p><img src="/articles/images/2023-09-24-hello-output.png" alt="hello-output" /></p>
|
||||
<h3>Make Executable</h3>
|
||||
<p>Now that we have our basic script working, let’s make it an executable.</p>
|
||||
<p><strong>In your terminal, type the following:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x hello-world.sh
|
||||
</code></pre>
|
||||
<p>This will change the mode of the file type to be an executable.</p>
|
||||
<p>Now move / rename the file so we don’t have to call it using <code>.sh</code> extension:</p>
|
||||
<pre><code class="language-bash">mv hello-world.sh hello-world
|
||||
</code></pre>
|
||||
<p>Now that the file is executable, we can execute it by just calling the name of the file.</p>
|
||||
<pre><code class="language-bash">./hello-world
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> We have to prefix the file name with <code>./</code> in the above command so that it knows where to find our file. The <code>./</code> is saying run
|
||||
this file in our current directory. In the future we will setup our shell so that it knows to look in our <code>~/.local/bin</code> directory for
|
||||
scripts, so that we can call them without this prefix.</p>
|
||||
</blockquote>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program
|
||||
from our terminal. I should mention that the <code>TextEdit</code> application is generally not how you would program, people typically use what is
|
||||
known as an <code>IDE (integrated development environment)</code>, however I chose to use the <code>TextEdit</code> application because it is built-in to <code>macOS</code>
|
||||
and allowed us to accomplish our goal without downloading other software.</p>
|
||||
<p>In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time.
|
||||
Thank you for reading to this point.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-2/</id>
|
||||
<title>Introduction to Programming for HVAC Part-2</title>
|
||||
<updated>2025-02-20T16:16:09Z</updated>
|
||||
<content type="html"><p>In this article, learn about installing a package manager. If you missed it, check out the
|
||||
<a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first</a> article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.</p>
|
||||
<h2>What is a Package Manager</h2>
|
||||
<p>A package manager is a piece of software that helps to install software and manage updates for your system. For me, the first thing that I
|
||||
do with a new machine is install <code>Homebrew</code>. <a href="https://brew.sh">Homebrew</a> is my preferred package manager for <code>macOS</code>.</p>
|
||||
<h2>Why</h2>
|
||||
<p>A package manager is nice because often software relies / requires other dependencies in order to work properly. By using a package manager
|
||||
it will make sure that the correct dependencies are installed for the software that you need to run. It allows you to be able to update and
|
||||
manage software through a centralized interface.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>Installation is simple. Open up your terminal and enter the following command (easiest to just copy / paste from the homepage linked above).</p>
|
||||
<pre><code class="language-bash">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
|
||||
</code></pre>
|
||||
<p>This will prompt you for your password in order to create some directories and install the required software for <code>brew</code> to work. The
|
||||
installation may take some time, while it downloads the command line tools for <code>Xcode</code>.</p>
|
||||
<p>When completed, follow the <code>Next Steps</code> and copy / paste the command listed, that should look like below.</p>
|
||||
<pre><code class="language-bash">(echo; echo 'eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;') &gt;&gt; /Users/&lt;you&gt;/.zprofile
|
||||
eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-22-brew-output.png" alt="brew-output" /></p>
|
||||
<p>The first line of this command sets up some things in your shell profile (which we have not discussed yet) that will make <code>Homebrew</code>
|
||||
available to you anytime you start a new session in your terminal. The second line of the command makes it available in your current
|
||||
terminal session.</p>
|
||||
<p>Next run the following command and make sure that everything is setup correctly.</p>
|
||||
<pre><code class="language-bash">brew doctor
|
||||
</code></pre>
|
||||
<p>Which should output the following:</p>
|
||||
<pre><code>Your system is ready to brew.
|
||||
</code></pre>
|
||||
<h3>Terminology</h3>
|
||||
<p>Homebrew calls command line applications <code>formula</code> and normal graphical applications <code>casks</code>. It has the ability to install both styles of
|
||||
applications.</p>
|
||||
<h2>Search Command</h2>
|
||||
<p>The following command is used to search for software packages:</p>
|
||||
<pre><code class="language-bash">brew search chrome
|
||||
</code></pre>
|
||||
<h2>Open a Homepage</h2>
|
||||
<p>The following command can be used to view the homepage of a formula or cask in your browser:</p>
|
||||
<pre><code class="language-bash">brew home google-chrome
|
||||
</code></pre>
|
||||
<h2>Update Homebrew</h2>
|
||||
<p>The following command is used to update homebrew:</p>
|
||||
<pre><code class="language-bash">brew update
|
||||
</code></pre>
|
||||
<h2>Update packages installed on your system</h2>
|
||||
<p>The following command is used to update software that is installed / managed by homebrew.</p>
|
||||
<pre><code class="language-bash">brew upgrade
|
||||
</code></pre>
|
||||
<p>You can combine the update and upgrade commands, which will update homebrew and upgrade all the software it manages on you machine with the
|
||||
following command.</p>
|
||||
<pre><code class="language-bash">brew update &amp;&amp; brew upgrade
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>That is it for this article. I will say that for me, when I find a piece of software that I want to use, I generally try to search for it in
|
||||
<code>brew</code> first, before installing it via other means.</p>
|
||||
<p>I hope you’ve found this article helpful. In the next article we will start to use the skills that we’ve learned in these first two articles
|
||||
and write our first program / script.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-1/</id>
|
||||
<title>Introduction to Programming for HVAC Part-1</title>
|
||||
<updated>2025-02-20T16:12:06Z</updated>
|
||||
<content type="html"><p>This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I think if nothing else, this series can help gain knowledge, tips, and tricks to make you more comfortable with your computer. I hope that
|
||||
you will at least learn how to use your <code>terminal</code> application and more specifically <code>vim</code> motions and keybindings (more on that in another
|
||||
article).</p>
|
||||
<p>The goal of this article is to just get a machine setup with tools and to start exploring. I am a shill for <code>macOS</code>, so all of these will be
|
||||
specifically geared towards that and my workflows, most everything that is showcased should also work on <code>linux</code> machines (not sure about
|
||||
<code>windows</code>), although you may have to search for specific instructions on installing software for other platforms.</p>
|
||||
<p>What I have learned on my journey in programming is that the more you can lean on small software packages that focus on a single task, but
|
||||
do them well, the better. The less you use your mouse, the more productive you can be. The more you can work with <code>text</code> files and formats
|
||||
the more portable and transformable your workflows can be.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>The first thing that we will focus on is becoming familiar with the terminal application. On macOS the terminal application is located at
|
||||
<code>/Applications/Utilities/Terminal.app</code>. However, rather than click around to find it, you can use the <code>⌘&lt;space&gt;</code> to pull up your spotlight
|
||||
search, then type <code>Terminal</code> to select the terminal application.</p>
|
||||
<p><img src="/articles/images/2023-09-21-spotlight.png" alt="spotlight" /></p>
|
||||
<h3>Terminal Overview</h3>
|
||||
<p>Your terminal is a program that allows you to run programs by typing commands into it’s window. There are a lot of built-in commands and a
|
||||
bunch that you can install. The terminal is very customizable (and once familiar, you will constantly be tweaking / adjusting to suit your
|
||||
needs). Right now customization is not what we will focus on, however in future articles I will provide tips and tricks on customizing it.
|
||||
Right now, we only need to know how to open it up and type in commands.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal.png" alt="terminal" /></p>
|
||||
<p>Below is an image / explanation of what the default status line includes.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal-line.png" alt="terminal-line" /></p>
|
||||
<h3>Learn Basic Commands (Built-in)</h3>
|
||||
<p>Here are a few basic commands that you should familiarize yourself with, as you will use them often when working inside of a terminal.</p>
|
||||
<h3>Change Directory</h3>
|
||||
<p><code>cd</code> (change directory) is the command that allows you to move around your file system when inside the terminal.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> <code>~</code> is a representation of your <code>Home</code> directory.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/Documents
|
||||
</code></pre>
|
||||
<p>The above command will move you into your Documents directory.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If there are spaces in the name of the directory you try to move to then the easiest way is to wrap the name in quotes.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd &quot;~/Documents/Product Concepts&quot;
|
||||
</code></pre>
|
||||
<p>Some other things to understand when moving around / supplying arguments to the <code>cd</code> command.</p>
|
||||
<p>You can use <code>..</code> to go backwards / move up to the parent directory. For example, say we are in the <code>~/Documents</code> directory, to go back up to
|
||||
the home directory we could use the following:</p>
|
||||
<pre><code class="language-bash">cd ..
|
||||
</code></pre>
|
||||
<p>These can be chained together as well. For example say we are located in the <code>~/Documents/Product Concepts</code> directory, we could use the
|
||||
following to go up two directory levels back to the home directory.</p>
|
||||
<pre><code class="language-bash">cd ../..
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Pro-Tip:</strong> You can use the <code>&lt;tab&gt;</code> key when navigating to auto-complete, generally typing a few characters followed with the <code>&lt;tab&gt;</code> key
|
||||
will auto-complete for you.</p>
|
||||
</blockquote>
|
||||
<h3>List files</h3>
|
||||
<p>Use <code>ls</code> to output a list of files and directories where you are located.</p>
|
||||
<pre><code class="language-bash">ls
|
||||
</code></pre>
|
||||
<p><em>Example Output when in my ~/Documents directory</em></p>
|
||||
<pre><code class="language-bash">Estimates.app
|
||||
InkscapeDrawings
|
||||
KwikModel
|
||||
MyAparment
|
||||
NCISummit
|
||||
Personal
|
||||
Product Concepts
|
||||
Receipts.receipts
|
||||
RingCentral
|
||||
SketchUP
|
||||
Tech-Tips
|
||||
desktop.ini
|
||||
espanso-migrate-backup
|
||||
espanso-migrate-backup-2
|
||||
</code></pre>
|
||||
<p>Using options with <code>ls</code> to show more statistics and hidden files. There are often hidden files on your computer that are used for
|
||||
application support or other purposes, these files are not shown using the default command. Hidden files start with a <code>.</code>, below is an
|
||||
example of showing hidden files in your home directory.</p>
|
||||
<pre><code class="language-bash">ls -la ~/
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Above I added the <code>~/</code> which will allow you to list the files in your home directory even if you currently are not there in your
|
||||
terminal, if you were already there (for example by using <code>cd ~/</code> then you would not need to use that at the end of the command.</p>
|
||||
</blockquote>
|
||||
<p><em>Example Output</em></p>
|
||||
<pre><code>total 168
|
||||
drwxr-xr-x+ 46 michael staff 1472 Sep 22 10:45 .
|
||||
drwxr-xr-x 6 root admin 192 Sep 22 09:08 ..
|
||||
-r-------- 1 michael staff 7 Apr 8 2021 .CFUserTextEncoding
|
||||
-rw-r--r--@ 1 michael staff 14340 Sep 18 10:15 .DS_Store
|
||||
drwx------+ 5 michael staff 160 Sep 20 17:03 .Trash
|
||||
-rw-r--r-- 1 michael staff 186 Sep 12 15:20 .actrc
|
||||
drwxr-xr-x 4 michael staff 128 Dec 13 2021 .bin
|
||||
drwxr-xr-x 3 michael staff 96 Mar 6 2023 .bundle
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 11:40 .cabal
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 15:20 .cache
|
||||
drwxr-xr-x 13 michael staff 416 Aug 10 08:47 .config
|
||||
drwx------ 3 michael staff 96 Jun 21 2021 .cups
|
||||
drwxr-xr-x 12 michael staff 384 Sep 15 15:22 .docker
|
||||
drwxr-xr-x 20 michael staff 640 Sep 19 08:11 .dotfiles
|
||||
drwxr-xr-x 4 michael staff 128 Jul 26 2021 .gem
|
||||
drwxr-xr-x 3 michael staff 96 Oct 11 2021 .jssc
|
||||
-rw------- 1 michael staff 20 Sep 22 10:45 .lesshst
|
||||
drwxr-x--- 3 michael staff 96 Mar 29 08:47 .lldb
|
||||
drwxr-xr-x 8 michael staff 256 Mar 1 2023 .local
|
||||
drwxr-xr-x 4 root staff 128 Apr 12 2021 .newtek
|
||||
drwxr-xr-x 5 michael staff 160 Dec 13 2021 .npm
|
||||
-rw------- 1 michael staff 27436 Apr 10 10:21 .psql_history
|
||||
drwxr-xr-x 7 michael staff 224 Apr 18 2022 .ssh
|
||||
drwxr-xr-x 6 michael staff 192 Sep 21 09:06 .swiftpm
|
||||
lrwxr-xr-x 1 michael staff 25 Dec 27 2021 .tmux.conf -&gt; .dotfiles/tmux/.tmux.conf
|
||||
drwxr-xr-x 8 michael staff 256 Mar 27 16:14 .twilio-cli
|
||||
drwxr-xr-x 6 michael staff 192 Sep 18 11:08 .vim
|
||||
-rw------- 1 michael staff 23086 Sep 21 09:45 .viminfo
|
||||
-rw-r--r-- 1 michael staff 254 Sep 21 09:32 .wget-hsts
|
||||
lrwxr-xr-x 1 michael staff 43 Jan 3 2022 .zshenv -&gt; /Users/michael/.dotfiles/zsh/config/.zshenv
|
||||
drwxr-xr-x 8 michael staff 256 Dec 14 2021 AmazonWorkDocsCompanion
|
||||
drwx------@ 4 michael staff 128 Dec 13 2021 Applications
|
||||
lrwxr-xr-x 1 michael staff 40 Jun 6 12:00 Applications (Parallels) -&gt; /Volumes/Bucket/Applications (Parallels)
|
||||
drwx------@ 30 michael staff 960 Sep 21 08:54 Desktop
|
||||
drwx------@ 19 michael staff 608 Sep 14 10:15 Documents
|
||||
drwx------@ 21 michael staff 672 Sep 21 09:43 Downloads
|
||||
drwx------+ 115 michael staff 3680 Sep 14 10:04 Library
|
||||
drwxr-xr-x 3 michael staff 96 Sep 8 13:06 LocalProjects
|
||||
lrwxr-xr-x 1 michael staff 29 Dec 30 2021 Movies -&gt; /Volumes/Bucket/Videos/Movies
|
||||
lrwxr-xr-x 1 michael staff 21 Dec 30 2021 Music -&gt; /Volumes/Bucket/Music
|
||||
drwx------@ 2 michael staff 64 Mar 6 2023 Parallels
|
||||
drwx------@ 7 michael staff 224 Sep 14 09:52 Pictures
|
||||
drwxr-x---+ 4 michael staff 128 Apr 8 2021 Public
|
||||
drwxr-xr-x+ 3 michael staff 96 Sep 14 09:52 Sites
|
||||
drwxr-xr-x 3 michael staff 96 Jun 7 2021 WorkDocs Drive
|
||||
drwxr-xr-x 3 michael staff 96 Sep 18 11:36 go
|
||||
</code></pre>
|
||||
<p>As you can see, I have a lot of hidden files and folders, your output will probably look much different than mine.</p>
|
||||
<h3>Clearing the Terminal</h3>
|
||||
<p>Often times you may want to clear the terminal screen. You can use the <code>clear</code> command to clear the screen of the terminal.</p>
|
||||
<pre><code class="language-bash">clear
|
||||
</code></pre>
|
||||
<p>Or use a keyboard shortcut <code>⌃l</code> (<code>&lt;control&gt;l</code>)</p>
|
||||
<h3>Creating Directories</h3>
|
||||
<p>Use <code>mkdir</code> (make directory) to create a directory.</p>
|
||||
<p>First, let’s move into the <code>tmp</code> directory, the <code>tmp</code> directory is a directory on your file system that is typically used for applications
|
||||
to write temporary logs / files to, it get’s erased everytime your computer is restarted. We can use the <code>cd</code> command that we learned
|
||||
earlier.</p>
|
||||
<pre><code class="language-bash">cd /tmp
|
||||
</code></pre>
|
||||
<p>Next, let’s create a new directory called “MyDirectory”.</p>
|
||||
<pre><code class="language-bash">mkdir MyDirectory
|
||||
</code></pre>
|
||||
<h4>Gotcha’s with ‘mkdir’</h4>
|
||||
<p>By default you can’t create directories that are multiple levels deep, unless the directories already existed or we provide the <code>-p</code> option.
|
||||
For example, if we want to create a directory at <code>/tmp/MyOtherDirectory/Nested/Deeply</code> then we could use the following command when inside
|
||||
the <code>tmp</code> directory.</p>
|
||||
<pre><code class="language-bash">mkdir -p MyOtherDirectory/Nested/Deeply
|
||||
</code></pre>
|
||||
<p>Now, try out using the <code>&lt;tab&gt;</code> key with the <code>cd</code> command to navigate to the <code>Deeply</code> folder.</p>
|
||||
<pre><code class="language-bash">cd MyOther &lt;tab&gt; &lt;tab&gt; &lt;tab&gt;
|
||||
</code></pre>
|
||||
<h3>Open Command</h3>
|
||||
<p>You can use the open command to open files or folders in the default application for the file type.</p>
|
||||
<p>For example, if we want to open a <code>Finder</code> window while in the <code>/tmp</code> directory, we can use the following command:</p>
|
||||
<pre><code class="language-bash">open .
|
||||
</code></pre>
|
||||
<h3>Manual Pages</h3>
|
||||
<p>Lastly, to learn more about commands you can use the <code>man &lt;command&gt;</code>. To bring up the manual pages for the command in the terminal. You can
|
||||
use the arrow keys to navigate around the manual pages and type the letter <code>q</code> to quit / close the manual pages.</p>
|
||||
<pre><code class="language-bash">man ls
|
||||
</code></pre>
|
||||
<p>That is it for the first installment in this series. I hope you learned something and have better understanding of using your terminal.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introducing-psychrometrics-cli/</id>
|
||||
<title>Introducing Psychrometrics CLI</title>
|
||||
<updated>2025-02-20T16:03:19Z</updated>
|
||||
<content type="html"><p>Today, I’m releasing a command line application that is built on top of my
|
||||
<a href="https://github.com/swift-psychrometrics/swift-psychrometrics">swift-psychrometrics</a> package, that I open sourced over 2 years ago.</p>
|
||||
<p>The application consists of many calculations / conversions for psychrometric properties of an air stream. The tool works for both imperial
|
||||
and metric units. The application will work natively on macOS, but can also be ran through a <code>docker</code> container on other platforms.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I spend a lot of time in my terminal, because I can work so much more efficiently. I discovered many years ago that the more I can do using
|
||||
simple applications and keyboard over a mouse and a web browser or native application the more I can accomplish. I understand this is
|
||||
intimidating for many who think they are <em>“not good with computers”.</em> I can assure that was me several years ago, I would only encourage you
|
||||
to not be afraid and give it a shot. We are at a time in society where it is easier than ever to get informed and learned new skills.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>For complete installation instructions, you can view the <a href="https://github.com/swift-psychrometrics/psychrometrics-cli">github</a> repository.</p>
|
||||
<p>The following instructions are based on using macOS.</p>
|
||||
<h3>Open your terminal application.</h3>
|
||||
<p>Personally, I use <a href="https://iterm2.com/">iTerm2</a>, however you can use the default <code>Terminal</code> app. Found at
|
||||
<code>/Applications/Utilities/Terminal.app</code>.</p>
|
||||
<h2>Install Homebrew</h2>
|
||||
<p>We use <a href="https://brew.sh">Homebrew</a> for package distribution of the pre-built application binaries. You can follow their instructions to
|
||||
install.</p>
|
||||
<h3>Tap our custom formula tap.</h3>
|
||||
<pre><code class="language-bash">brew tap swift-psychrometrics/formula
|
||||
</code></pre>
|
||||
<h3>Install the psychrometrics application</h3>
|
||||
<pre><code class="language-bash">brew install psychrometrics
|
||||
</code></pre>
|
||||
<p>That’s it!</p>
|
||||
<h2>Usage</h2>
|
||||
<p>I will run through a couple of the commands that are supplied with the application and show what you can expect the outputs to be.</p>
|
||||
<h3>Properties</h3>
|
||||
<p>The following command will output a bunch of the psychrometric properties of an air stream. There are several ways to call it, but generally
|
||||
you will supply the dry bulb temperature and the relative humidity.</p>
|
||||
<p>Below, we calculate the psychrometric properties based on 75°F and 50% humidity.</p>
|
||||
<pre><code class="language-bash">psychrometrics --dry-bulb 75 --relative-humidity 50
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-properties.png" alt="properties-output" /></p>
|
||||
<h3>Dehumidifier Sizing</h3>
|
||||
<p>If you’ve read some of my recent articles on calculating the
|
||||
<a href="https://mhoush.com/posts/sizing-dehumidifier-by-latent-load/">dehumidifier size required based on the latent load</a>, the application also
|
||||
ships with a calculation that will do this for you and has the ability to calculate it at different <code>coverages</code> that you can supply.</p>
|
||||
<p>For example if we’ve done a load calculation and determined that we have a latent load of <code>4,334 BTU/h</code> then we could run the following
|
||||
command to see what size dehumidifier is needed for <code>100%, 85%, and 70%</code> of the latent load.</p>
|
||||
<pre><code class="language-bash">psychrometrics dh size --coverage 100 85 70 --verbose 4334
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-dh-size.png" alt="dh-size" /></p>
|
||||
<h3>Pounds of Water Removed</h3>
|
||||
<p>I also recently wrote an article about <a href="https://mhoush.com/posts/pounds-of-water-removed/">calculating the pounds of water removed</a> from an
|
||||
air stream given the grains of moisture removed.</p>
|
||||
<p>Below is an example of calculating the pounds of water removed per hour based on the example in the article (14 delta-grains)</p>
|
||||
<pre><code class="language-bash">psychrometrics dh pounds-removed --delta 14 --cfm 797 --verbose
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-pounds-removed.png" alt="pounds-removed" /></p>
|
||||
<h3>Help</h3>
|
||||
<p>You can use <code>--help</code> option to show help and the list of commands provided.</p>
|
||||
<p><img src="/articles/images/2023-09-18-help.png" alt="help" /></p>
|
||||
<p>If you have any questions then feel free to email or message me. I hope some of you may find this application useful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/rss-feed/</id>
|
||||
<title>Rss Feed</title>
|
||||
<updated>2025-02-20T16:50:11Z</updated>
|
||||
<content type="html"><p>In this article I will show how to add this site’s rss feed. In particular, we will be using <a href="https://netnewswire.com">NetNewsWire</a> as the
|
||||
rss reader.</p>
|
||||
<h2>What is an RSS Feed</h2>
|
||||
<p>An RSS feed will show you new posts, generally from a blog, without having to remember to check the website at regular intervals or signup
|
||||
for an email list for notifications.</p>
|
||||
<p>NetNewsWire puts an RSS feed as:</p>
|
||||
<p><strong>It’s like podcasts</strong> - but for <em>reading.</em></p>
|
||||
<p>You consume an RSS feed, using an RSS reader application or extension in your browser.</p>
|
||||
<h2>Step One</h2>
|
||||
<p>First find and download an RSS reader, you can download <a href="https://netnewswire.com">NetNewsWire</a> for macOS from the link, or for iOS from the
|
||||
<a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210">AppStore</a>.</p>
|
||||
<h2>Step Two</h2>
|
||||
<p>Add the rss feed to stay up to date when I publish new articles.</p>
|
||||
<ol>
|
||||
<li>Click the plus in the right side of the sidebar and select <code>New Feed...</code></li>
|
||||
<li>In the URL field add: <code>https://mhoush.com/articles/feed.xml</code></li>
|
||||
<li>Optionally give it a name</li>
|
||||
<li>Click the <code>Add</code> button.</li>
|
||||
</ol>
|
||||
<p><img src="/articles/images/2023-08-10-rss-feed.gif" alt="rss gif" /></p>
|
||||
<p>That’s it.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -60,6 +60,90 @@
|
||||
<a href="/articles/2024/free-as-in-freedom/">Salute to open-source software engineers</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/rss-feed/">In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -81,6 +165,12 @@
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,67 +6,67 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/most-important-job/</id>
|
||||
<title>Most Important Job</title>
|
||||
<updated>2025-02-19T21:21:54Z</updated>
|
||||
<content type="html"><p>This short tech tip is about something one of my good friends in the trade told me a long time ago,<br />
|
||||
<content type="html"><p>This short tech tip is about something one of my good friends in the trade told me a long time ago,
|
||||
that has stuck with me through the years. It is a simple phrase / mindset.</p>
|
||||
<blockquote>
|
||||
<p>“The current job you’re on, is the most important job of your day”.</p>
|
||||
</blockquote>
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.<br />
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use<br />
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging<br />
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging
|
||||
out there.</p>
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted<br />
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem<br />
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an<br />
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few<br />
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few
|
||||
and far between, but I do want to acknowledge that scenario does also exist.</p>
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.<br />
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in<br />
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a<br />
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business<br />
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business
|
||||
standpoint.</p>
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope<br />
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope
|
||||
you find it helpful and it sticks with you through your career as it has mine.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/calculate-seer-degradation-by-age/</id>
|
||||
<title>Calculate SEER Degradation by Age</title>
|
||||
<updated>2025-02-19T21:55:30Z</updated>
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based<br />
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.</p>
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and<br />
|
||||
refrigerant charge losses. It should be noted that this is not true for all<br />
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code><br />
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for all
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code>
|
||||
of the average degradation based on systems tested.</p>
|
||||
<h2>Formula</h2>
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator<br />
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator
|
||||
coil / air handler.</p>
|
||||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||||
<p>| Where | |<br />
|
||||
| –––– | —————————————— | — |<br />
|
||||
| $SEER_d$ | Degradated SEER rating |<br />
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |<br />
|
||||
| M | Maintenance factor, 0.01-0.03 |<br />
|
||||
<p>| Where | |
|
||||
| –––– | —————————————— | — |
|
||||
| $SEER_d$ | Degradated SEER rating |
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |
|
||||
| M | Maintenance factor, 0.01-0.03 |
|
||||
| age | The age of the equipment, in years |</p>
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is<br />
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%<br />
|
||||
degradation per year, however there are some<br />
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a><br />
|
||||
that show that this can actually be as high as 5% or above depending on climate.<br />
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”<br />
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%
|
||||
degradation per year, however there are some
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a>
|
||||
that show that this can actually be as high as 5% or above depending on climate.
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”
|
||||
of degradation would be.</p>
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the<br />
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower<br />
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to<br />
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple<br />
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple
|
||||
stages).</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when<br />
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when
|
||||
installed and the system is 15 years old.</p>
|
||||
<p>Plugging those numbers into our formula.</p>
|
||||
<hr />
|
||||
@@ -76,9 +76,143 @@ installed and the system is 15 years old.</p>
|
||||
<h4>Highest Rage (5% degradation / year)</h4>
|
||||
<p>$$ SEER_d = 13 \times (1 - 0.05)^{15} = 6 $$</p>
|
||||
<hr />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER<br />
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge<br />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge
|
||||
losses can be as low as 6 SEER.</p>
|
||||
<p>Thanks for learning how to estimate SEER degradation based on equipment age!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -68,6 +68,33 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -89,6 +116,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user