<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Assorted Nerdery</title>
    <link>https://bostonenginerd.com/</link>
    <description>Recent content on Assorted Nerdery</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Wed, 20 Nov 2024 22:49:53 -0500</lastBuildDate>
      <atom:link href="https://bostonenginerd.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Boston Public Library</title>
      <link>https://bostonenginerd.com/posts/bostonlibrary/</link>
      <pubDate>Sat, 27 Sep 2025 20:09:26 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/bostonlibrary/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Cool discovery&lt;/strong&gt;: Anyone who has their primary residence in the Commonwealth of&#xA;Massachusetts, works in Massachusetts, or owns residential property in the&#xA;Commonwealth can &lt;a href=&#34;https://www.bpl.org/your-library-card/&#34;&gt;apply for and receive an eCard for the Boston Public Library.&lt;/a&gt;&#xA;You don&amp;rsquo;t even have to physically show up at any of their branches to get these&#xA;benefits.&lt;/p&gt;&#xA;&lt;p&gt;The library provides a ton of digital resources to Massachusetts residents.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Free access to the &lt;a href=&#34;https://www.bpl.org/resources-types/newspapers/&#34;&gt;Boston Globe and Boston Herald&lt;/a&gt;, NYTimes and WSJ websites.&lt;/li&gt;&#xA;&lt;li&gt;Access to &lt;a href=&#34;https://www.economist.com&#34;&gt;The Economist&lt;/a&gt;,&lt;a href=&#34;https://www.csmonitor.com&#34;&gt;Christian Sciene Monitor&lt;/a&gt;, and many other magazines through &lt;a href=&#34;https://ezproxy.bpl.org/login?url=https://www.pressreader.com&#34;&gt;Pressreader&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Streaming music through a service called &lt;a href=&#34;https://bostonpl.freegalmusic.com/&#34;&gt;Freegal&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Streaming movies and television shows through a bunch of services like&lt;a href=&#34;https://boston.kanopy.com/&#34;&gt;Kanopy&lt;/a&gt;,&lt;a href=&#34;https://biblioplus.com/library/bpl.org&#34;&gt; and biblio+&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lots of ebooks and other magazines through&lt;a href=&#34;https://bpl.overdrive.com&#34;&gt;Overdrive / Libby&lt;/a&gt;,&lt;a href=&#34;https://bostonpl.boundless.baker-taylor.com/ng/view/library&#34;&gt;Boundless&lt;/a&gt;,&lt;a href=&#34;https://ezproxy.bpl.org/login?url=https://search.ebscohost.com/login.aspx?authtype=ip,cpid&amp;amp;custid=s8464198&amp;amp;groupid=main&amp;amp;profile=eon&#34;&gt;Flipster&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.bpl.org/resource/oreilly/&#34;&gt;Technical books, audiobooks and online courses from O&amp;rsquo;Reilly&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There&amp;rsquo;s even a free &lt;a href=&#34;https://www.bpl.org/resource/headspace/&#34;&gt;Headspace membership&lt;/a&gt; available for those who are in need of meditation!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bpl.org/popular-online-resources/&#34;&gt;Go check it the online resources out!&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>One year with PV</title>
      <link>https://bostonenginerd.com/posts/pvoneyear1/</link>
      <pubDate>Sat, 21 Dec 2024 11:32:25 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/pvoneyear1/</guid>
      <description>&lt;p&gt;In October 2023, I had 23 solar panels installed on my roof in the Boston area.&#xA;This post series will summarize our experience with the system thus far.&lt;/p&gt;&#xA;&lt;h2 id=&#34;procurement-process&#34;&gt;Procurement Process&lt;/h2&gt;&#xA;&lt;p&gt;We went with a company out of Arlington, Massachusetts, for the project.&#xA;I  found the company using &lt;a href=&#34;https://www.energysage.com&#34;&gt;EnergySage&lt;/a&gt;, a quote aggregator. EnergySage is  a&#xA;convenient way to get multiple quotations from different local companies.&#xA;There are others, including &lt;a href=&#34;https://www.solar.com&#34;&gt;Solar.com&lt;/a&gt;, who provide a similar service.&#xA;EnergySage is a Boston company, so I preferentially chose them.&lt;/p&gt;&#xA;&lt;p&gt;The quoting process with EnergySage is straightforward. You put in information&#xA;about your house, which gets farmed out to several companies to provide&#xA;budgetary quotations. They provide a convenient comparison table for the quotes.&#xA;In my case, I received seven quotations back, with more or less equivalent&#xA;equipment. I selected a subset of these to pursue further &amp;ndash; some quotes were&#xA;well out of line with the others. Two of the vendors were very responsive, and I&#xA;selected one of them.&lt;/p&gt;&#xA;&lt;p&gt;The nice thing about EnergySage is that their platform shields you from&#xA;receiving spam calls. You can communicate with the companies through&#xA;their portal before providing your contact information to the short-listed&#xA;companies. I started seriously considering PV in 2021 and went through a round&#xA;of project quotations before pulling the trigger in 2023.&lt;/p&gt;&#xA;&lt;h2 id=&#34;system-description-and-costs&#34;&gt;System Description and Costs&lt;/h2&gt;&#xA;&lt;p&gt;In August 2023, the winning quotation priced the system at $3.26/W for Hanwa&#xA;Q-Cells 405W panels paired with Enphase IQ8-M inverters.&lt;/p&gt;&#xA;&lt;p&gt;Based on a report released by EnergySage (&lt;a href=&#34;#citeproc_bib_item_1&#34;&gt;“Energy Sage Marketplace Intel Report H1 2024” n.d.&lt;/a&gt;) in&#xA;October 2024, I paid what has become the average cost today. If you&amp;rsquo;re&#xA;interested in PV, this report is a good read on the current market situation.&#xA;It&amp;rsquo;s incredible how cheap solar can be in areas that don&amp;rsquo;t have good net&#xA;metering policies and cheap labor.&lt;/p&gt;&#xA;&lt;div class=&#34;table-caption&#34;&gt;&#xA;  &lt;span class=&#34;table-number&#34;&gt;Table 1:&lt;/span&gt;&#xA;  System Costs and Rebates&#xA;&lt;/div&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Milestone&lt;/th&gt;&#xA;          &lt;th&gt;Amount ($USD)&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Down Payment&lt;/td&gt;&#xA;          &lt;td&gt;1000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;One month Prior&lt;/td&gt;&#xA;          &lt;td&gt;14679&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Installation Complete&lt;/td&gt;&#xA;          &lt;td&gt;14697&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Permission to Operate&lt;/td&gt;&#xA;          &lt;td&gt;1000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Total Outlay&lt;/td&gt;&#xA;          &lt;td&gt;30376&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Incentives&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Federal Investment Tax Credit (30%)&lt;/td&gt;&#xA;          &lt;td&gt;-  9112&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Massachusetts Tax Credit&lt;/td&gt;&#xA;          &lt;td&gt;-  1000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Net Cost&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;20264&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;After tax credits, the system was around $20k. Both tax credits came&#xA;back in early 2024 when I submitted my taxes for 2023. The tax credit is&#xA;non-refundable, meaning you need to have a tax liability larger than it&#xA;to take full advantage, though &lt;a href=&#34;https://www.energy.gov/eere/solar/homeowners-guide-federal-tax-credit-solar-photovoltaics&#34;&gt;it is possible to carry it over to a subsequent&#xA;year&lt;/a&gt;.(&lt;a href=&#34;#citeproc_bib_item_2&#34;&gt;“Homeowner’s Guide to the Federal Tax Credit for Solar Photovoltaics” n.d.&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Other related expenses include:&lt;/p&gt;&#xA;&lt;div class=&#34;table-caption&#34;&gt;&#xA;  &lt;span class=&#34;table-number&#34;&gt;Table 2:&lt;/span&gt;&#xA;  Other Related Expenses&#xA;&lt;/div&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Item&lt;/th&gt;&#xA;          &lt;th&gt;Cost&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;New Roof&lt;/td&gt;&#xA;          &lt;td&gt;$14000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Electrical Panel Upgrade&lt;/td&gt;&#xA;          &lt;td&gt;$3500&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Although necessary for the project, these expenses are not formally considered&#xA;part of it. My roof already needed replacement, and the electrical panel&#xA;replacement happened as part of a broader household electrification effort.&#xA;Including these as part of the ROI calculation is not fair.&lt;/p&gt;&#xA;&lt;p&gt;The final design for my system included 23 &lt;a href=&#34;https://us.qcells.com/q-peak-duo-blk-ml-g10/&#34;&gt;Hanwa Q-Cells Q.PEAK DUO BLK ML-G10+&lt;/a&gt;&#xA;panels. These panels are paired with &lt;a href=&#34;https://enphase.com/store/microinverters/iq8-series/iq8m-microinverter&#34;&gt;Enphase IQ8M&lt;/a&gt; microinverters to reduce the&#xA;amount of clipping. The inverters have a maximum output power of 325W, which is&#xA;about 25% less than the solar panel&amp;rsquo;s maximum output. Even the panels can cause&#xA;clipping on the inverters, this is occurs rarely. Panels are usually&#xA;not installed in ideal locations &amp;ndash; the panels are not facing due south or on a&#xA;tracker, they&amp;rsquo;re not at the perfect angle, etc.&lt;/p&gt;&#xA;&lt;p&gt;Clipping on our system has happened since the inverters are undersized compared&#xA;to the panels, but it&amp;rsquo;s not common. Figure &lt;a href=&#34;#figure--fig:clipping&#34;&gt;1&lt;/a&gt; shows an example of when&#xA;this happens. It took some digging to find this in my archives.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;figure--fig:clipping&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;  &#xA;  &lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/posts/pvoneyear1/data_clipping.svg&#34; loading=&#34;lazy&#34; alt=&#34;An example of power production over a day where clipping is observed. You can see between the red vertical lines, the power output is flat indicating that system produces the maximum power.&#34;&gt;&#xA;&lt;figcaption&gt;&#xA;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;An example of power production over a day showing clipping. The power output is flat between the red vertical lines, indicating that the system is producing the maximum amount of power.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;process&#34;&gt;Process&lt;/h2&gt;&#xA;&lt;p&gt;After signing the contract to move forward with the system, a representative&#xA;from the vendor came out to visit my home and make some measurements of the&#xA;roof. They took photos of the electrical panel and looked in the attic at the&#xA;rafters to check the spacing and size.&lt;/p&gt;&#xA;&lt;p&gt;After this, the engineering team at the vendor got to work and submitted a pile&#xA;of paperwork to the utility and my city to obtain the necessary approvals and&#xA;permits. The design underwent multiple iterations due to some new fire code&#xA;requirements described in &lt;a href=&#34;#headaches&#34;&gt;Headaches&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The timeline from signing the papers to getting Permission to Operate (PTO) was&#xA;108 days. The actual installation took only two days.&lt;/p&gt;&#xA;&lt;p&gt;During the installation, there were two inspection steps. The city is supposed&#xA;to inspect the physical installation to ensure that all setbacks are maintained&#xA;and the system properly ties into the framing. They are also required to&#xA;sign off on an electrical inspection after everything is tied in. After this&#xA;inspection, the installer can ask the utility to make the meter swap and grant&#xA;permission to operate the system.&lt;/p&gt;&#xA;&lt;p&gt;In my case, I believe that the city waived the physical inspection of the&#xA;equipment, but they did come out for the electrical inspection.&lt;/p&gt;&#xA;&lt;p&gt;Kudos to the technician from Eversource for working Black Friday and swapping my&#xA;meter out.&lt;/p&gt;&#xA;&#xA;&#xA;  &#xA;  &lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/posts/pvoneyear1/pv12mo/timeline.svg&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;headaches&#34;&gt;Headaches&lt;/h2&gt;&#xA;&lt;h3 id=&#34;setback-requirements&#34;&gt;Setback Requirements&lt;/h3&gt;&#xA;&lt;p&gt;On December 9, 2022, the Commonwealth of Massachusetts adopted the 2021 NFPA 1 fire code. The new edition makes the access requirements on the&#xA;roof stricter than in the past.A 36&amp;quot; walkway on the roof plane is now required, and the setback from the roof ridge should also be 36&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Section 11.12 describes the requirements for photovoltaic systems, but due to&#xA;some crazy licensing restrictions I cannot copy the relevant sections here.&#xA;They may be &lt;a href=&#34;https://www.nfpa.org/codes-and-standards/nfpa-1-standard-development/1&#34;&gt;viewed here&lt;/a&gt; for free, but an account is necessary. They also have&#xA;ridiculous password requirements, considering it&amp;rsquo;s a free account.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, this new code means we had to install a smaller array than&#xA;the initial design. We lost four panels from the south-facing portion of the&#xA;array and had to put some panels onto a less productive face.&lt;/p&gt;&#xA;&lt;h3 id=&#34;equipment-problems&#34;&gt;Equipment Problems&lt;/h3&gt;&#xA;&lt;p&gt;Thus far, we had one issue with the system at installation. All of the&#xA;microinverters communicate with a piece of equipment called the IQ Combiner 4.&lt;/p&gt;&#xA;&lt;p&gt;This unit manages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Monitoring the grid connection to shut off the power if the grid drops.&lt;/li&gt;&#xA;&lt;li&gt;Communicating with the microinverters underneath each panel.&lt;/li&gt;&#xA;&lt;li&gt;Monitoring the power output and, optionally,  consumption from the electrical panel&lt;/li&gt;&#xA;&lt;li&gt;Sending data to the Enphase Enlighten monitoring system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The Ethernet connection on the IQ Combiner 4 unit was faulty. The Enphase remote support RMA&amp;rsquo;d a board for us and, the installer replaced it during a follow up visit.&lt;/p&gt;&#xA;&lt;p&gt;Since then, we have had zero issues.&lt;/p&gt;&#xA;&lt;h2 id=&#34;next-steps&#34;&gt;Next Steps&lt;/h2&gt;&#xA;&lt;p&gt;In the next post, we&amp;rsquo;ll review the system&amp;rsquo;s electrical performance, and in the third post in this series,  we&amp;rsquo;ll cover the financial performance.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;&#xA;&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&#34;csl-bib-body&#34;&gt;&#xA;  &lt;div class=&#34;csl-entry&#34;&gt;&lt;a id=&#34;citeproc_bib_item_1&#34;&gt;&lt;/a&gt;“Energy Sage Marketplace Intel Report H1 2024.” n.d. Accessed November 21, 2024. &lt;a href=&#34;https://www.energysage.com/data/&#34;&gt;https://www.energysage.com/data/&lt;/a&gt;.&lt;/div&gt;&#xA;  &lt;div class=&#34;csl-entry&#34;&gt;&lt;a id=&#34;citeproc_bib_item_2&#34;&gt;&lt;/a&gt;“Homeowner’s Guide to the Federal Tax Credit for Solar Photovoltaics.” n.d. Energy.gov. Accessed November 27, 2024. &lt;a href=&#34;https://www.energy.gov/eere/solar/homeowners-guide-federal-tax-credit-solar-photovoltaics&#34;&gt;https://www.energy.gov/eere/solar/homeowners-guide-federal-tax-credit-solar-photovoltaics&lt;/a&gt;.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Hybrid Water Heater Review</title>
      <link>https://bostonenginerd.com/posts/waterheater/</link>
      <pubDate>Sat, 10 Aug 2024 23:00:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/waterheater/</guid>
      <description>&lt;p&gt;One of the recurring joys of home ownership is plumbing. In 2021, the water&#xA;heater in our home developed a small leak. Fortunately, the leak was small&#xA;enough where we had some time to work out the next steps. Our long-term goal for&#xA;our home is fully run on electricity for both comfort and climate reasons.&lt;/p&gt;&#xA;&lt;p&gt;The domestic hot water system that existed in the home when we bought it used&#xA;the indirect heating loop in the oil boiler and an unplugged electrical water&#xA;heater as a storage tank. The boiler was setup to maintain a set point between&#xA;120F and 170F all year round. Looking at the summer usage of the boiler, we used&#xA;between 0.5 and 1 gallon of oil per day to keep the boiler hot. Extrapolating&#xA;this, I estimate that heating water was burning around a full tank of oil per&#xA;year &amp;ndash; around $900/yr at the $3.50/gal price in Feb 2022.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;p&gt;The first step in installing the HPWH was to have our electrician run a 240V 30A&#xA;circuit to the location. Our electrician did this some weeks prior to the water&#xA;heater&amp;rsquo;s arrival. Although the water heater&amp;rsquo;s normal consumption is around 400W,&#xA;it has traditional heating elements which turn on in a few different scenarios:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hot water utilization is too high for the heatpump to keep up&lt;/li&gt;&#xA;&lt;li&gt;The ambient temperature is too low in the area the unit is installed.&lt;/li&gt;&#xA;&lt;li&gt;The heat pump has some mechanical problem or coolant leak which prevents the&#xA;heat pump from operating.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The subsequent steps were performed by a local plumber. The existing storage&#xA;tank and hardware were removed , and the indirect loop on my boiler was capped&#xA;off. The new hot water heater was connected to the existing hot water line.&#xA;Finally, a condensate pump and flexible tubing were connected to move the&#xA;condensate created by the cold side of the heat pump to a drain.&lt;/p&gt;&#xA;&lt;p&gt;The version of the water heater that I bought has an automatic shutoff valve and&#xA;a leak detection circuit, so we installed the unit onto a drip pan. This will&#xA;contain any water which may spill from a leak, and concentrate it so the leak&#xA;detection circuit shuts off the cold water input.&lt;/p&gt;&#xA;&lt;p&gt;As I recall, the &lt;a href=&#34;https://files.myrheem.com/webpartners/ProductDocuments/2679665F-4FDA-42AC-8DBF-A938F4CA2FAC.pdf&#34;&gt;manual&lt;/a&gt; suggests connecting the water heater to the rest of the&#xA;house using a flexible line, however the plumber who installed it used rigid&#xA;copper for the connections. In addition, the manual suggests using a&lt;a href=&#34;https://en.wikipedia.org/wiki/Heat_trap&#34;&gt; heat trap&lt;/a&gt;&#xA;on the cold water input. This was not done in my installation, but is on my&#xA;to-do list to correct. I&amp;rsquo;d suggest reading the manual and reviewing the&#xA;installation plan with the installer prior to commencing work. This isn&amp;rsquo;t to&#xA;complain about our installer &amp;ndash; they were good to work with and did clean work&#xA;at a reasonable price on a fast schedule.&lt;/p&gt;&#xA;&lt;h2 id=&#34;costs&#34;&gt;Costs&lt;/h2&gt;&#xA;&lt;p&gt;It always annoys me when I read great writeups of projects, and they skip the&#xA;installation costs. Of course, this happened in 2021, and prices are strongly location dependent.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Item&lt;/th&gt;&#xA;          &lt;th&gt;Manufacturer&lt;/th&gt;&#xA;          &lt;th&gt;Model&lt;/th&gt;&#xA;          &lt;th&gt;Price&lt;/th&gt;&#xA;          &lt;th&gt;Store&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Water Heater&lt;/td&gt;&#xA;          &lt;td&gt;Rheem&lt;/td&gt;&#xA;          &lt;td&gt;Proterra 50gal XE50T10HS45U0&lt;/td&gt;&#xA;          &lt;td&gt;$1514.13&lt;/td&gt;&#xA;          &lt;td&gt;Home Depot&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Drip Pan&lt;/td&gt;&#xA;          &lt;td&gt;Everbuilt&lt;/td&gt;&#xA;          &lt;td&gt;24&amp;quot; Al Drip Pan&lt;/td&gt;&#xA;          &lt;td&gt;$20.98&lt;/td&gt;&#xA;          &lt;td&gt;Home Depot&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Condensate pump&lt;/td&gt;&#xA;          &lt;td&gt;Little Giant&lt;/td&gt;&#xA;          &lt;td&gt;VCMX-20ULST&lt;/td&gt;&#xA;          &lt;td&gt;$49.95&lt;/td&gt;&#xA;          &lt;td&gt;Home Depot&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;At the time, the Chase Sapphire Card had a Pay Yourself Back option at Home&#xA;Depot. I was able to use credit card points to pay for the water heater and the&#xA;other items.&lt;/p&gt;&#xA;&lt;p&gt;The installation costs:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Item&lt;/th&gt;&#xA;          &lt;th&gt;Cost&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Electrical Circuit&lt;/td&gt;&#xA;          &lt;td&gt;~$300&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Plumbing and Disposal&lt;/td&gt;&#xA;          &lt;td&gt;$800&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;In 2021 Massachusetts, &lt;a href=&#34;https://www.masssave.com/&#34;&gt;MassSave&lt;/a&gt;, the state efficiency program offered a $600&#xA;rebate if you installed a heat pump water heater. Since then, both the state and&#xA;feds offer even more generous rebates to install these efficient systems.&lt;/p&gt;&#xA;&lt;h2 id=&#34;performance&#34;&gt;Performance&lt;/h2&gt;&#xA;&lt;p&gt;We have owned the water heater for approximately three years at the time of&#xA;writing. The elements on the tank kick on ~5 times per month on average, mostly&#xA;during the wintertime when multiple sequential showers happen. The elements have&#xA;been turning on more frequently since last June 2023 when I replaced our highly&#xA;efficient shower head with a model which uses a much higher flow. You can see in&#xA;the plot below that the summertime usage is higher after this. One item to note&#xA;is that the power monitoring system was not hooked up during August / September&#xA;2022 while our electrical panel was getting upgraded.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;figure--fig:waterheater-power&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;  &#xA;  &lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/posts/waterheater/energy.svg&#34; loading=&#34;lazy&#34; alt=&#34;A figure showing power utilization over time. The power goes from ~40kWh per month to over 80kWh/month in the wintertime.&#34;&gt;&#xA;&lt;figcaption&gt;&#xA;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;Power usage since installation&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;It&amp;rsquo;s also interesting to look at a single cycle. In the plot below, you can see how the power used by the water heater increases with time as the water in the tank gets hotter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;figure--fig:waterheater-cycle&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;  &#xA;  &lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/posts/waterheater/one.svg&#34; loading=&#34;lazy&#34; alt=&#34;A figure showing the power usage over one cycle. The power usage increases from 0 to around 400W, with the amount increasing to 450W over the approximately one hour cycle.&#34;&gt;&#xA;&lt;figcaption&gt;&#xA;&lt;span class=&#34;figure-number&#34;&gt;Figure 2: &lt;/span&gt;Power usage during a heating cycle&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Finally, this is a plot of a water heating cycle where the electric elements&#xA;kicked on during a particularly long heating cycle during the winter. I&amp;rsquo;m not&#xA;certain what was happening at this time, but I suspect several showers were&#xA;taken along with dishes and laundry. There are multiple times where the HPWH&#xA;power usage goes down &amp;ndash; indicating that the temperature in the tank is lower.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;figure--fig:waterheater-element&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;  &#xA;  &lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/posts/waterheater/element.svg&#34; loading=&#34;lazy&#34; alt=&#34;A figure showing the power usage over one heavy day of usage. The water heater kicks on the electric elements for around 1 hour, causing a large spike in energy consumption up to 5000W.&#34;&gt;&#xA;&lt;figcaption&gt;&#xA;&lt;span class=&#34;figure-number&#34;&gt;Figure 3: &lt;/span&gt;Power usage during a heating cycle&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h3 id=&#34;carbon-footprint&#34;&gt;Carbon Footprint&lt;/h3&gt;&#xA;&lt;p&gt;On another project, we calculated that our old boiler system used approximately&#xA;a full tank of oil each year. This was done using data from a &lt;a href=&#34;https://www.smartoilgauge.com&#34;&gt;Smart Oil Gauge&lt;/a&gt;&#xA;which reports the oil level in my tank hourly all year round. We looked back at&#xA;the usage from the summertime before we replaced the water storage tank with our&#xA;HPWH, and extrapolated the usage from that to the full year. Not exactly a&#xA;precise measurement, given that the boiler is on in the winter time anyway but&#xA;it&amp;rsquo;s a reasonable approximation.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://www.eia.gov/environment/emissions/co2_vol_mass.php&#34;&gt;Energy Information Administration publishs the carbon emission equivalent&#xA;for a number of fuels.&lt;/a&gt; Diesel or Fuel oil releases approximately 22.5 pounds of&#xA;carbon dioxide per gallon. Using the estimation that heating water for domestic&#xA;use burned a full 275 gallon tank of oil annually, we can calculate that hot&#xA;water caused around three tons of carbon emissions from my household.&lt;/p&gt;&#xA;&lt;p&gt;EIA also publishes the carbon intensity of the &lt;a href=&#34;https://www.eia.gov/electricity/state/massachusetts/&#34;&gt;Massachusetts grid&lt;/a&gt; as around&#xA;952lbs per MWh. Our water heater used 700kWh (0.7MWh) in 2024, making our carbon&#xA;dioxide emissions from the HPWH around 666 lbs of carbon &amp;ndash; or around an 89%&#xA;reduction in carbon dioxide! We have a PPA agreement in place to purchase 100%&#xA;renewable power, which should reduce that further &amp;ndash; though that&amp;rsquo;s mostly an&#xA;accounting trick. In addition, we have solar panels on our roof which should&#xA;reduce our usage further.&lt;/p&gt;&#xA;&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been quite happy with our Rheem Proterra HPWH so far. Others online seem&#xA;to have reliability issues with the newer units, but we have not encountered any&#xA;problem with ours yet. Our unit provides the hot water that we need reliably and&#xA;efficiently. Hopefully we will not have to exercise the 10 year warranty!&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Temporarily Enabling Analytics</title>
      <link>https://bostonenginerd.com/posts/cloudflareanalytics/</link>
      <pubDate>Mon, 04 Sep 2023 14:00:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/cloudflareanalytics/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m trying an experiment with Cloudflare analytics and have enabled it on this page.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve enabled a Javascript beacon on the page footer which supposedly allows me to collect pageviews.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.cloudflare.com/web-analytics/&#34;&gt;According to Cloudflare&lt;/a&gt;, this beacon plays nice with keeping readers information private.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cloudflare Web Analytics does not use any client-side state, such as cookies or localStorage, to collect usage metrics. We also don’t “fingerprint” individuals via their IP address, User Agent string, or any other data for the purpose of displaying analytics.&lt;/p&gt;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>ELECTRIFY ALL THE THINGS!</title>
      <link>https://bostonenginerd.com/posts/electrification/</link>
      <pubDate>Fri, 13 May 2022 16:00:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/electrification/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re coming here from the Chelsea Research Festival, I&amp;rsquo;ll be uploading more information about the project in the coming days.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>T-Mobile Home ISP Service Review with OpenWRT</title>
      <link>https://bostonenginerd.com/posts/tmobile-isp/</link>
      <pubDate>Thu, 20 May 2021 17:39:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/tmobile-isp/</guid>
      <description>&lt;p&gt;Comcast and I have long had a strained relationship. I recognize that the&#xA;service they&amp;rsquo;ve offered in the houses and apartments that I&amp;rsquo;ve lived in has been&#xA;reliable. However, I&amp;rsquo;ve never been a big fan of their business and billing&#xA;practices.&lt;/p&gt;&#xA;&lt;p&gt;For example, I purchased my own DOCSIS 3.0 cable modem some years ago when I&#xA;first got their internet service. Some months in, I noticed that they were&#xA;charging me for a cable modem rental. When I contacted them about this, they&#xA;were insistent that I prove to them that I bought my own cable modem before they&#xA;would refund the fees. I might recall this incorrectly, but I believe they had&#xA;requested that I fax my proof of purchase to a number as they did not have an&#xA;email address setup for such things.&lt;/p&gt;&#xA;&lt;p&gt;After that, it was smooth sailing until they charged me full freight for the&#xA;service and refused to honor the deal they had agreed to. At the end, we put&#xA;some reasonable deal in place for internet service for some years.&lt;/p&gt;&#xA;&lt;p&gt;Two years ago, my wife and I bought a house and transferred our service there.&#xA;As part of that, Comcast has an automatic contact renewal program on their&#xA;website. I agreed to an additional two years at the rate I was paying &amp;ndash; and&#xA;after a month or two, my bill went up dramatically. Apparently I had exposed&#xA;some glitch in their system which signed contracts on their behalf that they had&#xA;no intention to honor. After weeks of wasted time, I ended up giving in and&#xA;accepting crappier service for more money since I didn&amp;rsquo;t have any other option.&#xA;Looking back, I should have filed a complaint with the Massachusetts Attorney&#xA;General.&lt;/p&gt;&#xA;&lt;p&gt;Finally, in November 2020 Comcast announced both a &lt;a href=&#34;https://arstechnica.com/information-technology/2020/11/comcasts-data-cap-finally-goes-nationwide-in-expansion-to-12-more-states/&#34;&gt;1.2TB data caps&lt;/a&gt; and a&lt;a href=&#34;https://arstechnica.com/information-technology/2020/11/comcast-raising-tv-and-internet-prices-including-a-big-hike-to-hidden-fees/&#34;&gt; rate&#xA;hike&lt;/a&gt;. Coincidentally, our data usage somehow jumped up 20% the month after they&#xA;announced the data cap enforcement. I hadn&amp;rsquo;t been keeping track of our data&#xA;usage on our router at that time, so I can&amp;rsquo;t rule out that our usage did&#xA;actually increase - but the timing is suspicious.&lt;/p&gt;&#xA;&#xA;&lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/images/tmobile/comcast_data.jpg&#34; loading=&#34;lazy&#34; alt=&#34;Image of data usage showing a jump from 800GB to 1000TB after cap announcement&#34; width=&#34;400&#34; height=&#34;189&#34;&gt;&#xA;&lt;figcaption&gt;&#xA;&lt;span class=&#34;figure-number&#34;&gt;Figure 1: &lt;/span&gt;Comcast Data Usage&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Although Comcast did backpedal on the data cap enforcement, this has led me to&#xA;seek other options in earnest. In our city, you have two choices for&#xA;&amp;ldquo;broadband&amp;rdquo;: Verizon&amp;rsquo;s DSL and Comcast. In today&amp;rsquo;s age, with the &lt;a href=&#34;https://idlewords.com/talks/website_obesity.htm&#34;&gt;Website Obesity&#xA;Crisis&lt;/a&gt; in full swing 1.5Mbps is not going to cut it for a multi-user household.&#xA;There are some companies who service larger buildings like NetBlazr and Starry,&#xA;but they&amp;rsquo;re not interested in working with single family homes.&lt;/p&gt;&#xA;&lt;p&gt;Last December, I saw some news on Reddit about a new &lt;a href=&#34;https://www.t-mobile.com/isp&#34;&gt;home ISP service from&#xA;T-Mobile&lt;/a&gt;. They were targeting speeds of 50Mbps / 50Mbps upload and download&#xA;without data caps for $50 / mo inclusive of taxes, fees and including the&#xA;equipment. Our Comcast plan included ~100Mbps download with a paltry 5-7Mbps&#xA;upload for over $100/mo. The Comcast plan included a cable package which is&#xA;rarely used, but the bundle was cheaper than the standalone service.&lt;/p&gt;&#xA;&lt;p&gt;In January, we decided to give the T-Mobile service a try. Although their&#xA;eligibility webform said our address wasn&amp;rsquo;t eligible, the customer service&#xA;agents said that we were.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;The Nokia &amp;ldquo;trash can&amp;rdquo; looks like an extremely powerful device, but it&amp;rsquo;s crippled&#xA;by locked down software. There aren&amp;rsquo;t many knobs that you can turn on the device&#xA;&amp;ndash; perfect for my parents, but not great for someone who already has a network&#xA;setup.  In my use, I found there were a few issues:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No bridge mode, so it&amp;rsquo;s not exactly a 1:1 replacement for the cable modem.&#xA;The Nokia device pulls down the IP address from T-Mobile. Using your own&#xA;router connected to the Nokia router means you&amp;rsquo;re dealing with a double-NAT&#xA;setup.&lt;/li&gt;&#xA;&lt;li&gt;The T-Mobile DNS servers are a bit flaky. Configuring my device to use&#xA;another DNS server improved this by quite a bit.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&#34;https://www.bufferbloat.net&#34;&gt;Bufferbloat&lt;/a&gt; is pretty bad. When the connection starts to get saturated,&#xA;the ping times grow substantially.&lt;/li&gt;&#xA;&lt;li&gt;No ability to setup isolated networks for untrusted devices.&lt;/li&gt;&#xA;&lt;li&gt;The 5G connection seems to have flaked out over time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;&#xA;&lt;h3 id=&#34;network-overview&#34;&gt;Network Overview&lt;/h3&gt;&#xA;&lt;p&gt;I already have a reasonably well setup home network using an &lt;a href=&#34;https://www.openwrt.org&#34;&gt;OpenWRT Based&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.turris.com/en/omnia/overview/&#34;&gt;Turris Omnia Router&lt;/a&gt;, with separate IP ranges and WiFI networks for trusted&#xA;devices, guests and untrusted IoT devices. I also have a nice UniFi Access point&#xA;which covers my entire home quite well. Due to this I decided to accept the&#xA;potential headache from double-NAT and put the router behind the T-Mobile&#xA;device.&lt;/p&gt;&#xA;&lt;p&gt;T-Mobile doesn&amp;rsquo;t have enough IPv4 addresses available for all of its customers,&#xA;so they run an IPv6-first network and use Carrier Grade NAT (CGNAT) to allow&#xA;multiple users to share a single IPv4 address. This comes with a performance&#xA;hit. Fortunately IPv6-enabled websites are becoming more and more common. As&#xA;such, it is desirable for the devices on my network to be able to have a real&#xA;IPv6 address.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t pretend to understand IPv6 address allocation perfectly. There are&#xA;multiple ways in which your device can get an IP address. XFinity supported&#xA;&amp;ldquo;prefix delegation&amp;rdquo; which tells your router that it can feel free to hand out&#xA;addresses in a given range to all of the devices connected to it using a DHCPv6&#xA;server. Unfortunately, the T-Mobile router doesn&amp;rsquo;t allow delegation to your&#xA;router. Fortunately OpenWRT supports a &amp;ldquo;relay&amp;rdquo; mode for IPv6 address allocation.&#xA;In order to enable this, a few settings need to be changed from the default&#xA;settings:&lt;/p&gt;&#xA;&lt;h3 id=&#34;openwrt-omnia-configuration&#34;&gt;OpenWRT / Omnia Configuration&lt;/h3&gt;&#xA;&lt;p&gt;I had to make some configuration changes to the OpenWRT-based Turris Omnia in order to improve the performance.&lt;/p&gt;&#xA;&lt;h4 id=&#34;ipv6-relay&#34;&gt;IPV6 Relay&lt;/h4&gt;&#xA;&lt;p&gt;When I plugged the WAN port of the Turris Omnia into the LAN port on the Nokia&#xA;router, the Omnia pulled down an IPv4 and IPv6 address. The Omnia proceeded to&#xA;hand out private 192.168.1.0/24 IPv4 addresses to the clients connected to it,&#xA;but did not assign any IPv6 addresses to the clients.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://www.reddit.com/r/tmobileisp&#34;&gt;/r/tmobileisp&lt;/a&gt; subreddit has some good advice on occasion. I ran into a&#xA;&lt;a href=&#34;https://www.reddit.com/r/tmobileisp/comments/luslbf/how_are_you_getting_around_the_lack_of_ipv6/gpuuim4/&#34;&gt;comment from a user&lt;/a&gt; which provided some ideas on how to work around this. The&#xA;following code blocks show the LAN and WAN6 blocks of my /etc/config/dhcp file.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;code-snippet--WAN6&#34;&gt;&lt;/a&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config dhcp &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;lan&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option interface &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;lan&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option start &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;100&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option limit &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;150&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option leasetime &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;12h&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option dhcpv6 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option ra &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option ndp &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option ra_management &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list dhcp_option &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;6,192.168.1.1&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;src-block-caption&#34;&gt;&#xA;  &lt;span class=&#34;src-block-number&#34;&gt;&lt;a href=&#34;#code-snippet--WAN6&#34;&gt;Code Snippet 1&lt;/a&gt;:&lt;/span&gt;&#xA;  /etc/config/dhcp WAN settings&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a id=&#34;code-snippet--WAN6&#34;&gt;&lt;/a&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config dhcp &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wan6&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option dhcpv6 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option ra &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;        option ndp &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;relay&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option master &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option interface &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wan6&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option start &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;100&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option leasetime &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;12h&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option limit &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;150&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;src-block-caption&#34;&gt;&#xA;  &lt;span class=&#34;src-block-number&#34;&gt;&lt;a href=&#34;#code-snippet--WAN6&#34;&gt;Code Snippet 2&lt;/a&gt;:&lt;/span&gt;&#xA;  /etc/config/dhcp WAN6 settings&#xA;&lt;/div&gt;&#xA;&lt;p&gt;After making these changes, the devices on my network were all able to pull IPv6&#xA;addresses down. I believe that they&amp;rsquo;re assigned by the Nokia gateway.&lt;/p&gt;&#xA;&lt;h4 id=&#34;dns-settings&#34;&gt;DNS Settings&lt;/h4&gt;&#xA;&lt;p&gt;The T-Mobile DNS servers are a source of many complaints on Reddit. It seems that they can be a bit overloaded at times. Due to this, I wanted to configure my router&#xA;The Turris Omnia uses a non-standard DNS resolver called &lt;a href=&#34;https://www.knot-dns.cz/&#34;&gt;Knot&lt;/a&gt;. It&amp;rsquo;s written by&#xA;the same folks who built the Omnia. Most OpenWRT devices seem to use DNSmasq, so&#xA;most of the documentation online is based around this.&lt;/p&gt;&#xA;&lt;p&gt;In the &amp;ldquo;Foris&amp;rdquo; simplified management interface on the Omnia, you can select the DNS server you would like your router to use.&lt;/p&gt;&#xA;&lt;p&gt;I chose to use the Cloudflare DNS servers due to their &lt;a href=&#34;https://www.cloudflare.com/application/privacypolicy/&#34;&gt;reasonable privacy&#xA;policy.&lt;/a&gt; Their IPv4 endpoints are 1.1.1.1 and 1.0.0.1. In addition, they provide&#xA;IPv6 endpoints at 2606:4700:4700::1111 and 2606:4700:4700::1001. They also have&#xA;end points which provide adult content and malware filtering.&lt;/p&gt;&#xA;&lt;p&gt;I believe that I had to add in the IPv6 endpoints into the following file:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;code-snippet--WAN6&#34;&gt;&lt;/a&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;99_cloudflare.conf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Cloudflare (TLS)&amp;#34;&lt;/span&gt;-0t5f4rdas9T4rewq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;enable_tls&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;853&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;ipv4&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.1.1.1 1.0.0.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#3c3d38&#34;&gt;&lt;span&gt;ipv6&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2606:4700:4700::1111 2606:4700:4700::1001&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ca_file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/etc/ssl/certs/ca-certificates.crt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hostname&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cloudflare-dns.com&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;src-block-caption&#34;&gt;&#xA;  &lt;span class=&#34;src-block-number&#34;&gt;&lt;a href=&#34;#code-snippet--WAN6&#34;&gt;Code Snippet 3&lt;/a&gt;:&lt;/span&gt;&#xA;  /etc/resolver/dns_servers/99_cloudflare.conf&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;bufferbloat&#34;&gt;BufferBloat&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Bufferbloat&#34;&gt;Bufferbloat&lt;/a&gt; is a condition where the latency of a network connection increases&#xA;dramatically under load. This can make applications which are time sensitive&#xA;like video and voice chat malfunction when the network connection is loaded.&lt;/p&gt;&#xA;&lt;p&gt;The Nokia router does not seem to have any mitigations in place for this, so I&#xA;enabled Smart Queue Management (SQM) on the Omnia. In general, this trades off a&#xA;bit of maximum throughput for more consistent latency performance.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using the CAKE queueing algorithm, &lt;a href=&#34;https://openwrt.org/docs/guide-user/network/traffic-shaping/sqm&#34;&gt;as described in this article on the&#xA;OpenWRT website&lt;/a&gt;. This did make a notable improvement in the bufferbloat&#xA;performace.&lt;/p&gt;&#xA;&lt;h3 id=&#34;external-access&#34;&gt;External Access&lt;/h3&gt;&#xA;&lt;p&gt;Unfortunately, the T-Mobile service does not provide a publicly routable address&#xA;which means that remotely accessing local resources is a challenge. There are&#xA;online services which can mitigate this. One option would have been to connect&#xA;router to a server with a public IP address and use that host as a means of&#xA;connecting to local servers. There are some other commercial solutions. I&#xA;settled on one called Tailscale at the recommendation of tptacek on Hacker News.&#xA;So far it works well on all of my devices. Occasionally I will need to open the&#xA;app on my iOS devices to reconnect, but that&amp;rsquo;s all.&lt;/p&gt;&#xA;&lt;h2 id=&#34;concerns&#34;&gt;Concerns&lt;/h2&gt;&#xA;&lt;p&gt;Although T-Mobile has been reasonable enough to work with commercially, they&#xA;have had a history of concerning privacy practices. In 2018, &lt;a href=&#34;https://www.vice.com/en/article/d3mjvy/tmobile-phone-location-data-abuse-senator-ron-wyden&#34;&gt;they were caught&#xA;selling location data to data brokers who then resold to a number of unsavory&#xA;parties including bounty hunters.&lt;/a&gt; Supposedly this practice has stopped, but they&#xA;have not ever responded to my requests to confirm whom my location data was&#xA;shared with.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.vox.com/recode/22325420/t-mobile-verizon-att-ad-targeting-data&#34;&gt;In addition, they have recently launched an ad platform which leverages your&#xA;browsing history to target ads.&lt;/a&gt; There is an opt-out which I suggest everyone&#xA;take advantage of, but you shouldn&amp;rsquo;t need to opt-out to this kind of nonsense.&#xA;It should simply be illegal.&lt;/p&gt;&#xA;&lt;p&gt;With all of my complaints about Comcast, they were definitely better on this&#xA;front. Depending on how things evolve with T-Mobile, this might end up being a&#xA;reason to switch back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been running the service for approximately a month, and it&amp;rsquo;s been fine.&#xA;Good enough that we canceled our Comcast service. For whatever reason, we only&#xA;pull a 5G signal sporadically so most of our data are transferring over LTE.&#xA;Despite that, we get approximately 50Mpbs down / 50Mbps up rather consistently&#xA;when connected directly to the Nokia &amp;ldquo;trash can&amp;rdquo; either via Wifi or plugged in.&#xA;On the occasions when the device pulls a 5G connection, the download speed&#xA;increases to around 200Mbps.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m looking forward to seeing what T-Mobile brings us with future network and&#xA;software upgrades. I&amp;rsquo;m hoping that they will make positive steps to address the&#xA;privacy considerations.&lt;/p&gt;&#xA;&lt;p&gt;I think that our long term relationship with T-Mobile may hinge on their&#xA;improving their privacy practices. Hopefully they will come to the light and&#xA;start to protect customer data better.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Setting up a UPS for a home lab</title>
      <link>https://bostonenginerd.com/posts/home-ups/</link>
      <pubDate>Sat, 23 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://bostonenginerd.com/posts/home-ups/</guid>
      <description>&lt;p&gt;After a recent power outage at our house, I purchased a UPS to help keep the&#xA;internet online the next time. In addition, we noticed that when there was an&#xA;outage the power tended to come on and off multiple times before stabilizing.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been trying to buy products from brick and mortar stores rather than Amazon&#xA;due to the &lt;a href=&#34;https://www.latimes.com/business/technology/la-fi-tn-amazon-counterfeits-20180928-story.html&#34;&gt;prevalence of counterfeit products mixed in with legitimate goods.&lt;/a&gt; In&#xA;our area, &lt;a href=&#34;https://www.microcenter.com/&#34;&gt;Microcenter&lt;/a&gt; tends to be a decent option for computer and maker related&#xA;items. They offer a price match which removes the downside of purchasing in-person.&lt;/p&gt;&#xA;&lt;p&gt;I ended up purchasing a &lt;a href=&#34;https://www.cyberpowersystems.com/product/ups/battery-backup/le1000dg/&#34;&gt;Cyberpower LE1000DG UPS&lt;/a&gt;. There were other options, but&#xA;this one seemed reasonable enough. When I got it home, I discovered that there&#xA;was a USB port on it. This port allows a computer to monitor the status of the&#xA;UPS. I thought this was pretty neat, as it would allow me to automatically&#xA;cleanly power down devices selectively depending on how long the outage lasts&#xA;for.&lt;/p&gt;&#xA;&lt;p&gt;The router we use at home is a &lt;a href=&#34;https://www.turris.com/en/omnia/overview/&#34;&gt;Turris Omnia&lt;/a&gt;. &lt;a href=&#34;https://cz.nic&#34;&gt;CZ.NIC&lt;/a&gt;, a Czech ISP created the&#xA;device for use as the digital center for homes. The device has a moderately fast&#xA;CPU, generous RAM and eMMC memory and allows the use of an m-SATA SSD to expand&#xA;the storage available on the device. Having the high spec allows the router to&#xA;share a few roles like running a &lt;a href=&#34;https://www.wireguard.com&#34;&gt;Wireguard VPN&lt;/a&gt;, an &lt;a href=&#34;https://openvpn.net%20&#34;&gt;OpenVPN VPN&lt;/a&gt;, print server, or&#xA;&lt;a href=&#34;https://www.nextcloud.com&#34;&gt;NextCloud server&lt;/a&gt;. It even has the capability to run &lt;a href=&#34;https://www.linuxcontainers.org&#34;&gt;Linux Containers&lt;/a&gt; using LXD.&lt;/p&gt;&#xA;&lt;p&gt;The software on the devices is &lt;a href=&#34;https://www.openwrt.org&#34;&gt;OpenWRT&lt;/a&gt; based which means there is a lot of&#xA;packaged software available. One of the packages available is the &lt;a href=&#34;https://networkupstools.org/&#34;&gt;Network UPS&#xA;Tools (NUT)&lt;/a&gt; package. This package consists of two parts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;nut_server - a daemon which connects to the UPS hardware.&lt;/li&gt;&#xA;&lt;li&gt;nut_monitor - a daemon which periodically communicates with the nut_server to&#xA;get the status of the hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;&#xA;&lt;p&gt;Fortunately, OpenWRT packages the NUT software and provides a &lt;a href=&#34;https://openwrt.org/docs/guide-user/services/ups/software.nut&#34;&gt;nice wiki page&lt;/a&gt;. I find using the command line&#xA;interface more convenient than using the LuCi web interface to install and&#xA;configure packages.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; opkg update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; opkg install nut nut-common nut-upsmon nut-upscmd nut-server nut-driver-usbhid-ups&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;For space reasons, OpenWRT splits out the drivers from the NUT software. &lt;a href=&#34;https://networkupstools.org/stable-hcl.html&#34;&gt;The&#xA;driver / UPS pairings are on the NUT website&lt;/a&gt;. For the LE1000DG UPS, the correct&#xA;driver is the USB-HID one.&lt;/p&gt;&#xA;&lt;p&gt;After installing the software, we need to setup the configuration.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config driver_global &amp;#39;driver_global&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option user &amp;#39;nut&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config driver &amp;#39;ups&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option driver &amp;#39;usbhid-ups&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option port &amp;#39;auto&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option pollinterval &amp;#39;15&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option username &amp;#39;upsuser&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option password &amp;#39;1337p455w0rd&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option upsmon &amp;#39;master&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config listen_address&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option port &amp;#39;3493&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option address &amp;#39;192.168.1.1&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config upsd &amp;#39;upsd&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option maxage &amp;#39;15&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option statepath &amp;#39;/var/run/nut&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option maxconn &amp;#39;1024&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option runas &amp;#39;nut&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config upsmon &amp;#39;upsmon&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option hostsync &amp;#39;15&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option deadtime &amp;#39;25&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option notifycmd &amp;#39;/usr/sbin/sms.sh&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option onlinemsg &amp;#39;UPS %s on line power&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option onbattmsg &amp;#39;UPS %s on battery&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option lowbattmsg &amp;#39;UPS %s battery is low&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option fsdmsg &amp;#39;UPS %s: forced shutdown in progress&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option commokmsg &amp;#39;Communications with UPS %s established&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option commbadmsg &amp;#39;Communications with UPS %s lost&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option shutdownmsg &amp;#39;Auto logout and shutdown proceeding&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option replbattmsg &amp;#39;UPS %s battery needs to be replaced&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option nocommmsg &amp;#39;UPS %s is unavailable&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option noparentmsg &amp;#39;upsmon parent process died - shutdown impossible&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option lowbattnotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option commoknotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option commbadnotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option shutdownnotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option nocommnotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option noparentnotify &amp;#39;EXEC+SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list onlinenotify &amp;#39;EXEC&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list onlinenotify &amp;#39;SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list onbattnotify &amp;#39;EXEC&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list onbattnotify &amp;#39;SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list fsdnotify &amp;#39;EXEC&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list fsdnotify &amp;#39;SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list replbattnotify &amp;#39;EXEC&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        list replbattnotify &amp;#39;SYSLOG&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option upsname &amp;#39;ups&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option port &amp;#39;3493&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option powervalue &amp;#39;1&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option username &amp;#39;upsuser&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option password &amp;#39;1337p455w0rd&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        option hostname &amp;#39;192.168.1.1&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;In the upsmon configuration section, note the &amp;ldquo;notifycmd&amp;rdquo; line. This line calls&#xA;a user defined program to do something when an event happens. In my case, I&amp;rsquo;m&#xA;using &lt;a href=&#34;https://developer.flowroute.com/api/messages/v2.1/send-an-sms/&#34;&gt;Flowroute&amp;rsquo;s SMS API&lt;/a&gt; to send me a text when the power goes out and back on.&lt;/p&gt;&#xA;&lt;p&gt;The SMS script uses curl with the access token and API jey to send a message&#xA;passed in as an argument. The text of the message is from the &amp;ldquo;onlinemsg&amp;rdquo;,&#xA;&amp;ldquo;onbatterymsg&amp;rdquo; and other similar lines.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;set -euo pipefail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ACCESS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;API_ACCESS_TOKEN&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;KEY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;API_KEY&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl https://api.flowroute.com/v2.1/messages &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;-u $ACCESS:$KEY -X POST &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;-H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;-d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{\&amp;#34;to\&amp;#34;:\&amp;#34;TONUMBER\&amp;#34;\&amp;#34;,\&amp;#34;from\&amp;#34;:\&amp;#34;FROMNUMBER\&amp;#34;, \&amp;#34;body\&amp;#34;:\&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;}&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Replace the API_ACCESS_TOKEN, API_KEY, FROMNUMBER and TONUMBER with the appropriate values for your environment. So far this has worked quite well for me!&lt;/p&gt;&#xA;&lt;p&gt;Now that we have communication with the UPS and notifications sorted out, the&#xA;next step is to configure other computers running on the UPS to power down&#xA;safely when the power goes out. The threshold for each device should depend on&#xA;how critical a service is.&lt;/p&gt;&#xA;&lt;p&gt;On my network, I have a small fileserver that I&amp;rsquo;d like to shut down when the power goes off. This machine is running a recent LTS version of Ubuntu.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt install nut-client&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This installs a client which can communicate with the nut server running on the router. The installed configuration file (/etc/nut/nut.conf) has a lot of comments in it, but the key line is the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;org-example-block---etc-nut-nut.conf&#34;&gt;&lt;/a&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MODE=netclient&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;p&gt;The /etc/upsmon.conf file should include the following lines:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a id=&#34;org-example-block---etc-upsmon.conf&#34;&gt;&lt;/a&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MONITOR ups@192.168.1.1 1 upsuser 1337p455w0rd slave&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SHUTDOWNCMD &amp;#34;/sbin/shutdown -h +0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &amp;ldquo;slave&amp;rdquo; designation indicates that the system should power down when the UPS&#xA;level is critical. You can call out a custom shutdown script to perform some&#xA;actions prior to shutting down.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts&lt;/h2&gt;&#xA;&lt;p&gt;This setup has been running at my house for several months now, and worked as designed during a power outage. My file server shut itself down, preserving power for my cable modem, wireless access points and my router.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>GE Profile Stove turning on by itself</title>
      <link>https://bostonenginerd.com/posts/stoveonfire/</link>
      <pubDate>Sat, 02 Jan 2021 10:30:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/stoveonfire/</guid>
      <description>&lt;p&gt;Prior to moving in our house, we replaced the old coil burner stove with a nice&#xA;fancy GE Profile Induction range - their PHS930SL2SS model. I grew up with a&#xA;coil burner and don&amp;rsquo;t really want to relive the experience! Overall, we&amp;rsquo;ve been&#xA;happy with the stove, but we&amp;rsquo;ve had several issues addressed under warranty -&#xA;mostly minor.&lt;/p&gt;&#xA;&lt;p&gt;Minor issues:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The convection fan&amp;rsquo;s nut came loose and it flew off while cooking - easy repair.&lt;/li&gt;&#xA;&lt;li&gt;The temperature probe and jack required replacement after some usage - easy repair.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However, we have had one major issue with the stove &amp;ndash; &lt;strong&gt;while using the oven,&#xA;the induction burners on the left side will turn themselves on.&lt;/strong&gt; When this&#xA;happens, the burner controls for the misbehaving burners won&amp;rsquo;t work reliably. In&#xA;order to turn the burners off you have to engage the &amp;ldquo;lock mode&amp;rdquo; on the stove,&#xA;which has the unfortunate but understandable side effect of turning off the&#xA;oven. This has happened many times over the past year - and has persisted even&#xA;after a new control panel.&lt;/p&gt;&#xA;&lt;p&gt;A video of the issue occurring:&lt;/p&gt;&#xA; &lt;video width=&#34;320&#34; height=&#34;240&#34; controls&gt;&#xA;  &lt;source src=&#34;https://bostonenginerd.com/images/inductionstove/stove.mp4&#34; type=&#34;video/mp4&#34;&gt;&#xA;  Your browser does not support the video tag.&#xA;&lt;/video&gt;&#xA;&lt;p&gt;In the video, the burners pop on and off &amp;ndash; but we&amp;rsquo;ve also had them turn on and&#xA;set to a particular level. When this happens it&amp;rsquo;s difficult to turn them off&#xA;unless you use the &amp;ldquo;panel lock&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;We have noticed that this state is most likely to occur when we&amp;rsquo;re cooking food&#xA;which lets off moisture in the oven using convection mode - roasted potatoes are&#xA;a frequent culprit. Often times there will be a lot of steam which comes out of&#xA;the oven when you open it. There are ventilation holes on the left side of the stove&#xA;directly above the oven opening. Our theory is that this hot moist air comes up&#xA;through the ventilation holes and condenses on the backside of the control&#xA;panel. The condensed water droplets can cause phantom touches on the capacitive&#xA;touch screen.&lt;/p&gt;&#xA;&lt;p&gt;We contacted GE about this and have filed a report with the &lt;a href=&#34;https://www.cpsc.gov/&#34;&gt;Consumer Product&#xA;Safety Commission&lt;/a&gt; since this is dangerous - if there is a pan on the stove, it&#xA;could heat uncontrollably. Just before the holidays, GE Appliance (a division of&#xA;Haier) Corporate reached out. I provided them with all of our findings. It will&#xA;be interesting to see what they come back with in the New Year.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll update this post as new information comes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update&#34;&gt;Update &lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;&amp;lt;2021-01-23 Sat&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&#xA;&lt;p&gt;GE Appliances got in touch with me a short while ago and they have replaced the stove with their latest production  model free of charge. We haven&amp;rsquo;t had a chance to use it much yet - but it seems fine so far.&lt;/p&gt;&#xA;&lt;p&gt;The most interesting part about it is that the new &amp;ldquo;Air Fryer&amp;rdquo; mode requires a WiFi connection.  It&amp;rsquo;s not clear why this is, as there are no extra sensors or anything like that used.  It worries me that they could shut off whatever service it&amp;rsquo;s using in the future and brick that feature.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll try to put a more thorough review together sometime soon.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Chevy Volt Air Filter  - The manual is wrong!</title>
      <link>https://bostonenginerd.com/posts/voltfilter/</link>
      <pubDate>Sun, 18 Oct 2020 20:39:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/voltfilter/</guid>
      <description>&lt;p&gt;After our old Ford Fusion went for a swim in a rainstorm, we brought home a 2016&#xA;Chevy Volt. We&amp;rsquo;ve enjoyed driving the car over the past year. It&amp;rsquo;s a lot of fun&#xA;to drive - and we really appreciate almost never needing to stop at a gas&#xA;station. My wife likes the car as well.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re coming up on the 45,000mi service checkpoint. In general, electic vehicles&#xA;don&amp;rsquo;t have much to maintain. At this checkpoint, GM suggests changing the engine&#xA;air filter and the passenger cabin air filter.&lt;/p&gt;&#xA;&#xA;&lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/images/volt/volt_maintenence.png&#34; loading=&#34;lazy&#34; alt=&#34;2016 Volt Maintenance Schedule&#34; width=&#34;400&#34; height=&#34;170&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The usual first step in changing the air filter was to check the user manual.&#xA;According to the &lt;a href=&#34;https://my.chevrolet.com/content/dam/gmownercenter/gmna/dynamic/manuals/2016/Chevrolet/Volt/2k16volt1stPrint.pdf&#34;&gt;manual available from the Chevy website&lt;/a&gt;, the correct part&#xA;number is an AC Delco Part A3148C.&lt;/p&gt;&#xA;&#xA;&lt;figure class=&#34;image&#34;&gt;&#xA;&lt;img src=&#34;https://bostonenginerd.com/images/volt/volt_parts.png&#34; loading=&#34;lazy&#34; alt=&#34;2016 Volt Spare Parts List&#34; width=&#34;400&#34; height=&#34;141&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;When I searched all of the typical automotive supply companies - AutoZone,&#xA;O&amp;rsquo;Reilly, RockAuto, they all showed a different part as the correct one. Digging&#xA;into this further, I found this thread on an online Volt forum. It turns out the&#xA;manual is incorrect. It seems that they never updated the manual&#xA;when they released the Gen2 car in 2016. &lt;strong&gt;The correct part is AC Delco A3217C&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Model Year&lt;/th&gt;&#xA;          &lt;th&gt;Generation&lt;/th&gt;&#xA;          &lt;th&gt;Air Filter Part&lt;/th&gt;&#xA;          &lt;th&gt;Cabin Air Filter&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2012&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3148C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2013&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3148C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2014&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3148C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2015&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3148C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2016&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3217C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2017&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3217C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2018&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3217C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2019&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco A3217C&lt;/td&gt;&#xA;          &lt;td&gt;AC Delco CF185&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Considering how few parts are actually replaced during maintenence on the Volt,&#xA;I&amp;rsquo;m surprised they had the same misprint two years in a row! Moreover, this&#xA;isn&amp;rsquo;t documented in any errata that I could find. Of course, GM will&#xA;lean on the information in the manual to deny warranty coverage.&lt;/p&gt;&#xA;&lt;p&gt;Hopefully this post will save some time for someone out there!&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Happy New Year!</title>
      <link>https://bostonenginerd.com/posts/happy-new-year-2019/</link>
      <pubDate>Mon, 31 Dec 2018 23:39:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/happy-new-year-2019/</guid>
      <description>&lt;p&gt;Happy New Year to All!&lt;/p&gt;&#xA;&lt;p&gt;We have a lot to be thankful for this year - loving family, good job,&#xA;etc.  There&amp;rsquo;s an awful lot wrong with the world, but there&amp;rsquo;s an awful&#xA;lot that&amp;rsquo;s improving also. [1]&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m looking forward to doing my part to keep the ship afloat for another&#xA;year!&lt;/p&gt;&#xA;&lt;p&gt;[1] &lt;a href=&#34;https://www.csmonitor.com/World/Progress-Watch&#34;&gt;https://www.csmonitor.com/World/Progress-Watch&lt;/a&gt;&#xA;**&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Paypal cutting off VPN services</title>
      <link>https://bostonenginerd.com/posts/paypal-cutting-off-vpn-services/</link>
      <pubDate>Sat, 06 Feb 2016 00:06:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/paypal-cutting-off-vpn-services/</guid>
      <description>&lt;p&gt;I saw recently that Paypal would start blocking VPN and SmartDNS&#xA;services. Their rationale is that VPN services can be used for&#xA;copyright infringement.&lt;/p&gt;&#xA;&lt;p&gt;They are correct in that VPN services &lt;em&gt;can&lt;/em&gt; be used for copyright&#xA;infringement &amp;ndash; they can be used to shield your IP address from others&#xA;and to make it appear that your traffic is coming from some other&#xA;location. However, this isn&amp;rsquo;t the only use of a VPN service. I use a VPN&#xA;service to shield my traffic from being intercepted and modified by my&#xA;local Internet providers.&lt;/p&gt;&#xA;&lt;p&gt;As an example, several years back, I stayed in the Fairmont SFO for a&#xA;work trip. The Fairmont is a beautiful hotel with very nice service.&#xA;Unfortunately their WiFi service insists on injecting advertising frames&#xA;into all of the non-SSL secured websites that you visit. I immediately&#xA;signed up for a VPN service to protect against this.&lt;/p&gt;&#xA;&lt;p&gt;Other providers have a history of similar behavior &amp;ndash; see the&#xA;&lt;a href=&#34;https://www.eff.org/deeplinks/2014/11/verizon-x-uidh&#34;&gt;VZW PermaCookie&#xA;scandal&lt;/a&gt; from a few years back. I&amp;rsquo;ve also heard that AT&amp;amp;T&amp;rsquo;s broadband&#xA;service is rolling out similar programs. From what I can tell, it seems&#xA;that your local ISP should be treated as a potentially hostile actor.&lt;/p&gt;&#xA;&lt;p&gt;Moreover if you&amp;rsquo;re using an open wireless access point, all your traffic&#xA;is being transmitted in the clear. Everyone can see what you&amp;rsquo;re&#xA;transmitting and what sites you are visiting. A VPN can also be used to&#xA;protect against this.&lt;/p&gt;&#xA;&lt;p&gt;My use of a VPN is to secure my Internet traffic from my local internet&#xA;provider &amp;ndash; either at my home or using the open WiFi at coffeeshops and&#xA;hotels, not for copyright infringement.&lt;/p&gt;&#xA;&lt;p&gt;I believe that PayPal is mistaken in this case &amp;ndash; VPNs have substantial&#xA;non-infringing uses and should not be shut down because some users use&#xA;them to pirate TV shows.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Letter to the White House regarding cryptography.</title>
      <link>https://bostonenginerd.com/posts/letter-to-the-white-house-regarding-cryptography/</link>
      <pubDate>Fri, 15 Jan 2016 00:00:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/letter-to-the-white-house-regarding-cryptography/</guid>
      <description>&lt;p&gt;Back in December, Ed Felten and the White House asked for &lt;a href=&#34;https://petitions.whitehouse.gov/response/we-want-hear-you-encryption&#34;&gt;public&#xA;comment&lt;/a&gt; on the EFF&amp;rsquo;s pro-cryptography petition. This is the letter&#xA;that I had sent. I urge you to file a comment.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Dr. Felten and President Obama,&lt;/p&gt;&#xA;&lt;p&gt;I strongly urge you to support the unfettered deployment of strong&#xA;encryption without compromise or backdoors.&lt;/p&gt;&#xA;&lt;p&gt;The fact of the matter is that people have a right to be secure in&#xA;their persons, papers and effects. The UN Declaration of Human Rights,&#xA;to which the United States is a signatory specifies in Article 12 that&#xA;&amp;ldquo;No one shall be subjected to arbitrary interference with his privacy,&#xA;family, home or correspondence, nor to attacks upon his honour and&#xA;reputation.&amp;rdquo; In today&amp;rsquo;s world, strong encryption is a necessary&#xA;component to prevent arbitrary interference with our privacy and&#xA;communications &amp;ndash; by both state and commercial actors.&lt;/p&gt;&#xA;&lt;p&gt;At the end of the first Cryptowar in the late 1990s, we decided that&#xA;the risk of not deploying strong encryption outweighed any potential&#xA;of criminal usage. All the known ways of reducing the strength of&#xA;encryption algorithms have one intractable problem &amp;ndash; math has no way&#xA;to only allow the &amp;ldquo;good guys&amp;rdquo; to decrypt communication without&#xA;providing similar capability to the &amp;ldquo;bad guys&amp;rdquo; &amp;ndash; repressive nations&#xA;and criminals. None of these techniques work; smarter people than I&#xA;have been saying this for many years &amp;ndash; see the work by Bruce&#xA;Schneier, Matthew Green, and even you Professor Felton. As you pointed&#xA;out last March on the Freedom to Tinker blog, the FREAK attack shows&#xA;that we&amp;rsquo;re still dealing with the fallout of the weakened cryptography&#xA;of yesteryear. [1]&lt;/p&gt;&#xA;&lt;p&gt;Even assuming that there was some way to design a system in which the&#xA;state could retain access as needed, how does one determine who has&#xA;access? Is it only for the Five Eyes or NATO nations? Or will the&#xA;whole world have access? Despite NSA Director Rogers&amp;rsquo; assurance that&#xA;&amp;ldquo;we can work through this&amp;rdquo;, I&amp;rsquo;m not so sure.[2]&lt;/p&gt;&#xA;&lt;p&gt;Silent Circle&amp;rsquo;s Jon Callas pointed out a flaw in this: &amp;ldquo;We said in&#xA;public we would not tolerate bad people subscribing to our service,&amp;rdquo;&#xA;he said. &amp;ldquo;We also know that what that really means is really kind of&#xA;squishy. Let me give you an example: Let&amp;rsquo;s take the Dalai Lama. We&#xA;supply communications services to the government of Tibet. Is the&#xA;government of Tibet good guys or bad guys? We made the decision the&#xA;Dalai Lama is a good guy, but if you ask the Chinese, they&amp;rsquo;re bad&#xA;guys.&amp;rdquo; [3]&lt;/p&gt;&#xA;&lt;p&gt;The United States should be leading the charge for private&#xA;communications, not working to prevent this. Many politicians have&#xA;invoked the image of the &amp;ldquo;Shining City on a Hill&amp;rdquo; as a proxy for&#xA;American Exceptionalism. We should strive to live up to this dream&#xA;&amp;ndash; and not adopt the techniques of repressive nations for a&#xA;purported short term gain. The Snowden documents have shone a light&#xA;into a dark place. Let&amp;rsquo;s use this as an opportunity to live up to&#xA;the best images of ourselves.&lt;/p&gt;&#xA;&lt;p&gt;Thank you, Merry Christmas and Happy Holidays,&lt;/p&gt;&#xA;&lt;p&gt;1:&#xA;&lt;a href=&#34;https://freedom-to-tinker.com/blog/felten/freak-attack-the-chickens-of-90s-crypto-restriction-come-home-to-roost/&#34;&gt;https://freedom-to-tinker.com/blog/felten/freak-attack-the-chickens-of-90s-crypto-restriction-come-home-to-roost/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;2:&#xA;&lt;a href=&#34;https://www.washingtonpost.com/news/the-switch/wp/2015/02/23/heres-how-the-clash-between-the-nsa-director-and-a-senior-yahoo-executive-went-down/&#34;&gt;https://www.washingtonpost.com/news/the-switch/wp/2015/02/23/heres-how-the-clash-between-the-nsa-director-and-a-senior-yahoo-executive-went-down/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;3:&#xA;&lt;a href=&#34;http://www.csmonitor.com/World/Passcode/2015/1217/Tech-firms-push-back-on-reactionary-politics-following-terror-attacks&#34;&gt;http://www.csmonitor.com/World/Passcode/2015/1217/Tech-firms-push-back-on-reactionary-politics-following-terror-attacks&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>Vizio Privacy Policies</title>
      <link>https://bostonenginerd.com/posts/vizio-privacy-policies/</link>
      <pubDate>Sat, 21 Nov 2015 21:21:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/vizio-privacy-policies/</guid>
      <description>&lt;p&gt;I recently came into possession of a nice new Vizio Smart TV. It&amp;rsquo;s&#xA;pretty nice - 1080p, Netflix, etc. As part of the process for&#xA;connecting the television to the internet, they made you agree to a&#xA;number of different license agreements and privacy policies. In a fit&#xA;of UX mastery, they did not show the privacy and license agreements on&#xA;the television, instead instructing you to type a long URL into your&#xA;web browser and reading the policies there. Nevertheless, they&#xA;insisted upon your agreement before connecting to the Internet.&lt;/p&gt;&#xA;&lt;p&gt;For fun, I decided to look up the privacy polices that I was agreeing&#xA;to. There are some interesting bits there. The whole Vizio privacy can&#xA;be found &lt;a href=&#34;http://www.vizio.com/privacy/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;VIZIO, Inc. and its affiliates (&amp;ldquo;VIZIO&amp;rdquo; or &amp;ldquo;we&amp;rdquo;) respect your&#xA;privacy.  Your privacy is a priority at VIZIO, and we take&#xA;responsible measures to protect it.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Whew! I was really concerned that they didn&amp;rsquo;t care about my privacy!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This Privacy Policy also contains information on Smart&#xA;Interactivity, a feature on Internet-connected televisions that&#xA;recognizes onscreen content and may in the future permit you to&#xA;interact with this content. You have the option in your television&amp;rsquo;s&#xA;settings menu to disable this feature, which is set to &amp;ldquo;on&amp;rdquo; by&#xA;default. As part of Smart Interactivity, VIZIO may collect and use&#xA;anonymous viewing data associated with your television. VIZIO&amp;rsquo;s&#xA;collection and use of this viewing data is described below in the&#xA;Smart Interactivity Supplement to the Privacy Policy.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We turn on data gathering by default for your convenience!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By accessing and using VIZIO products and services, you agree to&#xA;accept the terms and conditions of this Privacy Policy, and you&#xA;consent to our use and disclosure of the information collected by us&#xA;or submitted to us. You also acknowledge that you are aware that&#xA;this policy may change over time. The effective date of this Privacy&#xA;Policy is stated above.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We can change it whenever we want and if you don&amp;rsquo;t like it, you can&amp;rsquo;t&#xA;use your television.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WHAT INFORMATION WE COLLECT Non-Personal or Anonymous Information.&#xA;Non-Personal or Anonymous Information. We also collect data in a&#xA;form that does not, on its own, permit direct association with any&#xA;specific individual. We consider this Non-Personal or Anonymous&#xA;Information. We may collect, use, transfer, and disclose&#xA;Non-Personal Information for any purpose. Examples of Non-Personal&#xA;Information we collect, use and share include the IP address you use&#xA;to connect your Internet-connected products, your ZIP code, the&#xA;online services you visit, as well as information about your VIZIO&#xA;product such as MAC addresses, product model numbers, hardware and&#xA;software versions, chipset IDs, and region and language settings. We&#xA;also collect information about the products you request or purchase,&#xA;the presence of other devices connected to your local network, and&#xA;the number of users and frequency of use of VIZIO products and&#xA;services. VIZIO also collects Anonymous Information regarding&#xA;customer activities on our websites, on Internet-connected products&#xA;and services, and on VIZIO&amp;rsquo;s Internet store.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We respect your privacy by collecting non-personal things like your IP&#xA;address, location, as well as the online services (websites?) you&#xA;visit!  In addition, we portscan your network and send the information&#xA;back to our servers. Do they also index the filex you have shared on&#xA;your Samba server?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cookies. VIZIO uses session and persistent &amp;ldquo;cookies&amp;rdquo; to collect&#xA;information when you visit VIZIO&amp;rsquo;s website or online store, and uses&#xA;pixel tags (also known as pixels or web beacons) to place and read&#xA;these cookies. A cookie is a small data file that VIZIO transfers to&#xA;your device and is stored locally on your device. Cookies are used&#xA;by thousands of websites in order to enhance the website&#xA;experience. When you visit VIZIO&amp;rsquo;s websites, we use cookies to&#xA;identify your device so that you do not have to re-register each&#xA;time you visit, and we use them to anonymously measure the traffic&#xA;to our site and its different services and features. We also&#xA;contract with third party service providers who use anonymous&#xA;cookies to tag visitors to our online store and website. These&#xA;cookies may be persistent, which means that they enable us to track&#xA;and target the interests of our users to enhance the experience on&#xA;our partners&amp;rsquo; websites. Persistent cookies remain on your local&#xA;storage for an extended period of time. If you have one of these&#xA;persistent cookies, you may see advertisements for our products&#xA;displayed on other publishers&amp;rsquo; websites which you visit.  Your&#xA;browser contains features to help you manage cookies. You may remove&#xA;or prevent placement of cookies by following the directions provided&#xA;in your browser&amp;rsquo;s &amp;ldquo;help&amp;rdquo; file.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess this is fairly standard these days on websites. uBlock and&#xA;Privacy Badger seem to do a reasonable enough job of filtering out ads&#xA;on the Internet.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Viewing Data. As part of Smart Interactivity, VIZIO also collects&#xA;specific information relating to your viewing of content on&#xA;Internet-connected devices. This data is referred to as &amp;ldquo;Viewing&#xA;Data.&amp;rdquo; This collection of Viewing Data is described under the “Smart&#xA;Interactivity Supplement to the Privacy Policy“ below.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We watch what you watch. For your convenience.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Viewing Data. The use of Viewing Data, including Viewing Data&#xA;combined with IP addresses or Non-Personal or Anonymous Information,&#xA;is described under the &amp;ldquo;Smart Interactivity Supplement to the&#xA;Privacy Policy&amp;rdquo; below.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We combine that non-identifying data with the content that you watch for&#xA;some reason.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW WE PROTECT INFORMATION&lt;/p&gt;&#xA;&lt;p&gt;Protective Measures. VIZIO has implemented systems designed to&#xA;maintain the confidentiality of the Personal Information that it&#xA;collects. VIZIO maintains internal practices designed to protect the&#xA;security and confidentiality of this information by, among other&#xA;things, limiting employee access to and use of this&#xA;information. When you provide VIZIO with sensitive Personal&#xA;Information such as credit card numbers over the Internet, we&#xA;encrypt your transmissions using SSL (&amp;ldquo;Secure Sockets Layer&amp;rdquo;), and&#xA;other industry standard security technology. While no one can&#xA;guarantee the security of a website, Internet transmission, computer&#xA;system or wireless connection, we do employ common safeguards&#xA;intended to mitigate the risk of unauthorized access or disclosure&#xA;of the Personal Information we store or handle.  We keep such&#xA;information on servers located in controlled facilities that are&#xA;protected by firewalls and employ other technical measures designed&#xA;to prevent intrusion or unauthorized access to our data centers. We&#xA;maintain written policies and procedures for the protection of the&#xA;Personal Information collected, stored, handled, or processed on our&#xA;systems. For employees with access to Personal Information, we&#xA;provide training to employees on privacy and data security.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We take security seriously! Just like Target.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW YOU CAN ACCESS OR REMOVE YOUR PERSONAL INFORMATION&lt;/p&gt;&#xA;&lt;p&gt;If you desire access to view, correct or remove your own Personal&#xA;Information, you may do so by emailing us at &lt;a href=&#34;mailto:privacy@vizio.com&#34;&gt;privacy@vizio.com&lt;/a&gt; or by&#xA;calling 877-698-4946. If you request removal of Personal&#xA;Information, you acknowledge that residual Personal Information may&#xA;continue to reside in VIZIO&amp;rsquo;s records and archives, but VIZIO will&#xA;not use that Personal Information going forward for commercial&#xA;purposes. VIZIO reserves the right to maintain your Personal&#xA;Information if VIZIO has suspended, limited, or terminated your&#xA;access to the VIZIO website or VIZIO products and services for&#xA;violating any applicable Terms of Use or the VIZIO Internet Apps&#xA;Software License Agreement. This paragraph does not apply to VIZIO&amp;rsquo;s&#xA;collection of Non-Personal or Anonymous Information.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll try to call these guys one of these days and find out what data is&#xA;associated with my account.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;VIZIO.COM: DO NOT TRACK&lt;/p&gt;&#xA;&lt;p&gt;VIZIO does not knowingly track Personal Information about visitors&#xA;to VIZIO.com over different sites and over time, and it does not&#xA;enable third parties to do so, regardless of whether VIZIO detects a&#xA;do-not-track or similar signal from a visitor&amp;rsquo;s browser.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is at least good!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;SMART INTERACTIVITY &amp;ndash; OVERVIEW&lt;/p&gt;&#xA;&lt;p&gt;Smart Interactivity is a feature on Internet-connected VIZIO&#xA;televisions that recognizes onscreen content. Currently, we only use&#xA;this feature to gather data on a non-personal or anonymous basis, as&#xA;described below. You have the option to turn this feature off at any&#xA;time directly from the menu of your television.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;!--quoteend--&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, in understanding this feature of your VIZIO television (and&#xA;your option to disable this feature), we also want you to know that&#xA;VIZIO is developing technologies that will permit you to interact&#xA;with content in a variety of ways. These interactions may include&#xA;voting in polls, accessing bonus content, and viewing advertisements&#xA;that match your interests, based upon your viewing behaviors. Only&#xA;some of these features (outlined below) are currently deployed,&#xA;however. This Privacy Policy may therefore be modified from time to&#xA;time as new features and functionality become available.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;I am very glad that they&amp;rsquo;re willing to permit me to view advertisments&#xA;based on my viewing behavior!! I&amp;rsquo;ve turned this feature off.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WHAT VIEWING DATA WE COLLECT&lt;/p&gt;&#xA;&lt;p&gt;For VIZIO televisions that have Smart Interactivity enabled, VIZIO&#xA;will collect data related to publicly available content displayed on&#xA;your television, such as the identity of your broadcast, cable, or&#xA;satellite television provider, and the television programs and&#xA;commercials viewed (including time, date, channel, and whether you&#xA;view them live or at a later time). This data is referred to as&#xA;&amp;ldquo;Viewing Data.&amp;rdquo; The Viewing Data collected by VIZIO is anonymous and&#xA;does not contain Personal Information. VIZIO does not collect&#xA;Viewing Data from televisions located outside the United States.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We track who your provider is, what you watch and when you watch it. And&#xA;we &lt;em&gt;totally&lt;/em&gt; don&amp;rsquo;t combine it with all that non-identifying information&#xA;that we talked about earlier!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Except where prohibited by law or policy, the Smart Interactivity&#xA;feature is turned on by default. However, at any time you may turn off&#xA;Smart Interactivity (and the associated collection of Viewing Data)&#xA;from the menu of your VIZIO television. Turning Smart Interactivity&#xA;off will not affect the performance of your VIZIO television or any&#xA;online services. For specific instructions on how to turn Smart&#xA;Interactivity off or on, see the text below under the heading “How to&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;For your convenience, you&amp;rsquo;ve been opted into the fun!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW WE USE THE VIEWING DATA WE COLLECT&lt;/p&gt;&#xA;&lt;p&gt;VIZIO currently uses the Viewing Data collected from Smart&#xA;Interactivity for the following purposes:&lt;/p&gt;&#xA;&lt;p&gt;Beginning October 31, 2015, VIZIO will use Viewing Data together with&#xA;your IP address and other Non-Personal Information in order to inform&#xA;third party selection and delivery of targeted and re-targeted&#xA;advertisements. These advertisements may be delivered to smartphones,&#xA;tablets, PCs or other internet-connected devices that share an IP&#xA;address or other identifier with your Smart TV. VIZIO combines the&#xA;Viewing Data with IP address and other Non-Personal Information as&#xA;well as other non-personal information (such as demographic&#xA;information) it obtains from third parties in order to enhance, model&#xA;and further analyze the Viewing Data. VIZIO shares the Viewing Data&#xA;with media and data analytics companies as described below under the&#xA;heading &amp;ldquo;How We Share the Viewing Data.&amp;rdquo; VIZIO does not combine or&#xA;associate the Viewing Data with Personal Information.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;We will figure out what phones and other computers that you&amp;rsquo;re using&#xA;on the same network and combine that with a bunch of data we get from&#xA;our &amp;ldquo;partners&amp;rdquo;. We then sell that bundle to ad networks who have been&#xA;tracking your device location and they use that information to sell&#xA;you stuff! Remember all that they collect is non-identifying, but&#xA;those ad networks sure as heck know who you are.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW WE SHARE THE VIEWING DATA&lt;/p&gt;&#xA;&lt;p&gt;VIZIO shares the Viewing Data in the aggregate with media and data&#xA;analytics companies who have a business need to analyze television&#xA;viewing behaviors in the aggregate. This analysis permits these&#xA;companies to make, for example, better-informed decisions regarding&#xA;content production, programming and advertising. VIZIO minimizes the&#xA;sharing of Non-Personal device identifiers such as IP addresses. In&#xA;most cases VIZIO hashes and replaces these identifiers before sharing&#xA;them with our media and analytics partners. When VIZIO shares IP&#xA;addresses with third parties, VIZIO imposes strict conditions of&#xA;confidentiality and use on such third parties.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll just &lt;a href=&#34;http://arstechnica.com/tech-policy/2009/09/your-secrets-live-online-in-databases-of-ruin/&#34;&gt;leave this here&lt;/a&gt;. TL;DR, &lt;a href=&#34;https://www.cs.utexas.edu/~shmat/shmat_oak08netflix.pdf&#34;&gt;it&amp;rsquo;s not hard to deanonymize data&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We also share Viewing Data to facilitate the display of tailored&#xA;advertisements on other devices. As of October 31, 2015, VIZIO will&#xA;share Viewing Data, together with the IP address associated with the&#xA;corresponding VIZIO television, with limited third parties with whom&#xA;we have specifically partnered. These third parties may combine this&#xA;information with other information about devices associated with that&#xA;IP address, in order to customize the advertisements displayed on&#xA;those other devices.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Your Netflix habits will follow you around. Watching too much Aqua Teen&#xA;Hunger force? Prepare for Cheetos advertisements.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You always have the option to turn off the collection of Viewing Data&#xA;in your television&amp;rsquo;s settings menu. However, for a period of time you&#xA;may continue to see tailored ads on other devices that were targeted&#xA;on the basis of Viewing Data that was shared before you turned off&#xA;collection.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;It&amp;rsquo;s going to be hard to verify if they&amp;rsquo;re not collecting this&#xA;information anyway and uploading it to the server.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW WE PROTECT THE VIEWING DATA&lt;/p&gt;&#xA;&lt;p&gt;VIZIO first protects the Viewing Data by not combining or associating&#xA;the Viewing Data with Personal Information, even if VIZIO has&#xA;collected Personal Information from other sources, such as an online&#xA;purchase, account creation, or product registration. VIZIO also&#xA;protects the Viewing Data according to the same standards that it uses&#xA;to protect Personal Information and Non-Personal Information as&#xA;described above, including by requiring the third parties who analyze&#xA;or use the Viewing Data to employ reasonable security measures.&lt;/p&gt;&#xA;&lt;p&gt;Even though the Viewing Data does not contain Personal Information,&#xA;VIZIO encrypts the Viewing Data before transmission over the Internet.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both of these are good things for sure! Unfortunately, as we&amp;rsquo;ve seen&#xA;in many other cases &amp;ldquo;anonymous&amp;rdquo; information is fairly easy to&#xA;deanonymize &amp;ndash; especially when you can correlate the IP addresses with&#xA;other data sources.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;If I continue to use the &amp;ldquo;smart&amp;rdquo; features of this television, I will&#xA;have to setup some firewall rules so that it can&amp;rsquo;t see anything else&#xA;on my network. Currently it&amp;rsquo;s connected to an open access point and&#xA;only has access to the Internet and no ability to see other devices on&#xA;the network.&lt;/p&gt;&#xA;&lt;p&gt;Since I started writing this, &lt;a href=&#34;http://www.propublica.org/article/own-a-vizio-smart-tv-its-watching-you&#34;&gt;ProPublica has taken notice of the lousy&#xA;privacy policy&lt;/a&gt;. I recommend reading their analysis of Vizio&amp;rsquo;s SmartTV&#xA;program.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Notmuch of mail a setup Part 2 - notmuch and Emacs</title>
      <link>https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-2-notmuch-and-emacs/</link>
      <pubDate>Sat, 21 Nov 2015 00:00:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-2-notmuch-and-emacs/</guid>
      <description>&lt;p&gt;In my previous post on this topic, I tried to detail the way that I&#xA;fetch and send email using my laptop using a combination of mbsync and&#xA;systemd. This has been working extremely well &amp;ndash; it runs in the&#xA;background and does the right thing when I am connected to the Internet.&#xA;The only issue with this setup is that I&amp;rsquo;ll occasionally need to clear a&#xA;lockfile out of the .msmtp-queue directory. This is quite rare, however.&lt;/p&gt;&#xA;&lt;p&gt;The nicest thing about using a Maildir to store your mail is that you&#xA;can act on the mail using a variety of different programs &amp;ndash; some folks&#xA;prefer using Mutt to read their mail, others prefer something else. Most&#xA;popular mail software on Linux seems to support storing things in&#xA;Maildirs &amp;ndash; with the apparent exception of Thunderbird.&lt;/p&gt;&#xA;&lt;p&gt;One of the killer features of Gmail when it came out was the ability to&#xA;quickly search through your email and to automatically tag it in&#xA;different ways. This was one of the things that I missed moving my email&#xA;to a local client &amp;ndash; Thunderbird didn&amp;rsquo;t particularly care for searching&#xA;through my 25GB mail archive. Enter&#xA;&lt;a href=&#34;https://www.notmuchmail.org&#34;&gt;Notmuch&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.notmuchmail.org&#34;&gt;Notmuch&lt;/a&gt; is a small piece of software&#xA;that wraps around the Xapian search library to index and search through&#xA;a large amount of data quite easily. The name comes from the fact that&#xA;the software doesn&amp;rsquo;t fetch your mail, send your mail or even really&#xA;index your mail &amp;ndash; i.e. it doesn&amp;rsquo;t do much.&lt;/p&gt;&#xA;&lt;p&gt;Notmuch really does a few things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indexes your mail using Xapian&lt;/li&gt;&#xA;&lt;li&gt;Associates your mail with different tags &amp;ndash; similar to Gmail. The tags&#xA;are stored in the database.&lt;/li&gt;&#xA;&lt;li&gt;Help search through Xapian efficiently.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It doesn&amp;rsquo;t:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get the mail.&lt;/li&gt;&#xA;&lt;li&gt;Write the mail.&lt;/li&gt;&#xA;&lt;li&gt;Send the mail.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That&amp;rsquo;s about it. It relies on other programs in order to actually do&#xA;anything with the mail.&lt;/p&gt;&#xA;&lt;p&gt;One important thing to note is that everything in Notmuch is a tag. The&#xA;actual folder structure of your emails doesn&amp;rsquo;t really matter &amp;ndash; all that&#xA;matters are the tags in the headers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-setup-with-notmuch&#34;&gt;Getting setup with Notmuch&lt;/h2&gt;&#xA;&lt;p&gt;First things first &amp;ndash; pull your email onto your local device. I describe&#xA;a working setup &lt;a href=&#34;https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-1-mbsync-msmtp-and-systemd/&#34;&gt;here&lt;/a&gt;. This setup includes&#xA;both pulling email off of the server and sending email through your SMTP&#xA;server.&lt;/p&gt;&#xA;&lt;p&gt;Next, you will want to install notmuch and GNU Emacs. I installed both&#xA;from my Linux distribution&amp;rsquo;s package manager. You will also want to&#xA;install a second script called&#xA;&lt;a href=&#34;https://www.github.com/teythoon/afew&#34;&gt;afew&lt;/a&gt;. Afew is a set of python&#xA;scripts that assist in tagging your email. I installed afew to my&#xA;~/.local/bin directory.&lt;/p&gt;&#xA;&lt;p&gt;You should setup the notmuch configuration file next. You can do this by&#xA;using the command &lt;code&gt;notmuch&lt;/code&gt;. This will walk you through a few&#xA;configuration steps where you need to identify your own email addresses.&#xA;I added all of the addresses that I&amp;rsquo;ve ever used since I tend to store&#xA;lots of email.&lt;/p&gt;&#xA;&lt;p&gt;After running the configuration wizard, you will want to edit the&#xA;&lt;code&gt;[new]&lt;/code&gt; mail configuration so that it reads:&lt;/p&gt;&#xA;&lt;h2 id=&#34;notmuch-config&#34;&gt;.notmuch-config&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Configuration for &amp;#34;notmuch new&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The following options are supported here:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#   tags    A list (separated by &amp;#39;;&amp;#39;) of the tags that will be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#       added to all messages incorporated by &amp;#34;notmuch new&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#   ignore  A list (separated by &amp;#39;;&amp;#39;) of file and directory names&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#       that will not be searched for messages by &amp;#34;notmuch new&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# NOTE: *Every* file/directory that goes by one of those&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# names will be ignored, independent of its depth/location&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# in the mail store.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[new]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags=new;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ignore=Trash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This configures the &lt;code&gt;notmuch new&lt;/code&gt; command to read in and index all the&#xA;mail and apply the &lt;code&gt;new&lt;/code&gt; tag to it. We&amp;rsquo;re using this tag to let &lt;code&gt;afew&lt;/code&gt;&#xA;know what messages it needs to operate on.&lt;/p&gt;&#xA;&lt;p&gt;Next, you want to configure &lt;code&gt;afew&lt;/code&gt;. I&amp;rsquo;m using the following&#xA;configuration file:&lt;/p&gt;&#xA;&lt;h2 id=&#34;configafewconfig&#34;&gt;~/.config/afew/config&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#default filter chain&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[SpamFilter]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[KillThreadsFilter]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[ListMailsFilter]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[SentMailsFilter]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sent_tag = sent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[ArchiveSentMailsFilter]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Filter.1]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;message = &amp;#34;Facebook&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;query = &amp;#39;from:facebookmail.com&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags = +facebook;+unread;-new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Filter.2]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;message = &amp;#34;Spam&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;query = &amp;#39;from:&amp;#34;Global Who\&amp;#39;sWho&amp;#34; OR from:Touchfire OR from:Walk-inTub OR from:&amp;#34;Replacement Window&amp;#34;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags = +spam;-new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Filter.3]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;message = &amp;#34;Get mailing lists out&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;query = &amp;#39;tag:lists&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags =  +unread;-new;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Filter.4]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;message = &amp;#34;Get mailing lists out&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;query = &amp;#39;to:geda-user@delorie.com&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags =  +lists/geda-user;-new;-inbox;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[InboxFilter]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Stepping through the file:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;SpamFilter - This filter looks throught the email headers for the&#xA;header &lt;code&gt;X-Spam-Flag&lt;/code&gt; which should be set by SpamAssasian or something&#xA;similar running on your email host. This tags the message as spam &amp;ndash;&#xA;hiding it from your searches.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;KillThreadsFilter - Kill new messages to previously killed threads.&#xA;Good for the ReplyAll chains from your Uncle about Obama.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ListMailsFilter - Look through the new messages and add a the name of&#xA;the list as a tag. Remove the item from your inbox. This is helpful&#xA;for high volume mailing lists so you can only check them when you want&#xA;to. This filter uses the &lt;code&gt;ListID:&lt;/code&gt; header in the email. I have noticed&#xA;that a large number of commericial mailing lists are using the&#xA;&lt;code&gt;ListID&lt;/code&gt; header to track their campaigns. This is a bit annoying and I&#xA;haven&amp;rsquo;t found a good way to fix it yet.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;SentMailsFilter - Tag all the email that I&amp;rsquo;ve sent to others. This&#xA;uses the &lt;code&gt;From:&lt;/code&gt; header.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ArchiveSentMailsFilter - removes the inbox tag from sent email.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;[Filter.1] - tag emails from facebook and remove them from the inbox.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;[Filter.2] - filter out some common spam that I receive. Our spam&#xA;detection isn&amp;rsquo;t working too well on my email host.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;[Filter.3] - remove all mailing list messages from the inbox.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;[Filter.4] - one mailing list that I subscribe to doesn&amp;rsquo;t set the&#xA;ListID header used by the ListMailsFilter. It uses &amp;ldquo;X-Mailing-List&amp;rdquo;&#xA;instead. It was faster to just detect these and remove them from the&#xA;mailbox than it was to do anything else.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The one thing lacking in the current setup is a way to move emails from&#xA;the Inbox to subfolders. Afew has a MailMover function, but I haven&amp;rsquo;t&#xA;been able it to get it working well. This is necessary to move unwanted&#xA;items to the trash. I&amp;rsquo;ve been using mutt periodically to move older&#xA;items into an archive folder and to the trash.&lt;/p&gt;&#xA;&lt;h2 id=&#34;get-the-mail-and-index-it-dot&#34;&gt;Get the mail and index it.&lt;/h2&gt;&#xA;&lt;p&gt;Now that we have notmuch and afew to index and tag the email, it&amp;rsquo;s time&#xA;to automate the process. In the previous installment, we wrote a small&#xA;shell script to check the internet connection state, send queued email&#xA;and pull down new email. Let&amp;rsquo;s extend it to handle some new commands!&lt;/p&gt;&#xA;&lt;h2 id=&#34;localbincheckmail.sh&#34;&gt;~/.local/bin/checkmail.sh&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STATE=`nmcli networking connectivity`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;if [ $STATE = &amp;#39;full&amp;#39; ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ~/.local/bin/msmtp-runqueue.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mbsync nnytech&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    notmuch new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ~/.local/bin/afew -tn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    notmuch tag -inbox tag:inbox AND tag:lists&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &amp;#34;No Internets!&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This script adds in some new commands to index new mail and to run afew&#xA;to tag the mail. In addition, we run notmuch again to remove all mailing&#xA;lists from the Inbox as they&amp;rsquo;re almost always not urgent.&lt;/p&gt;&#xA;&lt;h2 id=&#34;now-how-do-we-read-our-email-again&#34;&gt;Now, how do we read our email again?&lt;/h2&gt;&#xA;&lt;p&gt;After spending all this time getting our email downloaded, indexed and&#xA;tagged we probably want to read our email. I&amp;rsquo;ve been using&#xA;&lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;GNU Emacs&lt;/a&gt; a lot lately and had&#xA;read about the Notmuch Emacs client. The neat thing about Notmuch is&#xA;that it&amp;rsquo;s independent of the frontend that you read your mail with.&#xA;There are setups that work well with&#xA;&lt;a href=&#34;https://notmuchmail.org/notmuch-mutt/&#34;&gt;Mutt&lt;/a&gt; and even&#xA;&lt;a href=&#34;http://git.notmuchmail.org/git/notmuch/blob/HEAD:/vim/README&#34;&gt;Vim&lt;/a&gt; as&#xA;well as &lt;a href=&#34;https://notmuchmail.org/frontends/&#34;&gt;a number of other&#xA;clients&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I installed the latest version of the Notmuch frontend from the MELPA&#xA;Emacs package archive. &lt;a href=&#34;http://melpa.org/#/getting-started&#34;&gt;Getting&#xA;starting with MELPA is described here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some .emacs.d/init.el-fu is required to get things working.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dot-emacs-dot-d&#34;&gt;.emacs.d&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:::lisp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Load up Notmuch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(require &amp;#39;notmuch)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; Setup some keybindings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; C-c m opens up Notmuch from any buffer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(global-set-key (kbd &amp;#34;C-c m&amp;#34;) `notmuch)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Setup Names and Directories&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq user-mail-address &amp;#34;myemail@mydomain.tld&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  user-full-name &amp;#34;My Totally Real Name&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; stores postponed messages to the specified directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq message-directory &amp;#34;MailLocation/Drafts&amp;#34;) ;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;set sent mail directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq notmuch-fcc-dirs &amp;#34;MailLocation/Sent&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Settings for main screen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq notmuch-hello-hide-tags (quote (&amp;#34;killed&amp;#34;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;A few commonly used saved searches.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq notmuch-saved-searches&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(quote&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;((:name &amp;#34;inbox&amp;#34; :query &amp;#34;tag:inbox AND -tag:work&amp;#34; :key &amp;#34;i&amp;#34; :sort-order oldest-first)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (:name &amp;#34;flagged&amp;#34; :query &amp;#34;tag:flagged&amp;#34; :key &amp;#34;f&amp;#34;) ;flagged messages&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (:name &amp;#34;sent&amp;#34; :query &amp;#34;tag:sent -tag:work&amp;#34; :key &amp;#34;t&amp;#34; :sort-order newest-first)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (:name &amp;#34;drafts&amp;#34; :query &amp;#34;tag:draft&amp;#34; :key &amp;#34;d&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (:name &amp;#34;mailinglist&amp;#34; :query &amp;#34;tag:lists/mailinglistID&amp;#34; :key &amp;#34;c&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (:name &amp;#34;all mail&amp;#34; :query &amp;#34;*&amp;#34; :key &amp;#34;a&amp;#34; :sort-order newest-first))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Message composition and sending settings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Setup User-Agent header&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq mail-user-agent &amp;#39;message-user-agent)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq message-kill-buffer-on-exit t) ; kill buffer after sending mail)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq mail-specify-envelope-from t) ; Settings to work with msmtp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq send-mail-function (quote sendmail-send-it))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq sendmail-program &amp;#34;~/.local/bin/msmtp-enqueue.sh&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mail-specify-envelope-from t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;; needed for debians message.el cf. README.Debian.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; message-sendmail-f-is-evil nil&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mail-envelope-from &amp;#39;header&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  message-sendmail-envelope-from &amp;#39;header)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Reading mail settings:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(define-key notmuch-show-mode-map &amp;#34;S&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (lambda ()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;#34;mark message as spam&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (interactive)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(notmuch-show-tag (list &amp;#34;+spam&amp;#34; &amp;#34;-inbox&amp;#34;))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(define-key notmuch-search-mode-map &amp;#34;S&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(lambda ()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;#34;mark message as spam&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (interactive)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (notmuch-search-tag (list &amp;#34;-inbox&amp;#34; &amp;#34;+spam&amp;#34;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (next-line) ))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq notmuch-crypto-process-mime t) ; Automatically check signatures&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;Crypto Settings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &amp;#39;message-setup-hook &amp;#39;mml-secure-sign-pgpmime)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq epg-gpg-program &amp;#34;/usr/bin/gpg2&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;There was some problem with listing PGP keys in the Debian&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;;version of EPG. This magic from StackOverflow seems to resolve it.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun epg--list-keys-1 (context name mode)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(let ((args (append (if (epg-context-home-directory context)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (list &amp;#34;--homedir&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (epg-context-home-directory context)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &amp;#39;(&amp;#34;--with-colons&amp;#34; &amp;#34;--no-greeting&amp;#34; &amp;#34;--batch&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;#34;--with-fingerprint&amp;#34; &amp;#34;--with-fingerprint&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (unless (eq (epg-context-protocol context) &amp;#39;CMS)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;#39;(&amp;#34;--fixed-list-mode&amp;#34;))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(list-keys-option (if (memq mode &amp;#39;(t secret))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &amp;#34;--list-secret-keys&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (if (memq mode &amp;#39;(nil public))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;#34;--list-keys&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &amp;#34;--list-sigs&amp;#34;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(coding-system-for-read &amp;#39;binary)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keys string field index)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(if name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(progn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (unless (listp name)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (setq name (list name)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (while name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (setq args (append args (list list-keys-option (car name)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      name (cdr name))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (setq args (append args (list list-keys-option))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(with-temp-buffer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (apply #&amp;#39;call-process&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (epg-context-program context)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     nil (list t nil) nil args)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (goto-char (point-min))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (while (re-search-forward &amp;#34;^[a-z][a-z][a-z]:.*&amp;#34; nil t)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq keys (cons (make-vector 15 nil) keys)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      string (match-string 0)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      index 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      field 0)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(while (and (&amp;lt; field (length (car keys)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (eq index&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (string-match &amp;#34;\\([^:]+\\)?:&amp;#34; string index)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (setq index (match-end 0))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (aset (car keys) field (match-string 1 string))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (setq field (1+ field))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (nreverse keys))))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h2 id=&#34;how-to-use-it&#34;&gt;How to use it?&lt;/h2&gt;&#xA;&lt;p&gt;Load up emacs, press &lt;code&gt;C-c m&lt;/code&gt; and you&amp;rsquo;re off and running.&lt;/p&gt;&#xA;&lt;h2 id=&#34;next-steps&#34;&gt;Next steps:&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m still working on refining the setup. My next steps should include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Org-mode Capture integration&lt;/li&gt;&#xA;&lt;li&gt;Getting afew to actually move email out of my inbox.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;feedback&#34;&gt;Feedback&lt;/h2&gt;&#xA;&lt;p&gt;If you have any feedback, please send me an email!&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>New SSL Certificate</title>
      <link>https://bostonenginerd.com/posts/new-ssl-certificate/</link>
      <pubDate>Tue, 03 Nov 2015 21:21:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/new-ssl-certificate/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----BEGIN PGP SIGNED MESSAGE-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hash: SHA512&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;My SSL certificate expired on 11/1. I replaced it with a new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;certificate today. The SHA256 fingerprint of the new certificate is:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;27:88:83:BF:22:D3:55:62:1C:2D:26:B2:8B:C9:AD:32:E3:C2:A6:BD:B7:C8:41:53:F9:38:D8:C6:AA:63:88:B1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This is going to expire in February 2016. I will likely replace it&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;with one from [Let&amp;#39;s Encrypt](https://www.letsencrypt.org) by then.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----BEGIN PGP SIGNATURE-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iQEcBAEBCgAGBQJWOUgKAAoJEKtJwDCg2HMhXj0H/icGRxNn7cnlFUlEZ4Y5hujc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LlBOigcCT/A7HVmTSYq++7icj2J/XOw/CL2wVNok1oMe4KVT6VmLH3rs68BSzusB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;arGSFAz4Lu1MPPmBlmp2L3l2Gc8eWPzvfDS9S1pD0tO63ISVGAzj0rMwtMlogPV2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ePd/lOIuICU8tUpWxNRt8LLrsOfMNYzuTV+5a6NVQS8OUpck/k3x6cYCpujXhXi3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;APTT2o7s0VbvZP60iHZfMNzg6dQHEuywhmwmQuyyAy5LbefLyd+M8lN+4b/yzfw5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XVUIHx1Y/k5h5x9IFP//o6Y4fCRgMs0xhIAGWo0JZrwd8aQijjQx22qy+jBvfdg=&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;=WjLO&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----END PGP SIGNATURE-----&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Getting Rid of Comments</title>
      <link>https://bostonenginerd.com/posts/getting-rid-of-comments/</link>
      <pubDate>Sun, 11 Oct 2015 21:21:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/getting-rid-of-comments/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m disabling comments on this blog as of today. I&amp;rsquo;ve only received a&#xA;small handful of comments in the year or so that this has been up &amp;ndash;&#xA;certainly not enough to justify the user needing to download over 1&#xA;megabyte of javascript from Disqus when they load the page.&lt;/p&gt;&#xA;&lt;p&gt;Feel free to email me - john at johnbyrnes.info if you have any comment.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Getting the T-Mobile Jet (Huawei 366) USB Modem to work in Linux</title>
      <link>https://bostonenginerd.com/posts/getting-the-t-mobile-jet-huawei-366-usb-modem-to-work-in-linux/</link>
      <pubDate>Mon, 21 Sep 2015 21:21:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/getting-the-t-mobile-jet-huawei-366-usb-modem-to-work-in-linux/</guid>
      <description>&lt;p&gt;I recently purchased a cheap T-mobile broadband USB stick for use with&#xA;my Debian Linux laptop. The device is the T-Mobile Jet 2.0 &amp;ndash; a&#xA;rebranded Huawei UMG366.&lt;/p&gt;&#xA;&lt;p&gt;After putting the SIM card in, I noticed that NetworkManager was&#xA;unable to see the card. Some DuckDuckGo-ing led me to this &lt;a href=&#34;http://forums.linuxmint.com/viewtopic.php?f=53&amp;amp;t=119342&#34;&gt;Linux Mint&#xA;forum post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Apparently these sticks show up as a USB hard drive when you plug them&#xA;in. This lets them include the drivers with the stick. Ejecting the&#xA;drive activates the internet connection. You can use a piece of&#xA;software called usb\\_modeswitch to change the device mode.&lt;/p&gt;&#xA;&lt;p&gt;The last post in the aforementioned thread has basically the correct&#xA;step to take in order to get the device to work properly. Instead of&#xA;editing the system udev rule file, I added a new rule into&#xA;&lt;code&gt;/etc/udev/rules.d/41-huawei.rules&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Huawei E366 (T-mobile Wind)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ATTRS{idVendor}==&amp;#34;12d1&amp;#34;, ATTRS{idProduct}==&amp;#34;1446&amp;#34;, RUN+=&amp;#34;usb_modeswitch &amp;#39;%b/%k&amp;#39;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Speed tests were as follows using speedtest-cli from the Debian&#xA;repository:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Testing from T-Mobile USA (172.56.36.162)...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Selecting best server based on latency...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hosted by Atlantic Metro (New York City, NY) [6.18 km]: 144.517 ms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Testing download speed........................................&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Download: 3.92 Mbits/s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Testing upload speed..................................................&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Upload: 0.91 Mbits/s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This is a about 2x faster than Bluetooth tethering to my LTE&#xA;phone. The download speed from the Ookla app on my smartphone was&#xA;about 6Mbits/s.  The HSPA+ speed from the dongle is perfectly&#xA;acceptable.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Internets on a Plane! (and service blocking)</title>
      <link>https://bostonenginerd.com/posts/internets-on-a-plane-and-service-blocking/</link>
      <pubDate>Sun, 16 Aug 2015 23:53:00 -0400</pubDate>
      <guid>https://bostonenginerd.com/posts/internets-on-a-plane-and-service-blocking/</guid>
      <description>&lt;p&gt;I fly UA quite often and regularly get internet on my flights. The&#xA;speed and connection quality is quite acceptable considering that&#xA;we’re traveling through the air and talking through some&#xA;satellites. The rate is also quite reasonable - $1.99/hr for the slow&#xA;lane and $3.99/hr for the fast lane.&lt;/p&gt;&#xA;&lt;p&gt;However, on my last two trips, the following things have been blocked:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VPN access - I typically use a VPN when I travel to protect my&#xA;wifi traffic. As the access points are unencrypted, I prefer to&#xA;encrypt and route my traffic through a trusted host. It seems&#xA;that they’re blocking most of the gateways for my VPN provider.&lt;/li&gt;&#xA;&lt;li&gt;web.skype.com — Although I understand that you can’t really&#xA;support VOIP, text chatting over the Skype web interface should&#xA;be perfectly acceptable. I’d like to avoid installing Skype on&#xA;my nice Linux laptop.&lt;/li&gt;&#xA;&lt;li&gt;XMPP blocked - again, text chatting should be acceptable. TCP to&#xA;ports 5222 and 5223 are blocked.&lt;/li&gt;&#xA;&lt;li&gt;UDP to ports 60000+ is blocked. This means that I’m unable to&#xA;use MOSH to connect to my home servers. I often chat through&#xA;IRSSI + Bitlbee running on a server in my house.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I verified that in each case, the service I was trying to connect to&#xA;was up.&lt;/p&gt;&#xA;&lt;p&gt;Finally, I noticed that the feedback form was not protected by&#xA;SSL. This should be the default on every website these days.&lt;/p&gt;&#xA;&lt;p&gt;Overall the service gets a solid B. I was eventually able to find a&#xA;VPN host not on the block list and was then able to access all of the&#xA;necessary services.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>GnuPG key update</title>
      <link>https://bostonenginerd.com/posts/gnupg-key-update/</link>
      <pubDate>Sat, 21 Feb 2015 21:21:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/gnupg-key-update/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----BEGIN PGP SIGNED MESSAGE-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hash: SHA1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I mistakenly deleted the secret key material for my PGP signing and&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;encryption subkeys. *facepalm* Please backup your keys. The master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;certification key was left unaffected.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The updated key is here:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- -----BEGIN PGP PUBLIC KEY BLOCK-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: GnuPG v2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mQINBFSzQfcBEACki1rn6UOSYCsfD2L3vvZlZD1yIMKjQeG8edUxn9RdSA80jZ56&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;y35GMBrlGkd0jvUyRlNIbPMe/FuRNrKh2DadTfo0qGO9js9b3jnI27g9v6F6yp7A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nTTAiXKvPVYN5qfjfTk14Go1X1arbHqX8o4wN0Xdh5osFZmqZuSynGQ/DVTE78Qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MENanBVgUqWHc/I1D/cH0cHAgBm2QNRhMrNXymb18TXJJgMDtGn5WQ/rX+Iajg+N&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ylifpcwajfLO+i90j/RxcSBOwCZORm8yUsHFjFGgcQV803Pmr10waDq++ZI5EOqv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fZiIDH7MJfIblBHRj3fClGZcT3bhucy4LpRJ+SGvICXB2FcdZODN4h7tLJn1drtq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I4mOk8TDOGqCeKtiNvX1oHTSR/STve8yvU5pjV8wifWOm4P1s9RbGmmxl1sAie5Q&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6FFTIYguNOU2QJM/qAc9uJfSLrbcDvBJwPxEJMwqVwRxO3b2LB4sJnVX55jCJ698&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;jvELtkpNWY/e8UFHfAiXlTHb58Y2T39Jz1OXGC9Xn3F/VLU9dF/Il/0fHxV01orV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;aCx8B/n6aa3HRWLijWZFCsiRIfCRCTVCokU1nDJAutRO4TZSVT7xh7hRd2yTkciI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GoGslzmlSb4PmcWc2q80CM1cgBGKZj3X7/ed4ftbfsf3AEo7UeAvrwTwlwARAQAB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tB5Kb2huIEJ5cm5lcyA8am9obkBubnl0ZWNoLm5ldD6JAj4EEwECACgFAlSzQ4gC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GwEFCQlmAYAGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHWpBG/VobiuR0cP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/AvBdrEmoLAW+9T0Nw28947Cout8991Dsbk0GbWOu+orE3xOe8Jui5LBYlfuLCo5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uxphsUIoan5EA3EmcBtH+36gw997sEJS/HRwwrwMQJf/dL6tKrwVeqQqCf90124I&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rKpTm2KCGMZ6deZxqru7Pfphlm5buri2TqsaAd0rfTJQNDUxXejAJyzTuF3DHqcC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DwJK/YsyBMBRN5GrRJaxK1tuO7jsgYjGF/nUOX1dKpT8K8oR2M0fUsLH7ra1fXxD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ry5+BdUCYY1P47wMZLggFuPrKR0+4nGCBEm+6xXabwAPegK56X5sIEFaFvDrRFk1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PgqgBYKkMreL2QGUYTa3qFSbqE75PE8ffukC5UoQhvdPnKCezdNJ+gG7HT/YS23F&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1piF5Q/2Gw/dq0E4yGKSxHrNsoaHKrddlrRsZnDvKFv0EkI/6QgsG8tUTfjmF5Gw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;L960Sc16a67R94b1fGt8ObyoQJHNFTogZh1Zcc+/2clDuez0lQYPrAFN4Hc64wtQ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Kvnw6RKbV5yI9Nw7vHe1NqfhNoBUjkxZFXTKSOI8Z7fZsjTbnATrKBbbY83BdvKk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Qo4Zpn5yQcBiqKKqIAJsw/Yu3TDKpa1sKR3CfkLmeT7okVQPwinOVBm3K8Y6d1pH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;v93yMcVs7NNTMt6ySS5vhmo95KMYKI9Gd77Vs2395ApPtGBKb2huIEJ5cm5lcyAo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;S2V5IFN1cGVyc2VkZXMgRDU0RDZCQjQgYW5kIGFsbCBwcmlvciBrZXlzIGFzIG9m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IDIwMTUtMDEtMTEpIDxqb2huQGpvaG5ieXJuZXMuaW5mbz6JAhwEEAECAAYFAlSz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;QnUACgkQbYdJ3tVNa7QiSRAA17CmZnCFquePMDl5DNjRjSWt2czuCLBWIHP+mxMv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;r+F0xC2hsjrt7e3oTZfxOg0lvbQ05LZBorXBCyqysQzir6zSo3KAZ2b6JUEk9LB0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4FCzel2K2jQSveTgUmT/4yTCZByVqjmq+gMvI5Vwfr2rTvh+iWLt07Saeuu8EbjF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;u7cGA47JlZo+beO6nu6Rhv6BjBqW8x0alPEF0xEh5j3lApPx9enRP23G3JCeeqtz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7v12xDP/+5mPS4Dexq/QoY3nEZBquXTbohj6GVg44fchTQnidJuVNNRQWQk86Mlk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/NJqbLrFrUJFvdi3j9AUiy7gtPKQC/KvD/WZGRLOxWWTX9US+KFHdMB7VFOjPMNu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LJc3v9S7wfgjbWR86YVL6ziLoDuHlUYkeyuDqaSO5lqypxzQxuM7f6ZQVrRRCr1W&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fItgYH7WnmBMh7zFCsK9Dw4EX1kKoOUTD9YdpXjm591GATsKIhVimaTHXWjUbVrN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ken98oG1PCp21pZ3kB45k4RceHVyJvohRwVNKlPM30i7kcwdVGNFOwNzAsGkEfnl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;9oEQuWRMN7AgHUKD+z5Ie2c8x7wdH31huBB3zAXDzowS4xYHN4m8U95pgoDCPaNv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6+eRvrnR3FDHlEb5OQeAm+3veyrhu6NrBKjigC8OHNFh04kCnL0lIc1vBDcHQYbP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PxeJAj4EEwECACgFAlSzQfcCGwEFCQlmAYAGCwkIBwMCBhUIAgkKCwQWAgMBAh4B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AheAAAoJEHWpBG/VobiuufYP/A9WXBLCPCUXLE+weEGG2J6VSKVsuKh4J4+B8YJ0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4qS/puDBsOFj79j4KY0FYRpsOTG74vGl4ttFB1uoCnBWydi4PukM8yNhu/Jly8ow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NEeNyESCO4qv9mNs7LRtt4f/Bah3ERvWam+GTyTHART7+hzFiwu4Gt/Jucjn2tOp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JyEFN3+5ZB449ddGMqgXuDiCEIb2VgBF6CngeN2LwEZQRLYlEibWwJAIBEjiL5CU&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;KAIH9mDDXRWPFZKFunsfuFKNM35rEV54PO0KEDG3s5NTzWYddUY5GXAimyMZaVjH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wdXDg2X1wRdDvp9Fpv4YUUOtbyasJkiZxZ1i3NTLiFxrv9bkTqhkpQnx5JCfRL2p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vqoLQYvStXqHr0OKsO/ezbh3/KotTNMKr9MRzqIByz/rq4rKpN+j9l1rmsyegXsi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TgTz7le1xgMogxC0wJ7ZizH7Xmwz6whS8+FvWmjEAi78kULwoP7x4UdoWLNofe48&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;K9l4ub0FjjQjswv2ztAq88WPDBrZFYNksB+fRMAHRihMED+Zq8WWIrsnquMmqAMW&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;73KimmaXW6Qm+KjCgFrUkt4Z766WFN6UmSWuKDT/m1nsh372BxQq3z1i4m/WzjU4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;R8deONc07w0wz2Ri2BEGatPR/A3Vj2um+uA80+jVL/8TPPP3DYMQjqlhsZRyXgqN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uCajiQJBBBMBAgArAhsBBQkJZgGABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAUC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VLNEcwIZAQAKCRB1qQRv1aG4ruU8D/9V5xKzYg8L5lZhazbk+HEdhNQqYeUY3D9u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8/rd5XqSq+7ya6+/awOaYFotEx8RATcVfelgzOOICrkGocM38Kou+o/xBIvr9YgR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OdQioWa5yjcoU+qx2KcSxVFQ13yow1y8s5rVjkl9otJ8QrEhDevEy4a3vp3qgz4X&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;16Lw307hC1YLuhot5ZAFZHc0aaQOG0E+r4pwrNe/sgGtgm1yVt2lg+mztWMWrxga&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;b9BUeaMO/lj42INsk2pCuroIVxrNZu+1+UpYF9NukibWUtWXf4xeURwOxSTxglL8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DROh/mnNNyuAVHWFSqcjS3Jd2ScFRBkFUVX20OiTcaB8ik+nwT+OpfqD65bLa3rb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;N5iTZxfY2Kv0hVBXO3KFYKmWJ55HhpmYX4md+O64JMK6NzMTrMFkFWRdGvJv50lu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;K2b/b7XY88xctCQ8jmlerCMVy7RY+J/dhND8giVFDUFyYWebLeFAPGUWPMNTxXPt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dmvmop22YEQR9ZlVd4+hXU8ufx/VbtEl90dvJ+bA9Gld8ZNoY1PxaMkA6qrR4B8G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NvwCCW1FMHrfOEQnMcwVEVkjxWPVYIqiCTvHNYSUeBR5Rbnwm+IiDE+uLuUBw1MB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VX679NC+Sd0d+pAfhu5FLio16YVnz/NY6vF1nbIQ0oCNtPLsOrxQf7B2Hg7UtlRo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ysz5fxXSirkBDQRUs0L3AQgA2GvvRuF5v4tfMhw7Czyv1jYWeMNa9dmY1KfgZL7d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;l9/fIwgIPWZYWXTUVVHEpeDmktoNYcK6eTMkMWW96b9k/A0J3rzoeZf3LbdMB9qQ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VvyuSLlpkMgWEBUxSmi8/XUst13Ak6lbO8WQEGOlbRw14WL3h/a8Qkx4Sh8ux6si&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AYAYi0yOtSHAPnjbrMTMFZSmgzuG/Rn5ReYjv4cIXt0xPuIId6ppuub9Yu3p9GZE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;jq3cxs2SseUOYktgRgw7CXkg2iMdQwX0tju0ESKluAu9whD32dr+dVeHYipXzWrq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ToQ5plIoXZFNEfBliSnksF74AJfiOcpBJ0RofkpAECEUhQARAQABiQJHBCgBAgAx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BQJU6KhRKh0CT3JpZ2luYWwga2V5IG1hdGVyaWFsIGxvc3QuIEZhY2VwYWxtLi4u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LgAKCRB1qQRv1aG4rpztD/4xqhxwebzfBV+Z6ywNY4beSvvub10lR1UUr+XO4blr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UUBlXJsVNt22t0BgWAgFvQulbpBGUHANQ2aZei8NTN2grFxySRqHe+YZrtR4W3cB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;U6TuFq5F0QfJ2hIBANZoPBNCwTBaypqASfEghdRZMdSNfS08NqUZdnQfnNSq5cY7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RQ5Ez9RoDA/k8udwVd/+VaSBhcB/HL+/cqKuwvc6ucauEooMsdykCs/szWmFH16j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lc6XxPIUKyjByFoeW4lvI1wc7NQjGh+Q05TT7+ByAgRXwvE0q4yPrMaHPQhGB+1o&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;T96RELuwqlFT1avPfzSU+oG10ewFibfkJZKK7bwxpsbYIFgpPVPaFR5NT0f/HPul&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FaX4kD3AVI6bTOIKE2Sa38glRnVpPUFFZHzwUago4wbZGHlGTV4KA2HDj/TenLRf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;513ZNUr9jERbj8dLAaY9MsYUnzySZVkkY6468E0sbNqk1nPyQr05pRcSqZc+NEu8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ph8OvdTnqNJKQhPMQcfCrc0RbeyjsJ65CEWto0W+4YiiqCnVQVyHtn04wwZrnH7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/jmF1nCTWEgkJC8VhsbBegu58PzGX3nhtF8xs/W8/2ru51+1VjibI125N9YGZrGq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xB7xPTLh9Aa0GwO5luoVo4vAJWiCIyulQSlGtYV1kM00G6fYtcxybNdJAsezpxJK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+4kDRAQYAQIADwUCVLNC9wIbAgUJAeEzgAEpCRB1qQRv1aG4rsBdIAQZAQIABgUC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VLNC9wAKCRAmBd1Xa2fmE7geB/9FDPlU6e9vuMtbJHT0MDUDFRSRINdB/9D0syAN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xRZrssXLkVgdc2G7nzoHPQLXfMBEM9RETMnh7+iRh8LLk1Py8Pmoqg6GfXefpdjX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XuHZxrMkPAoYUzrfb08hOe4B8HFnXdeHJU5V+SpUlvNiSPpRqApfY8KlbXAOKOvh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SPEA7yPXuOIKjj+HbcZXXGJtaptcplIISoXOMFVek6oeOVL5lCJpPhsboBM+WRx8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gp1NyKlCs2EsUaQ7bsMYD7szAodUmA8WFAgbw5FGtWhdVECprjfi+VmRMToIueta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uxeIU+WlxMcPAmTLUw+gi+bkeZWAxgeBZglBxoS7uuVSVdrL+AIP/RUhphwWSS4Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6mp1Rd/+XqaBzfXwTwwZDmT0giQzn9q8UWBlU4P7ZkaYUEUZzg/DjBb6EjA/Nirm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PBX6+iI1MhKyS38xQX36rRMXPzjjOskqCeh6Mw1SQRnAAqXgS5jLDkZC5EesgAHX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gRFzGx/CgLh6svj/OhNSXLS4ZayDhryquwDuA8QFf6Z3s5ZTSOxKmqu8Ix91g5RI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;qx8dXw2ulua36WT+y1cO4IJ+w0fmr+VAxXHUspDpqFv1Zw8MaoLcr2LKo10Vnmrm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7W5II4ELTjrAX0HyaXg6f6aRjPBdcosmSfyWrGTOupu+6mYQVDMuow6MrgTxlGu/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dl26RiDo2Z6PyzVeDgWIyUTzgNsaODsgkY7LjuU9GUtmsbQaT/7H6QuC6hlgfFJw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;z41nhhZVHkpHhVBiusJnbvNIa5NYz2IcGEmXgKxNQI/hYnlkAl2+gUhlbEMW+kCb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cq1HSiGV1Yits4snCymrFxFR6si+OPziZSJIj+q0HfMTLl9MLi81CS9TJxaOAu6l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AHypFAv4+qpTpPv2YIZlT0u+r/i1Zg2+2d3Tf5lcqHaZhDCBJwWKxKau+hshE+gf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;He/jowgi5r5Yl5ZLeDGs60kVWv4UfeXPqn38Rnq5HX716iKfVNY+FRrBwtcip8DQ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;y5xx2pSszNyU+GbNS57mT+SfdjACuidsuQENBFSzQzABCADJp/PGkWj3Ont0I7Q+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JkSI6GYMxBIYB/I6llaP2517pJ2AixUxSXJcDreHlYJ7bKdUiRocBIhO7XL1ZYSw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1mlFoPaSl+QuHjcXTQ4GxewSTv1aZOyjd3Tyo70ghEB4QlhV66Q9+v8ZlW+hJrNB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;O62vpqFaupp/dtSm0ItP6oUrQ1xui14mLWZf0LzKA+yDm2xykRxpCme+mvzoLpdC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TRHo3Y3DLp9tpIp3+LGPwK4SA3O/DXsjh3slauf05YgXGhnzodz0QguesPK2eOGM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CKJ85ErUA1YROlBP3HG28yK1aZTmBSiolcghSg24W8O7jZIy05iKUpIx/umRK7tV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;44rhABEBAAGJAiUEGAECAA8FAlSzQzACGwwFCQHhM4AACgkQdakEb9WhuK6soQ//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SwdYwgseFegVOZ/VnyMrsm4GW6SuIqMIo+tqhEFdvq6TLr7MoioO3I91Cl0nU51d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ONWvSmMQ0aSWYqD00YanrMG/BdIov+/zxVEN2SjHwocvbFVhuwE6M8+1ufO5GizP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/L0jvXFsUjJd9RfjqOKCfscoRLFxPj935J+QDkvr4XqTt0DsRmdghmHrCmZ/AXYt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rFdfkm0d+0DNnKt7ixcyYEvhXmcEbJPbXHyoKHUuvaN6eglc6HnxVVULAazhAluV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;m52o9/jyQMlT7y3rDS8+ZXUCSVHQDb4qcJH38KTGCXukJYFiFf3lWeqrdhT5NANv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+DxCw5F+9vv57rbzdUlS31P5OR+KcUNEkSfnCPDwMY5cJCe/ykrYkGX/rNSUGCNn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JvRVYAZLj3MxDcd5J9TKGn7dwKNn1s8hBOXHUMvW7YGR17u1fEVpbd9+fJSWCQMp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kby/F58Ozpcch5vMSj/9ddXtFCs9twlsGStnvz0UcDAci02Ux5j/Vmk1R6/MIqUK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dasw/mEJs3dRGcWPlg7n8ZgpzHiLnbutpEjqmfW+CCUlmElpS27WOxzW4rF+/m/n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JIp8biIwKl5Pz726TWAofD/vjD2u+li4MGe199xnlb0/CDTrvirZ4rTLY/fmUtK7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;U/B1+c3Hr2EXU4C9BWzg5H7g9QPFa92llUOKCT1SoK6JAkcEKAECADEFAlToqFgq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HQJPcmlnaW5hbCBrZXkgbWF0ZXJpYWwgbG9zdC4gRmFjZXBhbG0uLi4uAAoJEHWp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BG/Vobiu7aIQAJJPw5IVSG8pMfi3TON2st3GK2moFrw9QrlI/iTISnahnmh+igl/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;QL8HFdIi500yQOmgxzqJKlV8aPedw823SCkKYZPEvOK39Gfpds49/khObPbuk7vz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cjPSI1RisPvZmBfqVy/mH0EMbwGswdYJUNqK1QZEkXLhiXHahG2GfOkE/S38RbOV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kGevVSvbixMvDShU0OI9Ayw402sWMKG/flgH72mQ8vSDHxXMKn9tNDbq+ufrGD4/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opeOzVbnYIvuJZhWaQw7FTacztisEmq50E6R1sxLpFX+D52FpJoFv/c6ONCV/+Wt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NQ+QIUtJbYysJ3YvD2tLW2kA6+XDjwt0Go1GVaLiTVXy12ZEt6LX6cdpDNh6dSoz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tiirE2SXDY8v2t7P4PundkFdA/MAgSwO/Pmbs2+0aV1CDDN5A2qoqziF2dG91IDQ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eaS4UCxmoAgyS/xk5i/7MRc8jbPVV7mP3SQXREctNnQycjwgDAflQLLBCfUOBp16&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wh1MPW7qaFl5cOGaUrVzUsFFezUOWp3Z3/iiKH2fYZL2EO7EicYVEqQ9+GWastJb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rlNSUhY3xcCUc7ELUOPanANfZrWDZ2/aRtdIqMHy9jlMsq8/SptLvw57pOnL2Obr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kd5bgvj/gYK+cXW6DF+W6ROOHvjrI5vcTPY940q/5DTAeckWKr7zEXfJuQENBFSz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XcMBCAC1hpUZjpmmPSPzr58mgELbV8unfXtJiulMMjaMs4qAuodxHfHz3Avuw509&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fSsj/x8owgrPUPuyXHe6AfIs3udcUFPzboNsTYMhYXdQJw8GnoXxg8rTX/BeQxX/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IZYUYtKbbNjzJq8PYHFjOJHYNonaIuM7jW5IrqBaE1DnlQXGcuenJDeeeQC8kOZN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CvRc7FyT3lNxB7xXhPXLqmb7liZZNr1nqKSdwQZaMNezliucUPcGrnQoahIVtu1Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Zzh+2TRNi58TaTKy0FMRkKvU4bq3azatPI4kvNTVv1bHZ2krKy9Rmj86fJBCwLlo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7vNB1A86FaariSjWZsEIFAzpHpX3ABEBAAGJAiUEGAECAA8FAlSzXcMCGyAFCQHh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;M4AACgkQdakEb9WhuK6c3w//W4KaUafaibNkwp82bf0XL6AtYSQIAaJWZqx5PmDG&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EuftKvYd+6l4PwJn1JKXDmdwCZ7E5gqVTc9uWRfOmLpwnYvzrrK9Fs3OQpti0Wsm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uF+GjxEue9BzamdVOgzHCd2ykMnAIKZU3TTtrBxkjB1ZytyDuCoWDAP24lT6uQn9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mzroEVltYEq75WsqnooSjpc0ZxBSq8rxaFY7Knnl78g9G2P8R2fDSwMgljxwgbB3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RDSvGSIj1Rb2OEOprlpWoBrFmR3iA5zg4GcbL+lRr3bTV3zCkNdLJ41NterFrm3L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bh+6TX6YOXpz8l/wT2vIuiGvNe3m9728SLPZl3v/V0A2y340ZtWLVB5EL3XD88de&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GvF4D1a4ulIo7K8V0XDtKS6LEsGYBSaw9gE5Rx85OexP9EYhyrh1RRZz1W0wX13V&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lFsn44dKE1kLnThR4MbPRpE0Z/0WE9j7umrHzehFLO1oARCWlFKxjKtonSju0MAY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HIxNImOYuVIsxJscJHDy009tnIKaxTlevXKHmEU9sUHSoNzhANjmR83fnh8hTmgr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ZwQINj/7BrcHtgeLHFzXe90MwGvRrlgGRrbc9GwtlBwtjAzcb+vxatXHEwGiwICs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;o/+oxjPi+XI4KxxyQxZ4464e9cPowf+GoTFXwp7LcsK7Um5AY5QtuiZWWKVqWZAm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bweJAkYEKAECADEFAlToqFkqHQJPcmlnaW5hbCBrZXkgbWF0ZXJpYWwgbG9zdC4g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RmFjZXBhbG0uLi4uAAoJEHWpBG/VobiuE7MP93ATTJFqq2JRNJsajicdpwbGuOnm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;9GuX5d+pNR7njcsxLYwa2aWrRAWh74/o4/61Grr5vHQbJaQSGG20EmMgIqLi8cUM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kNMM3GNjTYy/D3hoA5L/uW3RTNYUBOflEIodjpLEw5Iho5Sin03z5uitkZQhJpJA&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uovzu1QwYYNwRHrVjdkZ/w4dhkeEnkMTb+D5Oc1bUIeIqPIMjs6KlXXqxx+KhHaF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uzgg4FEbk/Xq9i69+6vQ/vauH1giQCk/d0LQcM/ewn0nEaF2JQkPWDx1wCZcccQ8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cBCQlV9DIsw8S7cNztizhqx3hzy/a8W7V3i6EY9Lyozp+o79cq+vCKyfg/lkbnj6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cU+B2V4WkrE5rd+hOA3OetM/+AOOdXloBC7kAb7qrl+HlvSwepQ8SuPuLiaE270f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EPDI698HXQiAHTOLwANeirOTBzx5V7NMjxufGaKQoyHg82uSn6bwqZEeUX4ibZ6y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sWJRUG9VnbMO23/peT+eE0W4B/xr/Ytxiu6M/pifvq13RXFetZm87y7WXWfOD/2a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;84RGRf/c2DOw8wOKw/9hT7WbqgCpbU0L4PuwfzYmG/EO/ENT0YODhNcBju5fc2JP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8dIOgnT5zrIAuWRpSSh65xUQPO6HDRVcLLfT9Q11LQIm7hR1W8wuOFZf7pFYSN0q&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bN5X1O/09Ln/KFm5AQ0EVOioXwEIAMIs4joBabeUbK9CNT+/Ov122tme06r0u8hI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LzDOxynqonnu8jODFXVXZeYoLzfpqdhOmOzIk9/N5ne6z+9KPXeU9lw3hRLDpbhH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4EiOpQmsKG7LAzF179fsvvuPMMF4ejI2q/woXpy197FeUQMmeS+o93aWqldmLCkh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lkJETAi39QVQmtzZpxIGf8hm0cvUIow41tFKsMyfiwN9ZV2AToKR4DhgXVYnAmZS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0s8IeuDtA1y4N95LyuSO/CBGEkt+xSG0EsQJ0fMWxAIZvdM/+IBXmICsPMi4jg04&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0NPDgidH6KZ7LxWPhLJF14vmBiOpdAWROTZo20DeNO77sBXy1rcAEQEAAYkDRAQY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AQIADwUCVOioXwIbAgUJAeEzgAEpCRB1qQRv1aG4rsBdIAQZAQIABgUCVOioXwAK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CRCrScAwoNhzIX8lCACYS/+fn6WmuykSLIcX2D3iFiEPi2krJnkguvhbzCIDaE0T&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MBFnVruyPFf2mpi5n2oXYA7/3w9exqjEZGzFHP05TZaHpxBSY9Lv1zYog/qUTYJY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ubbqj3KOAou6gqkiEI9Q8faMUREVsLA269m/0K2Aq9COA8QEKb89UCdB2J1962JJ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t2qzu7+9ju8rHW8QrG66KxnoZu68F/okM8bxEOXhIDDCmsBYfOpicV41x150NSwW&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BFbIAu2DdzNGlEEFNf5v68dQgHGLqrX03sxq9uEJ+SHJJP31fpmVYXQTVgToC3s4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oD8P8ITvoJGaeyuuU7h1xms3UvWL2TccCHY7LU/EOngP/0TweKs9s8GiEuRA0kaj&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;T4uIdatg3YLhWUkZ9dYEGDnePFQNiAbnTTavOCJ7KI38eeUwHMkL6UD1K6K948Wt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zSkijiUDliBdXcXbdhnYPpS6k13E682kaqlHckVvND1EMyIv9p5aEO/7DDO1Rznj&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ztGqGt2mXra3zPP0ABvp1OMn3pHMHytWf/dThmaa5KYe8l+ZR13TjxCj1+zzMnvs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xofQNod5RoO2eDdHyv6opI6d+Mzarf/jhHrdgZP0A1PPI6jqddzSfTPciCmO37g7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;O+SoXlo98l99D9yiNsf+cueGurqq79qD8rH0/mMSuwYcHjjaQCo9svP2vkRQPuJT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;b4E8ZJGthub/yYHn4KjUULTMd3dyxVNEEzwAL46HKXR8c+eaCTmcTmItblmhPIO4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3vinn8CsMcFss3gwl5BsFyef1kcOfQ8nvQXcf9YLWUxHwhbGosX3Qj+F6DIhQe2t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zsUMjHPjBV+x27no+1kySBkMP1BX/qeQamd1BxKSIwVEEsJ35GSYfSiCadSKz0e0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3lwzjVeIJ1//p7D4DdCJXXn5gZtmAG7qje+3RLuGexV8eMy8i4GdxA9Ca7B7OmEr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;J4XUjLAI8TjltqSMzL9I8Abiqomz7YcrvR4z2UqfEAPKaUFT3o+9oACAM+RAw4ts&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zU+PJi2gXOPIz9+4tS8I6BqOuQENBFToqH8BCADHJMrzdc0aJpnDO+NZFalF0MvY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iYTLsHaCoemXfSVKKGBBe0DpvGXmx/9bhgnejqEu/5RDLB4UbSXcZhaGcWIQeTlB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LOJaUqAP8wQQk7yBf39am9ZnCSUYl8EaXH3Yvy6ap0CRHgwFTZ/lTJxab4VJpV3v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;H58dtmJnBJuytkMDzVyYNFMZHNI8S/LwLyKKKnZVMvbup3MWIlwJmYYl6zGYyXIt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uCZPDsY4uLxi+CwS0OTY9TVvFpF2pEMYUEmyGc6LWLEwdf7yNbnplknCHcpTItrT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MwdUBk4FdOS8O4TtZtWB6M8XxH7QK+ORRQuGXaKte73/44LXz3ylbEFBFiP5ABEB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AAGJAiUEGAECAA8FAlToqH8CGwwFCQHhM4AACgkQdakEb9WhuK52KhAApIhlWxpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AgEGsYS1qKfZDS+s9F2m7wMAJmbTjEgHIQGz7RLO/H0vtUaofB7sr+3qWXFdeNdl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tEVEiWtui/En8GX/jxT8dRX+tB6gw9wZsITg/zpT6wi4GcVtZb80ggJL/PNeA56a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FQAQ2j1LNp+AAa13n9+6xPBZZmDEN3VlbmPh5SE8HQuVmb/7VcMpxF/vcjvwzU9i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7FyTvZjgsunADcL8c2tcJbTMr1H6V0T8p0ONSioongzV6zjVqCzbbJcnrTXjs5fg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ep2QKp4tlrfNs0By8wfNd9CSWS0g5zZZxBAPsJu9ZvRw6YAzDe0YOPIjuh4WWuPM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ZknMH3Y3CS/AuI7c5PuiwGe5R2rvNWfgyNiGuoflGNo/2UGYlmV9GLNTtojIXyDq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;r6qYThqIwoZCDKaF1HbkpQIGUm2UWhsChyQ3CHjTa0EFjqaK4ouQf3jQX0FHXhO1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AN/OqjJF9sDg/Z5Ip1vHvBK11WkpxL+JzUIWOeGLCJ930DPe35F11C4xOGKggk4G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0NnZkF3eIeXnzzpO7s60u3voqN7mjoBul50H0xjMp4cpWRc0x0jtN7M7rVx0hM6W&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SI+o+AuizthmTBqPlxQslYIKDD38rJeTTJkE7xcelSa4Ot86/L1tpQwe7yPYbffW&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BpGjgHybA5H97FlpNRZXHCwbRUYX8o60UwO5AQ0EVOiolAEIAMTidAKjv6icY7TC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Q21kHxmUV1eflLpZrH7C7B7kmXVLfdeM9MFWLIxOdueZa3cZvdygxL4uBs1cjwrX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7ALunTlN9sZVakl7jyA2qQU/LgYbahSrDqkaQ2qqeMfPnhEATn9hv+7U3OfdtnZ6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SA9Kx2OmtUcbhHbSMjR5ls5OtNE3pBfhwKey2I4sqJfbXfty0QWMOGCFV/zW6LLT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PrU+rYsWrJDfYhamX/ICIHL/XIlKudXLc4oX8uo8Yqb5TxhsxgeD1N1Sm5ZlgsIg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;U1cQjCoPyAHkRuFAEh5tFxSaO5pE92Py667vbj8FvtOjHu/eeWD/89lF9rcfpRlc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WhcdapcAEQEAAYkCJQQYAQIADwUCVOiolAIbIAUJAeEzgAAKCRB1qQRv1aG4rvPj&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;D/92Dj1wtWduRxDQteg1lPt/Fwo564O67lzknXGyjLqi9UGIc0gzfAA/SjfS1GjK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AZE4egPFAZDLnPcEfEnASAjH9OB3UXJOCVdQ8eiMl7GJfVuibOXlS/U1iow89v0X&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tCddK2RGx+eNHixXoOcRp5VatJI8V+knFfZaJP1gVh1OHnJGTpQDX0z8H4PJnFgI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CoS+QBtHjuOATfaqb+ljmZk9AMi0c4piXcL8cO/75wrjH5Q4imeQL0g7KQhoTAuV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ajm4Bd1qQ1yEXMTRL48uvGTCDdUgzrMiD1atDuLfMYlxnVjJMUM7aHZDqwxBFGO+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+GMvBDcU/KeC5NZMYeWE4WubM4NyLnU8vYQe2vD4yrJDQj9hegY3uSbfKaNhdXnO&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;v5q1xP3r+7KPf61JNUkTHD9Equlj4lHfiPGJlGATLI9QOrQjNBNratNonhWZ1ySM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ot+A39hnloc8hqJIIIGM52m+rEJwoe0PDmw4G9WbTLGJPcdoBNAYEr/hOi64Xp8u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tE/0LOy2ehTZ4GUjsu5j4Of5HEtZGWUb9/ye6Ngu7/NpLjd1a9CvysVoT2wM3A1U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gHJ5QJk14s4DlXLjDQe+RW+sQAD6RH5G/8xLelxOJbKD9uzg3xEO/0ZCjLuBi1Sg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3VeNi3ekId4dWZiwF0qi9VL/617oz6oYeYPlMFazfYymSQ==&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;=V+iC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- -----END PGP PUBLIC KEY BLOCK-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----BEGIN PGP SIGNATURE-----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version: GnuPG v1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iQEcBAEBAgAGBQJU6PnNAAoJEKtJwDCg2HMhQ4wH/A/fxoPpQjxhWmLViNAwhe56&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;k+xQPMLI4wAQLGGVSnBgTeU28T+/NU+lS9+F7lNBqTQGWfwgTpe5+KnKzVsdN0nR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;40sGb8t3/D6u5WH5xxmocyzT4l3OneD8SKqL6tn+G7HkiKLW22sjr5ogmQJ8mA3O&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;inFHQMBogeoMFKLnCfAONpfudyPagsTqxl40wQ5A+L5txEpIWFC5owFJcTBPYXlV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ytmpJcA0GOqNLQXVIAyq/XZEj19tEThiNJ2PZ6dtV1uQhjeixJIM7PkiawlSW9Do&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;5vHqWcNa88aCpfzdisnXPkLlPITqOFmPyajSyzLA+3HitHSpx+s8EGSero4I9C0=&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;=NWqO&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-----END PGP SIGNATURE-----&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Notmuch of a mail setup Part 1- mbsync, msmtp and systemd</title>
      <link>https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-1-mbsync-msmtp-and-systemd/</link>
      <pubDate>Fri, 16 Jan 2015 21:21:00 -0500</pubDate>
      <guid>https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-1-mbsync-msmtp-and-systemd/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;Some months back, I discovered the &lt;a href=&#34;http://notmuchmail.org/&#34;&gt;Notmuch&lt;/a&gt;&#xA;mail reader. It&amp;rsquo;s a pretty sweet piece of software based on Xapian to&#xA;index and tag your mail. As of today, the email setup described here has&#xA;displaced my Google Apps hosted Gmail for my personal domain. My goal&#xA;here is to document how I&amp;rsquo;ve setup my mail workflow.&lt;/p&gt;&#xA;&lt;p&gt;As it says in the name, Notmuch is not much of a mail client. It doesn&amp;rsquo;t&#xA;get any mail, send any mail, or even display any mail. All it does is to&#xA;provide an interface to a Xapian index for your mail. We need to provide&#xA;other software that will help us handle the other pieces.&lt;/p&gt;&#xA;&lt;p&gt;On one of my computers I&amp;rsquo;m using Arch Linux. I&amp;rsquo;ve tried just about every&#xA;Linux distribution in the past fourteen years and have found Arch to be&#xA;a pretty good sweet spot for a workstation. The distro has stabilized in&#xA;recent years and a system upgrade seems to be less likely to completely&#xA;bork your computer. I prefer debian stable on the server since it&amp;rsquo;s so&#xA;well tested. The instructions here might be a bit Arch-Centric. I&amp;rsquo;m&#xA;going to discuss sending and receiving mail before discussing how to&#xA;configure Notmuch. Sending and receiving mail are critical for just&#xA;about every GNU/Linux mail client and most of this should be generally&#xA;applicable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-the-mail&#34;&gt;Getting the mail&lt;/h2&gt;&#xA;&lt;p&gt;My mail lives on an IMAP server somewhere in cloud-land. I&amp;rsquo;ve had an&#xA;account on this machine for several years, but I&amp;rsquo;ve recently forwarded&#xA;all of the mail for my domains to this server. There are several good&#xA;IMAP clients these days that will synchronize the mail from your local&#xA;computer with your mail on the IMAP server.&lt;/p&gt;&#xA;&lt;p&gt;Among the ones that I&amp;rsquo;ve tried in the past are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.fetchmail.info&#34;&gt;Fetchmail&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://pyropus.ca/software/getmail/&#34;&gt;Getmail&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://offlineimap.org&#34;&gt;OfflineIMAP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://isync.sourceforge.net/&#34;&gt;MBsync&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My mail setup requires the use of STARTTLS, so Getmail and OfflineIMAP&#xA;are out of the question. They both support STARTTLS, but they&amp;rsquo;re using a&#xA;Python library that doesn&amp;rsquo;t perform any verification of the certificate.&#xA;This leaves me open to a MITM attack where someone upstream can present&#xA;a fake certificate and proxy my traffic. I ended up using MBSync to&#xA;fetch my mail from the server.&lt;/p&gt;&#xA;&lt;p&gt;The documentation for MBSync is pretty terse, but there&amp;rsquo;s a&#xA;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Mbsync&#34;&gt;nice page at the&#xA;ArchLinux wiki.&lt;/a&gt;. I&amp;rsquo;ve included a configuration file that works for my&#xA;needs.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; =~/.mbsyncrc= ##&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Address to connect to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host mail.servername.info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Port 143&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User BostonEnginerd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PassCmd &amp;#34;gnome-keyring-query get servername\\_mail&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSLType starttls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSLVersions TLSv1.2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SystemCertificates no # The following line should work. If get&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;certificate errors, uncomment the two following lines and read the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;#34;Troubleshooting&amp;#34; section.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CertificateFile ~/.cert/mail.servername.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IMAPStore servername-remote&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Account servername&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaildirStore servername-local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The trailing &amp;#34;/&amp;#34; is important&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Path ~/.mail/servername/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inbox ~/.mail/servernamw/Inbox&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Channel servername&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Master :servername-remote:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Slave :servername-local:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Patterns *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Automatically create missing mailboxes, both locally and on the server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Create Both&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Save the synchronization state files in the relevant directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SyncState *&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;You will need to get the ssl certificate from your server. If it&amp;rsquo;s a&#xA;&amp;ldquo;real&amp;rdquo; SSL certificate signed by a CA, including the CA certificate&#xA;should be sufficient. If it&amp;rsquo;s self-signed, it&amp;rsquo;s easiest to get the&#xA;certificate from the server and save it to a file. The commandline&#xA;openssl command can do that for you:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;openssl s_client -starttls imap -connect some.imap.server:port -showcerts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;I just copied and pasted from the &amp;mdash;&amp;mdash;-BEGIN CERTIFICATE&amp;mdash;&amp;ndash; to the&#xA;END CERTIFICATE line into a file and referred to that in the&#xA;configuration.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using the gnome-keyring-daemon to store the mail password so it&amp;rsquo;s&#xA;not sitting on my hard disk in plaintext. There&amp;rsquo;s a program in the AUR&#xA;called &lt;code&gt;gnome-keyring-query&lt;/code&gt; which allows you to interact with the&#xA;keyring on the command line. The &lt;code&gt;get&lt;/code&gt; command gets the requested key.&#xA;There is a &lt;code&gt;set&lt;/code&gt; command as well for storing a password. One of these&#xA;days, I might try to setup something that uses a certificate to&#xA;authenticate the client.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sending-the-mail&#34;&gt;Sending the Mail&lt;/h2&gt;&#xA;&lt;p&gt;The second most important thing that a mail client can do is send mail.&#xA;I&amp;rsquo;m using the SMTP server on my host, again using STARTTLS. To send the&#xA;mail, I decided to use a program called &lt;code&gt;msmtp&lt;/code&gt; which implements a small&#xA;send-only smtp client. The ArchLinux wiki has a&#xA;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Mbsync&#34;&gt;nice tutorial on using&#xA;this also&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After installing msmtp, you need to configure it. A working config file&#xA;is below:&lt;/p&gt;&#xA;&lt;h3 id=&#34;msmtprc&#34;&gt;&lt;code&gt;~/.msmtprc&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Set default values for all following accounts.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;defaults&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls_starttls on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls_fingerprint AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;logfile ~/.msmtp.log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# A freemail service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;account myserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host my.server.tld&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;port 9000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;from bostonenginerd@myserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;auth on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user myname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;passwordeval gnome-keyring-query get myserver.smtp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# A second mail address at the same freemail service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;account myotheraccountname : myserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;from myname@myotherdomain&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Set a default account&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;account default : myserver&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;I get the TLS fingerprint from the server using the &lt;code&gt;openssl s_client&lt;/code&gt;.&#xA;Again, I&amp;rsquo;m using the gnome-keyring to store the passwords encrypted on&#xA;the disk.&lt;/p&gt;&#xA;&lt;p&gt;Once msmtp is working you can send mail when your computer is online.&lt;/p&gt;&#xA;&lt;p&gt;A nice feature would be to queue messages when the network connection is&#xA;down and send them when you come back online. Fortunately recent&#xA;versions of msmtp come with a queue management script. On Arch, there&#xA;are two included. I&amp;rsquo;m using the one called &lt;code&gt;msmtpqueue&lt;/code&gt; which includes&#xA;three scripts - &lt;code&gt;msmtp-enqueue.sh&lt;/code&gt;, &lt;code&gt;msmtp-listqueue.sh&lt;/code&gt; and&#xA;&lt;code&gt;msmtp-runqueue.sh&lt;/code&gt;. These scripts pretty much do what they say. Copy&#xA;them to somewhere in your path.&lt;/p&gt;&#xA;&lt;p&gt;Using the scripts requires that you have a directory called&#xA;&lt;code&gt;~/.msmtpqueue&lt;/code&gt;. The email will be stored in this directory when you use&#xA;the msmtp-enqueue.sh command in your mail client. To send all the mail,&#xA;you can use the msmtp-runqueue.sh script when you&amp;rsquo;re connected to the&#xA;internet. In the past, I&amp;rsquo;ve had problems sending too many messages too&#xA;quickly. If you encounter this, you can put a sleep command in the&#xA;msmtp-runqueue.sh script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sending-and-receiving-automatically&#34;&gt;Sending and Receiving Automatically&lt;/h2&gt;&#xA;&lt;p&gt;Now that we&amp;rsquo;re able to receive and send mail from the command line, it&#xA;would be good to automate the process. I put together a hacked up script&#xA;that checks if we&amp;rsquo;re connected to the Internet, sends all of the mail&#xA;sitting in the queue and pulls in new messages. &lt;code&gt;nmcli&lt;/code&gt; interacts with&#xA;the NetworkManager daemon to query the state of the internet connection.&#xA;Possible answers are &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;portal&lt;/code&gt;, &lt;code&gt;limited&lt;/code&gt; and &lt;code&gt;full&lt;/code&gt;. We only&#xA;want to go through the trouble of trying to send messages when we have&#xA;full connectivity.&lt;/p&gt;&#xA;&lt;h3 id=&#34;scriptscheckmail.sh&#34;&gt;&lt;code&gt;~/scripts/checkmail.sh&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STATE=`nmcli networking connectivity`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;if [ $STATE = &amp;#39;full&amp;#39; ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    /usr/local/bin/msmtp-runqueue.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mbsync -qq accountname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &amp;#34;No internet connection.&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Now that we have this together, it would be awfully nice if my computer&#xA;would run this script periodically. There are two ways to do this now.&#xA;One way is to use cron. This is the standard way to accomplish something&#xA;like this.&lt;/p&gt;&#xA;&lt;p&gt;I thought that I would take the opportunity to play with what seems to&#xA;be the new init system for major Linux distributions &amp;ndash; systemd. I&#xA;haven&amp;rsquo;t really been following all the drama surrounding this project,&#xA;but it&amp;rsquo;s the new init system for Arch, Debian and Fedora. I&amp;rsquo;ve noticed&#xA;that computers with systemd tend to boot substantially faster than the&#xA;initV based systems. I was inspired to do this based on a blog post that&#xA;&lt;a href=&#34;http://joeyh.name/blog/entry/a_programmable_alarm_clock_using_systemd/&#34;&gt;Joey&#xA;Hess&lt;/a&gt; wrote to document building himself an alarm clock with systemd.&lt;/p&gt;&#xA;&lt;p&gt;I wanted to check for new mail and send old mail every fifteen minutes.&#xA;To do this requires that I create two files &lt;code&gt;checkmail.service&lt;/code&gt; and&#xA;&lt;code&gt;checkmail.timer&lt;/code&gt; in the &lt;code&gt;~/.config/systemd/user&lt;/code&gt; directory.&lt;/p&gt;&#xA;&lt;h3 id=&#34;checkmail.service&#34;&gt;&lt;code&gt;checkmail.service&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Unit]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description=check mail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RefuseManualStart=no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RefuseManualStop=yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Service]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type=oneshot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart=/home/bostonenginerd/scripts/checkmail.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This file defines what the service does. &lt;code&gt;Type=oneshot&lt;/code&gt; indicates that&#xA;this is not a daemon and will just run and exit. Setting the&#xA;&lt;code&gt;RefuseManualStop=yes&lt;/code&gt; variable will make &lt;code&gt;systemctl&lt;/code&gt; unable to stop the&#xA;service. In this case, that&amp;rsquo;s fine because the script will teriminate&#xA;when it&amp;rsquo;s done running. Now we need to setup the schedule for running&#xA;the job.&lt;/p&gt;&#xA;&lt;h3 id=&#34;checkmail.timer&#34;&gt;&lt;code&gt;checkmail.timer&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Unit]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description=Check Mail every fifteen minutes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RefuseManualStart=no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RefuseManualStop=no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Timer]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Persistent=false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OnBootSec= 5min&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OnUnitActiveSec= 15min&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Unit=checkmail.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Install]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy=default.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;In this file, we&amp;rsquo;re setting &lt;code&gt;RefuseManualStop=no&lt;/code&gt; because this will be a&#xA;long running service which we will can terminate at some point. In the&#xA;&lt;code&gt;[Timer]&lt;/code&gt; section, we set &lt;code&gt;OnBootSec&lt;/code&gt; to five minutes. This means that&#xA;the checkmail.service job will not run until five minutes after the&#xA;computer boots up. I put this in to wait some time for a network&#xA;connection to come up before trying to get the mail. The&#xA;&lt;code&gt;OnUnitActiveSec&lt;/code&gt; variable control the time delay in between repeats of&#xA;the job. Here it&amp;rsquo;s set to 15 minutes, but could be set for any interval.&lt;/p&gt;&#xA;&lt;p&gt;To start the timer, you should type&#xA;&lt;code&gt;systemctl --user start checkmail.timer&lt;/code&gt;. Using the command&#xA;&lt;code&gt;systemctl --user status checkmail.timer&lt;/code&gt; will allow you to see if the&#xA;timer was successfully started. To start the timer automatically, issue&#xA;the &lt;code&gt;systemctl --user start checkmail.timer&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;p&gt;Another neat command is &lt;code&gt;systemctl --user list-timers&lt;/code&gt;. This will list&#xA;all of the timers that you have active and how long until they&amp;rsquo;re&#xA;triggered again. Neat stuff. Systemd is pretty clever.&lt;/p&gt;&#xA;&lt;p&gt;Ideally we could simplify our script and add a systemd dependency to the&#xA;service that requires that the internet be active before running the&#xA;script. I&amp;rsquo;d love to hear any ideas on how to do that, or how to do this&#xA;more efficiently.&lt;/p&gt;&#xA;&lt;h2 id=&#34;end-part-1&#34;&gt;End Part 1&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll finish up the Notmuch specific portions of my email setup at a&#xA;later date.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
