1655 lines
117 KiB
XML
1655 lines
117 KiB
XML
|
||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||
<id>http://localhost:3000/articles/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/2025/vapor-htmx-todo-app/</id>
|
||
<title>Vapor + HTMX</title>
|
||
<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>
|
||
<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 rel="alternate" href="http://localhost:3000/articles/2024/free-as-in-freedom/"></link>
|
||
</entry>
|
||
<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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
(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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
cases of PGP encryption.</p>
|
||
<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
|
||
<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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
to use it to encrypt your data and be in control of your privacy.</p>
|
||
<h3>Resources</h3>
|
||
<ul>
|
||
<li><a href="https://gnupg.org/">GnuPG</a></li>
|
||
<li><a href="https://www.openpgp.org/">OpenPGP</a></li>
|
||
<li><a href="https://gpg.wtf/">gpg.wtf</a></li>
|
||
<li><a href="https://www.ietf.org/rfc/rfc4880.html">RFC4880</a></li>
|
||
</ul></content>
|
||
</entry>
|
||
<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
|
||
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
|
||
<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
|
||
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
|
||
on your network.</p>
|
||
<p><code>ssh root@192.168.1.10</code></p>
|
||
<h2>Step Two - Install Samba</h2>
|
||
<p>First, we’ll update the package registry information.</p>
|
||
<p><code>apt-get update</code></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
|
||
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
|
||
make the samba server act better for time machine backups.</p>
|
||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||
vfs objects = fruit streams_xattr
|
||
fruit:metadata = stream
|
||
fruit:model = MacSamba
|
||
fruit:posix_rename = yes
|
||
fruit:veto_appledouble = no
|
||
fruit:nfs_aces = no
|
||
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
|
||
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
|
||
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>
|
||
<h2>Step Four - Start Samba</h2>
|
||
<p>Use the following command to start the samba server.</p>
|
||
<p><code>sudo service smbd start</code></p>
|
||
<p>You can check the status, by running the following command.</p>
|
||
<p><code>systemctl status smbd</code></p>
|
||
<p><img src="/articles/images/2024-03-15-status.png" alt="status" /></p>
|
||
<p>Enable the samba server to start on boot.</p>
|
||
<p><code>systemctl enable smbd.service</code></p>
|
||
<h2>Step Five - Create Users</h2>
|
||
<p>Create a user with a home directory that they can use.</p>
|
||
<p><code>useradd --create-home michael</code></p>
|
||
<p>Give the user a password to login to the samba server.</p>
|
||
<p><code>smbpasswd michael</code></p>
|
||
<h2>Step Six - Login to Samba Server from Client</h2>
|
||
<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
|
||
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
|
||
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
|
||
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/2024/elevating-hvac/</id>
|
||
<title>Elevating HVAC: A Skilled Trade Beyond Labor</title>
|
||
<updated>2025-02-19T21:25:29Z</updated>
|
||
<content type="html"><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
|
||
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
|
||
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,
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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>
|
||
</ul></content>
|
||
</entry>
|
||
<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,
|
||
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.
|
||
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
|
||
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.
|
||
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
|
||
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/cancel-this/</id>
|
||
<title>Cancel This</title>
|
||
<updated>2025-02-19T21:17:16Z</updated>
|
||
<content type="html"><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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
everyone out there who has shown me love and support, I greatly appreciate it.</p></content>
|
||
</entry>
|
||
<entry>
|
||
<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
|
||
<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
|
||
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
|
||
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
|
||
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.
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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,
|
||
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
|
||
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.
|
||
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
|
||
that I appreciate <em>you!</em></p></content>
|
||
</entry>
|
||
<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
|
||
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
|
||
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
|
||
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.
|
||
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
|
||
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,
|
||
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
|
||
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>
|
||
<li>Not highly available in the U.S.</li>
|
||
<li>When the chiller is down nothing works (not much different than traditional)</li>
|
||
<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
|
||
for traditional boiler systems)</li>
|
||
</ol>
|
||
<h2>Advantages</h2>
|
||
<ol>
|
||
<li>Central plant for heating, cooling, and DHW (also a disadvantage)</li>
|
||
<li>Flexible distribution options / methods.</li>
|
||
<li>Self contained refrigerant circuit</li>
|
||
<li>Ability to produce / store thermal energy during off peak electrical hours</li>
|
||
<li>Ability to move BTU’s more efficiently through water than air</li>
|
||
<li>Long life for distribution system (50-100+ years)</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
|
||
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>
|
||
<entry>
|
||
<id>http://localhost:3000/articles/2023/you-should-learn-markdown/</id>
|
||
<title>You Should Learn Markdown</title>
|
||
<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
|
||
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
|
||
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,
|
||
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
|
||
(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
|
||
<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>
|
||
<thead>
|
||
<tr>
|
||
<th>Platform</th>
|
||
<th>Description</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Google</td>
|
||
<td>Most goggle tools support markdown, docs, sheets, etc.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Outlook</td>
|
||
<td>Although I hate outlook email client, it does support markdown.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Dillinger.io</td>
|
||
<td>An online tool for writing / previewing markdown</td>
|
||
</tr>
|
||
<tr>
|
||
<td>MarkText</td>
|
||
<td>A multi-platform editor for writing markdown</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<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 /
|
||
content creation.</p>
|
||
<p>Thanks for reading until the end!</p></content>
|
||
</entry>
|
||
<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
|
||
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
|
||
/ 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
|
||
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,
|
||
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 /
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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
|
||
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>
|
||
<ol>
|
||
<li>Build the community around you that you want / deserve.</li>
|
||
<li>Don’t be so quick to pass judgment.</li>
|
||
<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
|
||
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
|
||
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
|
||
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
|
||
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,
|
||
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
|
||
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
|
||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||
</ul>
|
||
</li>
|
||
<li>Michael Cianfracco (??)
|
||
<ul>
|
||
<li>Man does he make me laugh and we share a passion for the 4-Roses.</li>
|
||
</ul>
|
||
</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
|
||
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
|
||
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,
|
||
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
|
||
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
|
||
and tomorrow!</p></content>
|
||
</entry>
|
||
<entry>
|
||
<id>http://localhost:3000/articles/2023/free-quotes-are-bad-for-the-industry/</id>
|
||
<title>Free quotes != good</title>
|
||
<updated>2025-02-20T15:56:18Z</updated>
|
||
<content type="html"><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></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>
|
||
<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
|
||
on age.</p>
|
||
<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
|
||
coil / air handler.</p>
|
||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||
<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
|
||
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
|
||
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
|
||
installed and the system is 15 years old.</p>
|
||
<p>Plugging those numbers into our formula.</p>
|
||
<hr />
|
||
<h4>Lowest Range (1% degradation / year)</h4>
|
||
<p>$$ SEER_d = 13 \times (1 - 0.01)^{15} = 11.2 $$</p>
|
||
<hr />
|
||
<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
|
||
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/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/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/why-mini-splits-stink/</id>
|
||
<title>Why Mini Splits Stink</title>
|
||
<updated>2025-02-20T17:06:24Z</updated>
|
||
<content type="html"><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></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>
|
||
<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>
|
||
<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> |