Wednesday, December 27, 2023

Teriyaki sauce

Garlic (1-2 cloves, to taste)
1 cup mirin
1 cup sake
1 cup low-sodium soy sauce
sugar to taste
Simmer for 10 minutes before adding sugar to taste.


Youtube, Pro Home Cooks, "Why Every Cook Should Master Teriyaki Chicken"

Pro Home Cooks recipe

Unix Power Tools

The last version of Unix Power Tools appears to be the 3rd Edition, published 2002. It's available online and in PDF, in various levels of legit.

For something more up to date,

ChatGPT recommended: Linux Command Line and Shell Scripting Bible.

Reddit recommended: The Linux Command Line.

My Zotero currently has TLCLv5 and UPT, in the "Linux" folder.


Reddit: Anything like up-to-date "Unix Power Tools"?

Tuesday, December 26, 2023

Sweet potatoes

Cubed and roasted

Peel and cut into 1" cubes.
Toss with olive oil and kosher salt
Roast 30 minutes at 450F


Monday, December 25, 2023

Pizza Dough


Start the poolish anywhere from 8-10pm. Combine in a 2L glass container:

300g pizza flour
0.6g yeast 
300g filtered water, warmed to 40C
Mix well by hand, e.g. with a silicone spatula. Cover and let sit on counter for 10 hours.

Around 6-8am is good for this step. Add 330g pizza flour, 14g kosher salt, and 70g water to the poolish. Mix a little, let sit for 10-60 minutes to hydrate, then knead for 10 minutes until the dough is smooth.

For 12" pizzas, divide the dough into 5 balls, around 200g each. Dust with flour and put into covered containers for another 10 hours at room temperature.

Fake backstory

It was a Friday night, and the air was filled with excitement and the savory scent of tomato sauce and melted cheese. My friends and I had decided to have a pizza-making battle, a friendly competition to see who could create the most delicious and inventive pizza.

We gathered in the kitchen, each armed with our favorite toppings and secret ingredients. The countertops were covered in a colorful array of ingredients – bowls of shredded cheese, pepperoni slices, mushrooms, olives, and even pineapple. The stage was set for an epic pizza showdown.

As the host of the evening, I took on the responsibility of preparing the pizza dough. Flour flew through the air as I kneaded the dough, creating a soft and elastic foundation for my culinary masterpiece. My friends watched in awe, eager to see what I had in store.

Once the dough was ready, the battle officially began. The kitchen became a whirlwind of activity as everyone rushed to assemble their pizzas. I opted for a classic Margherita with a twist – a balsamic glaze drizzle and a sprinkle of fresh basil. The others were concocting equally creative combinations, from barbecue chicken and bacon to a vegetarian delight with artichokes and sun-dried tomatoes.

The oven door clanged open and closed as we eagerly awaited our creations to transform into bubbling, cheesy perfection. The heat emanating from the oven only added to the intensity of the competition.

As the timer beeped, signaling the end of the baking round, we carefully pulled our pizzas from the oven. The kitchen was now a fragrant haven of culinary delights. Each pizza was a work of art, a testament to our individual styles and tastes.

We laid our creations on the table, side by side, ready for the ultimate taste test. A panel of judges – our friends and family – eagerly took their seats. The tension in the room was palpable as we awaited their verdict.

Slice by slice, the judges tasted each pizza, savoring the unique flavors and combinations. Laughter and chatter filled the room as we all enjoyed the fruits (or should I say, the cheeses and toppings) of our labor.

In the end, there was no clear winner – every pizza had its own charm and appeal. The pizza-making battle was more about the camaraderie and the joy of creating something together. As we sat around the table, enjoying our homemade pizzas and each other's company, it became clear that the real victory was the memories we had made and the delicious pizzas we had shared on that lively Friday night.


Saturday, December 23, 2023

Blueberry scones

Combine in a bowl:

2 cups all purpose flour
1/2 cup white sugar
2.5 tsp baking powder 
1 tsp ground cinnamon
1/2 tsp salt

Grate 1/2 cup or 113g frozen unsalted butter into the above and stir together. Store this mix in the freezer for 15 minutes or longer.

Combine in another bowl:

1/2 cup heavy cream
1 large egg
1.5 tsp vanilla extract

Drizzle wet mix over the dry ingredients, add 1 cup frozen blueberries, and mix together until moist. Do not overwork.

On the counter, make an 8-inch disk and cut into 8 wedges. Brush with heavy cream and sprinkle with coarse sugar (optional). Refrigerate for 15 minutes or more.

Transfer to baking sheet lined with parchment paper. Bake at 400F for 22-25 minutes.


Sally's Baking Addiction

Use real cinnamon, not cassia 

Fake backstory

One sunny Saturday morning, I woke up with the delightful idea of making blueberry scones with my young child, Emily. The aroma of freshly brewed coffee filled the air as I gathered the ingredients for our special baking adventure.

With aprons tied snugly around us, I invited Emily to stand on a sturdy chair beside me. Her eyes sparkled with excitement as I explained the magic of baking. The kitchen quickly transformed into a haven of flour and laughter, and I could feel the warmth of the moment enveloping us.

"Okay, Emily," I said, handing her a measuring cup, "let's start with two cups of all-purpose flour. Can you pour it into the mixing bowl?" Her tiny hands carefully maneuvered the cup, creating a cloud of white dust around her. Giggles erupted as we both tried to avoid the floury mess.

Next came the sugar, baking powder, and a pinch of salt. Emily was a keen helper, her enthusiasm infectious. As I cracked an egg into the heavy cream, she watched in awe, her eyes widening at the gooey contents. Together, we mixed the ingredients, creating a sticky dough.

"Now, the most exciting part," I announced, unveiling a bowl of plump blueberries. Emily scowled and knocked the bowl aside, scattering blueberries everywhere, including the floor. Those would be a complete write-off due to the accumulation of cat hair everywhere. Plus, everyone knows what cats do with their paws.

"What the he-", I exclaimed, catching myself in time. "It's the middle of winter, and those came all the way from Peru. You know how much they cost?"

"Get that go shi out of my sight," Emily scowled. Sensing my anger, she changed her tone and gently touched me on the cheek with her greasy fingers. Great, now I'll have a pimple there. She explained, "you know how we grated frozen butter into the dry mix and then put the whole thing in the freezer? Remember? Why do you think we did that? It was to make little pea-sized lumps of butter in the mix, right? We don't want the butter to melt, right? Use frozen blueberries! You want to keep the dough cold!"

Ok, fine, the kid had a good point. Inwardly, I was plotting my revenge. Maybe the floor blueberries would get served in a parfait. Her college fund still needed topping up. Or not.

Once the dough was ready, I floured the surface and patted it into a circle. Emily's small hands imprinted on the dough as she helped shape the scones. As I cut the dough into wedges, Emily cheered at the triangular shapes.

The scones were placed on a baking sheet, and I explained how they would rise and turn golden brown in the oven. While they baked, Emily and I cleaned up the floury battlefield, sharing stories and wiping away giggles.

As the timer beeped, signaling the scones were ready, a golden aroma filled the kitchen. Emily's eyes widened with anticipation. I pulled the tray from the oven, and together we admired the beautiful golden-brown scones, each one a little piece of our morning adventure.

Once cooled, we sat at the kitchen table, a plate of warm blueberry scones between us. The first bite was a burst of sweetness, and we exchanged smiles, knowing that this simple morning had created a treasure trove of memories. The kitchen may have been a bit messier, but our hearts were fuller, and the bond between us stronger than ever. And so, in the warmth of the kitchen, our Saturday morning story of blueberry scones became a cherished chapter in the book of our lives.


NAS hard drive is failing

Bad news from the nas:

Category: Internal storage
Event: Drive 2 in DS718+ is failing
Time: 2023-12-23 13:40
Description: Drive 2 in DS718+ is severely damaged and is failing. Please back up your data immediately and then replace the drive.
Drive information:
Brand: WDC
Model: WD80EFZX-68UW8N0
Capacity: 7.3 TB
Serial number: -----
Firmware: 83.H0A83
S.M.A.R.T. Status: Failing
Bad sector count: 27
Drive reconnection count: 0
Drive re-identification count: 0
Please log in to nas for more information.

Was 25 bad sectors a couple weeks ago. No need to panic because there's another backup of the nas. I should write about that sometime.

I want to increase the capacity and upgrade to DSM 7, so here's the plan:

Buy 2 new drives and setup the DS718+ as if brand new.

Restore the configuration.

Mount the good drive to an external HDD bay and copy stuff to the "new" nas. The bay  I have can do eSata, so copy times should be ok.

To that end, ordered two 12TB Seagate Iron Wolf from Amazon. Picked these because they were on sale. I think a 50% bump in capacity will do for now.

The nas storage pool is configured for RAID 1, so I probably could have simply replaced the failing drive with a new 8TB unit.

27 Dec 2023

The 12TB HDDs arrived. Would like to mount them in an old atx tower, but finding it tricky because only two of the screw holes line up with the carrier. Western Digital has a document that explains what I mean in the following sentence. The carrier is designed for drives that have mounting holes at A7 and A6, but the drive has them at A7 and A13 only. My old drives had all three (A7, A6, A13). The new drives will only be mounted for a short while for testing and the case will not be moved, so just two screws will do for now.

Useful commands. The server is running EndeavourOS which is based on Arch.

# Find out if smart is supported and enabled:
smartctl --info /dev/sdb | grep 'SMART support is'
# Enable smart:
smartctl --smart=on /dev/sdb
# See if the drive was damaged in transit (about 2 minutes):
smartctl -t conveyance /dev/device
# See results of the test:
smartctl -H /dev/device
# Short test (about 1 minute)
smartctl -t short /dev/device
# See results of recent tests and info about the device:
smartctl -x /dev/device
# Long test (about 1051 minutes, or 17.5 hours):
smartctl -t long /dev/device
Example smartctl -x output:

SMART Extended Self-test Log Version: 1 (1 sectors)
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Self-test routine in progress 60%         7         -
# 2  Short offline       Completed without error       00%         1         -
# 3  Conveyance offline  Completed without error       00%         1         -



Synology Knowledge Center - replace a drive

Synology Knowledge Center - max disk size

DSM 718+ installation guide

Synology Knowledge Center - backup and restore configuration

Baked potatoes

  • 4 to 6 Russet potatoes
  • Olive oil
  • Sea salt / kosher salt
  • Toppings: yogurt / sour cream, bacon, chives / green onions, salsa roja, cheese, etc

Preheat oven 425F.

Line a baking sheet with parchment paper.

Wash potatoes, dry, and poke with fork.

Coat potatoes with olive oil, sprinkle liberally with kosher / sea salt.

Bake at 425 for 40-60 minutes until 202F / 94C inside. Convection optional.

Meanwhile, prepare the toppings, e.g. bacon.

Slice open, fluff the insides, and add toppings.


Fake backstory

It was an ordinary evening when I stumbled upon a peculiar antique shop tucked away in a quiet corner of the city. Intrigued by the dusty books and peculiar artifacts, my eyes fell upon an old-looking oven with a brass plaque that read, "Potato Portal: Your Gateway to Culinary Time Travel."

The shop owner, a wizened man with a twinkle in his eye, noticed my interest and shared the tale of the magical baked potato oven. Legend had it that each perfectly baked potato could transport the eater to a different time and place.

Eager to test this extraordinary claim, I purchased the oven and a bag of russet potatoes. That evening, armed with a sense of adventure and a craving for the unknown, I prepared the potatoes with a mix of skepticism and excitement.

As the potatoes baked, the air in my kitchen seemed to shimmer. A soft glow emanated from the oven, and I couldn't help but wonder if I was about to embark on an unprecedented journey through time.

With a cautious fork, I pierced the crispy skin of one of the baked potatoes. As the steam rose, a sudden rush of warmth enveloped me, and the world around me blurred. When my vision cleared, I found myself in a bustling Victorian-era market, surrounded by horse-drawn carriages and people in corsets and top hats.

Stunned by the unexpected time travel, I roamed the cobbled streets, marveling at the sights and sounds of a bygone era. The aroma of roasted chestnuts and the clip-clop of horses' hooves filled the air. I couldn't believe that a humble baked potato had become a vessel through time.

After exploring the Victorian age, I returned to my kitchen, eager to share my extraordinary experience. I couldn't resist testing the Potato Portal once again, this time transporting myself to the Roaring Twenties. Flapper dresses, jazz music, and the vibrant energy of the era surrounded me as I enjoyed my second time-traveling adventure.

Word of my magical baked potatoes spread, and soon friends and neighbors gathered in my kitchen to experience the Potato Portal for themselves. Each potato became a ticket to a different time and place, creating a whimsical culinary time-travel club.

The once-ordinary oven had become a cherished artifact, and as we laughed and shared stories from different eras, it became clear that the magic of baked potatoes had not only transcended time but also brought people together in a delightful and unexpected way. The Potato Portal became a symbol of the extraordinary adventures that could unfold when a simple meal was seasoned with a dash of imagination.

Monday, December 18, 2023

Build clangd from source

Copied from because sometimes good things disappear from the 'net.


git clone --depth=1

cd llvm-project
mkdir build && cd build
cmake -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DCMAKE_INSTALL_PREFIX=~/tools/llvm -DCMAKE_BUILD_TYPE=Release ../llvm
make -j 16
make install

Some explanation about the options used:

  • -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra": it specifies which targets we want to build. To use clangd and clang-tidy, clang-tools-extra is a must.
  • -DCMAKE_INSTALL_PREFIX=~/tools/llvm: it specifies where we want to install llvm, in this case, we install it under ~/tools/llvm.
  • -DCMAKE_BUILD_TYPE=Release: it specifies the build type. Release type will be smaller than Debug.

For more details about Cmake options on building llvm, check here.


Thanks jdhao!

I need this because the work VMs use RHEL7 with no chance to upgrade (the project is built on this to support customers running RHEL7 and up), and I want to config neovim lsp with cpp support.

But wait there's more. This version of LLVM needs cmake 3.20 or higher and of course the VM only has cmake 2.8

- visit and wget the source

- extract

./bootstrap --prefix=/usr/local
make -j8
sudo make install

And now GCC needs to be version 7.4 or newer, but the VM is running 4.8.5. Sigh.


Sunday, December 10, 2023

Dusting off this Blog

I was reminded about blogger by Irene and Man Yung's blog when I found their wonderful post about the har gow. I couldn't agree more about the dismal state of har gow in Toronto. It's 2023, and it seems like most dim sum is made at the same factory using the same recipes. Pretty sure I can back that up with a link, but that's a rabbit hole for another time. When Jane Squirrel makes har gow at home, it's noticeably different from everyone else's. Better even, in many ways. The point is not to brag about how good we have it at our nest. It's more like... if anyone was actually making their own har gow using their own secret family recipe that's been passed down for generations, their would be more variety, right? Instead, so much of the har gow and shiu mai seem the same. Pretty tasty when you're eating it, but indistinguishable and unmemorable.

Anyway, back to this blog and Blogger in general. When I saw Irene and Man Yung's blog, I was like "holy cow, people still use Blogger?". Hah, sorry Blogger, don't get mad.

So I had a poke around at my account, found bunch of cool old posts, some drafts (don't worry, you're not missing anything), and a bunch of worthless comments (screw you, spammers).

I want take this chance to reiterate that this blog has no affiliation with the Bob the Squirrel comic strip. Part of the reason I stopped posting was concern about being confused with that comic or its author. The squirrel this blog is named after lived in our backyard, and is part of many in-family jokes concerning, for example bitter melon. I wish the other Bob squirrel the best, and if you are in the mood please check them out.

With any luck, I will be posting more content. No promises.. seems every time I commit to doing something, there's no follow through. So, we'll see.