feat: Ports all existing articles and images.
This commit is contained in:
@@ -6,76 +6,76 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/the-struggle/</id>
|
||||
<title>The Struggle</title>
|
||||
<updated>2025-02-19T20:53:34Z</updated>
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If<br />
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.</p>
|
||||
<h2>The struggle</h2>
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby<br />
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby
|
||||
/ complainer, which is not my intention, but here it goes.</p>
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived<br />
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9<br />
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and<br />
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still<br />
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and<br />
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and
|
||||
they’ve basically just been making her comfortable.</p>
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,<br />
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be<br />
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be
|
||||
a long recovery time.</p>
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /<br />
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread<br />
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread
|
||||
throughout the living room(s).</p>
|
||||
<p>An online friend lost her mother.</p>
|
||||
<p>All of these things have just got me emotional.</p>
|
||||
<h2>My secrets</h2>
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I<br />
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still<br />
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still
|
||||
drink on occasion, but not as I once did.</p>
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being<br />
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people<br />
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most<br />
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is<br />
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on<br />
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on
|
||||
occasion lead me into turmoil when I find out some true identity / personality of someone.</p>
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want<br />
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to<br />
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me<br />
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for<br />
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my<br />
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but<br />
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but
|
||||
truthfully I do not.</p>
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot<br />
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to<br />
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t<br />
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future<br />
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future
|
||||
pondering, perhaps).</p>
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what<br />
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not<br />
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time<br />
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having<br />
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having
|
||||
thoughtful / genuine responses.</p>
|
||||
<h2>Community</h2>
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems<br />
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of<br />
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not<br />
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not
|
||||
most of the time, not saying it can’t be / in absolute terms).</p>
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for<br />
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for<br />
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their<br />
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their
|
||||
best to lift me up when I’m down.</p>
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the<br />
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the<br />
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges<br />
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges
|
||||
;)</p>
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m<br />
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks<br />
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together<br />
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of<br />
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was<br />
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and<br />
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and
|
||||
it’s basic AF), but that truly made me feel useful / great after being down in the dumps for a bit.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I’ve probably rambled enough and am losing direction here, so I will end with a few things.</p>
|
||||
@@ -85,43 +85,43 @@ it’s basic AF), but that truly made me feel useful / great after being down in
|
||||
<li>Spend time with your loved ones, while you can.</li>
|
||||
<li>Tell someone you love them.</li>
|
||||
</ol>
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I<br />
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I
|
||||
left you off, I’m sorry and please do not take it personally.</p>
|
||||
<ol>
|
||||
<li>Bryan Orr
|
||||
<ul>
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and<br />
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,<br />
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,
|
||||
mostly all the following names would not even be in my vocabulary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ty Branaman (forget exactly how to spell his last name).
|
||||
<ul>
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be<br />
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be
|
||||
positive all the time, however it brings me hope and joy everytime!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dustin (mother f’n) Cole
|
||||
<ul>
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I<br />
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I
|
||||
can rely on him anytime I need it!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Genry Garcia
|
||||
<ul>
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,<br />
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,
|
||||
baby)!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Chris Hughes
|
||||
<ul>
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and<br />
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and
|
||||
he’s a great motivator because of his action items :)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Eric Kaiser
|
||||
<ul>
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because<br />
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because
|
||||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -132,26 +132,26 @@ of guidance he has given in the past. He truly wants to help teach people.</l
|
||||
</li>
|
||||
<li>HVAChicks Jennifer (I’ll butcher her last name from memory)
|
||||
<ul>
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I<br />
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I
|
||||
can’t wait to meet her in person one day soon!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HVAC Overtime Crew
|
||||
<ul>
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream<br />
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream
|
||||
on Friday’s. And I interact with A-Team a lot and really appreciate him / them!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Alicia Hollon
|
||||
<ul>
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,<br />
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,
|
||||
love you babe!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt<br />
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt
|
||||
currently. My mother is the kindest gentlest soul that I’ve ever met. I look up to all 5’ of her!</p>
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today<br />
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today
|
||||
and tomorrow!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -73,6 +73,12 @@ It has been one of those “when it rains, it pours” type of weeks. As...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,53 +6,53 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/heat-recovery-chiller/</id>
|
||||
<title>Heat Recovery Chiller</title>
|
||||
<updated>2025-02-19T21:08:37Z</updated>
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so<br />
|
||||
I’m doing it now. I did discuss this on<br />
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
<a href="https://hvacrschool.com/podcasts/is-the-future-of-air-conditioning-self-contained-propane-chillers/">this episode of the HVAC School Podcast.</a></p>
|
||||
<h2>Heat Recovery Chillers</h2>
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that<br />
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most<br />
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds<br />
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds
|
||||
in this article, but offer an overview of what I feel would be my dream system.</p>
|
||||
<h2>The Source</h2>
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional<br />
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would<br />
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to<br />
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style<br />
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the<br />
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of<br />
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level<br />
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level
|
||||
performance without the need of a field.</p>
|
||||
<h2>Indoor Portion</h2>
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.<br />
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load<br />
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems<br />
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more<br />
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more
|
||||
aggressively by having storage during peak load conditions.</p>
|
||||
<p><img src="/articles/images/2023-10-27-buffers2.png" alt="buffer" /></p>
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what<br />
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the<br />
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra<br />
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps<br />
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).<br />
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in<br />
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could<br />
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.<br />
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat<br />
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat
|
||||
exchanger that would be used to supply domestic hot water.</p>
|
||||
<h2>Distribution System</h2>
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,<br />
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,
|
||||
however I’m going to model it as a 4-pipe hydronic air handler.</p>
|
||||
<p><img src="/articles/images/2023-10-27-ah.png" alt="ah" /></p>
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in<br />
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan<br />
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from<br />
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high<br />
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high
|
||||
velocity systems, and even ductless styles.</p>
|
||||
<h2>Disadvantages</h2>
|
||||
<ol>
|
||||
@@ -61,7 +61,7 @@ velocity systems, and even ductless styles.</p>
|
||||
<li>Lack of understanding / technicians afraid to work on this style system.</li>
|
||||
<li>Potentially higher upfront costs.</li>
|
||||
<li>Lack of design or planning could cause unhappy clients (same with traditional)</li>
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement<br />
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement
|
||||
for traditional boiler systems)</li>
|
||||
</ol>
|
||||
<h2>Advantages</h2>
|
||||
@@ -75,11 +75,11 @@ for traditional boiler systems)</li>
|
||||
<li>Easier transition to natural / flammable refrigerants</li>
|
||||
</ol>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the<br />
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and<br />
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish<br />
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to<br />
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water<br />
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water
|
||||
-&gt; water heat pump for higher temperature distribution, incorporate solar collectors, and so on.</p>
|
||||
<p>Thank you for reading all the way to the end!</p></content>
|
||||
</entry>
|
||||
|
||||
@@ -74,6 +74,12 @@ I have always had a love and passion for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
191
deploy/articles/tag/design/feed.xml
Normal file
191
deploy/articles/tag/design/feed.xml
Normal file
@@ -0,0 +1,191 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/design/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/coil-bypass-overview/</id>
|
||||
<title>Coil Bypass Overview</title>
|
||||
<updated>2025-02-20T15:14:48Z</updated>
|
||||
<content type="html"><p>This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the challenges of this style of
|
||||
system.</p>
|
||||
<h2>What is a Coil Bypass</h2>
|
||||
<p>A coil bypass is not to be mistaken for a zoning system bypass, where airflow is “relieved” from the supply side of the system back into the
|
||||
return. Instead, a coil bypass diverts a portion of the airflow around the coil using a bypass damper(s). The bypass can serve several
|
||||
functions depending on the application, but in general it allows for a constant volume of air to be delivered to the space while the output
|
||||
of the coil can be shifted towards more or less dehumidification. In other words, it decouples the total system airflow from the coil
|
||||
airflow.</p>
|
||||
<p>The bypassed air mixes with the supply air stream to act as a reheat source, however unlike a typical reheat source it does not add more
|
||||
sensible load to the structure, instead it just brings the supply air temperature closer to the existing home’s temperature while still
|
||||
covering the latent and sensible loads of the home. A warmer duct system reduces the losses of the duct to unconditioned spaces as well as
|
||||
reduces the risk for duct condensation.</p>
|
||||
<p>The coil bypass strategy, as far as I know, was pioneered by <a href="https://www.linkedin.com/in/harry-boody-9b8a4366/">Harry Boody</a> of Energy
|
||||
Innovations and Scientific Environmental Design, Inc. However their websites are no longer active, so I’m not sure if they are still active
|
||||
in the HVAC design space or not.</p>
|
||||
<h2>The Problem</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Why</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Question</td>
|
||||
<td>Why would we want to utilize a strategy such as the coil bypass?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Answer</td>
|
||||
<td>Improved indoor air quality (IAQ)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>ASHRAE’s recommandation for the amount of air changes per hour (ACH) in a residential structure to be in the range of 3-5 ACH, and in
|
||||
general the higher the better, along with a MERV 13+ filter. In some / most cases the system airflow does not meet that criteria, especially
|
||||
low load homes or high volume homes.</p>
|
||||
<p>For example, let’s imagine a single story ranch home that is 2,500 square feet with 9 foot ceilings. This home is relatively tight
|
||||
construction and after doing the heating and cooling loads we’ve selected a 2.5 Ton system for this home. It is located in a green grass
|
||||
climate that needs some priority on dehumidification and requires an airflow of 350 CFM/Ton (875 CFM).</p>
|
||||
<p>We determine the volume of the conditioned space.</p>
|
||||
<p>2,500 x 9 = 22,500 ft^3</p>
|
||||
<p><img src="/articles/images/2023-08-10-volume-equation.png" alt="volume-equation" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where:</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>V</strong></td>
|
||||
<td><em>is the volume of the home</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>ACH</strong></td>
|
||||
<td><em>is the desired air changes per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>60</strong></td>
|
||||
<td><em>conversion from hours to minutes</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Below is a table of the required CFM to meet the different air changes per hour.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th align="center">CFM</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>(22,500 x 3)/60</td>
|
||||
<td align="center"><strong><em>1,125 @ 3 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 4)/60</td>
|
||||
<td align="center"><strong><em>1,500 @ 4 ACH</em></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(22,500 x 5)/60</td>
|
||||
<td align="center"><strong><em>1,875 @ 5 ACH</em></strong></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>As you can see we have a discrepency of meeting even the low end of 3 ACH. The high end of 5 ACH is over 2x the airflow for our 2.5 Ton
|
||||
system. The coil bypass strategy is one viable way, by decoupling the total system airflow from the coil airflow without, which eliminates
|
||||
the need of an auxilary fan / system that circulates air through some sort of filtration system.</p>
|
||||
<h3>Multi-Stage Systems</h3>
|
||||
<p>A challenge with multi-stage systems, even when sized properly, is that we often run at part-load conditions, and spend the majority of the
|
||||
time in lower stages. The lower stages often do worse at dehumidification than when running at full load.</p>
|
||||
<p>When the equipment runs in lower stages on a traditional system the total system airflow is reduced even further from the recommended air
|
||||
changes per hour. This reduced airflow also causes the throw of the air from the registers to be reduced which can lead to increased odds of
|
||||
stratification, poor air mixing, and increased potential for poor mean radiant temperatures (MRT) of the surfaces. The decreased airflow in
|
||||
low stages, lowers the velocity in the duct system, while low velocity is not a concern, it does increase the duct gains and increase the
|
||||
possibility of condensation on the ducts when they’re located outside of the thermal envelope of the building.</p>
|
||||
<p>Let’s imagine we have a duct system that has high wall registers located in a soffit at the interior wall that moves 100 CFM and we are
|
||||
trying to throw the air to the exterior wall which includes a window. The wall is @ 12 feet from the register. We’ve selected a register
|
||||
that meets the criteria, at high stage airflow it has a throw of 11.5 feet (shown as the green rectangle). When the system runs in low
|
||||
stage, the airflow is reduced to 70% of high stage (70 CFM), which would give us a throw from the register of @ 7 feet (shown as the red
|
||||
rectangle).</p>
|
||||
<p><img src="/articles/images/2023-08-10-register-throw.png" alt="register-throw" /></p>
|
||||
<p>The reduced flow through the register causes the air to only make it about 60% across the room before reaching it’s terminal velocity, which
|
||||
can cause the room to feel uncomfortable since the air never reaches the exterior wall and window.</p>
|
||||
<p>By decoupling the fan from the coil airflow it is possible to run in low stages, still have adequate dehumidification performance out of the
|
||||
system, and achieve the proper throw from the registers.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In this article we’ve begun to scratch the surface of what a coil bypass strategy is in an HVAC system, as well as some of the challenges
|
||||
that it can help solve. We’ve learned about why we may desire to decouple the total system airflow from the coil airflow.</p>
|
||||
<p>In future articles we will continue to explore some of the features, benefits, and challenges presented by such a strategy.</p>
|
||||
<h2>Related Resources</h2>
|
||||
<p><a href="https://hvacrschool.com/bypass-dehumidification-airflow-hvac-design/">HVAC School - Bypass Dehumidification / Airflow HVAC Design</a></p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
96
deploy/articles/tag/design/index.html
Normal file
96
deploy/articles/tag/design/index.html
Normal file
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in design
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/design/feed.xml" rel="alternate" title="mhoush: articles with tag design" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/coil-bypass-overview/">This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/design/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,41 +6,41 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/calculate-seer-degradation-by-age/</id>
|
||||
<title>Calculate SEER Degradation by Age</title>
|
||||
<updated>2025-02-19T21:55:30Z</updated>
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based<br />
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.</p>
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and<br />
|
||||
refrigerant charge losses. It should be noted that this is not true for all<br />
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code><br />
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for all
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code>
|
||||
of the average degradation based on systems tested.</p>
|
||||
<h2>Formula</h2>
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator<br />
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator
|
||||
coil / air handler.</p>
|
||||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||||
<p>| Where | |<br />
|
||||
| –––– | —————————————— | — |<br />
|
||||
| $SEER_d$ | Degradated SEER rating |<br />
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |<br />
|
||||
| M | Maintenance factor, 0.01-0.03 |<br />
|
||||
<p>| Where | |
|
||||
| –––– | —————————————— | — |
|
||||
| $SEER_d$ | Degradated SEER rating |
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |
|
||||
| M | Maintenance factor, 0.01-0.03 |
|
||||
| age | The age of the equipment, in years |</p>
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is<br />
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%<br />
|
||||
degradation per year, however there are some<br />
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a><br />
|
||||
that show that this can actually be as high as 5% or above depending on climate.<br />
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”<br />
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%
|
||||
degradation per year, however there are some
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a>
|
||||
that show that this can actually be as high as 5% or above depending on climate.
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”
|
||||
of degradation would be.</p>
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the<br />
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower<br />
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to<br />
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple<br />
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple
|
||||
stages).</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when<br />
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when
|
||||
installed and the system is 15 years old.</p>
|
||||
<p>Plugging those numbers into our formula.</p>
|
||||
<hr />
|
||||
@@ -50,9 +50,143 @@ installed and the system is 15 years old.</p>
|
||||
<h4>Highest Rage (5% degradation / year)</h4>
|
||||
<p>$$ SEER_d = 13 \times (1 - 0.05)^{15} = 6 $$</p>
|
||||
<hr />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER<br />
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge<br />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge
|
||||
losses can be as low as 6 SEER.</p>
|
||||
<p>Thanks for learning how to estimate SEER degradation based on equipment age!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -52,6 +52,33 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -73,6 +100,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,11 +6,11 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
@@ -25,50 +25,50 @@
|
||||
<id>http://localhost:3000/articles/2023/hope/</id>
|
||||
<title>Hope</title>
|
||||
<updated>2025-02-19T21:13:20Z</updated>
|
||||
<content type="html"><p>This is a piggy-back article off of<br />
|
||||
<content type="html"><p>This is a piggy-back article off of
|
||||
<a href="https://mhoush.com/posts/20231018224631-the-struggle/">The Struggle</a> article that I had recently.</p>
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this<br />
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I<br />
|
||||
<p>I was a bit of a “Debbie Downer” in that article, which is okay, I get that way sometimes. In this
|
||||
article I’d like to take a minute to layout some of the things that give me hope, things that I
|
||||
focus on to try and kick myself out of the rut I can get into sometimes.</p>
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being<br />
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be<br />
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When<br />
|
||||
<p>I believe it’s important to have <strong>hope</strong>, to realize that feeling down is normal / part of being
|
||||
human. It’s just as important to have hope. For some it is a harder thing to focus on, it may be
|
||||
easy for us to try and dwell in negative feelings, to some that may feel more comfortable. When
|
||||
we’re feeling cynical, it’s easy to feed the negativity, although it’s rarely helpful.</p>
|
||||
<h2>Hope</h2>
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m<br />
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous<br />
|
||||
<p>One of the things that I try to focus on is that I’m human, it brings me hope to realize that I’m
|
||||
not the only one who feels the way that I do. This was evident by the feedback on my previous
|
||||
article.</p>
|
||||
<blockquote>
|
||||
<p>My problems are very much “first world problems”.</p>
|
||||
</blockquote>
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.<br />
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on<br />
|
||||
<p>Make no mistake, I’m selfish, but it’s the selfishness that makes me feel distant or disconnected.
|
||||
The times that I feel connected are without a doubt the times that I let go of my ego and focus on
|
||||
things outside of myself.</p>
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push<br />
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on<br />
|
||||
<p>It’s the feeling I get from going to customers home and feeling truly appreciated. There’s no push
|
||||
back on price, no one telling me how I should run my business, no “the part only costs $x on
|
||||
amazon”, etc.</p>
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or<br />
|
||||
<p>The feeling of seeing your child smile. The safety you feel when getting a hug from your mother or
|
||||
father. When you’re looking up at the stars and realize how small you actually are.</p>
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else<br />
|
||||
<p>When you’re out with friends and trick the DJ into playing a Mr. Bungle song and no one else
|
||||
appreciates it, but you. The times when your guard is completely down and you laugh with abandon.</p>
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with<br />
|
||||
<p>The smell of your lover’s hair when you’re holding them close. The joy you receive from sitting with
|
||||
your pets. The songs of nature, insects, birds, etc. The sounds of waves / water in the distance.</p>
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes<br />
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem<br />
|
||||
<p>The feeling when you’ve helped someone learn a new skill, when something finally clicks and makes
|
||||
sense. When a complex topic is understood at a fundamental level. The breakthrough of a problem
|
||||
you’ve pondered for days / months / years.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,<br />
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for<br />
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not<br />
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing<br />
|
||||
<p>There are so many things to be grateful for. This does not mean that there will not be hard times,
|
||||
there surely will be. This does not mean that you are wrong for having negative feelings, for
|
||||
feeling depressed or anxious. There are many around you that likely feel similar (they may just not
|
||||
be able to express it in the same way). You never truly know what the person next to you is dealing
|
||||
with. Be compassionate (including showing yourself compassion).</p>
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be<br />
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down<br />
|
||||
<p>When you are feeling down, try to do something for someone else. Make your own list of things to be
|
||||
thankful for. Maybe my non-exhaustive list above will give you some ideas. Write those items down
|
||||
regularly so that you can look back on them when you feel out of balance.</p>
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.<br />
|
||||
<p>There is plenty of negative energy in this world, be true and genuine and you will receive rewards.
|
||||
When you focus on blessings then the negativity will fade.</p>
|
||||
<p>What impact are you going to leave with what little time we have?</p>
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and<br />
|
||||
<p>I hope that you enjoyed this short article. Know that you are <em>NOT</em> alone, you are important, and
|
||||
that I appreciate <em>you!</em></p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
@@ -77,25 +77,25 @@ that I appreciate <em>you!</em></p></content>
|
||||
<updated>2025-02-19T20:51:49Z</updated>
|
||||
<content type="html"><p>This is a quick article about why you should learn markdown.</p>
|
||||
<h2>What is markdown</h2>
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily<br />
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on<br />
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on
|
||||
this website are written in markdown, here’s an image of this article written in markdown.</p>
|
||||
<p><img src="/articles/images/2023-10-21-markdown.png" alt="markdown" /></p>
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your<br />
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software<br />
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing<br />
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing
|
||||
research papers or even books.</p>
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,<br />
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to<br />
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of<br />
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using<br />
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more<br />
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more
|
||||
professional, however I am working on solutions to migrate those to be markdown based.</p>
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client<br />
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many<br />
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many
|
||||
common document related tasks.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>You can learn more about the syntax used for markdown at<br />
|
||||
<p>You can learn more about the syntax used for markdown at
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">markdownguide.org</a>.</p>
|
||||
<h3>A non-exhaustive list of where you can use Markdown and editors.</h3>
|
||||
<table>
|
||||
@@ -127,7 +127,7 @@ common document related tasks.</p>
|
||||
<p>You can use tools such as <a href="https://pandoc.org/#">pandoc</a> to convert Markdown files to other formats.</p>
|
||||
<p><img src="/articles/images/2023-10-21-pandoc.gif" alt="pandoc" /></p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /<br />
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /
|
||||
content creation.</p>
|
||||
<p>Thanks for reading until the end!</p></content>
|
||||
</entry>
|
||||
@@ -135,71 +135,71 @@ content creation.</p>
|
||||
<id>http://localhost:3000/articles/2023/the-struggle/</id>
|
||||
<title>The Struggle</title>
|
||||
<updated>2025-02-19T20:53:34Z</updated>
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If<br />
|
||||
<content type="html"><p>This is a get stuff of my chest article. Probably going to be a mixture of ranting and whining. If
|
||||
that is not your cup of tea then feel free to skip this article.</p>
|
||||
<h2>The struggle</h2>
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby<br />
|
||||
<p>It has been one of those “when it rains, it pours” type of weeks. As write this, I feel like a baby
|
||||
/ complainer, which is not my intention, but here it goes.</p>
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived<br />
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9<br />
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and<br />
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still<br />
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and<br />
|
||||
<p>My aunt had a stroke and is likely not going to make it through the week. My aunt has always lived
|
||||
in Florida during my life / memory, but has always come to visit. She is my mom’s oldest sister (9
|
||||
years apart), so she helped raise my mother growing up. They’ve always had a close relationship and
|
||||
are like two peas in a pod. They would always visit us, especially while my grand-parents were still
|
||||
alive. She is currently not really awake or expected to make it. She does not eat / drink and
|
||||
they’ve basically just been making her comfortable.</p>
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,<br />
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be<br />
|
||||
<p>One of my employees broke his neck over the weekend. I don’t have a ton of details on this subject,
|
||||
but he had surgery to fuse some discs back together and should eventually be ok, however it will be
|
||||
a long recovery time.</p>
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /<br />
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread<br />
|
||||
<p>A few weeks ago, I commited one of the deadly sins of running a blower door test without checking /
|
||||
asking about the fireplaces, which caused lord knows how much damage from the soot that was spread
|
||||
throughout the living room(s).</p>
|
||||
<p>An online friend lost her mother.</p>
|
||||
<p>All of these things have just got me emotional.</p>
|
||||
<h2>My secrets</h2>
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I<br />
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still<br />
|
||||
<p>I am an emotional person, sometimes to my detriment. I’m prone to fits of anger and depression. I
|
||||
spent many years masking things through alcohol abuse and many other idiotic tendencies. I still
|
||||
drink on occasion, but not as I once did.</p>
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being<br />
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people<br />
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most<br />
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is<br />
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on<br />
|
||||
<p>I often put my faith in folks, even if I haven’t met them in person, this can often lead to being
|
||||
let down. I guess I struggle sometimes with the reality of online relationships. I think that people
|
||||
are genuine, because I’m that way (how I act online is the same as I act in person for the most
|
||||
part). I will happily show / share the good and the bad, in hopes that someone may learn. This is
|
||||
not at all something to be ashamed of, or anything that I’d like to change, however it does on
|
||||
occasion lead me into turmoil when I find out some true identity / personality of someone.</p>
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want<br />
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to<br />
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me<br />
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for<br />
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my<br />
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but<br />
|
||||
<p>I hold grudges, like forever grudges. It is very hard for me to get over somethings, even if I want
|
||||
to. I can sometimes put things out of my mind, but when I’m spinning, they will resurface. I want to
|
||||
forgive people, but it is just not the way it works for me often times. It takes a lot to get me
|
||||
beyond my breaking point, but once someone has gotten me there, there is likely no turning back for
|
||||
that person. Luckily, I can count on one hand the number of folks that I’ve had to cut out of my
|
||||
life for these reasons. I’d love to say that I’m a bigger / better person, that I forgive them, but
|
||||
truthfully I do not.</p>
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot<br />
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to<br />
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t<br />
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future<br />
|
||||
<p>My emotions sometimes make me say things publicly that I should keep to myself. I don’t have a lot
|
||||
of regret around these things, because I generally mean what I say, and also feel we are entitled to
|
||||
opinions as well as entitled to change those opinions as often as we see fit. Although I don’t
|
||||
regret them per-se, it does make me wonder what type of impression it leaves (something for future
|
||||
pondering, perhaps).</p>
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what<br />
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not<br />
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time<br />
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having<br />
|
||||
<p>I’m one of those that says “I don’t care what they think about me”, when I really do care what
|
||||
people think about me. This often leads to fear and anxiety, especially in social settings. I’m not
|
||||
the greatest at conversation, I’m better at writing or some interaction that gives me a bit of time
|
||||
to think before responding. Therefore, I’m quick to make a joke or something rather than having
|
||||
thoughtful / genuine responses.</p>
|
||||
<h2>Community</h2>
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems<br />
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of<br />
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not<br />
|
||||
<p>All of these things have just got me thinking about community. Community is an aspect that seems
|
||||
distant nowadays, even though we have more opportunity than ever. We call ourselves part of
|
||||
communities, especially online, but I’m not convinced that it is really community (or at least not
|
||||
most of the time, not saying it can’t be / in absolute terms).</p>
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for<br />
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for<br />
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their<br />
|
||||
<p>I have met a lot of folks online that I consider true friends. Friends that I would do anything for
|
||||
and feel they would do anything for me, just like my real life friends who have stuck with me for
|
||||
many years. These are people that challenge me and how I think on a regular basis. They do their
|
||||
best to lift me up when I’m down.</p>
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the<br />
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the<br />
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges<br />
|
||||
<p>It’s easy to hide when so much of our interactions are not really in person, to feel like the
|
||||
relationships we do have are not genuine, but that’s awfully cynical. I prefer to give people the
|
||||
benefit / trust they deserve until, at least until they don’t then see my part about holding grudges
|
||||
;)</p>
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m<br />
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks<br />
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together<br />
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of<br />
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was<br />
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and<br />
|
||||
<p>Do you ever feel the same? Instead of being cynical and down, today, I’m trying to be positive. I’m
|
||||
trying to share a little bit of what I feel community should be. Although, I’ve never met HVAChicks
|
||||
Jennifer in real life, I read today about her mom and decided to take an hour or so to put together
|
||||
a website for the <a href="https://hvachicks.com">HVAChicks Community</a>, hoping it would bring a moment of
|
||||
happiness to her day. While I’ve deployed several websites in the past, this one for some reason was
|
||||
a total PITA, but I got through it. I could feel how grateful she was when I shared it with her (and
|
||||
it’s basic AF), but that truly made me feel useful / great after being down in the dumps for a bit.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I’ve probably rambled enough and am losing direction here, so I will end with a few things.</p>
|
||||
@@ -209,43 +209,43 @@ it’s basic AF), but that truly made me feel useful / great after being down in
|
||||
<li>Spend time with your loved ones, while you can.</li>
|
||||
<li>Tell someone you love them.</li>
|
||||
</ol>
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I<br />
|
||||
<p>Finally, I’d like to shout out some people that I’m grateful for. This is non-exhaustive list, if I
|
||||
left you off, I’m sorry and please do not take it personally.</p>
|
||||
<ol>
|
||||
<li>Bryan Orr
|
||||
<ul>
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and<br />
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,<br />
|
||||
<li>Bryan has cultivated an awesome group / community that I’m proud to be a part of. His time and
|
||||
commitment to the HVAC industry is something that I hope he himself is proud of. Without Bryan,
|
||||
mostly all the following names would not even be in my vocabulary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ty Branaman (forget exactly how to spell his last name).
|
||||
<ul>
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be<br />
|
||||
<li>Ty has such a great personality during his videos / training and I’m sure it’s a struggle to be
|
||||
positive all the time, however it brings me hope and joy everytime!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dustin (mother f’n) Cole
|
||||
<ul>
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I<br />
|
||||
<li>Dustin is like a brother that I never had, he’s a true master of his craft and I know that I
|
||||
can rely on him anytime I need it!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Genry Garcia
|
||||
<ul>
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,<br />
|
||||
<li>The cuban crusader who has taught me so much about home performance, and especially ZPD (baby,
|
||||
baby)!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Chris Hughes
|
||||
<ul>
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and<br />
|
||||
<li>It’s hard to put into words here, but I know that Chris is there to talk when I need it and
|
||||
he’s a great motivator because of his action items :)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Eric Kaiser
|
||||
<ul>
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because<br />
|
||||
<li>I think genuine when I think of Eric, I hear his voice in my head when I write reports because
|
||||
of guidance he has given in the past. He truly wants to help teach people.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -256,26 +256,26 @@ of guidance he has given in the past. He truly wants to help teach people.</l
|
||||
</li>
|
||||
<li>HVAChicks Jennifer (I’ll butcher her last name from memory)
|
||||
<ul>
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I<br />
|
||||
<li>Jennifer is inspiring with her goals and everything she does to help anyone in the industry. I
|
||||
can’t wait to meet her in person one day soon!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HVAC Overtime Crew
|
||||
<ul>
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream<br />
|
||||
<li>I’m lumping these guys together because I truly enjoy when I’m able to make their live stream
|
||||
on Friday’s. And I interact with A-Team a lot and really appreciate him / them!</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Alicia Hollon
|
||||
<ul>
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,<br />
|
||||
<li>Alicia is so awesome to me, I mean she just made my favorite pancakes and sausage for dinner,
|
||||
love you babe!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt<br />
|
||||
<p>Lastly, I have to shout out to my mom. I know she’s going through a rough time with my aunt
|
||||
currently. My mother is the kindest gentlest soul that I’ve ever met. I look up to all 5’ of her!</p>
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today<br />
|
||||
<p>At any rate, thanks for sticking it out to the end through my ramblings. Be kind to someone today
|
||||
and tomorrow!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -123,6 +123,12 @@ It has been one of those “when it rains, it pours” type of weeks. As...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,74 +6,74 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,14 +77,40 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/rss-feed/</id>
|
||||
<title>Rss Feed</title>
|
||||
<updated>2025-02-20T16:50:11Z</updated>
|
||||
<content type="html"><p>In this article I will show how to add this site’s rss feed. In particular, we will be using <a href="https://netnewswire.com">NetNewsWire</a> as the
|
||||
rss reader.</p>
|
||||
<h2>What is an RSS Feed</h2>
|
||||
<p>An RSS feed will show you new posts, generally from a blog, without having to remember to check the website at regular intervals or signup
|
||||
for an email list for notifications.</p>
|
||||
<p>NetNewsWire puts an RSS feed as:</p>
|
||||
<p><strong>It’s like podcasts</strong> - but for <em>reading.</em></p>
|
||||
<p>You consume an RSS feed, using an RSS reader application or extension in your browser.</p>
|
||||
<h2>Step One</h2>
|
||||
<p>First find and download an RSS reader, you can download <a href="https://netnewswire.com">NetNewsWire</a> for macOS from the link, or for iOS from the
|
||||
<a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210">AppStore</a>.</p>
|
||||
<h2>Step Two</h2>
|
||||
<p>Add the rss feed to stay up to date when I publish new articles.</p>
|
||||
<ol>
|
||||
<li>Click the plus in the right side of the sidebar and select <code>New Feed...</code></li>
|
||||
<li>In the URL field add: <code>https://mhoush.com/articles/feed.xml</code></li>
|
||||
<li>Optionally give it a name</li>
|
||||
<li>Click the <code>Add</code> button.</li>
|
||||
</ol>
|
||||
<p><img src="/articles/images/2023-08-10-rss-feed.gif" alt="rss gif" /></p>
|
||||
<p>That’s it.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -51,6 +51,20 @@ used as NAS (network attached storage). Be aware that this should be done with c
|
||||
any warranty on your UNVR as we are using it for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/rss-feed/">In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -72,6 +86,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -110,6 +110,77 @@ Markdown is a “mark-up” language. It allows you to write content in plain te
|
||||
converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/free-quotes-are-bad-for-the-industry/">Free quotes != good</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">October 04, 2023</span>934 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/free-quotes-are-bad-for-the-industry/">I found myself re-reading the
|
||||
ACCA Quality Installation Standard
|
||||
recently and it got me thinking about the industries tendency of offering free quotes. In this article, I’d like to just focus in on the
|
||||
items that are required as what I’m calling...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/calculate-seer-degradation-by-age/">Calculate SEER Degradation by Age</a>
|
||||
@@ -124,6 +195,72 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/why-mini-splits-stink/">Why Mini Splits Stink</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 14, 2023</span>758 words, posted in <a href="/articles/tag/hvac/">HVAC</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/why-mini-splits-stink/">In this general article, I explain why I don’t generally like to use mini-splits.
|
||||
The Positive Sides
|
||||
When people say mini-splits, in general we mean “ductless” style units. These can either be high wall, floor mounted, or ceiling mounted
|
||||
consoles....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/coil-bypass-overview/">Coil Bypass Overview</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>1010 words, posted in <a href="/articles/tag/hvac/">HVAC</a> and <a href="/articles/tag/design/">design</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/coil-bypass-overview/">This is the first article in a series that explores the idea of a coil bypass strategy in an HVAC system. This article introduces you to a
|
||||
coil bypass strategy at a high level, future posts will dive deeper into the features, benefits, as well as the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -145,6 +282,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,53 +6,53 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/heat-recovery-chiller/</id>
|
||||
<title>Heat Recovery Chiller</title>
|
||||
<updated>2025-02-19T21:08:37Z</updated>
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so<br />
|
||||
I’m doing it now. I did discuss this on<br />
|
||||
<content type="html"><p>This is an article that I wrote back in 2020, but I don’t believe that I published it anywhere, so
|
||||
I’m doing it now. I did discuss this on
|
||||
<a href="https://hvacrschool.com/podcasts/is-the-future-of-air-conditioning-self-contained-propane-chillers/">this episode of the HVAC School Podcast.</a></p>
|
||||
<h2>Heat Recovery Chillers</h2>
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that<br />
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most<br />
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds<br />
|
||||
<p>I have always had a love and passion for hydronic systems, perhaps it’s because they are not that
|
||||
common in most areas. The designs tend to be elegant and the flexibility is unparalleled by most
|
||||
equipment choices currently available in the U.S. I’m going to try to not get too far into the weeds
|
||||
in this article, but offer an overview of what I feel would be my dream system.</p>
|
||||
<h2>The Source</h2>
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional<br />
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would<br />
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to<br />
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style<br />
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the<br />
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of<br />
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level<br />
|
||||
<p>A heat recovery chiller will do simultaneous heating and cooling, as opposed to a traditional
|
||||
heat-pump or reverse cycle chiller that can only operate in one mode at a time. This system would
|
||||
have a second refrigerant to water heat exchanger and utilize the air-source when we don’t need to
|
||||
bank / store heat, or are running in heat only mode. There are several benefits to this style
|
||||
system, the main being that while operating simultaneous heating / cooling mode the COP of the
|
||||
system doubles. For example, the <a href="https://multiaqua.com/mhrc2/">Multi-Aqua MHRC2</a> shows a COP of
|
||||
about 8, which is approximately equivalent to 30 EER or 34 SEER. This gives us geothermal level
|
||||
performance without the need of a field.</p>
|
||||
<h2>Indoor Portion</h2>
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.<br />
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load<br />
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems<br />
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more<br />
|
||||
<p>The indoor portion of the system, we would utilize buffer tanks as thermal storage for the chiller.
|
||||
The buffer tanks give us several benefits, including longer run times for the chiller, load
|
||||
matching, and the ability to size for larger load (heating or cooling) without some of the problems
|
||||
that occur when over-sizing a traditional system. The buffer tanks also allow sizing more
|
||||
aggressively by having storage during peak load conditions.</p>
|
||||
<p><img src="/articles/images/2023-10-27-buffers2.png" alt="buffer" /></p>
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what<br />
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the<br />
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra<br />
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps<br />
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).<br />
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in<br />
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could<br />
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.<br />
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat<br />
|
||||
<p>This shows a cooling buffer tank as well as a heating buffer tank. The horizontal pumps are what
|
||||
circulate water through the chiller, while the vertical pumps are what distribute the water to the
|
||||
load / emitters. This configuration allows for water to be used for the loads first and extra
|
||||
capacity to go into the buffer tanks. The buffer tanks also offer hydraulic separation for the pumps
|
||||
(meaning that they won’t interfere with each other if / when there are different flow rates).
|
||||
Another advantage of the buffer tanks is that you can connect multiple heating or cooling sources in
|
||||
parallel to the system. This is shown by the extra tees in the hot buffer tank where we could
|
||||
connect something such as solar water collectors, pellet or wood boiler, or a conventional boiler.
|
||||
You’ll also notice on the right side of the hot buffer tank, that I am showing a brazed plate heat
|
||||
exchanger that would be used to supply domestic hot water.</p>
|
||||
<h2>Distribution System</h2>
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,<br />
|
||||
<p>This could be a number of things, from radiant panels, in-floor, high-output baseboard radiators,
|
||||
however I’m going to model it as a 4-pipe hydronic air handler.</p>
|
||||
<p><img src="/articles/images/2023-10-27-ah.png" alt="ah" /></p>
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in<br />
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan<br />
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from<br />
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high<br />
|
||||
<p>The hydronic air handler is able to provide cooling, heating, and re-heat dehumidification, all in
|
||||
one package. With a hydronic system, it would be very easy to load match by controlling the fan
|
||||
speed and utilizing a Delta-T pump or outdoor reset controls. These air handlers are available from
|
||||
several manufacturers and come in different styles from traditional (as shown), small duct high
|
||||
velocity systems, and even ductless styles.</p>
|
||||
<h2>Disadvantages</h2>
|
||||
<ol>
|
||||
@@ -61,7 +61,7 @@ velocity systems, and even ductless styles.</p>
|
||||
<li>Lack of understanding / technicians afraid to work on this style system.</li>
|
||||
<li>Potentially higher upfront costs.</li>
|
||||
<li>Lack of design or planning could cause unhappy clients (same with traditional)</li>
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement<br />
|
||||
<li>Distribution systems need to be designed around low water temperatures (not a drop in replacement
|
||||
for traditional boiler systems)</li>
|
||||
</ol>
|
||||
<h2>Advantages</h2>
|
||||
@@ -75,11 +75,11 @@ for traditional boiler systems)</li>
|
||||
<li>Easier transition to natural / flammable refrigerants</li>
|
||||
</ol>
|
||||
<h2>Conclusion</h2>
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the<br />
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and<br />
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish<br />
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to<br />
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water<br />
|
||||
<p>In conclusion, there are many advantages to this style system, as well as disadvantages. One of the
|
||||
main points is to think of the system in 3 distinct components, the source(s), thermal storage, and
|
||||
distribution. As mentioned, this only one concept, but in reality, there are many ways to accomplish
|
||||
this, which is one of it’s advantages. For example, perhaps in certain scenarios it makes sense to
|
||||
dump excess heat into a pool, create ice storage during off peak hours, cascade into another water
|
||||
-&gt; water heat pump for higher temperature distribution, incorporate solar collectors, and so on.</p>
|
||||
<p>Thank you for reading all the way to the end!</p></content>
|
||||
</entry>
|
||||
|
||||
@@ -74,6 +74,12 @@ I have always had a love and passion for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,13 +77,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
|
||||
@@ -72,6 +72,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,24 +6,24 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -32,14 +32,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -52,11 +52,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -77,13 +77,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
|
||||
@@ -72,6 +72,12 @@ any warranty on your UNVR as we are using it for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,7 +6,7 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/free-as-in-freedom/</id>
|
||||
<title>Free As In Freedom</title>
|
||||
|
||||
@@ -70,6 +70,12 @@
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,74 +6,74 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,14 +5,14 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
@@ -20,67 +20,67 @@
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
@@ -94,19 +94,19 @@ to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<id>http://localhost:3000/articles/2024/unvr-as-nas/</id>
|
||||
<title>UNVR as NAS</title>
|
||||
<updated>2025-02-19T21:32:01Z</updated>
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be<br />
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void<br />
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also<br />
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump<br />
|
||||
<content type="html"><p>In this post, I’m going to show how to setup a Samba server on a Ubiquity UNVR so that it can be
|
||||
used as NAS (network attached storage). Be aware that this should be done with caution and may void
|
||||
any warranty on your UNVR as we are using it for purposes beyond it’s original intent. It’s also
|
||||
possible that this setup will break when / if updating the UNVR software. With that said, let’s jump
|
||||
in.</p>
|
||||
<p>This post follows along with<br />
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,<br />
|
||||
<p>This post follows along with
|
||||
<a href="https://www.reddit.com/r/Ubiquiti/comments/11o7v8l/how_to_use_the_unvr_as_a_nas_instructions/">this reddit post</a>,
|
||||
with some adaptations to get it to work on the latest Unifi-OS release of <code>3.2.12</code>.</p>
|
||||
<h2>Step One - Setup SSH &amp; Login</h2>
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password<br />
|
||||
<p>In your unifi network console you need to enable the <code>SSH</code> login option and set a secure password
|
||||
for the root user to login to the UNVR.</p>
|
||||
<p><img src="/articles/images/2024-03-15-ssh.png" alt="ssh.png" /></p>
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR<br />
|
||||
<p>Once that is complete you can login to your UNVR using your terminal and the IP address of your UNVR
|
||||
on your network.</p>
|
||||
<p><code>ssh root@192.168.1.10</code></p>
|
||||
<h2>Step Two - Install Samba</h2>
|
||||
@@ -115,14 +115,14 @@ on your network.</p>
|
||||
<p>Next, install samba.</p>
|
||||
<p><code>apt-get install samba</code></p>
|
||||
<h2>Step Three - Setup Samba</h2>
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor<br />
|
||||
<p>In order to edit the configuration we are going to need to install your terminal based text editor
|
||||
of choice (generally nano or vim), for me I will install vim.</p>
|
||||
<p><code>apt-get install vim</code></p>
|
||||
<p>Create a backup of the default configuration.</p>
|
||||
<p><code>cp /etc/samba/smb.conf /etc/samba/smb.conf.bak</code></p>
|
||||
<p>Open the configuration file to be edited.</p>
|
||||
<p><code>vim /etc/samba/smb.conf</code></p>
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to<br />
|
||||
<p>Just above the <code>Share Definitions</code> section of the configuration, I added some global settings to
|
||||
make the samba server act better for time machine backups.</p>
|
||||
<pre><code>#======================= MacOS Client Optimizations =======================
|
||||
vfs objects = fruit streams_xattr
|
||||
@@ -135,11 +135,11 @@ fruit:wipe_intentionally_left_blank_rfork = yes
|
||||
fruit:delete_empty_adfiles = yes
|
||||
|
||||
</code></pre>
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created<br />
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be<br />
|
||||
<p>Also because we want users we create to be able to read and write to their home directories created
|
||||
on the samba server, we need to change the option under the <code>[homes]</code> share definition to be
|
||||
<code>read only = no</code>.</p>
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to<br />
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the<br />
|
||||
<p>That is our primary configuration. You can add more share definitions at the bottom of the file to
|
||||
suit your use case, there are decent examples of this in the original reddit post, linked in the
|
||||
beginning.</p>
|
||||
<p>Save and exit the file.</p>
|
||||
<p><code>:wq</code></p>
|
||||
@@ -160,13 +160,13 @@ beginning.</p>
|
||||
<p>In the <code>Finder</code> app on macOS you can type <code>⌘k</code> to connect to a server.</p>
|
||||
<p>In the text field enter <code>smb://&lt;USER&gt;@&lt;UNVR_IP&gt;</code> to connect to the samba server.</p>
|
||||
<p><img src="/articles/images/2024-03-15-connect.png" alt="connect" /></p>
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to<br />
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when<br />
|
||||
<p>You can also automatically connect to the server when you login to your client device, for this to
|
||||
work you need the credentials to be stored in your keychain (ticking the box in the step above when
|
||||
you first connect to the server).</p>
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button<br />
|
||||
<p>This is found in <code>System Settings -&gt; General -&gt; Login Items -&gt; Open at Login</code>. Click the plus button
|
||||
and select the volume you would like to mount at login.</p>
|
||||
<p><img src="/articles/images/2024-03-15-login.png" alt="login" /></p>
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location<br />
|
||||
<p>Once you have it setup so that the server is connected on login, you can also set it up as location
|
||||
for Time Machine Backups. <code>System Settings -&gt; General -&gt; Time Machine</code></p>
|
||||
<p><img src="/articles/images/2024-03-15-time-machine.png" alt="time-machine" /></p></content>
|
||||
</entry>
|
||||
@@ -176,25 +176,25 @@ for Time Machine Backups. <code>System Settings -&gt; General -&gt
|
||||
<updated>2025-02-19T20:51:49Z</updated>
|
||||
<content type="html"><p>This is a quick article about why you should learn markdown.</p>
|
||||
<h2>What is markdown</h2>
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily<br />
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on<br />
|
||||
<p>Markdown is a “mark-up” language. It allows you to write content in plain text that can be easily
|
||||
converted to other formats, such as <strong>html, pdf, docx</strong>, and many more. All the articles written on
|
||||
this website are written in markdown, here’s an image of this article written in markdown.</p>
|
||||
<p><img src="/articles/images/2023-10-21-markdown.png" alt="markdown" /></p>
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your<br />
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software<br />
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing<br />
|
||||
<p>The reason you should learn markdown is that it allows you to focus on the content / text of your
|
||||
content with simple concepts for formatting. Markdown is used heavily in documenting software
|
||||
projects, which is how I got introduced to it, however it can scale all the way up to writing
|
||||
research papers or even books.</p>
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,<br />
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to<br />
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of<br />
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using<br />
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more<br />
|
||||
<p>I use markdown for probably 80% of all the text documents I need to write, from company documents,
|
||||
web / software documentation, and so on. It allows me to get content out quickly without having to
|
||||
click around with formatting options in a program like <strong>Word</strong> or <strong>Pages</strong>. To be clear, a lot of
|
||||
the reports and things I generate for my <strong>Home Performance Assessments</strong> are written using
|
||||
<strong>Pages</strong> (for now at least) because I have templates that make the documents look more
|
||||
professional, however I am working on solutions to migrate those to be markdown based.</p>
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client<br />
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many<br />
|
||||
<p>Markdown is supported in mostly all the <strong>Google</strong> tools, as well as the <strong>Outlook</strong> email client
|
||||
(which is one of my least favorite tools, BTW). It makes it simple to create tables, lists, and many
|
||||
common document related tasks.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>You can learn more about the syntax used for markdown at<br />
|
||||
<p>You can learn more about the syntax used for markdown at
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">markdownguide.org</a>.</p>
|
||||
<h3>A non-exhaustive list of where you can use Markdown and editors.</h3>
|
||||
<table>
|
||||
@@ -226,8 +226,467 @@ common document related tasks.</p>
|
||||
<p>You can use tools such as <a href="https://pandoc.org/#">pandoc</a> to convert Markdown files to other formats.</p>
|
||||
<p><img src="/articles/images/2023-10-21-pandoc.gif" alt="pandoc" /></p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /<br />
|
||||
<p>I hope that you take the time to research and see if Markdown is good fit for your document /
|
||||
content creation.</p>
|
||||
<p>Thanks for reading until the end!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-4/</id>
|
||||
<title>Introduction to Programming for HVAC Part-4</title>
|
||||
<updated>2025-02-20T16:31:35Z</updated>
|
||||
<content type="html"><p>This article builds upon our <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-3/">last</a> article, so make sure to catch up
|
||||
before continuing with this article.</p>
|
||||
<h2>Arguments</h2>
|
||||
<p>Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments are
|
||||
supplied to shell scripts are separated by a space <code>&quot; &quot;</code>, as opposed to options which start with a <code>-&lt;character&gt;</code> or <code>--&lt;word&gt;</code>.</p>
|
||||
<p>To illustrate this, let’s change our <code>hello-world</code> script we wrote in the last article.</p>
|
||||
<p><strong>Move into our scripts directory:</strong></p>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<p><strong>Make a copy of the hello-world script:</strong></p>
|
||||
<pre><code class="language-bash">cp hello-world greet
|
||||
</code></pre>
|
||||
<p>Above we make a copy of the hello-world file and name the copy <code>greet</code>.</p>
|
||||
<p><strong>Open the greet file:</strong></p>
|
||||
<pre><code class="language-bash">open -a TextEdit greet
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Because the greet file is an executable, in order to open it in the <code>TextEdit</code> application we must supply the <code>-a</code> option.
|
||||
Otherwise it will just run our <code>greet</code> program in another terminal. Use <code>man open</code> to read more about the open command.</p>
|
||||
</blockquote>
|
||||
<p><strong>Edit the greet file:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo &quot;Hello, ${1}!&quot;
|
||||
</code></pre>
|
||||
<p>Make sure to save <code>⌘s</code> the file.</p>
|
||||
<p>Take note that the quotes need to be changed to <code>&quot;</code> (double quotes) from our original <code>hello-world</code> program.</p>
|
||||
<p>The <code>${1}</code> is indicating that we will insert / interpret the first argument passed to our program and insert it at that location. Arguments
|
||||
are interpreted in order they are passed in with <code>${0}</code> always representing the filename of the program that is called (generally not needed
|
||||
/ used in your scripts).</p>
|
||||
<p><strong>Test it out:</strong></p>
|
||||
<pre><code class="language-bash">./greet Michael
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-26-greet-output.png" alt="greet-output" /></p>
|
||||
<p>If you’d like to supply multiple words (or arguments that contain spaces) as a single argument then you can wrap them in quotes.</p>
|
||||
<pre><code class="language-bash">./greet &quot;Michael Housh&quot;
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Wrapping in quotes is especially useful for commands that take file paths, if any of the folders or file names contain spaces.</p>
|
||||
</blockquote>
|
||||
<h2>More Useful Program</h2>
|
||||
<p>At this point, it’s time to build a more useful program that we can use. First, we must download some dependencies for our program.</p>
|
||||
<p><strong>Install imagemagick:</strong></p>
|
||||
<pre><code class="language-bash">brew install imagemagick
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you’d like to check out the documentation / website for imagemagick you can run <code>brew home imagemagick</code>.</p>
|
||||
</blockquote>
|
||||
<p>This will take a bit for brew to install imagemagick and it’s dependencies. When it’s completed, we can check to make sure that imagemagick
|
||||
is installed by running the following command.</p>
|
||||
<pre><code class="language-bash">magick --version
|
||||
</code></pre>
|
||||
<p>It should output something along the lines of this below.</p>
|
||||
<pre><code class="language-bash">Version: ImageMagick 7.1.1-17 Q16-HDRI aarch64 21569 https://imagemagick.org
|
||||
Copyright: (C) 1999 ImageMagick Studio LLC
|
||||
License: https://imagemagick.org/script/license.php
|
||||
Features: Cipher DPC HDRI Modules OpenMP(5.0)
|
||||
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
|
||||
Compiler: gcc (4.2)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Don’t forget, you can use the <code>clear</code> command to clear the terminal.</p>
|
||||
</blockquote>
|
||||
<p><strong>Create our script:</strong></p>
|
||||
<pre><code class="language-bash">touch mktrans
|
||||
</code></pre>
|
||||
<p>We are going to name our script <code>mktrans</code> as a short for make transparent.</p>
|
||||
<p><strong>Open the file:</strong></p>
|
||||
<pre><code class="language-bash">open mktrans
|
||||
</code></pre>
|
||||
<p><strong>The program:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/bash
|
||||
|
||||
# The input file path, passed in as the first argument.
|
||||
inputfile=&quot;${1}&quot;
|
||||
|
||||
# The color to make transparent, optionally passed in as the second argument.
|
||||
# by default we handle / make white backgrounds transparent.
|
||||
color=&quot;${2:-white}&quot;
|
||||
|
||||
# Use the built-in basename command to normalize the input file name
|
||||
# this will convert a file path, such as ~/Pictures/my-image.png to my-image.png.
|
||||
fullfilename=$(basename -- &quot;$inputfile&quot;)
|
||||
|
||||
# Use the text of the `fullfilename` up to the first '.' as the file name.
|
||||
filename=&quot;${fullfilename%%.*}&quot;
|
||||
|
||||
# Use the text after the last '.' as the file extension.
|
||||
extension=&quot;${fullfilename##*.}&quot;
|
||||
|
||||
# Create the output file name to use.
|
||||
#
|
||||
# For an input file of `input.png`, our output name would be
|
||||
# `input-transparent.png`.
|
||||
#
|
||||
# This will output the file in the directory that we are
|
||||
# in when we use our script (which may different than where
|
||||
# the image is located)
|
||||
outputfile=&quot;${filename}-transparent.${extension}&quot;
|
||||
|
||||
# Make the magick happen :)
|
||||
convert &quot;${inputfile}&quot; -fuzz 10% -transparent &quot;${color}&quot; &quot;${outputfile}&quot;
|
||||
|
||||
</code></pre>
|
||||
<p>I’ve included comments in the program above, which is good practice, as there is high odds that you will forget what is going on when / if
|
||||
you open the file up in the future to look at it. We are using a lot of what is called parameter expansion magic in this file. You can read
|
||||
up more on what we are doing in the <a href="https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html">bash documentation</a>.</p>
|
||||
<p>This script is far from perfect, there are a lot of things to be improved upon. For example, if you download / save the banner image of this
|
||||
post and run this script, it will also remove some color in the wizards beard, eyes, and eye brows. However, it does work very well for my
|
||||
general use case, which is to remove the background from screenshots of pdf documents. It should be noted that it will not work on all types
|
||||
of images, some image types do not allow transparency, so it is safest to call this with input image being a <code>.png</code> image type, however you
|
||||
can use the <code>imagemagick</code> program that we downloaded to convert other image types to <code>.png</code>, but that will be left up to you to figure out.</p>
|
||||
<h2>Using Our Program</h2>
|
||||
<p>This is going to assume that you have download the banner image at the top of this article. You can do this by right-clicking and choosing
|
||||
<code>Save As</code>. This should save the image in your downloads folder, and you can keep the name of <code>part4-banner.png</code>.</p>
|
||||
<p><strong>Make the program executable:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x mktrans
|
||||
</code></pre>
|
||||
<p><strong>Make the image background transparent:</strong></p>
|
||||
<pre><code class="language-bash">./mktrans ~/Downloads/part4-banner.png
|
||||
</code></pre>
|
||||
<p><strong>Open the image:</strong></p>
|
||||
<pre><code class="language-bash">open part4-banner-transparent.png
|
||||
</code></pre>
|
||||
<p>It should look like below.</p>
|
||||
<p><img src="/articles/images/2023-09-26-part4-banner-transparent.png" alt="banner-transparent" /></p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you are viewing this site in <em>light</em> mode, the image does not look that bad. Hit the moon button in the top above my profile
|
||||
image to see some of the flaws of our program.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Remove the image from the <code>~/.local/bin</code> by using <code>rm part4-banner-transparent.png</code>. Be aware that the <code>rm</code> command can not be
|
||||
undone, so use with caution / knowledge. It is safer, until you are more comfortable to use the <code>Finder</code> application and move the file to
|
||||
the trash. In <code>Finder</code>, you can show hidden directories by typing <code>⌘.</code> or go directly to the folder by typing <code>⇧⌘G</code> (shift + command + G)
|
||||
and in the pop-up typing <code>~/.local/bin</code>.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p>That is it for this article. In the upcoming articles we will setup our <code>shell</code> environment so that we can use the commands we’ve built
|
||||
without having to navigate to the <code>~/.local/bin</code> directory. Thank you for reading to the end, I hope you’re finding this series helpful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-3/</id>
|
||||
<title>Introduction to Programming for HVAC Part-3</title>
|
||||
<updated>2025-02-20T16:20:56Z</updated>
|
||||
<content type="html"><p>In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up <a href="https://mhoush.com/series/programming-for-hvac/">here</a> before continuing with this article.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we
|
||||
will write, that will remove the background from an image.</p>
|
||||
<h3>Creating a scripts directory</h3>
|
||||
<p>We learned in the <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first article</a> how to use our terminal. Today we are
|
||||
going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.</p>
|
||||
<p><strong>Create a directory</strong></p>
|
||||
<pre><code class="language-bash">mkdir -p ~/.local/bin
|
||||
</code></pre>
|
||||
<p>The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> The <code>-p</code> option allows us to create nested directories if the parent directory doesn’t exist.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<h3>Hello World</h3>
|
||||
<p>It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get
|
||||
started.</p>
|
||||
<p><strong>Creating our script file:</strong></p>
|
||||
<pre><code class="language-bash">touch hello-world.sh
|
||||
</code></pre>
|
||||
<p><strong>Now open the file:</strong></p>
|
||||
<pre><code class="language-bash">open hello-world.sh
|
||||
</code></pre>
|
||||
<p>The above command should open the file in the <code>TextEdit</code> application. In order to make the text edit application to not auto-capitalize
|
||||
words and play more nicely, we need to adjust some settings. Open the settings by pressing <code>⌘,</code>.</p>
|
||||
<p>In the <strong>Format</strong> section, select <em>Plain text</em> and in the <strong>Options</strong> section de-select <em>Check spelling as you type</em>.</p>
|
||||
<p><img src="/articles/images/2023-09-24-text-settings.png" alt="text-settings" /></p>
|
||||
<p>At this point for changes to take place, you will need to close the file and re-open.</p>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> In your terminal you can run the last command in your history by using the <code>↑</code> (Up) arrow key.</p>
|
||||
</blockquote>
|
||||
<p>Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:</p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo 'Hello World!'
|
||||
</code></pre>
|
||||
<p>The first line is referred to as the <code>shebang</code>, this tells your computer which shell interperter to run your file. I have not explained the
|
||||
shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the <code>sh</code> posix
|
||||
shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just
|
||||
about any machine you were on).</p>
|
||||
<p>The second line we are using the built-in <code>echo</code> command and passing it the ‘Hello World!’ argument.</p>
|
||||
<p>Now save and close the file <code>⌘s</code> (to save) <code>⌘q</code> (to quit the text edit application).</p>
|
||||
<p><strong>Run the program from your terminal:</strong></p>
|
||||
<pre><code class="language-bash">/bin/sh hello-world.sh
|
||||
</code></pre>
|
||||
<p>You should see that <code>Hello World!</code> was printed to your console.</p>
|
||||
<p><img src="/articles/images/2023-09-24-hello-output.png" alt="hello-output" /></p>
|
||||
<h3>Make Executable</h3>
|
||||
<p>Now that we have our basic script working, let’s make it an executable.</p>
|
||||
<p><strong>In your terminal, type the following:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x hello-world.sh
|
||||
</code></pre>
|
||||
<p>This will change the mode of the file type to be an executable.</p>
|
||||
<p>Now move / rename the file so we don’t have to call it using <code>.sh</code> extension:</p>
|
||||
<pre><code class="language-bash">mv hello-world.sh hello-world
|
||||
</code></pre>
|
||||
<p>Now that the file is executable, we can execute it by just calling the name of the file.</p>
|
||||
<pre><code class="language-bash">./hello-world
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> We have to prefix the file name with <code>./</code> in the above command so that it knows where to find our file. The <code>./</code> is saying run
|
||||
this file in our current directory. In the future we will setup our shell so that it knows to look in our <code>~/.local/bin</code> directory for
|
||||
scripts, so that we can call them without this prefix.</p>
|
||||
</blockquote>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program
|
||||
from our terminal. I should mention that the <code>TextEdit</code> application is generally not how you would program, people typically use what is
|
||||
known as an <code>IDE (integrated development environment)</code>, however I chose to use the <code>TextEdit</code> application because it is built-in to <code>macOS</code>
|
||||
and allowed us to accomplish our goal without downloading other software.</p>
|
||||
<p>In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time.
|
||||
Thank you for reading to this point.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-2/</id>
|
||||
<title>Introduction to Programming for HVAC Part-2</title>
|
||||
<updated>2025-02-20T16:16:09Z</updated>
|
||||
<content type="html"><p>In this article, learn about installing a package manager. If you missed it, check out the
|
||||
<a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first</a> article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.</p>
|
||||
<h2>What is a Package Manager</h2>
|
||||
<p>A package manager is a piece of software that helps to install software and manage updates for your system. For me, the first thing that I
|
||||
do with a new machine is install <code>Homebrew</code>. <a href="https://brew.sh">Homebrew</a> is my preferred package manager for <code>macOS</code>.</p>
|
||||
<h2>Why</h2>
|
||||
<p>A package manager is nice because often software relies / requires other dependencies in order to work properly. By using a package manager
|
||||
it will make sure that the correct dependencies are installed for the software that you need to run. It allows you to be able to update and
|
||||
manage software through a centralized interface.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>Installation is simple. Open up your terminal and enter the following command (easiest to just copy / paste from the homepage linked above).</p>
|
||||
<pre><code class="language-bash">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
|
||||
</code></pre>
|
||||
<p>This will prompt you for your password in order to create some directories and install the required software for <code>brew</code> to work. The
|
||||
installation may take some time, while it downloads the command line tools for <code>Xcode</code>.</p>
|
||||
<p>When completed, follow the <code>Next Steps</code> and copy / paste the command listed, that should look like below.</p>
|
||||
<pre><code class="language-bash">(echo; echo 'eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;') &gt;&gt; /Users/&lt;you&gt;/.zprofile
|
||||
eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-22-brew-output.png" alt="brew-output" /></p>
|
||||
<p>The first line of this command sets up some things in your shell profile (which we have not discussed yet) that will make <code>Homebrew</code>
|
||||
available to you anytime you start a new session in your terminal. The second line of the command makes it available in your current
|
||||
terminal session.</p>
|
||||
<p>Next run the following command and make sure that everything is setup correctly.</p>
|
||||
<pre><code class="language-bash">brew doctor
|
||||
</code></pre>
|
||||
<p>Which should output the following:</p>
|
||||
<pre><code>Your system is ready to brew.
|
||||
</code></pre>
|
||||
<h3>Terminology</h3>
|
||||
<p>Homebrew calls command line applications <code>formula</code> and normal graphical applications <code>casks</code>. It has the ability to install both styles of
|
||||
applications.</p>
|
||||
<h2>Search Command</h2>
|
||||
<p>The following command is used to search for software packages:</p>
|
||||
<pre><code class="language-bash">brew search chrome
|
||||
</code></pre>
|
||||
<h2>Open a Homepage</h2>
|
||||
<p>The following command can be used to view the homepage of a formula or cask in your browser:</p>
|
||||
<pre><code class="language-bash">brew home google-chrome
|
||||
</code></pre>
|
||||
<h2>Update Homebrew</h2>
|
||||
<p>The following command is used to update homebrew:</p>
|
||||
<pre><code class="language-bash">brew update
|
||||
</code></pre>
|
||||
<h2>Update packages installed on your system</h2>
|
||||
<p>The following command is used to update software that is installed / managed by homebrew.</p>
|
||||
<pre><code class="language-bash">brew upgrade
|
||||
</code></pre>
|
||||
<p>You can combine the update and upgrade commands, which will update homebrew and upgrade all the software it manages on you machine with the
|
||||
following command.</p>
|
||||
<pre><code class="language-bash">brew update &amp;&amp; brew upgrade
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>That is it for this article. I will say that for me, when I find a piece of software that I want to use, I generally try to search for it in
|
||||
<code>brew</code> first, before installing it via other means.</p>
|
||||
<p>I hope you’ve found this article helpful. In the next article we will start to use the skills that we’ve learned in these first two articles
|
||||
and write our first program / script.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-1/</id>
|
||||
<title>Introduction to Programming for HVAC Part-1</title>
|
||||
<updated>2025-02-20T16:12:06Z</updated>
|
||||
<content type="html"><p>This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I think if nothing else, this series can help gain knowledge, tips, and tricks to make you more comfortable with your computer. I hope that
|
||||
you will at least learn how to use your <code>terminal</code> application and more specifically <code>vim</code> motions and keybindings (more on that in another
|
||||
article).</p>
|
||||
<p>The goal of this article is to just get a machine setup with tools and to start exploring. I am a shill for <code>macOS</code>, so all of these will be
|
||||
specifically geared towards that and my workflows, most everything that is showcased should also work on <code>linux</code> machines (not sure about
|
||||
<code>windows</code>), although you may have to search for specific instructions on installing software for other platforms.</p>
|
||||
<p>What I have learned on my journey in programming is that the more you can lean on small software packages that focus on a single task, but
|
||||
do them well, the better. The less you use your mouse, the more productive you can be. The more you can work with <code>text</code> files and formats
|
||||
the more portable and transformable your workflows can be.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>The first thing that we will focus on is becoming familiar with the terminal application. On macOS the terminal application is located at
|
||||
<code>/Applications/Utilities/Terminal.app</code>. However, rather than click around to find it, you can use the <code>⌘&lt;space&gt;</code> to pull up your spotlight
|
||||
search, then type <code>Terminal</code> to select the terminal application.</p>
|
||||
<p><img src="/articles/images/2023-09-21-spotlight.png" alt="spotlight" /></p>
|
||||
<h3>Terminal Overview</h3>
|
||||
<p>Your terminal is a program that allows you to run programs by typing commands into it’s window. There are a lot of built-in commands and a
|
||||
bunch that you can install. The terminal is very customizable (and once familiar, you will constantly be tweaking / adjusting to suit your
|
||||
needs). Right now customization is not what we will focus on, however in future articles I will provide tips and tricks on customizing it.
|
||||
Right now, we only need to know how to open it up and type in commands.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal.png" alt="terminal" /></p>
|
||||
<p>Below is an image / explanation of what the default status line includes.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal-line.png" alt="terminal-line" /></p>
|
||||
<h3>Learn Basic Commands (Built-in)</h3>
|
||||
<p>Here are a few basic commands that you should familiarize yourself with, as you will use them often when working inside of a terminal.</p>
|
||||
<h3>Change Directory</h3>
|
||||
<p><code>cd</code> (change directory) is the command that allows you to move around your file system when inside the terminal.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> <code>~</code> is a representation of your <code>Home</code> directory.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/Documents
|
||||
</code></pre>
|
||||
<p>The above command will move you into your Documents directory.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If there are spaces in the name of the directory you try to move to then the easiest way is to wrap the name in quotes.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd &quot;~/Documents/Product Concepts&quot;
|
||||
</code></pre>
|
||||
<p>Some other things to understand when moving around / supplying arguments to the <code>cd</code> command.</p>
|
||||
<p>You can use <code>..</code> to go backwards / move up to the parent directory. For example, say we are in the <code>~/Documents</code> directory, to go back up to
|
||||
the home directory we could use the following:</p>
|
||||
<pre><code class="language-bash">cd ..
|
||||
</code></pre>
|
||||
<p>These can be chained together as well. For example say we are located in the <code>~/Documents/Product Concepts</code> directory, we could use the
|
||||
following to go up two directory levels back to the home directory.</p>
|
||||
<pre><code class="language-bash">cd ../..
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Pro-Tip:</strong> You can use the <code>&lt;tab&gt;</code> key when navigating to auto-complete, generally typing a few characters followed with the <code>&lt;tab&gt;</code> key
|
||||
will auto-complete for you.</p>
|
||||
</blockquote>
|
||||
<h3>List files</h3>
|
||||
<p>Use <code>ls</code> to output a list of files and directories where you are located.</p>
|
||||
<pre><code class="language-bash">ls
|
||||
</code></pre>
|
||||
<p><em>Example Output when in my ~/Documents directory</em></p>
|
||||
<pre><code class="language-bash">Estimates.app
|
||||
InkscapeDrawings
|
||||
KwikModel
|
||||
MyAparment
|
||||
NCISummit
|
||||
Personal
|
||||
Product Concepts
|
||||
Receipts.receipts
|
||||
RingCentral
|
||||
SketchUP
|
||||
Tech-Tips
|
||||
desktop.ini
|
||||
espanso-migrate-backup
|
||||
espanso-migrate-backup-2
|
||||
</code></pre>
|
||||
<p>Using options with <code>ls</code> to show more statistics and hidden files. There are often hidden files on your computer that are used for
|
||||
application support or other purposes, these files are not shown using the default command. Hidden files start with a <code>.</code>, below is an
|
||||
example of showing hidden files in your home directory.</p>
|
||||
<pre><code class="language-bash">ls -la ~/
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Above I added the <code>~/</code> which will allow you to list the files in your home directory even if you currently are not there in your
|
||||
terminal, if you were already there (for example by using <code>cd ~/</code> then you would not need to use that at the end of the command.</p>
|
||||
</blockquote>
|
||||
<p><em>Example Output</em></p>
|
||||
<pre><code>total 168
|
||||
drwxr-xr-x+ 46 michael staff 1472 Sep 22 10:45 .
|
||||
drwxr-xr-x 6 root admin 192 Sep 22 09:08 ..
|
||||
-r-------- 1 michael staff 7 Apr 8 2021 .CFUserTextEncoding
|
||||
-rw-r--r--@ 1 michael staff 14340 Sep 18 10:15 .DS_Store
|
||||
drwx------+ 5 michael staff 160 Sep 20 17:03 .Trash
|
||||
-rw-r--r-- 1 michael staff 186 Sep 12 15:20 .actrc
|
||||
drwxr-xr-x 4 michael staff 128 Dec 13 2021 .bin
|
||||
drwxr-xr-x 3 michael staff 96 Mar 6 2023 .bundle
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 11:40 .cabal
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 15:20 .cache
|
||||
drwxr-xr-x 13 michael staff 416 Aug 10 08:47 .config
|
||||
drwx------ 3 michael staff 96 Jun 21 2021 .cups
|
||||
drwxr-xr-x 12 michael staff 384 Sep 15 15:22 .docker
|
||||
drwxr-xr-x 20 michael staff 640 Sep 19 08:11 .dotfiles
|
||||
drwxr-xr-x 4 michael staff 128 Jul 26 2021 .gem
|
||||
drwxr-xr-x 3 michael staff 96 Oct 11 2021 .jssc
|
||||
-rw------- 1 michael staff 20 Sep 22 10:45 .lesshst
|
||||
drwxr-x--- 3 michael staff 96 Mar 29 08:47 .lldb
|
||||
drwxr-xr-x 8 michael staff 256 Mar 1 2023 .local
|
||||
drwxr-xr-x 4 root staff 128 Apr 12 2021 .newtek
|
||||
drwxr-xr-x 5 michael staff 160 Dec 13 2021 .npm
|
||||
-rw------- 1 michael staff 27436 Apr 10 10:21 .psql_history
|
||||
drwxr-xr-x 7 michael staff 224 Apr 18 2022 .ssh
|
||||
drwxr-xr-x 6 michael staff 192 Sep 21 09:06 .swiftpm
|
||||
lrwxr-xr-x 1 michael staff 25 Dec 27 2021 .tmux.conf -&gt; .dotfiles/tmux/.tmux.conf
|
||||
drwxr-xr-x 8 michael staff 256 Mar 27 16:14 .twilio-cli
|
||||
drwxr-xr-x 6 michael staff 192 Sep 18 11:08 .vim
|
||||
-rw------- 1 michael staff 23086 Sep 21 09:45 .viminfo
|
||||
-rw-r--r-- 1 michael staff 254 Sep 21 09:32 .wget-hsts
|
||||
lrwxr-xr-x 1 michael staff 43 Jan 3 2022 .zshenv -&gt; /Users/michael/.dotfiles/zsh/config/.zshenv
|
||||
drwxr-xr-x 8 michael staff 256 Dec 14 2021 AmazonWorkDocsCompanion
|
||||
drwx------@ 4 michael staff 128 Dec 13 2021 Applications
|
||||
lrwxr-xr-x 1 michael staff 40 Jun 6 12:00 Applications (Parallels) -&gt; /Volumes/Bucket/Applications (Parallels)
|
||||
drwx------@ 30 michael staff 960 Sep 21 08:54 Desktop
|
||||
drwx------@ 19 michael staff 608 Sep 14 10:15 Documents
|
||||
drwx------@ 21 michael staff 672 Sep 21 09:43 Downloads
|
||||
drwx------+ 115 michael staff 3680 Sep 14 10:04 Library
|
||||
drwxr-xr-x 3 michael staff 96 Sep 8 13:06 LocalProjects
|
||||
lrwxr-xr-x 1 michael staff 29 Dec 30 2021 Movies -&gt; /Volumes/Bucket/Videos/Movies
|
||||
lrwxr-xr-x 1 michael staff 21 Dec 30 2021 Music -&gt; /Volumes/Bucket/Music
|
||||
drwx------@ 2 michael staff 64 Mar 6 2023 Parallels
|
||||
drwx------@ 7 michael staff 224 Sep 14 09:52 Pictures
|
||||
drwxr-x---+ 4 michael staff 128 Apr 8 2021 Public
|
||||
drwxr-xr-x+ 3 michael staff 96 Sep 14 09:52 Sites
|
||||
drwxr-xr-x 3 michael staff 96 Jun 7 2021 WorkDocs Drive
|
||||
drwxr-xr-x 3 michael staff 96 Sep 18 11:36 go
|
||||
</code></pre>
|
||||
<p>As you can see, I have a lot of hidden files and folders, your output will probably look much different than mine.</p>
|
||||
<h3>Clearing the Terminal</h3>
|
||||
<p>Often times you may want to clear the terminal screen. You can use the <code>clear</code> command to clear the screen of the terminal.</p>
|
||||
<pre><code class="language-bash">clear
|
||||
</code></pre>
|
||||
<p>Or use a keyboard shortcut <code>⌃l</code> (<code>&lt;control&gt;l</code>)</p>
|
||||
<h3>Creating Directories</h3>
|
||||
<p>Use <code>mkdir</code> (make directory) to create a directory.</p>
|
||||
<p>First, let’s move into the <code>tmp</code> directory, the <code>tmp</code> directory is a directory on your file system that is typically used for applications
|
||||
to write temporary logs / files to, it get’s erased everytime your computer is restarted. We can use the <code>cd</code> command that we learned
|
||||
earlier.</p>
|
||||
<pre><code class="language-bash">cd /tmp
|
||||
</code></pre>
|
||||
<p>Next, let’s create a new directory called “MyDirectory”.</p>
|
||||
<pre><code class="language-bash">mkdir MyDirectory
|
||||
</code></pre>
|
||||
<h4>Gotcha’s with ‘mkdir’</h4>
|
||||
<p>By default you can’t create directories that are multiple levels deep, unless the directories already existed or we provide the <code>-p</code> option.
|
||||
For example, if we want to create a directory at <code>/tmp/MyOtherDirectory/Nested/Deeply</code> then we could use the following command when inside
|
||||
the <code>tmp</code> directory.</p>
|
||||
<pre><code class="language-bash">mkdir -p MyOtherDirectory/Nested/Deeply
|
||||
</code></pre>
|
||||
<p>Now, try out using the <code>&lt;tab&gt;</code> key with the <code>cd</code> command to navigate to the <code>Deeply</code> folder.</p>
|
||||
<pre><code class="language-bash">cd MyOther &lt;tab&gt; &lt;tab&gt; &lt;tab&gt;
|
||||
</code></pre>
|
||||
<h3>Open Command</h3>
|
||||
<p>You can use the open command to open files or folders in the default application for the file type.</p>
|
||||
<p>For example, if we want to open a <code>Finder</code> window while in the <code>/tmp</code> directory, we can use the following command:</p>
|
||||
<pre><code class="language-bash">open .
|
||||
</code></pre>
|
||||
<h3>Manual Pages</h3>
|
||||
<p>Lastly, to learn more about commands you can use the <code>man &lt;command&gt;</code>. To bring up the manual pages for the command in the terminal. You can
|
||||
use the arrow keys to navigate around the manual pages and type the letter <code>q</code> to quit / close the manual pages.</p>
|
||||
<pre><code class="language-bash">man ls
|
||||
</code></pre>
|
||||
<p>That is it for the first installment in this series. I hope you learned something and have better understanding of using your terminal.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -90,6 +90,63 @@ Markdown is a “mark-up” language. It allows you to write content in plain te
|
||||
converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -111,6 +168,12 @@ converted to other formats, such as html, pdf, docx, and many more. All...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
deploy/articles/tag/psychrometric-chart/feed.xml
Normal file
84
deploy/articles/tag/psychrometric-chart/feed.xml
Normal file
@@ -0,0 +1,84 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/psychrometric-chart/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
83
deploy/articles/tag/psychrometric-chart/index.html
Normal file
83
deploy/articles/tag/psychrometric-chart/index.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in psychrometric-chart
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/psychrometric-chart/feed.xml" rel="alternate" title="mhoush: articles with tag psychrometric-chart" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/psychrometric-chart/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
143
deploy/articles/tag/psychrometrics/feed.xml
Normal file
143
deploy/articles/tag/psychrometrics/feed.xml
Normal file
@@ -0,0 +1,143 @@
|
||||
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://localhost:3000/articles/tag/psychrometrics/feed.xml</id>
|
||||
<title>mhoush</title>
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introducing-psychrometrics-cli/</id>
|
||||
<title>Introducing Psychrometrics CLI</title>
|
||||
<updated>2025-02-20T16:03:19Z</updated>
|
||||
<content type="html"><p>Today, I’m releasing a command line application that is built on top of my
|
||||
<a href="https://github.com/swift-psychrometrics/swift-psychrometrics">swift-psychrometrics</a> package, that I open sourced over 2 years ago.</p>
|
||||
<p>The application consists of many calculations / conversions for psychrometric properties of an air stream. The tool works for both imperial
|
||||
and metric units. The application will work natively on macOS, but can also be ran through a <code>docker</code> container on other platforms.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I spend a lot of time in my terminal, because I can work so much more efficiently. I discovered many years ago that the more I can do using
|
||||
simple applications and keyboard over a mouse and a web browser or native application the more I can accomplish. I understand this is
|
||||
intimidating for many who think they are <em>“not good with computers”.</em> I can assure that was me several years ago, I would only encourage you
|
||||
to not be afraid and give it a shot. We are at a time in society where it is easier than ever to get informed and learned new skills.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>For complete installation instructions, you can view the <a href="https://github.com/swift-psychrometrics/psychrometrics-cli">github</a> repository.</p>
|
||||
<p>The following instructions are based on using macOS.</p>
|
||||
<h3>Open your terminal application.</h3>
|
||||
<p>Personally, I use <a href="https://iterm2.com/">iTerm2</a>, however you can use the default <code>Terminal</code> app. Found at
|
||||
<code>/Applications/Utilities/Terminal.app</code>.</p>
|
||||
<h2>Install Homebrew</h2>
|
||||
<p>We use <a href="https://brew.sh">Homebrew</a> for package distribution of the pre-built application binaries. You can follow their instructions to
|
||||
install.</p>
|
||||
<h3>Tap our custom formula tap.</h3>
|
||||
<pre><code class="language-bash">brew tap swift-psychrometrics/formula
|
||||
</code></pre>
|
||||
<h3>Install the psychrometrics application</h3>
|
||||
<pre><code class="language-bash">brew install psychrometrics
|
||||
</code></pre>
|
||||
<p>That’s it!</p>
|
||||
<h2>Usage</h2>
|
||||
<p>I will run through a couple of the commands that are supplied with the application and show what you can expect the outputs to be.</p>
|
||||
<h3>Properties</h3>
|
||||
<p>The following command will output a bunch of the psychrometric properties of an air stream. There are several ways to call it, but generally
|
||||
you will supply the dry bulb temperature and the relative humidity.</p>
|
||||
<p>Below, we calculate the psychrometric properties based on 75°F and 50% humidity.</p>
|
||||
<pre><code class="language-bash">psychrometrics --dry-bulb 75 --relative-humidity 50
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-properties.png" alt="properties-output" /></p>
|
||||
<h3>Dehumidifier Sizing</h3>
|
||||
<p>If you’ve read some of my recent articles on calculating the
|
||||
<a href="https://mhoush.com/posts/sizing-dehumidifier-by-latent-load/">dehumidifier size required based on the latent load</a>, the application also
|
||||
ships with a calculation that will do this for you and has the ability to calculate it at different <code>coverages</code> that you can supply.</p>
|
||||
<p>For example if we’ve done a load calculation and determined that we have a latent load of <code>4,334 BTU/h</code> then we could run the following
|
||||
command to see what size dehumidifier is needed for <code>100%, 85%, and 70%</code> of the latent load.</p>
|
||||
<pre><code class="language-bash">psychrometrics dh size --coverage 100 85 70 --verbose 4334
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-dh-size.png" alt="dh-size" /></p>
|
||||
<h3>Pounds of Water Removed</h3>
|
||||
<p>I also recently wrote an article about <a href="https://mhoush.com/posts/pounds-of-water-removed/">calculating the pounds of water removed</a> from an
|
||||
air stream given the grains of moisture removed.</p>
|
||||
<p>Below is an example of calculating the pounds of water removed per hour based on the example in the article (14 delta-grains)</p>
|
||||
<pre><code class="language-bash">psychrometrics dh pounds-removed --delta 14 --cfm 797 --verbose
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-pounds-removed.png" alt="pounds-removed" /></p>
|
||||
<h3>Help</h3>
|
||||
<p>You can use <code>--help</code> option to show help and the list of commands provided.</p>
|
||||
<p><img src="/articles/images/2023-09-18-help.png" alt="help" /></p>
|
||||
<p>If you have any questions then feel free to email or message me. I hope some of you may find this application useful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
96
deploy/articles/tag/psychrometrics/index.html
Normal file
96
deploy/articles/tag/psychrometrics/index.html
Normal file
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="#0e1112" media="(prefers-color-scheme: dark)" name="theme-color"/>
|
||||
<meta content="#566B78" media="(prefers-color-scheme: light)" name="theme-color"/>
|
||||
<meta content="Michael Housh" name="author"/>
|
||||
<meta content="Mhoush" name="apple-mobile-web-app-title"/>
|
||||
<meta content="initial-scale=1.0, width=device-width" name="viewport"/>
|
||||
<meta content="telephone=no" name="format-detection"/>
|
||||
<meta content="True" name="HandheldFriendly"/>
|
||||
<meta content="320" name="MobileOptimized"/>
|
||||
<meta content="Mhoush" name="og:site_name"/>
|
||||
<meta content="hvac, developer, swift, home-performance, design" name="keywords"/>
|
||||
<title>
|
||||
mhoush: Articles in psychrometrics
|
||||
</title>
|
||||
<link href="/static/favicon.ico" rel="shortcut icon"/>
|
||||
<link href="/static/output.css" rel="stylesheet"/>
|
||||
<link href="/static/style.css" rel="stylesheet"/>
|
||||
<link href="/articles/feed.xml" rel="alternate" title="mhoush" type="application/rss+xml"/>
|
||||
<link href="/articles/tag/psychrometrics/feed.xml" rel="alternate" title="mhoush: articles with tag psychrometrics" type="application/rss+xml"/>
|
||||
</head>
|
||||
<body class="bg-page text-white pb-5 font-avenir articles">
|
||||
<header class="bg-nav text-gray py-4 text-base/6 lg:fixed w-full lg:h-[62px]">
|
||||
<nav class="container flex gap-x-5 lg:gap-x-y items-center">
|
||||
<ul class="flex flex-wrap gap-x-2 lg:gap-x-5">
|
||||
<li>
|
||||
<a class href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="active" href="/articles/">Articles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class href="/about/">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container pt-12 lg:pt-28">
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
Copyright © Michael Housh 2023-2025.
|
||||
</p>
|
||||
<p>
|
||||
Built in Swift using
|
||||
<a href="https://github.com/loopwerk/Saga" rel="nofollow" target="_blank">Saga</a>
|
||||
(<a href="https://github.com/m-housh/mhoush.com" rel="nofollow" target="_blank">source</a>).
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://localhost:3000/articles/tag/psychrometrics/feed.xml" rel="nofollow" target="_blank">RSS</a>
|
||||
|
|
||||
<a href="https://github.com/m-housh" rel="nofollow" target="_blank">Github</a>
|
||||
|
|
||||
<a href="https://www.youtube.com/channel/UCb58SeURd5bObfTiL0KoliA" rel="nofollow" target="_blank">Youtube</a>
|
||||
|
|
||||
<a href="https://www.facebook.com/michael.housh" rel="nofollow" target="_blank">Facebook</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,75 +5,75 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/pgp-encryption-introduction/</id>
|
||||
<title>PGP Encryption Introduction</title>
|
||||
<updated>2025-02-19T21:36:11Z</updated>
|
||||
<content type="html"><p>In this article I introduce PGP and show a use case for me, which perhaps you can use as well.</p>
|
||||
<h2>What is PGP</h2>
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses<br />
|
||||
<p>PGP stands for <strong>Pretty Good Privacy</strong>, it was first developed in 1991 by Phil Zimmermann. PGP uses
|
||||
cryptographic privacy and authentication and is generally used in data communication.</p>
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired<br />
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s<br />
|
||||
<p>According to <a href="https://en.wikipedia.org/wiki/Pretty_Good_Privacy">Wikipedia</a> it’s name was inspired
|
||||
by a grocery store named, “Ralph’s Pretty Goody Grocery” featured in radio host’s Garrison Keillor’s
|
||||
fictional town of Lake Wobegon.</p>
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both<br />
|
||||
<p>PGP is commonly used in software development to “sign” software commits or files to help ensure both
|
||||
who the commits were from as well as make sure they were not modified from the original versions.</p>
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which<br />
|
||||
<p>It should also be noted that when people say PGP they are often referring to OpenPGP or GnuPGP which
|
||||
are implementations of the PGP standard protocol.</p>
|
||||
<h2>What it does</h2>
|
||||
<blockquote>
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms<br />
|
||||
<p>Note: I am in no way a cyber-security expert, I am a layman and only describing things in terms
|
||||
that I understand / make sense to me. Do what I do at your own risk!</p>
|
||||
</blockquote>
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption<br />
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource<br />
|
||||
<p>PGP offers both symmetrical encryption (uses a session key and password) or asymmetrical encryption
|
||||
(uses a session key and a private key). Asymmetrical encryption is more secure but is more resource
|
||||
intensive (which is generally not a problem with computers of today).</p>
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of<br />
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured<br />
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is<br />
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of<br />
|
||||
<p>Generally speaking PGP uses what are known as public and private key pairs. The public portion of
|
||||
the key par is meant to be shared with others freely, while the private portion needs to be secured
|
||||
/ not shared with anyone <strong>EVER</strong>. It is best practice to generate your keys on a computer that is
|
||||
“air gapped”, meaning it is not connected to any network / internet, and does not save a history of
|
||||
commands performed on it.</p>
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public<br />
|
||||
<p>PGP encrypts data (files, messages, etc.) for one or more recipients, using the recipients public
|
||||
key. The recipients private key is required to decrypt the data once it’s been encrypted.</p>
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can<br />
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it<br />
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software<br />
|
||||
<p>Your key pair is tied to your identity / person, generally by your name and email(s). The key can
|
||||
also have multiple “subkeys”, meaning that if you have more than one public email, alias, etc. it
|
||||
can be tied to your same private key. This is useful for example for work vs. activism vs. software
|
||||
development.</p>
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the<br />
|
||||
<p>Once your key is generated and your private key secured, you can share your public portion of the
|
||||
key to a “keyserver” where other people can download it and verify messages were sent by you.</p>
|
||||
<h2>Web of Trust</h2>
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are<br />
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is<br />
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to<br />
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level<br />
|
||||
<p>PGP also uses what is called the <strong>“Web of Trust”</strong>, which is used to validate that messages are
|
||||
encrypted by a trusted source. There are different levels of trust depending on where a key is
|
||||
retrieved from. For example, if somebody gave you their public key in person and you were able to
|
||||
inspect that the identity matches their government id, then you can give it a higher trust level
|
||||
than one that is sent / retrieved from a keyserver.</p>
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of<br />
|
||||
<p>My understanding of this portion is that over time your key is signed by other’s with their level of
|
||||
certainty about you / your key, which over time increases the overall trust in your key.</p>
|
||||
<h2>Out of the weeds</h2>
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use<br />
|
||||
<p>Now that we’ve got an understanding of some of the technical aspects, lets talk about some real use
|
||||
cases of PGP encryption.</p>
|
||||
<p>PGP encryption is used by some email clients / applications, such as<br />
|
||||
<a href="https://canarymail.io/">Canary</a>,<br />
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or<br />
|
||||
<p>PGP encryption is used by some email clients / applications, such as
|
||||
<a href="https://canarymail.io/">Canary</a>,
|
||||
<a href="https://www.thunderbird.net/en-US/thunderbird/115.0/holidayeoy/">Thunderbird</a>, or
|
||||
<a href="https://gpgtools.tenderapp.com/">GPGSuite</a>.</p>
|
||||
<p>In my understanding, it is also what is used in devices such as a<br />
|
||||
<p>In my understanding, it is also what is used in devices such as a
|
||||
<a href="https://www.yubico.com/">YubiKey</a>.</p>
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons<br />
|
||||
<p>Many of the mentioned applications allow for an easier interface / adoption, as one of the reasons
|
||||
it is not very popular is that it can be hard to use PGP for the average person.</p>
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files<br />
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a<br />
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud<br />
|
||||
<p>Aside from using my PGP key for signing software commits, my major use case is for encrypting files
|
||||
that I store in a “cloud” provider. Know that when someone says the “cloud”, it is really just a
|
||||
computer (in reality a gang of computers in a data center). You are solely reliant that these cloud
|
||||
providers are not snooping on, inspecting, or even selling your data.</p>
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit<br />
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your<br />
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody<br />
|
||||
<p>Of course, some data may not be that sensitive, so maybe you don’t care. However with a little bit
|
||||
of effort on your part you can at least make it very hard for anyone to know what is inside your
|
||||
documents. You can be in control of the way your items are encrypted and have confidence that nobody
|
||||
but you can access what is inside your documents.</p>
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something<br />
|
||||
<p>Heck, I even encrypt documents that are stored on my own network / computer so that if something
|
||||
get’s stolen or someone breach’s my network they will not be able to easily get to sensitive data.</p>
|
||||
<h2>Conclusion</h2>
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how<br />
|
||||
<p>This article is just meant as an overview of PGP encryption. In future articles I will show you how
|
||||
to use it to encrypt your data and be in control of your privacy.</p>
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
|
||||
@@ -73,6 +73,12 @@ cryptographic privacy and authentication and is...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,20 +5,564 @@
|
||||
<author>
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link href="http://localhost:3000" rel="self"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2025/vapor-htmx-todo-app/</id>
|
||||
<title>Vapor + HTMX</title>
|
||||
<updated>2025-02-19T21:47:31Z</updated>
|
||||
<updated>2025-02-20T14:15:37Z</updated>
|
||||
<summary>Build an example application using Vapor and HTMX.</summary>
|
||||
<link href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2025/vapor-htmx-todo-app/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2024/free-as-in-freedom/</id>
|
||||
<title>Free As In Freedom</title>
|
||||
<updated>2025-02-19T21:39:28Z</updated>
|
||||
<summary>Salute to open-source software engineers</summary>
|
||||
<link href="http://localhost:3000/articles/2024/free-as-in-freedom/" rel="alternate"></link>
|
||||
<link rel="alternate" href="http://localhost:3000/articles/2024/free-as-in-freedom/"></link>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-4/</id>
|
||||
<title>Introduction to Programming for HVAC Part-4</title>
|
||||
<updated>2025-02-20T16:31:35Z</updated>
|
||||
<content type="html"><p>This article builds upon our <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-3/">last</a> article, so make sure to catch up
|
||||
before continuing with this article.</p>
|
||||
<h2>Arguments</h2>
|
||||
<p>Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments are
|
||||
supplied to shell scripts are separated by a space <code>&quot; &quot;</code>, as opposed to options which start with a <code>-&lt;character&gt;</code> or <code>--&lt;word&gt;</code>.</p>
|
||||
<p>To illustrate this, let’s change our <code>hello-world</code> script we wrote in the last article.</p>
|
||||
<p><strong>Move into our scripts directory:</strong></p>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<p><strong>Make a copy of the hello-world script:</strong></p>
|
||||
<pre><code class="language-bash">cp hello-world greet
|
||||
</code></pre>
|
||||
<p>Above we make a copy of the hello-world file and name the copy <code>greet</code>.</p>
|
||||
<p><strong>Open the greet file:</strong></p>
|
||||
<pre><code class="language-bash">open -a TextEdit greet
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Because the greet file is an executable, in order to open it in the <code>TextEdit</code> application we must supply the <code>-a</code> option.
|
||||
Otherwise it will just run our <code>greet</code> program in another terminal. Use <code>man open</code> to read more about the open command.</p>
|
||||
</blockquote>
|
||||
<p><strong>Edit the greet file:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo &quot;Hello, ${1}!&quot;
|
||||
</code></pre>
|
||||
<p>Make sure to save <code>⌘s</code> the file.</p>
|
||||
<p>Take note that the quotes need to be changed to <code>&quot;</code> (double quotes) from our original <code>hello-world</code> program.</p>
|
||||
<p>The <code>${1}</code> is indicating that we will insert / interpret the first argument passed to our program and insert it at that location. Arguments
|
||||
are interpreted in order they are passed in with <code>${0}</code> always representing the filename of the program that is called (generally not needed
|
||||
/ used in your scripts).</p>
|
||||
<p><strong>Test it out:</strong></p>
|
||||
<pre><code class="language-bash">./greet Michael
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-26-greet-output.png" alt="greet-output" /></p>
|
||||
<p>If you’d like to supply multiple words (or arguments that contain spaces) as a single argument then you can wrap them in quotes.</p>
|
||||
<pre><code class="language-bash">./greet &quot;Michael Housh&quot;
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Wrapping in quotes is especially useful for commands that take file paths, if any of the folders or file names contain spaces.</p>
|
||||
</blockquote>
|
||||
<h2>More Useful Program</h2>
|
||||
<p>At this point, it’s time to build a more useful program that we can use. First, we must download some dependencies for our program.</p>
|
||||
<p><strong>Install imagemagick:</strong></p>
|
||||
<pre><code class="language-bash">brew install imagemagick
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you’d like to check out the documentation / website for imagemagick you can run <code>brew home imagemagick</code>.</p>
|
||||
</blockquote>
|
||||
<p>This will take a bit for brew to install imagemagick and it’s dependencies. When it’s completed, we can check to make sure that imagemagick
|
||||
is installed by running the following command.</p>
|
||||
<pre><code class="language-bash">magick --version
|
||||
</code></pre>
|
||||
<p>It should output something along the lines of this below.</p>
|
||||
<pre><code class="language-bash">Version: ImageMagick 7.1.1-17 Q16-HDRI aarch64 21569 https://imagemagick.org
|
||||
Copyright: (C) 1999 ImageMagick Studio LLC
|
||||
License: https://imagemagick.org/script/license.php
|
||||
Features: Cipher DPC HDRI Modules OpenMP(5.0)
|
||||
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
|
||||
Compiler: gcc (4.2)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Don’t forget, you can use the <code>clear</code> command to clear the terminal.</p>
|
||||
</blockquote>
|
||||
<p><strong>Create our script:</strong></p>
|
||||
<pre><code class="language-bash">touch mktrans
|
||||
</code></pre>
|
||||
<p>We are going to name our script <code>mktrans</code> as a short for make transparent.</p>
|
||||
<p><strong>Open the file:</strong></p>
|
||||
<pre><code class="language-bash">open mktrans
|
||||
</code></pre>
|
||||
<p><strong>The program:</strong></p>
|
||||
<pre><code class="language-bash">#!/bin/bash
|
||||
|
||||
# The input file path, passed in as the first argument.
|
||||
inputfile=&quot;${1}&quot;
|
||||
|
||||
# The color to make transparent, optionally passed in as the second argument.
|
||||
# by default we handle / make white backgrounds transparent.
|
||||
color=&quot;${2:-white}&quot;
|
||||
|
||||
# Use the built-in basename command to normalize the input file name
|
||||
# this will convert a file path, such as ~/Pictures/my-image.png to my-image.png.
|
||||
fullfilename=$(basename -- &quot;$inputfile&quot;)
|
||||
|
||||
# Use the text of the `fullfilename` up to the first '.' as the file name.
|
||||
filename=&quot;${fullfilename%%.*}&quot;
|
||||
|
||||
# Use the text after the last '.' as the file extension.
|
||||
extension=&quot;${fullfilename##*.}&quot;
|
||||
|
||||
# Create the output file name to use.
|
||||
#
|
||||
# For an input file of `input.png`, our output name would be
|
||||
# `input-transparent.png`.
|
||||
#
|
||||
# This will output the file in the directory that we are
|
||||
# in when we use our script (which may different than where
|
||||
# the image is located)
|
||||
outputfile=&quot;${filename}-transparent.${extension}&quot;
|
||||
|
||||
# Make the magick happen :)
|
||||
convert &quot;${inputfile}&quot; -fuzz 10% -transparent &quot;${color}&quot; &quot;${outputfile}&quot;
|
||||
|
||||
</code></pre>
|
||||
<p>I’ve included comments in the program above, which is good practice, as there is high odds that you will forget what is going on when / if
|
||||
you open the file up in the future to look at it. We are using a lot of what is called parameter expansion magic in this file. You can read
|
||||
up more on what we are doing in the <a href="https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html">bash documentation</a>.</p>
|
||||
<p>This script is far from perfect, there are a lot of things to be improved upon. For example, if you download / save the banner image of this
|
||||
post and run this script, it will also remove some color in the wizards beard, eyes, and eye brows. However, it does work very well for my
|
||||
general use case, which is to remove the background from screenshots of pdf documents. It should be noted that it will not work on all types
|
||||
of images, some image types do not allow transparency, so it is safest to call this with input image being a <code>.png</code> image type, however you
|
||||
can use the <code>imagemagick</code> program that we downloaded to convert other image types to <code>.png</code>, but that will be left up to you to figure out.</p>
|
||||
<h2>Using Our Program</h2>
|
||||
<p>This is going to assume that you have download the banner image at the top of this article. You can do this by right-clicking and choosing
|
||||
<code>Save As</code>. This should save the image in your downloads folder, and you can keep the name of <code>part4-banner.png</code>.</p>
|
||||
<p><strong>Make the program executable:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x mktrans
|
||||
</code></pre>
|
||||
<p><strong>Make the image background transparent:</strong></p>
|
||||
<pre><code class="language-bash">./mktrans ~/Downloads/part4-banner.png
|
||||
</code></pre>
|
||||
<p><strong>Open the image:</strong></p>
|
||||
<pre><code class="language-bash">open part4-banner-transparent.png
|
||||
</code></pre>
|
||||
<p>It should look like below.</p>
|
||||
<p><img src="/articles/images/2023-09-26-part4-banner-transparent.png" alt="banner-transparent" /></p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If you are viewing this site in <em>light</em> mode, the image does not look that bad. Hit the moon button in the top above my profile
|
||||
image to see some of the flaws of our program.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> Remove the image from the <code>~/.local/bin</code> by using <code>rm part4-banner-transparent.png</code>. Be aware that the <code>rm</code> command can not be
|
||||
undone, so use with caution / knowledge. It is safer, until you are more comfortable to use the <code>Finder</code> application and move the file to
|
||||
the trash. In <code>Finder</code>, you can show hidden directories by typing <code>⌘.</code> or go directly to the folder by typing <code>⇧⌘G</code> (shift + command + G)
|
||||
and in the pop-up typing <code>~/.local/bin</code>.</p>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p>That is it for this article. In the upcoming articles we will setup our <code>shell</code> environment so that we can use the commands we’ve built
|
||||
without having to navigate to the <code>~/.local/bin</code> directory. Thank you for reading to the end, I hope you’re finding this series helpful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-3/</id>
|
||||
<title>Introduction to Programming for HVAC Part-3</title>
|
||||
<updated>2025-02-20T16:20:56Z</updated>
|
||||
<content type="html"><p>In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up <a href="https://mhoush.com/series/programming-for-hvac/">here</a> before continuing with this article.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we
|
||||
will write, that will remove the background from an image.</p>
|
||||
<h3>Creating a scripts directory</h3>
|
||||
<p>We learned in the <a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first article</a> how to use our terminal. Today we are
|
||||
going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.</p>
|
||||
<p><strong>Create a directory</strong></p>
|
||||
<pre><code class="language-bash">mkdir -p ~/.local/bin
|
||||
</code></pre>
|
||||
<p>The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> The <code>-p</code> option allows us to create nested directories if the parent directory doesn’t exist.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/.local/bin
|
||||
</code></pre>
|
||||
<h3>Hello World</h3>
|
||||
<p>It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get
|
||||
started.</p>
|
||||
<p><strong>Creating our script file:</strong></p>
|
||||
<pre><code class="language-bash">touch hello-world.sh
|
||||
</code></pre>
|
||||
<p><strong>Now open the file:</strong></p>
|
||||
<pre><code class="language-bash">open hello-world.sh
|
||||
</code></pre>
|
||||
<p>The above command should open the file in the <code>TextEdit</code> application. In order to make the text edit application to not auto-capitalize
|
||||
words and play more nicely, we need to adjust some settings. Open the settings by pressing <code>⌘,</code>.</p>
|
||||
<p>In the <strong>Format</strong> section, select <em>Plain text</em> and in the <strong>Options</strong> section de-select <em>Check spelling as you type</em>.</p>
|
||||
<p><img src="/articles/images/2023-09-24-text-settings.png" alt="text-settings" /></p>
|
||||
<p>At this point for changes to take place, you will need to close the file and re-open.</p>
|
||||
<blockquote>
|
||||
<p><strong>Tip:</strong> In your terminal you can run the last command in your history by using the <code>↑</code> (Up) arrow key.</p>
|
||||
</blockquote>
|
||||
<p>Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:</p>
|
||||
<pre><code class="language-bash">#!/bin/sh
|
||||
|
||||
echo 'Hello World!'
|
||||
</code></pre>
|
||||
<p>The first line is referred to as the <code>shebang</code>, this tells your computer which shell interperter to run your file. I have not explained the
|
||||
shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the <code>sh</code> posix
|
||||
shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just
|
||||
about any machine you were on).</p>
|
||||
<p>The second line we are using the built-in <code>echo</code> command and passing it the ‘Hello World!’ argument.</p>
|
||||
<p>Now save and close the file <code>⌘s</code> (to save) <code>⌘q</code> (to quit the text edit application).</p>
|
||||
<p><strong>Run the program from your terminal:</strong></p>
|
||||
<pre><code class="language-bash">/bin/sh hello-world.sh
|
||||
</code></pre>
|
||||
<p>You should see that <code>Hello World!</code> was printed to your console.</p>
|
||||
<p><img src="/articles/images/2023-09-24-hello-output.png" alt="hello-output" /></p>
|
||||
<h3>Make Executable</h3>
|
||||
<p>Now that we have our basic script working, let’s make it an executable.</p>
|
||||
<p><strong>In your terminal, type the following:</strong></p>
|
||||
<pre><code class="language-bash">chmod u+x hello-world.sh
|
||||
</code></pre>
|
||||
<p>This will change the mode of the file type to be an executable.</p>
|
||||
<p>Now move / rename the file so we don’t have to call it using <code>.sh</code> extension:</p>
|
||||
<pre><code class="language-bash">mv hello-world.sh hello-world
|
||||
</code></pre>
|
||||
<p>Now that the file is executable, we can execute it by just calling the name of the file.</p>
|
||||
<pre><code class="language-bash">./hello-world
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> We have to prefix the file name with <code>./</code> in the above command so that it knows where to find our file. The <code>./</code> is saying run
|
||||
this file in our current directory. In the future we will setup our shell so that it knows to look in our <code>~/.local/bin</code> directory for
|
||||
scripts, so that we can call them without this prefix.</p>
|
||||
</blockquote>
|
||||
<h2>Conclusion</h2>
|
||||
<p>Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program
|
||||
from our terminal. I should mention that the <code>TextEdit</code> application is generally not how you would program, people typically use what is
|
||||
known as an <code>IDE (integrated development environment)</code>, however I chose to use the <code>TextEdit</code> application because it is built-in to <code>macOS</code>
|
||||
and allowed us to accomplish our goal without downloading other software.</p>
|
||||
<p>In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time.
|
||||
Thank you for reading to this point.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-2/</id>
|
||||
<title>Introduction to Programming for HVAC Part-2</title>
|
||||
<updated>2025-02-20T16:16:09Z</updated>
|
||||
<content type="html"><p>In this article, learn about installing a package manager. If you missed it, check out the
|
||||
<a href="https://mhoush.com/posts/introduction-to-programming-for-hvac-1/">first</a> article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.</p>
|
||||
<h2>What is a Package Manager</h2>
|
||||
<p>A package manager is a piece of software that helps to install software and manage updates for your system. For me, the first thing that I
|
||||
do with a new machine is install <code>Homebrew</code>. <a href="https://brew.sh">Homebrew</a> is my preferred package manager for <code>macOS</code>.</p>
|
||||
<h2>Why</h2>
|
||||
<p>A package manager is nice because often software relies / requires other dependencies in order to work properly. By using a package manager
|
||||
it will make sure that the correct dependencies are installed for the software that you need to run. It allows you to be able to update and
|
||||
manage software through a centralized interface.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>Installation is simple. Open up your terminal and enter the following command (easiest to just copy / paste from the homepage linked above).</p>
|
||||
<pre><code class="language-bash">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
|
||||
</code></pre>
|
||||
<p>This will prompt you for your password in order to create some directories and install the required software for <code>brew</code> to work. The
|
||||
installation may take some time, while it downloads the command line tools for <code>Xcode</code>.</p>
|
||||
<p>When completed, follow the <code>Next Steps</code> and copy / paste the command listed, that should look like below.</p>
|
||||
<pre><code class="language-bash">(echo; echo 'eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;') &gt;&gt; /Users/&lt;you&gt;/.zprofile
|
||||
eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-22-brew-output.png" alt="brew-output" /></p>
|
||||
<p>The first line of this command sets up some things in your shell profile (which we have not discussed yet) that will make <code>Homebrew</code>
|
||||
available to you anytime you start a new session in your terminal. The second line of the command makes it available in your current
|
||||
terminal session.</p>
|
||||
<p>Next run the following command and make sure that everything is setup correctly.</p>
|
||||
<pre><code class="language-bash">brew doctor
|
||||
</code></pre>
|
||||
<p>Which should output the following:</p>
|
||||
<pre><code>Your system is ready to brew.
|
||||
</code></pre>
|
||||
<h3>Terminology</h3>
|
||||
<p>Homebrew calls command line applications <code>formula</code> and normal graphical applications <code>casks</code>. It has the ability to install both styles of
|
||||
applications.</p>
|
||||
<h2>Search Command</h2>
|
||||
<p>The following command is used to search for software packages:</p>
|
||||
<pre><code class="language-bash">brew search chrome
|
||||
</code></pre>
|
||||
<h2>Open a Homepage</h2>
|
||||
<p>The following command can be used to view the homepage of a formula or cask in your browser:</p>
|
||||
<pre><code class="language-bash">brew home google-chrome
|
||||
</code></pre>
|
||||
<h2>Update Homebrew</h2>
|
||||
<p>The following command is used to update homebrew:</p>
|
||||
<pre><code class="language-bash">brew update
|
||||
</code></pre>
|
||||
<h2>Update packages installed on your system</h2>
|
||||
<p>The following command is used to update software that is installed / managed by homebrew.</p>
|
||||
<pre><code class="language-bash">brew upgrade
|
||||
</code></pre>
|
||||
<p>You can combine the update and upgrade commands, which will update homebrew and upgrade all the software it manages on you machine with the
|
||||
following command.</p>
|
||||
<pre><code class="language-bash">brew update &amp;&amp; brew upgrade
|
||||
</code></pre>
|
||||
<h2>Conclusion</h2>
|
||||
<p>That is it for this article. I will say that for me, when I find a piece of software that I want to use, I generally try to search for it in
|
||||
<code>brew</code> first, before installing it via other means.</p>
|
||||
<p>I hope you’ve found this article helpful. In the next article we will start to use the skills that we’ve learned in these first two articles
|
||||
and write our first program / script.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introduction-to-programming-for-hvac-1/</id>
|
||||
<title>Introduction to Programming for HVAC Part-1</title>
|
||||
<updated>2025-02-20T16:12:06Z</updated>
|
||||
<content type="html"><p>This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I think if nothing else, this series can help gain knowledge, tips, and tricks to make you more comfortable with your computer. I hope that
|
||||
you will at least learn how to use your <code>terminal</code> application and more specifically <code>vim</code> motions and keybindings (more on that in another
|
||||
article).</p>
|
||||
<p>The goal of this article is to just get a machine setup with tools and to start exploring. I am a shill for <code>macOS</code>, so all of these will be
|
||||
specifically geared towards that and my workflows, most everything that is showcased should also work on <code>linux</code> machines (not sure about
|
||||
<code>windows</code>), although you may have to search for specific instructions on installing software for other platforms.</p>
|
||||
<p>What I have learned on my journey in programming is that the more you can lean on small software packages that focus on a single task, but
|
||||
do them well, the better. The less you use your mouse, the more productive you can be. The more you can work with <code>text</code> files and formats
|
||||
the more portable and transformable your workflows can be.</p>
|
||||
<h2>Getting Started</h2>
|
||||
<p>The first thing that we will focus on is becoming familiar with the terminal application. On macOS the terminal application is located at
|
||||
<code>/Applications/Utilities/Terminal.app</code>. However, rather than click around to find it, you can use the <code>⌘&lt;space&gt;</code> to pull up your spotlight
|
||||
search, then type <code>Terminal</code> to select the terminal application.</p>
|
||||
<p><img src="/articles/images/2023-09-21-spotlight.png" alt="spotlight" /></p>
|
||||
<h3>Terminal Overview</h3>
|
||||
<p>Your terminal is a program that allows you to run programs by typing commands into it’s window. There are a lot of built-in commands and a
|
||||
bunch that you can install. The terminal is very customizable (and once familiar, you will constantly be tweaking / adjusting to suit your
|
||||
needs). Right now customization is not what we will focus on, however in future articles I will provide tips and tricks on customizing it.
|
||||
Right now, we only need to know how to open it up and type in commands.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal.png" alt="terminal" /></p>
|
||||
<p>Below is an image / explanation of what the default status line includes.</p>
|
||||
<p><img src="/articles/images/2023-09-21-terminal-line.png" alt="terminal-line" /></p>
|
||||
<h3>Learn Basic Commands (Built-in)</h3>
|
||||
<p>Here are a few basic commands that you should familiarize yourself with, as you will use them often when working inside of a terminal.</p>
|
||||
<h3>Change Directory</h3>
|
||||
<p><code>cd</code> (change directory) is the command that allows you to move around your file system when inside the terminal.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> <code>~</code> is a representation of your <code>Home</code> directory.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd ~/Documents
|
||||
</code></pre>
|
||||
<p>The above command will move you into your Documents directory.</p>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> If there are spaces in the name of the directory you try to move to then the easiest way is to wrap the name in quotes.</p>
|
||||
</blockquote>
|
||||
<pre><code class="language-bash">cd &quot;~/Documents/Product Concepts&quot;
|
||||
</code></pre>
|
||||
<p>Some other things to understand when moving around / supplying arguments to the <code>cd</code> command.</p>
|
||||
<p>You can use <code>..</code> to go backwards / move up to the parent directory. For example, say we are in the <code>~/Documents</code> directory, to go back up to
|
||||
the home directory we could use the following:</p>
|
||||
<pre><code class="language-bash">cd ..
|
||||
</code></pre>
|
||||
<p>These can be chained together as well. For example say we are located in the <code>~/Documents/Product Concepts</code> directory, we could use the
|
||||
following to go up two directory levels back to the home directory.</p>
|
||||
<pre><code class="language-bash">cd ../..
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Pro-Tip:</strong> You can use the <code>&lt;tab&gt;</code> key when navigating to auto-complete, generally typing a few characters followed with the <code>&lt;tab&gt;</code> key
|
||||
will auto-complete for you.</p>
|
||||
</blockquote>
|
||||
<h3>List files</h3>
|
||||
<p>Use <code>ls</code> to output a list of files and directories where you are located.</p>
|
||||
<pre><code class="language-bash">ls
|
||||
</code></pre>
|
||||
<p><em>Example Output when in my ~/Documents directory</em></p>
|
||||
<pre><code class="language-bash">Estimates.app
|
||||
InkscapeDrawings
|
||||
KwikModel
|
||||
MyAparment
|
||||
NCISummit
|
||||
Personal
|
||||
Product Concepts
|
||||
Receipts.receipts
|
||||
RingCentral
|
||||
SketchUP
|
||||
Tech-Tips
|
||||
desktop.ini
|
||||
espanso-migrate-backup
|
||||
espanso-migrate-backup-2
|
||||
</code></pre>
|
||||
<p>Using options with <code>ls</code> to show more statistics and hidden files. There are often hidden files on your computer that are used for
|
||||
application support or other purposes, these files are not shown using the default command. Hidden files start with a <code>.</code>, below is an
|
||||
example of showing hidden files in your home directory.</p>
|
||||
<pre><code class="language-bash">ls -la ~/
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>Note:</strong> Above I added the <code>~/</code> which will allow you to list the files in your home directory even if you currently are not there in your
|
||||
terminal, if you were already there (for example by using <code>cd ~/</code> then you would not need to use that at the end of the command.</p>
|
||||
</blockquote>
|
||||
<p><em>Example Output</em></p>
|
||||
<pre><code>total 168
|
||||
drwxr-xr-x+ 46 michael staff 1472 Sep 22 10:45 .
|
||||
drwxr-xr-x 6 root admin 192 Sep 22 09:08 ..
|
||||
-r-------- 1 michael staff 7 Apr 8 2021 .CFUserTextEncoding
|
||||
-rw-r--r--@ 1 michael staff 14340 Sep 18 10:15 .DS_Store
|
||||
drwx------+ 5 michael staff 160 Sep 20 17:03 .Trash
|
||||
-rw-r--r-- 1 michael staff 186 Sep 12 15:20 .actrc
|
||||
drwxr-xr-x 4 michael staff 128 Dec 13 2021 .bin
|
||||
drwxr-xr-x 3 michael staff 96 Mar 6 2023 .bundle
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 11:40 .cabal
|
||||
drwxr-xr-x 7 michael staff 224 Sep 12 15:20 .cache
|
||||
drwxr-xr-x 13 michael staff 416 Aug 10 08:47 .config
|
||||
drwx------ 3 michael staff 96 Jun 21 2021 .cups
|
||||
drwxr-xr-x 12 michael staff 384 Sep 15 15:22 .docker
|
||||
drwxr-xr-x 20 michael staff 640 Sep 19 08:11 .dotfiles
|
||||
drwxr-xr-x 4 michael staff 128 Jul 26 2021 .gem
|
||||
drwxr-xr-x 3 michael staff 96 Oct 11 2021 .jssc
|
||||
-rw------- 1 michael staff 20 Sep 22 10:45 .lesshst
|
||||
drwxr-x--- 3 michael staff 96 Mar 29 08:47 .lldb
|
||||
drwxr-xr-x 8 michael staff 256 Mar 1 2023 .local
|
||||
drwxr-xr-x 4 root staff 128 Apr 12 2021 .newtek
|
||||
drwxr-xr-x 5 michael staff 160 Dec 13 2021 .npm
|
||||
-rw------- 1 michael staff 27436 Apr 10 10:21 .psql_history
|
||||
drwxr-xr-x 7 michael staff 224 Apr 18 2022 .ssh
|
||||
drwxr-xr-x 6 michael staff 192 Sep 21 09:06 .swiftpm
|
||||
lrwxr-xr-x 1 michael staff 25 Dec 27 2021 .tmux.conf -&gt; .dotfiles/tmux/.tmux.conf
|
||||
drwxr-xr-x 8 michael staff 256 Mar 27 16:14 .twilio-cli
|
||||
drwxr-xr-x 6 michael staff 192 Sep 18 11:08 .vim
|
||||
-rw------- 1 michael staff 23086 Sep 21 09:45 .viminfo
|
||||
-rw-r--r-- 1 michael staff 254 Sep 21 09:32 .wget-hsts
|
||||
lrwxr-xr-x 1 michael staff 43 Jan 3 2022 .zshenv -&gt; /Users/michael/.dotfiles/zsh/config/.zshenv
|
||||
drwxr-xr-x 8 michael staff 256 Dec 14 2021 AmazonWorkDocsCompanion
|
||||
drwx------@ 4 michael staff 128 Dec 13 2021 Applications
|
||||
lrwxr-xr-x 1 michael staff 40 Jun 6 12:00 Applications (Parallels) -&gt; /Volumes/Bucket/Applications (Parallels)
|
||||
drwx------@ 30 michael staff 960 Sep 21 08:54 Desktop
|
||||
drwx------@ 19 michael staff 608 Sep 14 10:15 Documents
|
||||
drwx------@ 21 michael staff 672 Sep 21 09:43 Downloads
|
||||
drwx------+ 115 michael staff 3680 Sep 14 10:04 Library
|
||||
drwxr-xr-x 3 michael staff 96 Sep 8 13:06 LocalProjects
|
||||
lrwxr-xr-x 1 michael staff 29 Dec 30 2021 Movies -&gt; /Volumes/Bucket/Videos/Movies
|
||||
lrwxr-xr-x 1 michael staff 21 Dec 30 2021 Music -&gt; /Volumes/Bucket/Music
|
||||
drwx------@ 2 michael staff 64 Mar 6 2023 Parallels
|
||||
drwx------@ 7 michael staff 224 Sep 14 09:52 Pictures
|
||||
drwxr-x---+ 4 michael staff 128 Apr 8 2021 Public
|
||||
drwxr-xr-x+ 3 michael staff 96 Sep 14 09:52 Sites
|
||||
drwxr-xr-x 3 michael staff 96 Jun 7 2021 WorkDocs Drive
|
||||
drwxr-xr-x 3 michael staff 96 Sep 18 11:36 go
|
||||
</code></pre>
|
||||
<p>As you can see, I have a lot of hidden files and folders, your output will probably look much different than mine.</p>
|
||||
<h3>Clearing the Terminal</h3>
|
||||
<p>Often times you may want to clear the terminal screen. You can use the <code>clear</code> command to clear the screen of the terminal.</p>
|
||||
<pre><code class="language-bash">clear
|
||||
</code></pre>
|
||||
<p>Or use a keyboard shortcut <code>⌃l</code> (<code>&lt;control&gt;l</code>)</p>
|
||||
<h3>Creating Directories</h3>
|
||||
<p>Use <code>mkdir</code> (make directory) to create a directory.</p>
|
||||
<p>First, let’s move into the <code>tmp</code> directory, the <code>tmp</code> directory is a directory on your file system that is typically used for applications
|
||||
to write temporary logs / files to, it get’s erased everytime your computer is restarted. We can use the <code>cd</code> command that we learned
|
||||
earlier.</p>
|
||||
<pre><code class="language-bash">cd /tmp
|
||||
</code></pre>
|
||||
<p>Next, let’s create a new directory called “MyDirectory”.</p>
|
||||
<pre><code class="language-bash">mkdir MyDirectory
|
||||
</code></pre>
|
||||
<h4>Gotcha’s with ‘mkdir’</h4>
|
||||
<p>By default you can’t create directories that are multiple levels deep, unless the directories already existed or we provide the <code>-p</code> option.
|
||||
For example, if we want to create a directory at <code>/tmp/MyOtherDirectory/Nested/Deeply</code> then we could use the following command when inside
|
||||
the <code>tmp</code> directory.</p>
|
||||
<pre><code class="language-bash">mkdir -p MyOtherDirectory/Nested/Deeply
|
||||
</code></pre>
|
||||
<p>Now, try out using the <code>&lt;tab&gt;</code> key with the <code>cd</code> command to navigate to the <code>Deeply</code> folder.</p>
|
||||
<pre><code class="language-bash">cd MyOther &lt;tab&gt; &lt;tab&gt; &lt;tab&gt;
|
||||
</code></pre>
|
||||
<h3>Open Command</h3>
|
||||
<p>You can use the open command to open files or folders in the default application for the file type.</p>
|
||||
<p>For example, if we want to open a <code>Finder</code> window while in the <code>/tmp</code> directory, we can use the following command:</p>
|
||||
<pre><code class="language-bash">open .
|
||||
</code></pre>
|
||||
<h3>Manual Pages</h3>
|
||||
<p>Lastly, to learn more about commands you can use the <code>man &lt;command&gt;</code>. To bring up the manual pages for the command in the terminal. You can
|
||||
use the arrow keys to navigate around the manual pages and type the letter <code>q</code> to quit / close the manual pages.</p>
|
||||
<pre><code class="language-bash">man ls
|
||||
</code></pre>
|
||||
<p>That is it for the first installment in this series. I hope you learned something and have better understanding of using your terminal.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/introducing-psychrometrics-cli/</id>
|
||||
<title>Introducing Psychrometrics CLI</title>
|
||||
<updated>2025-02-20T16:03:19Z</updated>
|
||||
<content type="html"><p>Today, I’m releasing a command line application that is built on top of my
|
||||
<a href="https://github.com/swift-psychrometrics/swift-psychrometrics">swift-psychrometrics</a> package, that I open sourced over 2 years ago.</p>
|
||||
<p>The application consists of many calculations / conversions for psychrometric properties of an air stream. The tool works for both imperial
|
||||
and metric units. The application will work natively on macOS, but can also be ran through a <code>docker</code> container on other platforms.</p>
|
||||
<h2>Why</h2>
|
||||
<p>I spend a lot of time in my terminal, because I can work so much more efficiently. I discovered many years ago that the more I can do using
|
||||
simple applications and keyboard over a mouse and a web browser or native application the more I can accomplish. I understand this is
|
||||
intimidating for many who think they are <em>“not good with computers”.</em> I can assure that was me several years ago, I would only encourage you
|
||||
to not be afraid and give it a shot. We are at a time in society where it is easier than ever to get informed and learned new skills.</p>
|
||||
<h2>Installation</h2>
|
||||
<p>For complete installation instructions, you can view the <a href="https://github.com/swift-psychrometrics/psychrometrics-cli">github</a> repository.</p>
|
||||
<p>The following instructions are based on using macOS.</p>
|
||||
<h3>Open your terminal application.</h3>
|
||||
<p>Personally, I use <a href="https://iterm2.com/">iTerm2</a>, however you can use the default <code>Terminal</code> app. Found at
|
||||
<code>/Applications/Utilities/Terminal.app</code>.</p>
|
||||
<h2>Install Homebrew</h2>
|
||||
<p>We use <a href="https://brew.sh">Homebrew</a> for package distribution of the pre-built application binaries. You can follow their instructions to
|
||||
install.</p>
|
||||
<h3>Tap our custom formula tap.</h3>
|
||||
<pre><code class="language-bash">brew tap swift-psychrometrics/formula
|
||||
</code></pre>
|
||||
<h3>Install the psychrometrics application</h3>
|
||||
<pre><code class="language-bash">brew install psychrometrics
|
||||
</code></pre>
|
||||
<p>That’s it!</p>
|
||||
<h2>Usage</h2>
|
||||
<p>I will run through a couple of the commands that are supplied with the application and show what you can expect the outputs to be.</p>
|
||||
<h3>Properties</h3>
|
||||
<p>The following command will output a bunch of the psychrometric properties of an air stream. There are several ways to call it, but generally
|
||||
you will supply the dry bulb temperature and the relative humidity.</p>
|
||||
<p>Below, we calculate the psychrometric properties based on 75°F and 50% humidity.</p>
|
||||
<pre><code class="language-bash">psychrometrics --dry-bulb 75 --relative-humidity 50
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-properties.png" alt="properties-output" /></p>
|
||||
<h3>Dehumidifier Sizing</h3>
|
||||
<p>If you’ve read some of my recent articles on calculating the
|
||||
<a href="https://mhoush.com/posts/sizing-dehumidifier-by-latent-load/">dehumidifier size required based on the latent load</a>, the application also
|
||||
ships with a calculation that will do this for you and has the ability to calculate it at different <code>coverages</code> that you can supply.</p>
|
||||
<p>For example if we’ve done a load calculation and determined that we have a latent load of <code>4,334 BTU/h</code> then we could run the following
|
||||
command to see what size dehumidifier is needed for <code>100%, 85%, and 70%</code> of the latent load.</p>
|
||||
<pre><code class="language-bash">psychrometrics dh size --coverage 100 85 70 --verbose 4334
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-dh-size.png" alt="dh-size" /></p>
|
||||
<h3>Pounds of Water Removed</h3>
|
||||
<p>I also recently wrote an article about <a href="https://mhoush.com/posts/pounds-of-water-removed/">calculating the pounds of water removed</a> from an
|
||||
air stream given the grains of moisture removed.</p>
|
||||
<p>Below is an example of calculating the pounds of water removed per hour based on the example in the article (14 delta-grains)</p>
|
||||
<pre><code class="language-bash">psychrometrics dh pounds-removed --delta 14 --cfm 797 --verbose
|
||||
</code></pre>
|
||||
<p><img src="/articles/images/2023-09-18-pounds-removed.png" alt="pounds-removed" /></p>
|
||||
<h3>Help</h3>
|
||||
<p>You can use <code>--help</code> option to show help and the list of commands provided.</p>
|
||||
<p><img src="/articles/images/2023-09-18-help.png" alt="help" /></p>
|
||||
<p>If you have any questions then feel free to email or message me. I hope some of you may find this application useful.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/rss-feed/</id>
|
||||
<title>Rss Feed</title>
|
||||
<updated>2025-02-20T16:50:11Z</updated>
|
||||
<content type="html"><p>In this article I will show how to add this site’s rss feed. In particular, we will be using <a href="https://netnewswire.com">NetNewsWire</a> as the
|
||||
rss reader.</p>
|
||||
<h2>What is an RSS Feed</h2>
|
||||
<p>An RSS feed will show you new posts, generally from a blog, without having to remember to check the website at regular intervals or signup
|
||||
for an email list for notifications.</p>
|
||||
<p>NetNewsWire puts an RSS feed as:</p>
|
||||
<p><strong>It’s like podcasts</strong> - but for <em>reading.</em></p>
|
||||
<p>You consume an RSS feed, using an RSS reader application or extension in your browser.</p>
|
||||
<h2>Step One</h2>
|
||||
<p>First find and download an RSS reader, you can download <a href="https://netnewswire.com">NetNewsWire</a> for macOS from the link, or for iOS from the
|
||||
<a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210">AppStore</a>.</p>
|
||||
<h2>Step Two</h2>
|
||||
<p>Add the rss feed to stay up to date when I publish new articles.</p>
|
||||
<ol>
|
||||
<li>Click the plus in the right side of the sidebar and select <code>New Feed...</code></li>
|
||||
<li>In the URL field add: <code>https://mhoush.com/articles/feed.xml</code></li>
|
||||
<li>Optionally give it a name</li>
|
||||
<li>Click the <code>Add</code> button.</li>
|
||||
</ol>
|
||||
<p><img src="/articles/images/2023-08-10-rss-feed.gif" alt="rss gif" /></p>
|
||||
<p>That’s it.</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -60,6 +60,90 @@
|
||||
<a href="/articles/2024/free-as-in-freedom/">Salute to open-source software engineers</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-4/">Introduction to Programming for HVAC Part-4</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 26, 2023</span>1159 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-4/">This article builds upon our last article, so make sure to catch up
|
||||
before continuing with this article.
|
||||
Arguments
|
||||
Before we start creating our program that will remove the background from images let’s go over arguments in shell scripts. Arguments...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-3/">Introduction to Programming for HVAC Part-3</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 24, 2023</span>742 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-3/">In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first
|
||||
articles, then you can catch up here before continuing with this article.
|
||||
Getting Started
|
||||
We are going to make...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-2/">Introduction to Programming for HVAC Part-2</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 22, 2023</span>537 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-2/">In this article, learn about installing a package manager. If you missed it, check out the
|
||||
first article in the series where we learned about using your terminal.
|
||||
This article builds upon that foundation.
|
||||
What is a Package Manager
|
||||
A package manager...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introduction-to-programming-for-hvac-1/">Introduction to Programming for HVAC Part-1</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 21, 2023</span>1650 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/programming/">programming</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introduction-to-programming-for-hvac-1/">This is part one of a series of articles to help HVAC technicians (or others) get started in developing their skills to program. This can
|
||||
help to automate everyday tasks or just familiarize themselves with some of the tools used by programmers.
|
||||
Why
|
||||
I...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/introducing-psychrometrics-cli/">Introducing Psychrometrics CLI</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 18, 2023</span>538 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/introducing-psychrometrics-cli/">Today, I’m releasing a command line application that is built on top of my
|
||||
swift-psychrometrics package, that I open sourced over 2 years ago.
|
||||
The application consists of many calculations / conversions for psychrometric properties of an air stream....</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/rss-feed/">Rss Feed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">August 10, 2023</span>166 words, posted in <a href="/articles/tag/how-to/">how-to</a> and <a href="/articles/tag/software/">software</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/rss-feed/">In this article I will show how to add this site’s rss feed. In particular, we will be using NetNewsWire as the
|
||||
rss reader.
|
||||
What is an RSS Feed
|
||||
An RSS feed will show you new posts, generally from a blog, without having to remember to check the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -81,6 +165,12 @@
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -6,67 +6,67 @@
|
||||
<name>Michael Housh</name>
|
||||
</author>
|
||||
<link rel="self" href="http://localhost:3000"></link>
|
||||
<updated>2025-02-19T21:55:31Z</updated>
|
||||
<updated>2025-02-20T17:12:57Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/most-important-job/</id>
|
||||
<title>Most Important Job</title>
|
||||
<updated>2025-02-19T21:21:54Z</updated>
|
||||
<content type="html"><p>This short tech tip is about something one of my good friends in the trade told me a long time ago,<br />
|
||||
<content type="html"><p>This short tech tip is about something one of my good friends in the trade told me a long time ago,
|
||||
that has stuck with me through the years. It is a simple phrase / mindset.</p>
|
||||
<blockquote>
|
||||
<p>“The current job you’re on, is the most important job of your day”.</p>
|
||||
</blockquote>
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.<br />
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use<br />
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging<br />
|
||||
<p>This mindset should be carried from the dispatcher, manager, and technician to make this successful.
|
||||
I’m not gonna lie and say this is always easy, or even always possible, but if you strive to use
|
||||
this mindset then you will gain lifelong customers and satisfaction of not having loose ends hanging
|
||||
out there.</p>
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted<br />
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem<br />
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an<br />
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few<br />
|
||||
<p>I do think it’s also important to acknowledge that there are times that a technician has exhausted
|
||||
all their options, maybe they just don’t have the mental capacity anymore to continue with a problem
|
||||
job, or need a break to come back another day with a fresh set of eyes, etc… This is also an
|
||||
important thing for a technician to realize, and hopefully those type of instances are much more few
|
||||
and far between, but I do want to acknowledge that scenario does also exist.</p>
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.<br />
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in<br />
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a<br />
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business<br />
|
||||
<p>If you are a business owner, then this is something to consider instilling in your operations.
|
||||
Empower your technicians and dispatchers to understand when things need to be shuffled around in
|
||||
order to accommodate taking care of the customer at hand. It costs a lot of money to get a
|
||||
technician to job, so minimizing truck rolls to the same job is important from a business
|
||||
standpoint.</p>
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope<br />
|
||||
<p>This was just a quick tech tip of something that has been rolling around in my mind lately. I hope
|
||||
you find it helpful and it sticks with you through your career as it has mine.</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/calculate-seer-degradation-by-age/</id>
|
||||
<title>Calculate SEER Degradation by Age</title>
|
||||
<updated>2025-02-19T21:55:30Z</updated>
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based<br />
|
||||
<content type="html"><p>This is a quick tech-tip to learn how to calculate the degradation of SEER based
|
||||
on age.</p>
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and<br />
|
||||
refrigerant charge losses. It should be noted that this is not true for all<br />
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code><br />
|
||||
<p>The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for all
|
||||
applications, but is used as an estimation based on research done by the <code>DOE</code>
|
||||
of the average degradation based on systems tested.</p>
|
||||
<h2>Formula</h2>
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator<br />
|
||||
<p>This is the formula used to calculate the SEER based on age of the evaporator
|
||||
coil / air handler.</p>
|
||||
<p>$$ SEER_d = SEER_n \times (1 - M)^{age} $$</p>
|
||||
<p>| Where | |<br />
|
||||
| –––– | —————————————— | — |<br />
|
||||
| $SEER_d$ | Degradated SEER rating |<br />
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |<br />
|
||||
| M | Maintenance factor, 0.01-0.03 |<br />
|
||||
<p>| Where | |
|
||||
| –––– | —————————————— | — |
|
||||
| $SEER_d$ | Degradated SEER rating |
|
||||
| $SEER_n$ | Nominal SEER rating when equipment was new | |
|
||||
| M | Maintenance factor, 0.01-0.03 |
|
||||
| age | The age of the equipment, in years |</p>
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is<br />
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%<br />
|
||||
degradation per year, however there are some<br />
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a><br />
|
||||
that show that this can actually be as high as 5% or above depending on climate.<br />
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”<br />
|
||||
<p>The maintenance factor of 0.01 is for expertly maintained equipment and 0.03 is
|
||||
for unmaintained. The maintenance factor in essence is based on 1%-3%
|
||||
degradation per year, however there are some
|
||||
<a href="https://publications.energyresearch.ucf.edu/wp-content/uploads/2018/09/FSEC-PF-474-18.pdf">studies</a>
|
||||
that show that this can actually be as high as 5% or above depending on climate.
|
||||
We could use up to 0.05 as the maintenance factor, just to see what the “range”
|
||||
of degradation would be.</p>
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the<br />
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower<br />
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to<br />
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple<br />
|
||||
<p>Interestingly, the study linked also shows that the degradation is higher the
|
||||
higher the tonnage of the equipment. It also shows that the degradation is lower
|
||||
per year the higher the nominal SEER rating of the system (which is corelated to
|
||||
using TXV’s and lower airflow rates because of the equipment having multiple
|
||||
stages).</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when<br />
|
||||
<p>Let’s consider that we have a 13 SEER piece of equipment that was matched when
|
||||
installed and the system is 15 years old.</p>
|
||||
<p>Plugging those numbers into our formula.</p>
|
||||
<hr />
|
||||
@@ -76,9 +76,143 @@ installed and the system is 15 years old.</p>
|
||||
<h4>Highest Rage (5% degradation / year)</h4>
|
||||
<p>$$ SEER_d = 13 \times (1 - 0.05)^{15} = 6 $$</p>
|
||||
<hr />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER<br />
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge<br />
|
||||
<p>An expertly maintained system may not have degraded that much, with an 11.2 SEER
|
||||
vs. a poorly maintained / dirty system that also suffers from refrigerant charge
|
||||
losses can be as low as 6 SEER.</p>
|
||||
<p>Thanks for learning how to estimate SEER degradation based on equipment age!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/sizing-dehumidifier-by-latent-load/</id>
|
||||
<title>Dehumidifier Sizing by Latent Load</title>
|
||||
<updated>2025-02-20T17:04:37Z</updated>
|
||||
<content type="html"><p>This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.</p>
|
||||
<h2>Formulas</h2>
|
||||
<p>The formula above is used to solve for the pints per hour required to size a dehumidifier.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ph</td>
|
||||
<td>Pints / hour</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>We can then convert to pints per day by multiplying the answer by 24 hours, below is the combined formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day.png" alt="pints-per-day-formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Where</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Ql</td>
|
||||
<td>Latent load</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pd</td>
|
||||
<td>Pints / day</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In some cases you may want to size the dehumidifier for less than the full latent load, assuming that the air-conditioner (when sized
|
||||
properly) is going to cover the full latent load when at peak design temperatures and that the peak latent period for your area is during
|
||||
peak cooling demand.</p>
|
||||
<h2>Example</h2>
|
||||
<p>Let’s imagine we have done a load calculation and have a latent load of 4,334 BTU/h. So, plugging that into our above formula.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>Or if we just want to cover the latent capacity at 85% of the full latent load.</p>
|
||||
<p><img src="/articles/images/2023-09-15-pints-per-day-example2.png" alt="pints-per-day-formula-example" /></p>
|
||||
<p>This gives us some guidance that we would need to select a dehumidifier that is rated for 84-99 pints per day, depending on which condition
|
||||
we wanted to use.</p>
|
||||
<p>I don’t feel oversizing a dehumidifier, within reason, is that problematic (or at least it does not come with the same problems as an
|
||||
oversized air conditioner), so I would personally go for a 100-120 pint per day model dehumidifier in this application.</p>
|
||||
<p>Thanks for reading!</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:3000/articles/2023/pounds-of-water-removed/</id>
|
||||
<title>Pounds of Water Removed</title>
|
||||
<updated>2025-02-20T16:43:21Z</updated>
|
||||
<content type="html"><p>This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).</p>
|
||||
<p>This is useful in the field when you want to calculate the amount of moisture removed from an air-conditioner or a dehumidifier. This
|
||||
article assumes that you have knowledge of a psychrometric chart. If you do not have basic knowledge of the psychrometric chart, then here
|
||||
are a couple articles to familiarize yourself.</p>
|
||||
<h2>Articles</h2>
|
||||
<ul>
|
||||
<li><a href="https://hvacrschool.com/understand-dew-point-absolute-moisture-right-side-psych-chart/">Understand Dew-Point</a></li>
|
||||
<li><a href="https://hvacrschool.com/the-impact-of-adding-or-removing-water-from-air/">Impact of Adding or Removing Water from Air</a></li>
|
||||
</ul>
|
||||
<h2>Scenario</h2>
|
||||
<p>Let’s imagine that we have an air-conditioner that has the following measurements taken:</p>
|
||||
<ul>
|
||||
<li>Return Air: 75° / 50% RH</li>
|
||||
<li>Supply Air: 55° / 81% RH</li>
|
||||
</ul>
|
||||
<p>We plot the two values on the psychrometric chart (black line represents the return air conditions and blue line represents the supply air
|
||||
conditions).</p>
|
||||
<p><img src="/articles/images/2023-09-08-pounds-of-water-removed.png" alt="chart" /></p>
|
||||
<p>We start by finding the corresponding dry-bulb temperature at the bottom of the chart and draw a straight line up to where it intersects the
|
||||
relative humidity curve. After that we draw a straight line to the right side of the psychrometric chart to find the grains of moisture per
|
||||
pound of air.</p>
|
||||
<p>This gives us the following values:</p>
|
||||
<ul>
|
||||
<li>Return Air: 66 gr/lb</li>
|
||||
<li>Supply Air: 52 gr/lb</li>
|
||||
</ul>
|
||||
<p>We can then use the following formula to calculate the pounds of water removed.</p>
|
||||
<p><img src="/articles/images/2023-09-08-formula.png" alt="formula" /></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>Where</strong></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>W</strong></td>
|
||||
<td><em>Weight of water in pounds per hour</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>4.5</strong></td>
|
||||
<td><em>Constant based on density / specific heat of moist air</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CFM</strong></td>
|
||||
<td><em>Airflow in cubic feet per minute</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>∆G</strong></td>
|
||||
<td><em>Difference in grains of moisture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>7000</strong></td>
|
||||
<td><em>Constant based on grains of moisture in saturated air</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Solution</h2>
|
||||
<p>First, we solve for the difference in grains between the two air streams.</p>
|
||||
<p>∆G = 66 - 52 = 14</p>
|
||||
<p>Next, we’ve measured our airflow and have determined to have <strong>797 CFM</strong> of airflow across the evaporator coil, so we can substitute our
|
||||
values into the formula.</p>
|
||||
<p><img src="/articles/images/2023-09-08-solution.png" alt="solution" /></p>
|
||||
<p>So, we are removing about 7 pounds of water per hour at these conditions.</p>
|
||||
<p>Another thing to note is that 1 pound of water is approximately 1 pint of water, which can be useful when working with dehumidifiers that
|
||||
can often be rated in pints per day.</p>
|
||||
<p>I hope you’ve found this article helpful, thanks for reading!</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -68,6 +68,33 @@ The degradation of SEER is due to fouling of the evaporator coil with dirt and
|
||||
refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/sizing-dehumidifier-by-latent-load/">Dehumidifier Sizing by Latent Load</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 15, 2023</span>267 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/design/">design</a>, <a href="/articles/tag/formulas/">formulas</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/sizing-dehumidifier-by-latent-load/">This is a quick article to show how to calculate the size of dehumidifier needed based on the latent load of a building. This is useful if
|
||||
you’ve done a load calculation and know the latent load of the structure.
|
||||
Formulas
|
||||
The formula above is used to...</a>
|
||||
</p>
|
||||
</section>
|
||||
<section class="mb-10">
|
||||
<h1 class="text-2xl font-bold mb-2">
|
||||
<a class="[&:hover]:border-b border-orange" href="/articles/2023/pounds-of-water-removed/">Pounds of Water Removed</a>
|
||||
</h1>
|
||||
<div class="text-gray gray-links text-sm">
|
||||
<span class="border-r border-gray pr-2 mr-2">September 08, 2023</span>381 words, posted in <a href="/articles/tag/hvac/">HVAC</a>, <a href="/articles/tag/formulas/">formulas</a>, <a href="/articles/tag/psychrometric-chart/">psychrometric-chart</a>, <a href="/articles/tag/psychrometrics/">psychrometrics</a> and <a href="/articles/tag/tech-tip/">tech-tip</a>
|
||||
</div>
|
||||
<p class="mt-4">
|
||||
<a href="/articles/2023/pounds-of-water-removed/">This is an article that shows how to calculate the pounds of water removed from an air stream, given the entering conditions (return air
|
||||
stream) and the outlet conditions (supply air stream).
|
||||
This is useful in the field when you want to calculate the...</a>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer container text-gray gray-links border-t border-light text-center pt-6 mt-8 text-sm">
|
||||
<p>
|
||||
@@ -89,6 +116,12 @@ refrigerant charge losses. It should be noted that this is not true for...</a>
|
||||
|
|
||||
<a href="mailto:michael@mhoush.com" rel="nofollow">Email</a>
|
||||
</p>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/keep-markup/prism-keep-markup.min.js">
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js">
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user