Month: September 2020

Flavored Sparkling Water – Hops

I got a bunch of flavoring to make carbonated flavored water. In the process of researching all-in-one electric brewing systems, I happened across a recipe to make a *hop* sparkling water!

Boil water for 10 minutes to sterilize. Chill to 170 degrees. Add a bit of lemon or lime juice to drop PH to 4.6. Add ~2 grams of hops per gallon of water and let stand 20 minutes to make a hop tea. Filter out hops. Keg hop tea and carbonate. Voila, hop soda.

2020 Hop Harvest

The 2020 hop harvest is in. The centennial produced a handful of hops that I’ll use in a barbecue sauce. We got about 44 ounces of cascade — much of which will be used in the 2020 fresh hop beer. The new baby plants we got this year got to set their roots, and hopefully we’ll see some cones next year. I cannot wait to try some Medusa!

Low Carbon Footprint Future

A friend asked what people thought a sustainable lifestyle for Americans would look like.

Hopefully we go the route of larger, centralized change. Power producers move to renewable sources. I thought work-from-home would be a big thing from a resource usage reduction standpoint — I drive a couple of miles a week on average. Technology is there to support it for a lot of people, but it took a pandemic shutdown to actually get people working from home. Hopefully that sticks as a post-pandemic norm. Food production is a huge one to me — even if the entire population drastically reduces meat consumption, mainstream agricultural practices are still destructive.

On an individual level? There will need to be a lot of adjustments to what constitutes “normal”. More preserved foods (I mean naturally like the canned/pickled stuff) to reduce the need for refrigeration (there are 34 cubic ft refrigerators that pull like 850kWh a year!!!). Product availability too. I like banana and mango; but, short of figuring out how to have a banana tree in a walipini, that’s silly stuff to be eating regularly in Ohio.

What people envision as a “lawn” changes. The amount of resources, time, and effort it takes to sustain non-native grass plants … such a waste. Long term, I hope to see taller plants becoming socially acceptable … but I’d love to see a move away from the broad spectrum herbicide / fertilizer / constant watering approach to turf management even if someone is still mowing it every week.

Expectations around landscaping change to focus on edible landscaping — I’ve seen some people create visually stunning landscaping that produces fruits, nuts, and veggies. Since a lot of resources go into growing, transporting, and storing foods … anything that increases local production seems like a good direction. And it’s not like it’s harder to maintain a wall of flowering vines that happen to produce beans than a wall of vines that happen to produce … non-edible seeds for more flowering vines.

Single-stream recycling goes away. Yes, it’s a pain to separate colored and clear glass, metal cans, different numbered plastics, etc. But what we’ve got now is a lot of broken glass shards, unusable paper and cardboard, and plastics littering up a lot of other countries. No more kaolin clay on paper either — piles of that anywhere that’s been buying up Western recyclables. But seeing a glossy page in a magazine or a glossy advertisement in your mailbox will make you wonder how that company could be so irresponsible.

Used goods become more socially acceptable. The resources to manufacture something are a sunk cost. Maximize the useful life of products and the benefit from that fixed cost goes up. I remember my sister getting snippy with my mom for gifting her kids “used clothing”. It was clean, undamaged … perfectly serviceable clothing. Babies outgrow clothing too quickly to wear stuff out. Stain it, sure. But that’s easy enough to avoid. The resources that go into making a little shirt that a kid can wear for three months is astonishing if you think about it. And it makes total sense for six different kids to get use out of that resource expenditure. The one dealership around here has a 20 year warranty on their cars — and people drive the thing for a three year lease! A corollary to this is the eliminating the expectation that something’s going to fail in a year or two. Consumer pressure on manufacturers to spend the extra buck to make a long-lasting product that works for a decade or three (or will have a decent resale value if I only use it for a year). Same for fixing things — which may mean the return of local repair shops (when was the last time you got a vacuum repaired?) or may mean people learn to fix stuff themselves.

Commercialized re-use — I got an arctic fleece that’s made from plastic bottles & the company is set up to take back their fleece material, melt it down, and run it back through the production line. IIRC, they would cover shipping it back. Totally doing that with the jacket I made my daughter when she outgrows it. She had a little blurb in one of her school books last year about a company collecting used gum in containers along the streets and making stuff (rain boots!) from the used gum. I got a whole ewwwww! thinking about it … but realistically, it’s processed. I’m certain a lot of companies could have us ship back their products, do something, and turn it around into a new product. My ideal world would have people recycling plastic at home into 3d printer resin … but that’s a long way from mainstream.

Shared resources are something I don’t see becoming popular for most items. Unfortunate since the seven houses in my neighborhood could all share a single set of yard tools. But normalized work/weekend times mean *everyone* would have needed the mower on the sunny Saturday this week. Routine maintenance is one thing – predictable and easily divided out. But you go to pull the chainsaw out of the common shed and find the chain broken … buying your own chainsaw looks more appealing. Hiring out more services achieves a similar material reduction. Transporting the mower around is a resource drain, but one person with one piece of equipment can cut the lawns of a few dozen people. I could see service providers start advertising the environmental benefits of using their services — and people happily picking that up as the Right Thing To Do (with bonus extra free time).

There’s certainly efficiency to a lot of people living in small apartments — we could construct, maintain, heat, and cool the same 50k sq ft of space and support 25 people with 2k sq ft flats or 100 people with 500 sq ft flats. Possibly moving to more shared spaces coupled with efficiency-style flats — bit of a cultural shift to be relaxing, cooking, etc in communal spaces, but it’s certainly a more efficient use of space. Breaking buildings up into smaller flats may well increase population density. Potentially straining infrastructure (Atlanta traffic in the early 2000’s), water resources (may not currently be a problem in a lot of cities, but think about Cape Town with *more* people crammed in there) … and increased population density within cities might appeal to those already living in an urban environment, but it’s a nightmare scenario for people who like living in rural areas. Can make a sales pitch for living in a rural area too: some of an individual’s environmental impact comes from their food consumption. Not much is growing in the tiny flat, even if the complex does a community garden on the roof. The proliferation of “victory gardens” is big in my picture of reduced carbon footprint life.

I’m thinking developers start to include shared utility systems — most people I know who live in the suburbs don’t have enough space for geothermal HVAC or solar/wind farms. But the HOA could own a loop field run along roads and green-space areas. Hook up to the loop field like you would water or gas. The HOA could own alt energy facilities that produce energy for the neighborhood. Including a community garden in the development plan. Then again, I thought HOA’s would take over channel assignment for WiFi networks … I may vastly overestimate both the things about which people are willing to cede control and underestimate the number of things the HOA board wants to enforce. To some extent, apartment complexes could do the same thing — solar roof and windows, geothermal under the carpark (yeah, you run the risk of a leak meaning the carpark is ripped up … there are logistics to think through). Far more efficient construction either way — half of my house is underground & I basically cool it to cut down on humidity. Stays around 50 without heat in the winter too … which is uncomfortably cold, but I’ve always been curious what I could maintain with no energy input if the *whole* house was underground.

Problem is … I doubt many of these changes are ones people will make voluntarily. It’s less fun, less convenient, costs more (and I don’t mean to say time and money aren’t legit concerns — just that they are barriers to adopting a less impactful lifestyle). Which brings me to the apocalyptic (non-voluntary and quick) return to pre-industrialized interactions with the planet after massive environmental catastrophe option. Which is essentially the “do nothing” approach. I mean, I can blow 50k on solar/wind/batteries, run my geothermal heat off of said alt energy sources, drive the same electric car I’ve had for a decade, convert my property into a sustainable farm. Not buy any new stuff — maybe start growing cotton and get some sheep so I’m making my own clothes. 3D print with plastics I pick up from recycling centers. All sorts of extreme changes. Drop in the bucket as far a global environmental impact goes. And it’s not like it’s a set of changes that scales well. No changes for some time … then no one will be buying stuff because there’s no store. Or petrol to get there. Or electrical grid to power it. You’ll be eating what’s scavenged or produced within a few miles of your house because that’s all that’s available. Patching up that old sweatshirt because the alternative is no shirt.

What matters

Problem is that the ‘all lives matter’ response encompasses both the rational assertion that, yeah, all lives matter and the unhinged belief that, systemically and institutionally, all people get the same treatment.
 
The best response I’ve heard to ‘all lives matter’ is ‘no one needed to be told that *your* life matters’. Spent some time contemplating that idea. Historically, lives have not been ascribed the same value — healers, religious leaders, kings had more value than peasants, criminals, mentally ill, physically ill. Romans enslaved defeated nations and demanded tribute. I’m sure the best hunters in prehistoric tribes got preferential treatment. Academic agreement that all lives matter is fairly modern. It takes time for people’s beliefs and default actions to change.
 
Strange comparison, but I had a maths professor who had started Uni when electronic calculators first went mainstream. You’d do the problem and, if you had time, use the calculator to check your work. It took years of conditioning to get a “the calculator is going to be right” mindset. By the time he finished his PhD, a lot of people would use the calculator and then check the calculator’s work. He mentioned the story because, by the time I was in Uni, encountering a long addition problem had any student grabbing their calculator instead of a sheet of paper. Default state, over 30 years, had changed. And it would never have occurred to any of us to *check the calculator’s work*. Sounds silly even saying it. Which gives me hope that people’s default actions will eventually actualize the idea that all lives matter.

Listing Modules In Dynamically Linked Shared Object Libraries

We had to rebuild a server over the weekend — it’s a lot harder to get Apache and PHP set up when you don’t have root access to just install things from the yum repository. And, unlike the servers where I built httpd and php from source … we basically relayed requests to the Unix admin to have packages installed. One of the confusions during the whole process was that we didn’t know what to use as the module name for PHP to load in the httpd.conf file. The line from our old server (LoadModule php5_module /etc/httpd/modules/libphp5.so) produced an error that there was no such thing to load.

When a library fails to load with some error, I know to use ldd … but I didn’t know there was a way to list out the modules in a library. Fortunately, one of my coworkers had already run nm and listed out the modules — nm -D –defined-only sharedLibraryFile | grep module — and we were able to identify that the libphp5.so that we had wasn’t anything like the one on the old server. By listing the modules for each of the shared object libraries installed by the php package, we got the proper module name for httpd.conf

Testing A New Web Server Without DNS Changes

When migrating to a new server, it’s good to validate site functionality before redirecting users to the new host. i.e. I have anya.rushworth.us set up in the httpd config on both server1 and server2. DNS currently points traffic to server1, but I need to test the site on server2.

Approach #1 – With administrative access to the host

Edit your hosts file – open an administrative command prompt

Edit %SYSTEMROOT%\system32\drivers\etc\hosts and add lines with the IP address WHITESPACE and the hostname(s). E.G.
127.0.0.1 lisatest lisatest.rushworth.us lisatest2 lisatest2.rushworth.us
10.1.2.3 otherhost otherhost.rushworth.us
10.2.3.4 anya anya.rushworth.us

Clear your DNS cache (ipconfig /flushdns) and navigate to the URL. You’ll be directed the IP address from your hosts file instead of the DNS registered address.

Approach #2 – No admin access

Install ModHeader in your Chrome browser and click the extension to modify the headers or install ModHeader in your Firefox browser. Click on the extension icon to set a header value.

Add a “Host” header with the value of the virtual host name you need to test

Navigate to the hostname of the new server – https://server2.rushworth.us – but the web server will receive the Host header you configured in ModHeader and serve the web site based on that host header.

 

Creamy Corn Chowder

Creamy Corn Chowder

Recipe by LisaCourse: Dinner, SoupsCuisine: AmericanDifficulty: Easy
Servings

4

servings
Prep time

30

minutes
Cooking time

40

minutes

Ingredients

  • 2 Tbsp butter

  • 1 medium onion, chopped

  • 2 cloves garlic, minced

  • 5 ears fresh corn, kernels cut from cobs

  • 6 cups stock (veggie, chicken)

  • 1 lb potatoes, diced

  • 2 tbsp corn starch

  • Bacon (or veggie bacon)

  • Cheddar cheese

Method

  • Melt the butter in a stock pot and saute onions until translucent.
  • Add garlic and saute until fragrant
  • Add corn kernels and saute until they start to caramelize
  • Add stock, corn cobs, and potatoes. Simmer for 30 minutes.
  • Mix cornstarch with a little water to form non-Newtonian fluid. Slowly mix into soup to thicken broth.
  • Near the end of cooking time, saute bacon.
  • Ladle soup into bowls. Sprinkle with cheddar cheese and bacon.

Exporting A Microsoft Teams Chat

There’s no export functionality in MS Teams chats and conversations. From Microsoft’s standpoint, this makes sense — customer retention. From the customer standpoint, however? There are times I really want to transfer a conversation elsewhere for some reason. You can copy/paste individual text bubbles. If you only need to get one or two bubbles, manually copying the text is going to be quicker. And, for those with special access, there’s the Security & Compliance discovery export stuff as well as an approach using the Graph API. But for the rest of us general users, there’s no easy way to export the bunch of little chat bubbles that comprise a MS Teams chat.  There is, however, a not-too-hard way to do it in the Teams web client.

I’ll prefix these instructions with a disclaimer – your company may have document retention in Teams. When you export your chat content, you’ll need to maintain appropriate retention policies yourself. In IT, we had a few information categories where retention was “useful life” – we could retain system documentation as long as the system was used. If you’re exporting a chat to keep something you are allowed to keep and then keep it outside of Teams … that’s awesome. If you are trying to keep something the company’s retention policy says should be removed … that’s probably not awesome.

Once you’ve determined that the info you are exporting is OK to export and maintain elsewhere, here’s how to export a Teams chat from within the Teams web client. Step 1, of course, is to lot into Teams at https://teams.microsoft.com and go to the chat you want to export. Scroll up to the top of the chat. If you have a really long chat, it may not be possible to export the entire thing using this approach. I might play around with it in the future, by most of my conversations are in Teams channels so I don’t have a chat that’s more than 30 or so messages.

Once you are at the top of the chat, open the developer tools (ctrl-shift-i in Chrome). Clear the errors — they clutter up the screen.

Paste the following script into the console and hit enter:

var strRunningText = "";
var collectionMessageBubbles = document.querySelectorAll('.message-body-content, .message-datetime');

for (let objMessageBubble of collectionMessageBubbles) {
     strRunningText = strRunningText + "\n" + objMessageBubble.textContent;
}

console.log(strRunningText);

If you have a long series of chat messages, you’ll get some of the chat displayed and a button to copy the entire chat content to your clipboard.

If you have a shorter series of chat messages, you’ll have the text of the chat in the console window. You can highlight it and copy/paste the text elsewhere.

There’s a little cleanup that can be done – the content of the message-datetime elements have a beginning and trailing newline character along with a bunch of whitespace. You can get a cleaner timestamp (but, if you embed code within your messages … which I do … the code sections have a lot of extraneous newlines):

var strRunningText = "";
var collectionMessageBubbles = document.querySelectorAll('.message-body-content, .message-datetime');

for (let objMessageBubble of collectionMessageBubbles) {
     strRunningText = strRunningText + "\n" + objMessageBubble.innerText;
}

console.log(strRunningText);

The same JavaScript works in the Teams channel conversations except the channel conversations tend to be longer … so you’re going to export some subset of the channel conversation around where you are in the web browser.

* I realized, during a multi-person chat last week, that I don’t grab the name of the individual who posted the message to the chat. Grabbing the person’s name should just entail adding the identifier for the name element into the querySelectorAll list … but that’s not something I’ve had an opportunity to check yet.