Skills

The Weekly Feast – Green Goddess Meatballs

I have always loved green goddess dressing. It’s creamy and refreshing, and so garlicky! This recipe teaches you how to make it yourself, and then uses it to make some delicious meatballs. I hope you like this as much as I do.

Ingredients:

  • 1 small garlic clove, peeled and smashed
  • ½ cup Greek or cashew yogurt
  • ½ cup mayonnaise
  • ½ cup packed fresh parsley, coarsely chopped
  • ¼ cup fresh tarragon, coarsely chopped
  • ¼ cup thinly sliced chives
  • 1 tsp finely grated lemon zest
  • 1 tbsp fresh lemon juice
  • ½ tsp fish sauce or 1 anchovy fillet
  • kosher salt
  • freshly ground black pepper
  • 1 large egg
  • ½ cup panko or breadcrumbs
  • 1 tsp salt
  • freshly ground black pepper
  • 1 lb ground chicken or turkey
  • cooking spray
  • cooked orzo, for serving (optional)

In a blender or food processor, add the garlic, yogurt, mayonnaise, parsley, tarragon, chives, lemon zest, lemon juice, fish sauce, 1/2 tsp of salt, and a few grinds of pepper. Blend or pulse the ingredients together until smooth. Season with more salt and pepper, if needed. Transfer 1/4 cup sauce to a large bowl (for the meatballs). Transfer remaining sauce to a medium bowl and refrigerate until ready to use.

In the large bowl with the sauce, add your egg, panko or breadcrumbs, salt, and a few grinds of pepper. Stir to combine, then add the ground chicken and gently mix to combine (do not over-mix). You want to use your hands for this, rather than a fork or spoon. Make sure you have the panko and spices well integrated. Refrigerate until mixture firms up, about 10 minutes.

Arrange a rack in center of oven, and pre-heat it to 450*F. Lightly grease a lipped baking sheet with cooking spray or cover it with parchment paper. Roll the meat mixture into 20 balls and arrange them on prepared baking sheet.

Bake the meatballs, watching closely, until cooked through and browned on top, 6 to 8 minutes. Turn the meatballs over and continue to cook for 5 to 8 minutes, checking for doneness. Divide the orzo (if you are using it) among plates. Top the orzo with meatballs, then drizzle with the refrigerated green goddess sauce.

Notes:

This recipe originally called for broiling the meatballs, but I find you get much better results if you bake them instead. It takes a bit longer, but it’s worth it. You can check your meatballs for readiness by cutting one in half to see if it’s cooked through, or you can use a meat thermometer to check if the internal temperature has reached 165*F.

I made a double batch of the dressing, and I’m glad I did. This stuff is delicious! Beware; you will not have to worry about vampires for a couple of days after eating this.

I use cashew yogurt in this because I’m allergic to dairy. There’s barely any difference in the end result. You can make the dressing vegan by using a vegan mayo, such as Nayanaise, or just leaving that out entirely and using the cashew (or other non-dairy) yogurt. The herbs are the star of this dressing, so feel free to experiment with it a bit. I’ll be doing some experimenting this week, when I add winter savory to mine!

Prepping – Are you ready?

So there’s a lot going on right now. Politically speaking, here in America we’re preparing for the “no kings day” bullshit. There are the usual California summer riots (pick your flavor), though it should be noted they’re only taking up a tiny portion of Los Angeles despite what the media would like you to believe. There’s the other protests and riots about immigration. On top of that, you have people who are boycotting the Fourth of July because of the bad orange man, and are instead planning funerals or some such. Israel just bombed Iran, which could get dicey. Ireland is having its own violent protests about immigration. On and on.

The shit may not hit the fan this weekend. It might not do so this year. Hell, it’s entirely possible it may never happen. That’s my favorite option, though I don’t ever count on it. I plan for “it goes down today” and hope for “never happens and you’re left with food in the basement for any other kind of emergency.”

I’m not doing anything special to prep for tomorrow. I’m over at my partner’s place, and we’re going to sit quietly at home. We might go for a walk in the local forest, but that’s about it. There aren’t any things planned for either his area or mine (btw, this is one of the reasons why I still have friends on the Left… so I know where and when shit goes down), but we don’t want to chance it. Sunday we have to go out of town to pick up a wall tent for 18th century and medieval events, but we’re going from one small town to another small town, all in one state in which he has a carry permit for. While he’s nominally Left(ish), he’s hella 2A positive, and he’s also not afraid to drive over someone to protect me or us. So I feel relatively safe. I know he won’t slow down if people are doing stupid stuff on one of the side roads we have to drive on.

No, I don’t carry. There are reasons, but frankly it’s nunya*. I fully support 2A, and I pick partners who are both 2A positive, and like to carry on the regular. I arm myself in other ways. Also, frankly… having boobs helps. Don’t ask, just accept. Anyhow…

My house has food. If the worst happened and martial law was called for, we’d just stay home with the doors closed and our ears open. We have eyes outside the house, so we don’t need to go out to check on things. We’re well armed, well stocked, and there’s no reason to leave. If it got bad, my partner would join us here, because we’re just better prepared than he is. That would leave us in a very comfortable position regarding keeping zombies at bay.

In all likelihood, nothing would happen near me. We live in the middle of nowhere (on purpose), BECAUSE of stuff like this. As a youngster, I longed for the bustle of a city. Today, I just want those damn kids to stay off my goddamn lawn. I’m glad of that, because it’s safer here. Safer, not safe, though. I have to always keep that in mind. There are always quiet people local to you, even in the middle of nowhere, that could be agitators or rioters in the right situation. So we stay ready, and we remember that we’re only as safe as we’re prepared to be.

We’re pretty safe, though.

If you haven’t figured out a way to batten down your hatches, spend time tonight doing so. If you live in a suburban or urban area, or god forbid a big city like NYC or Boston, make sure you are READY for tomorrow. It might be a big nothing burger, in which case you can laugh at me on Monday and I’ll gladly accept chiding. On the other hand, it might be a big something, and I’d like to know you’re all as ready as you can be. Go pick up some rice and beans, and a few cans of tuna and spam. Grab some bottled water. Just in case. It’s summer, and none of it will go to waste. You can have a bbq on July 4th and use it all up, if that’s what you want. But go get some extras. NOW.

I hope you all have a very quiet weekend. I hope it contains nothing more than mowing the lawn, having some steaks on the bbq, and yelling at the kids to stop letting mosquitoes in the house.

*nunya – nunya biznez, aka none of your business.

Complex Systems

My internal infrastructure is getting better and better. Unfortunately, it is still not stable enough.

The router is having issues with memory. I need to add more memory to fix the issues. The problem being that I need to take the router out of production to do so. I’ve not been willing to do that.

The symptom is that connections time out. The fix, restart HAProxy.

HAProxy forwards traffic to the ingress service. This should be running on multiple servers, but it currently is not. There is an issue which I have not resolved where communications from the second ingress service gets lost, leading to the gateway not responding.

This means that when the server that runs the ingress service has to reboot, all ingress stops.

The network is broken into segments, each segment is on a different subnet. Ceph prefers to be on a single subnet.

My solution was to use OpenVSwitch to create a virtual network for Ceph. This works great!

This adds a dependency on OpenVSwitch, which should not be an issue.

The underlaying physical network depends on good routing. The reason I don’t use static is that some nodes have multiple paths and I want there to be multiple paths for every node. This adds a dependency on the routing stack.

Free Range Routing, or FRR, is the solution. It supports OSPF, which is the correct routing protocol for internal routing. It just works.

Unfortunately, FRR and the Linux kernel will stop talking to each other. When this happens, we lose routing of the physical networks.

When we lose routing on the physical network, the OpenVSwitch network stops working.

If the OpenVSwitch network goes down, then the different Ceph nodes can’t talk to each other.

All of this is to say, I’m sorry for the issues you have been seeing with this site. Thank you for hanging in there.

I had to find the sick FRRs and restart them. Once that happened, everything came back to life.

The Weekly Feast – Refreshing Gazpacho Soup

When the deep heat of summer hits, and the idea of cooking anything makes you queasy, this is the perfect meal for any time of the day. I adore gazpacho soup because it’s all the deliciousness of a salsa but in a soup. There are layers of delicate flavor that combine to make something incredibly special. Just don’t be like Rimmer on Red Dwarf and ask for it piping hot. 😉

Ingredients:

  • 2 ½ pounds ripe red tomatoes (about 4 large or 9 small)
  • 1 small Vidalia, sweet yellow onion, or red onion (½ pound), peeled
  • 1 small cucumber (½ pound), peeled and seeded
  • 1 medium red bell pepper, cored and seeded
  • ¼ cup fresh basil leaves, plus extra for garnish
  • 1 large garlic clove, peeled
  • ¼ cup extra-virgin olive oil
  • 2 tablespoons sherry vinegar or red wine vinegar
  • ¾ teaspoon fine salt
  • Freshly ground black pepper
  • V8 juice OR tomato juice (optional)
  • curly parsley, Italian parsley, cilantro, green onion (optional, garnish)

First, prepare your vegetables. You’ll need a blender or food processor bowl, a medium serving bowl, and a small bowl for mixing, all ready to use. Core your tomatoes and cut half of them up into about one inch chunks. The chunks go into your blender. The other half of the tomatoes should be chopped fine and added to the serving bowl. All of the juice and seeds can be tossed in the blender. Do the same with your onion, the cucumber, and the bell pepper, though discard the pepper seeds.

Add the basil, garlic, olive oil, vinegar, salt, and a half teaspoon or so of black pepper, preferably fresh ground. Put the lid on your blender and blend the contents, starting on the pulse and then gradually increasing the speed to high. You want the mixture to be completely smooth, and it will take about two minutes. If there isn’t enough liquid, you can add in a little V8 or tomato juice, a tablespoon at a time until it’s the right consistency and thickness for you.

Add the liquid to the fine chopped vegetables, and stir well. Again, if there isn’t enough liquid, feel free to add more V8 or tomato juice to make it “correctly soupy” for you. Add in a pinch of salt and pepper, to taste, and set in the fridge to chill. The gazpacho needs at least two hours and up to 24 hours to rest.

Before serving, give it another taste. It may need a bit more salt. If you like, you can top the gazpacho with finely minced parsley and/or cilantro, or sprinkle it with thinly sliced green onion or chives. Small basil leaves are also a nice addition.

Notes:

I usually serve this soup with a side of salad that includes a good protein such as chicken or shrimp. As a fun alternative, you can switch out the V8 and add in Clamato and a splash of hot sauce, and top the soup itself with shrimp for a “shrimp salad soup” that is really tasty. You can also consider adding miniature croutons, tiny shrimp, or even other summer vegetables such as corn, finely chopped zucchini, etc.

Paqueta, Rio de Janeiro, Brazil. 2017

Net Making

Skill is not knowledge. Knowledge is not skill.

20 years ago, I made one net with a 4-inch mesh with rope. It was large enough to roll a small boulder into with the backhoe, then I could lift the boulder and move it where I needed before dumping the boulder.

I designed it to be able to lift in excess of 1.5 tons.

Once I completed that task, I forgot about making nets.

The primary reason? In my state, fishing with a net is (generally) not legal. I had intended to make a gill net to take fish from a local river.

Getting Started

The cost of tools for netting is very low. You want a netting needle and a sizing stick. I made my sizing sticks from a chunk of wood off an oak tree. I did purchase a set of netting needles. I will make a netting needle shortly.

Other than the needle and the sizing stick or card, you will need cordage. I started this learning adventure because I saw an ad for “Tarred Bank Line #36”. The price was ok, and it had a nearly five-star rating.

When it arrived, I found that #36 was larger than I wanted for what I was going to make. I ordered a pound of #15, which turned out to be precisely the size I wanted. Tensile strength of approximately 117lbs and a diameter of 0.051inches.

The first loops

They say you can make a net without a sizing card/stick. Don’t bother. The time/cost of a sizing stick is so low and the advantage is so great that it isn’t worthwhile to do without.

You make a loop. I tied a double half hitch, knowing I was going to be pulling the loop tighter after the first set of loops was cast on.

Use the sizing stick to make your first loop the correct size. Tie a double half hitch on the main loop. Then make your second loop using the same sequence. Repeat until you have created 16 new loops.

Pull your main loop tight.

Second Round

This is where you start tieing actual net knots. Each loop you add, from here out, will be a tied to an existing loop with a sheet bend.

Tie the loose end and tie it to a metal ring or a dog clip or carabiner. I would use a carabiner, but I don’t have any handy. Tie a six-foot length of line to the ring. Now anchor the long line to something sturdy, such as the leg of a heavy table.

I used #36 bank line. I wrap it around something, then put a one-way slip knot in. This allows me to shorten the anchor line as my net gets bigger. Otherwise, I need to move further from the anchor point, which might not be possible.

To make your first true loop, run your line around your sizing stick, down the front and up the back. Bring your needle from back to front from your first static loop. Pull everything tight, so that the static loop is pulled hard against the top of your sizing stick. Use your thumb to pinch the running line hard against the stick to keep it from loosening.

Take your needle over the top of your sizing stick and around both lines of the static loop, back to the front. This should leave you with a loop in the running line resting on the top/front of the stick. You want to feed the needle down through this loop.

Now pull the running light tight, slowly. You should feel and see a bight tightening around the static loop. As it starts to pull up, it will pull out from under your thumb. Make sure that the loop coming from under your thumb snaps on top of the static loop.

If this knot is made correctly, it will be small, tight and lock the line in place on the static loop and create a new static loop.

You can now repeat for the next static loop. You will now have two new loops.

We want to expand the net, so we are going to make a second loop on the same static loop.

This pattern repeats, 1 loop to a static loop, then 2 to the next loop.

When done, you should have 24 new static loops, completing your second round.

Note, you will have been adding loops to your sizing stick as you go. When you need, just slip the loops off the back end of your sizing stick.

Third Round

This is where it starts to get fast and easy. From here it is a one for one. You keep going around the net until your needle runs out of line.

Fourth Round

If you want to make your net a little bigger, you can do a 1,2 pattern or a 1,1,2 pattern. It all depends on what you require and want. For me, the fourth through final rounds were the same.

Tieing On

When you reach the end of the line on your needle, it isn’t an issue. Because the net is a series of knots, nothing will happen as you prepare the next length of line.

Load your netting needle. Put as much as you are comfortable pushing through your loops. Unlike other fiber things I’ve done, such as knitting, there is nothing difficult in tieing on.

Once you have loaded your needle. Tie the tail of the old line to the new line using a sheet bend. The loop should be in the new line. Trim the loose ends relatively close. Not so close that the knot will pull apart under tension, but not so long that you have something distasteful.

The only issue is to make sure that the connecting knot does not interfere with tieing on to the static loops. It shouldn’t be placed within the knot connecting to the static loop.

Finishing

When you are done, stop. Trim the tail close, but not too close.

Now get a larger line to use for the rim and handle.

I used the #36 line. I should have used something larger. Or I need to whip the line to make a comfortable handle.

Feed the finishing line through each static loop in the final round. Always feed in the same direction. For me, that is from in to out. But it doesn’t matter.

You are going to tie the finishing line to itself to create a finishing loop or handle.

Make sure the finishing loop is large enough that the mouth of your net will open as wide as you want or need.

It was surprising to me how large the mouth will open.

Put something in your need to shape it. Hang it by the handles, enjoy the results.

Conclusion


The next one will be better.

Here is an ok video on what I made. I got sizing (16 and 24) from her video.

Prepping – Failure

On Wednesday, I went to the Fort to do some interpreting for a home schooling group. I always love when I have homeschoolers in, because they ask the BEST questions. This group was a fantastic one, and it included a bunch of kids who were very obviously not normal students but who nonetheless were engaged and engaging. I loved their questions, their interest, and their sharing of their own successes and failures.

This particular week, I decided I was going to try a new to me bread recipe. This is a 1750s “receipt” that came to me from the internet, and the original poster received it by way of people in Illinois, who got it from French settlers, who were originally from the New France area during the Fort’s era. With such an illustrious ancestry, I decided this was THE recipe to work with. Also, the recipe only makes a single loaf instead of two, which is nice because I’m rather afloat in bread right now.

It’s an easy loaf, very simple to pull together, with half the kneading required of my other bread. I was excited to give it a try! I got into the Fort, started up the fires to warm the oven and hearth, and pulled out all the items I needed to make my bread: flour, yeast, water (very warm to the touch), and honey. Like I said, simple recipe. To that, I added my big mixing bowl (a shiny wooden bowl with such a fine grain that the dough barely sticks to it) and a wooden spoon for stirring.

As the kids and their accompanying adults trickled in, I started the process of mixing together my ingredients. As a baker with a bit more experience, I started with my water and yeast, rather than the flour (it’s much easier to add flour if your dough is too wet, but much more difficult to add water if it’s too dry). I put 1.5 cups of water into the bowl, and sprinkled it with about a tablespoon of dry active yeast. I explained to the kids that they didn’t have dry active yeast in the 1750s, and most likely would have used either a bit of salt rising (a golf ball sized bit of the last bread dough you made, saved in a bowl of milk and kept in the salt barrel until needed) or the barm off the top of the beer vat as the source of their yeast. Once the yeast started bubbling, I added in a dollop of honey (about 1.5 tbsp) and stirred until it was dissolved.

Read More

SCOTUS Follow Up

Yesterday’s article was a surprise to me. I started the post with one mindset, and ended in a different place. Occasionally, it helps to talk out your issues.

It started with my statement, Snope should have been GVRed.

Why? Because the Supreme Court has already done a gun ban case. It is a slam dunk, easy case.

Slam dunk, easy cases, don’t make good law. Just like bad facts make bad law, easy cases don’t advance the law.

Every case the Supreme Court takes is important. They intend it to be important. While every case is important to somebody, or to a group, not every case is important to the country or the Court.

Every Second Amendment case is important to me. I want every court at every level to make a good ruling based on the plain text of the Second Amendment and this Nation’s historical tradition of firearms regulation. To do anything less is to flaunt the rule of law and our founding documents.

Too many judges are agenda-driven hacks, black robed wannabe tyrants, operating their rogue inferior court as if they are the supreme authority of this nation.

When an inferior court makes a bad decision, their superior court should step in and set them right.

If every inferior court judge had every bad decision slapped down, there would be many fewer bad decisions. On Monday, the court decided 116 cases.

Of those, three cases were an invitation to the Solicitor General to file a motion on how the US Government stands in the case.

Two were, “You can proceed as a pauper, you must pay to play.” One denial of cert had two dissents written. The rest are denials. Most of which are dealt with by being put in a column titled “Denied”. Nothing more.

If the Supreme Court was capable of dealing with more cases in a meaningful way, then I could see them taking these slam dunk cases.

Unfortunately, the court has painted itself into a corner in what they feel they can say. I can wish all I want that a GVR would say more than “in light of Rahimi“, but a GVR never has more than “do it over obeying this new opinion”. This should be happening with more targeted language.

But they don’t.

Instead, they hear 65 to 70 cases per term. They decide which cases will have the most impact on our country. Which cases will bring common understanding across all the circuits.

They choose. And right now, Roberts is not going to let more than a couple of Second Amendment cases be heard per term.

I agree with Thomas and Alito, the Court should have dealt with Snope in some way other than ignoring it.

Dealing with it now might make a difference in the next few years.

More likely, it would not have accomplished anything. The Court is supposed to set guiding principles. It isn’t supposed to be fixing individual results.

Assume the Court said, “AR-15s are arms under the plain text of the Second Amendment. They are in common use. They cannot be banned.”

What would change in the Ninth Circus court? The First, Second Third, Forth and Seventh Circuit? Nothing.

“The Supreme Court has said that Semi Automatic rifles are arms under the plain text, they are most similar to machine guns which can presumptively be banned.”

Or they require a permit to own an “assault weapon”. It is no longer “banned”. Instead, you are required to register as an assault weapon owner, pay $1000/year per assault weapon.

They didn’t ban those evil assault weapons, they are just making sure that people treat the ownership of such weapons seriously.

We need to see advancement in the Second Amendment.

When Bruen was decided, multiple cases were GVRed. Those cases are making their way back to the Supreme Court. If the Court takes any of them and produces a major opinion, like Heller, or Bruen, then we are on track.

So I’m licking my wounds and preparing to fight for the rights of The People to keep and bear arms.

The Weekly Feast – Buran

A Middle Eastern, medieval recipe for meatballs in an eggplant yogurt sauce.
Take eggplant, and boil lightly in water and salt, then take out and dry for an hour. Fry this in fresh sesame oil until cooked; peel, put into a dish or a large cup, and beat well with a ladle, until it becomes like kabis. Add a little salt and dry coriander. Take some Persian milk, mix in garlic, pour over the eggplant, and mix together well. Take red meat, mince fine, make into small cabobs, and melting fresh tail, throw the meat into it, stirring until browned. Then cover with water, and stew until the water has evaporated and only the oils remain. Pour on top of this the eggplant, sprinkle with fine ground cumin and cinnamon, and serve. (BCB III.7)
This particular meal is one of my favorites to eat, but I despise cooking it. It takes forever. It’s so worth it, though! The yogurt sauce is very reminiscent of Baba Ganoush, and if you have any left over, use it as dip the next day. Believe me, your taste buds will dance with joy!
Ingredients
  • 2 lbs eggplant
  • sesame oil
  • 1 lb ground meat (lamb, meatball mix, or beef, twice ground)
  • 1 tbsp shawarma/mild curry spice per pound of meat
  • 1/2 tsp salt
  • 1 tsp ground coriander seed
  • 1/2 cup plain Greek yogurt OR 1/2 cup plain yogurt plus a pinch of salt
  • 2 cloves garlic, crushed
  • 2 tbsp finely minced parsley
  • 1/2 tsp ground cumin + 1/4 tsp cinnamon, mixed

Read More

Prepping – RTE Meals

When I prep, I store a variety of types of meals. I have a lot of rice and beans, as I can make those into dozens of different meals with very different spice pallets. There’s one type of meal that I do store at least a few of, for emergencies. That’s RTE, or Ready To Eat meals. These require either no prep at all, or just water and heat.

RTE meals are an important part of any prep for any situation. There are simply going to be times when you do not have the time or energy to cook, but you still need to eat. Having meals that require little to no preparation time will save you, time and again. I don’t mean for zombie apocalypse, either, though they work for that too. I mean for that moment when the power goes out right after you’ve finished 3 hours of snow blowing, and you’re exhausted and starving and now can’t use your stove. Or for when you’re backpacking, you get caught in a storm, and you’re stuck under a rock for a few hours for safety’s sake, and you need to eat.

While you can certainly go out and buy WiseFoods or any of the other “emergency bucket” type emergency meal kits, it’s very easy to assemble your own. Job Lots, Walmart, and even Amazon carry many very good options. It used to be that you’d save your cans of tuna for those emergencies, but now the tuna comes as part of an entire meal.

Starkist Tuna Snacks are the gold standard around here. We keep them in our go-bags, eat them as evening snacks, and they always go with me when I am camping away from the house. It’s fast and easy, and requires no heating. Simply slap the tuna on the cracker, and you’re ready to go.

Bumblebee Tuna Bowls are really yummy, and again, require no heating. There are three different kinds available on Amazon, but I’m told you can find a few more if you go looking. These include pasta, rice, and/or beans, and include vegetables as well. You’re getting a whole meal here. At 190 calories each, they’re a quick fix for a hungry person. They also do not contain any added sugars, so they can be eaten by diabetics. They are NOT good for people with Celiac though.

Starkist Smart Bowls are rice and beans with tuna, in a variety of flavors. These are the soft packs, so they stack easily in a backpack or go bag. They’re lower in fat and higher in carbs than the Bumblebee bowls, but neither of those are likely to be an issue when you’re dealing with an emergency situation.

At the slightly more bougie level, we have Cole’s Open and Eat Meals. These are a bit more expensive, but the quality is also higher. You get a larger meal, with more calories (250), and a variety of flavors. The reviews of them are pretty good, with the main sticking point being price. This is definitely one of those “you get what you pay for” moments.

And then there’s the ones I like best: Freshe Gourmet Canned Tuna. They have tuna and they have salmon, four flavors of each. You can buy them in bulk, and the price is a bit less than Cole’s. Each style has a different calorie amount listed, so you have to look at each of the flavors separately. Having eaten these both cold and warmed, I can say they are VERY yummy. I went out and bought a bunch of these at my earliest convenience after a friend introduced me to them.

There are chicken versions and salmon versions of all of the above. I would guess you can probably find ham and Spam ones, as well. I prefer to have the cans in my camping bin, because they can safely rattle around in the bottom of the bin and not be harmed. They will still be good to eat next summer, if I don’t get to them. The flat pack ones are best for backpacks and go bags. I usually slip mine into the front pouch of my backpack or in the interior flat area of my go bag, where they won’t be punctured.  Read More

Software source code. Program code. Code on a computer screen. The developer is working on program codes in the office. Photo with source code. Python IDE

One step forward …

Tuesday I picked Ally up at The Fort at No 4. On the way home, we stopped to do some banking and pick up some groceries.

As we were walking to the bank I said, “Oh, it is closed.”

“Why?”

“Because it’s Sunday.”

“Huh?”

I then got home and posted “Tuesday Tunes” to show up on Wednesday.

I’ve been working on a major website. This includes a content management system for the site that meets the requirements for that vertical.

What I decided on was a “management bar” for those logged in as manager. When they activate the “edit page” function, all the blocks that can be edited are highlighted. Click on the block to start editing the block.

Save your changes. When you are satisfied, click “make live” on the management bar to make all the changes at once.

There are a few good tools for editing text in place.

This left all the other blocks, image editor, carousel editor, calendar editor and a few others.

Design from the top, build from the bottom

I know what I want to do, how I want it to work. Fortunately, I only have to worry about the “working” part. Not the pretty part. I have a team member who helps with that.

What this means is that I see the entire system laid out. This thing will do this, this other thing will do that, the user will see this.

Which leads to a balancing game. How much is done in the template build out? How much is done in the JavaScript module? How much is done on the backend? And how much support does the Frontend request from the Backend?

Currently, I have three different editing models built, each one a bit different from the others. Why? Piece wise progression.

In my original implementation, all logic was done on the Frontend from data provided by the Backend during page load. These led me to a working edit for the carousel. Click here, drag and drop or upload an image. Click there, and you can rotate, mirror, flip, and crop an image, maintaining a fixed aspect ratio.

The next was the text editor. That was simple because the editor works in place, sort of. But it is working. I’ll be adding more features to it, but that is mostly done.

Then the new image processing came into play. Click on the image you want to edit, a dialog pops up, the original, raw image is loaded. Recorded edits are applied, the image can now be edited.

All modals had to be preloaded. All the content of the modal was preloaded. Everything works by modifying existing elements or modifying the DOM. The only communications with the backend are fetching the raw image.

Which led to the calendar editor.

Piecewise progression.

With this, the amount of data started to exceed easy storage in the DOM. Access to needed data was looking more and more like a call back to the backend. The need to serialize objects on the backend for the frontend to manipulate was starting to get stupidly complex.

This led to a redesign. Instead of multiple modals, there is now a single modal (dialog) which is fetched, on need, from the Backend. In this modal, there is a tabbed pane. Click on the tab, a different pane shows.

By listening for a pane to be displayed, we can determine what content we require and request that from the backend, which has full access to all the data and logic required to make this work.

Bingo, everything starts to get easier.

Which means, once this edit is completed, I’ll return to the image editor, make the same design decisions, which in turn will make the carousel editor a simple modification of the image editor.

Things are getting a little easier as I become more comfortable with TypeScript and “promises”

Why the concerns?

First, when I started programming, you didn’t do redundant things because there were no spare cycles and there were no spare bytes.

As an example, I like to write a = do_it(param)->do_other(params2)->do_different(do_wildly_different(param3)).

This seems reasonable to me. No extra cycles, no extra bytes.

Today, it is better to do r1=do_it(param); r2=do_wildly_different(param3); r3=r1.do_other(param2); r4=r3.do_different(r2); This performs the same actions, but it is often clearer to read and allows for checking results at each step. All good.

The other big thing is communications. My last project was a shopping app. Our family still uses it. It creates shopping lists that you can then use from your Android Phone. It has more to it, but that’s the gist.

Because communications is sketch around here, it was designed to work in a standalone state, uploading changes when it could, downloading changes when required.

This lead to an entire mindset of “Communications is expensive”. Which I’ve had to break. The new site makes seriously different design choices.

  1. All Manager level actors will have modern browsers
  2. All staff working with the site will have reasonable download speeds
  3. All volunteers using the site will have reasonable browsers and speeds.
  4. All visitors to the site will have a relatively modern browser.

In other words, If you are working on the site, and it takes 5 seconds to get an updated pane or modal, this will be acceptable, or you will need to upgrade your device.

In looking at the current usage of browsers on the Internet, more than 95% of the people using the Internet will do just fine.

Now back to the Bootstrap 5 grind as I design pretty forms.