jonny.donker@gmail.com

Constructive Terrorism – Seed bombs

“Seed bombs” – or their more politically correct name “Seed balls” or “Earth Balls” consists of seeds rolled up with clay and soil, dried and then can used as an easy way to distribute seeds.

Research suggested that the ancient Egyptians used this method to store seeds to then repair and resow farms after the annual Nile floods.

The technique was rediscovered by the Japanese government in WW2; looking for a way to increase food production in mountainous area without taking away land that was used for rice production. 

“Seed Bombs” gained their nefarious name from the “Green Guerrillas” from New York in the ’70s who used “Seed Grenades” to turn vacant or abandon land into community gardens (quite often  choosing to avoid going through the correct authorities)

Making Your own Seed Bombs

Two videos I used to as a guide to make “Seed Bombs”.

Candide – is short and to the point for a quick overview:

Gardener Scott – has more details and gave me the idea of using Clay based kitty litter:

Seed Bomb targets

  • Plant in a pot
  • Throw into a bare part of your garden
  • Throw into Grandma’s garden when she’s not looking
  • Throw into vacant blocks that look a bit bland

No go areas

  • Native bushlands
  • Public gardens
  • Other people’s garden without permission (excluding Grandma’s garden)
  • Medium strips in roads (too dangerous)

Jazzing up a Women’s Weekly slow cooker recipe

Since we have a “No Junk Mail” sticker on our mailbox – we’re deprived of the weekly “Aldi Specials” catalogue.

On the downside – we miss all the Aldi deals of items we didn’t think we would ever need.

On the plus side; when we do venture into Aldi – there is always a nice surprise to find what ludicrous bargains await us.

Recently there was a “Women’s Weekly Complete Slow Cooker Recipe” that I impulse bought for the tempting price of $20.

The recipes are inspirational; but not really refined.  Most of them follow the formula of; “Bung everything into a slow cooker & cook for eight hours.”

So as a challenge and a learning and teaching exercise; my wife picked out a recipe and keeping to the original ingredient list – I tried to bring out the best in the recipe.

Our base recipe #69: "Beef and Vegetable Soup"

Ingredients

  • 1kg Gravy beef – trimmed and cut into 2.5cm pieces
  • 1 garlic clove, crushed
  • 1 medium brown onion cut into 1cm pieces
  • 2 stalks of celery, trimmed, cut into 1cm pieces
  • 2 medium carrots, cut into 1cm pieces
  • 2 medium potatoes, cut into 1cm pieces
  • 400g canned diced tomatoes
  • 1L water
  • 2 cups of beef stock
  • 2 dried lay leaves
  • 1 cup of frozen peas
  • 1/3 cup coarsely chopped flat leave parsley 

Method

  1. Combine beef, garlic, onion, celery, carrot, potato, tomatoes, the water, stock and bay leaves in a 5-litre slow cooker.  Cook, covered on low, about 9 hours.
  2. Add peas to cooker, cook, covered, a further 30 minutes.
  3. Discard bay leaves.  Season to taste.
  4. Serve soup sprinkled with parsley.

Improving the recipe

There are three opportunities to add additional flavour to the recipe:

  1. Browning the meat
  2. Caramelising the onions
  3. Managing the cooking time of the other vegetables.

Browning the beef

This is the most obvious improvement; browning the meat before adding to the slow cooker.  Many slow cooker recipes call for the browning meat step; the Maillard reaction adds extra depth of flavour to the beef and the wider dish. 

So with care I browned the beef cubes in batches well in a fry pan over medium/medium-high heat.  Leave the burnt caramel bits in the bottom; we will use that for later.

Tackling the Onions

The onions are another chance to enrich the flavour of the soup.  Taking a cue from “French onion” soup; the idea is to slowly cook the onions to a rich caramel onion flavour.

Slice the onions thinly and then slowly brown them in the pan on a low heat.

Stir around to lift off any brown bits from the bottom to start forming a beef fond with the sweating of the onions and keep slowly cooking until it is a deep rich brown colour.

If the onions start to stick and threaten to burn; add a bit of water to loosen them off the bottom of the pan.

When the onions are almost done; add in the minced garlic and cook the raw edge off the garlic.

Add the caramel onion and garlic mixture to the slow cooker pot and then de-glaze the pan with a cup of beef stock.

Sacrificial stock vegetables

To preserve the texture of the carrots, celery and potatoes for the end and not cook the vegetables to a pulp; we’re going to use half of the carrots and celery as “sacrificial vegetables” to flavour the soup and then remove at the end; the same when making a stock.

You could when the cooking time is almost over; remove the cooked beef and blend the pulpy vegetables with a stick blender.

But this time I decided to give our worm farms a treat with cooked carrots and celery.

At the end – add freshly cubed potatoes, cook for 10min and then add cubed celery and carrots.

Cook until the vegetables are just cooked through – or until personal preference.

Add the peas right at the end to warm through.

In the end - is it worth it?

The soup was robust, tasty and put a smile on the family’s face.

But how much tastier than the base recipe – I couldn’t say.  I should have cooked the original recipe as a control; but couldn’t bring myself to throw beef into a slow cooker that hasn’t been browned.

One thing that was a standout was the time it took to prepare.  If preparing the original recipe; it could have been done within ten minutes. 

And that’s one of the key advantages of a slow cooker – throw ingredients quickly into a pot, let it run through the day and you have a tasty comforting meal in the evening time with little effort.

With my browning the meat in batches, the sweating and caramelising the onions; all of a sudden that 10min prep ballooned out to an hour. 

Is that extra 50min worth the extra taste; worth the time and effort invested?

I’ll leave it up to you dear readers to cook the recipe and find out yourself.

Power BI and the lost tnsnames.ora file

A distraught user contacted me today with a problem that her Power BI dashboard was not refreshing and returning the following error:

OLE DB:ORA-12154: TNS:could not resolve the connect identifier specified

The problem was not just isolated to her; but common across all her team.

I’m not an expert on Oracle and Power BI; and I kindly suggest for her to contact the Helpdesk.  She came back a few minutes later saying that the Helpdesk just passed her off unceremoniously to another team.

Deciding to give her a hand – I had a think about the error message.

TNS files seem to end up in all sorts of weird and wonderful locations on our organisation’s systems.

I also remembered that there was a patching of the Oracle client just done last week.

I asked her to do a search for tnsnames.ora on her C drive.

Meanwhile I ran the following command through the command line on my own computer; which should be a similar configuration:

echo %TNS_ADMIN%

She got back:

C:\app\product\12.1.0\client_1\network\admin

And I got back:

C:\app\product\19.3.0\client_1\network\admin

My hypothesis that IT installed a new version of the Oracle client and this process updated the %TNS_ADMIN% field.

What the patching didn’t do was to shift the tnsnames.ora file to the new directory of C:\app\product\19.3.0\client_1\network\admin.

When Power BI tried to run an Oracle query; it was using the new client installation and hence not finding the tnsnames.ora file.

After copying the TNS file into the correct directory; right away she was able to rerun her Power BI dashboard.

Salad Jars: You don’t make friends with them

Work Lunches.
 
For ages I never really got a pattern with them.
 
To begin with – I use to take left overs from meals to work and heat them up in the office. 
 
It wasn’t the best solution as sometimes I wouldn’t cook enough the night before and left short and quite often buying lunch out. 
 
With a decent lunch in South Eastern Australia is over $10; this hits the wallet for been unprepared. 

The Salad Jar Idea

Flicking through a recipe book section of a market while on holiday; I came across a book on “Salad Jars”; where you assemble a salad in a mason/preserving jar. Unfortunately I can’t remember the book’s name as I didn’t purchased the quite expensive book.
 
But flicking through the pages – I got the gist of the recipe.  
 
Fast forward a couple years and I have made hundreds of them; assemble the jars on Sunday and then they are ready in the fridge to take to work.
 
They are not glamorous and you won’t make many friends with them; but at least your health and budget might like you.

The basic principle

The idea of a salad jar is to layer salad ingredients in container in a particular order.  When it is time to eat; give the jar a shake to mix the dressing and ingredients together.

With a normal salad; the dressing goes on last so not to leave the ingredients soggy after a period of time.

With salad jars; the dressing goes in first at the bottom of the jar.  

After the dressing – the jars are layered with the rest of ingredients; working from hard vegetables like carrot, capsicum, celery and then moving up to more delicate ingredients.

At the top should be delicate ingredients like lettuce and crumbly feta.

The idea that the dressing can “pickle” your harder vegetable and this layer of vegetables serves as a barrier to the other ingredients.

The Jars

Any jars or containers with a tight lid will do.  After some iterations of different jars; I came to like these squarish mason preserving jars that I found on ebay:

These jars tick a couple of boxes:

  • The right size for a lunch
  • Relatively solid – can survive a few knocks
  • With the jar’s square shape; it packs more efficiently in the fridge compared to round jars

I also brought some plastic lids instead of using the canning lids that came with the jar; as the dishwasher was tearing the protective layer off the metal lids.

A sample assembly

Start off with a couple of tablespoons of a dressing at the bottom. 

I have several bottles of salad dressing in the fridge to use in different jars for the week to break up the monotony.

Also in this layer you can add ingredients to enhance the dressing; such as seasoning, herbs, pickled jalapenos or capers.

Add in your hard vegetables. 

Examples can be:

  • Carrots
  • Capsicums
  • Celery
  • Radishes 
  • Raw beetroot 

These will pickle in the dressing and add as a protective barrier to the other ingredients.

Carrots is one of the cheapest vegetables in South East Australia so I usually use a whole carrot to a jar.

Next layer is the softer vegetables and ingredients; such as:

  • Tomatoes 
  • Hard cheeses
  • Roasted potatoes
  • Cold pasta 
  • Cooked mushrooms
  • Canned black beans 
  • Canned lentils 

For protein in this instance I have a topside roast beef that I thinly sliced.  Other suggestions:

  • BBQ chicken from the shops
  • Smoked chicken
  • Poached and shredded chicken breast
  • Greek butterflied lamb
  • Cooked and sliced sausages
  • Cooked and sliced rissoles 
  • Boiled and peeled eggs

Finally the last layer is where you have your delicate ingredients.  For instance:

  • Softer cheeses
  • Lettuce
  • Avocado
  • Roasted pumpkin
  • A mini quiche 
  • A breadroll (that you can pull out before mixing up your salad)

In the end - How many friends?

An advantage of the salad jars is the range of combinations you can make.

With a little work; salad jars can be rarely monotonous when you can combine different dressings, vegetables, cheeses and meats.  You can have a different jar for each day.

A trip to your local grocers, farmer’s market or what’s currently seasonal in the garden can inspire you on what combination you will make that day.

Give them a try – but save a day in your week to buy hot chips to share with your friends. 

You make friends with hot chips.

Coral Trout with Pale Ale butter sauce

I am not a fisherman by nature – more inclined to drown a few worms, get eaten by mozzie and then find something more exciting to do.

So I got a huge shock when fishing off a jetty with my little family and brother I caught a fish! And according to my shocked angler brother – an excellent eating fish.

“Ummm. It is a fish. What do I do now?”

Now to find a recipe.

I don’t cook seafood often as I was brought up in inland Australia, so my experience is limited.

My thought process was not to overpower the flavour. Googling recipes I saw some SE Asian inspired recipes overloaded with mammoth flavours like ginger, lemon grass, chilli etc – but I decided to try a more subtle route.

Ingredients

(Guestimates)

  • 1 Coral Trout (Or any other firm white fish) filleted with skin on
  • 1/2 cp of plain flour
  • 1 tsp salt
  • 375ml of a light but tasty Pale ale
  • 5 tbs of butter – cut into chunks and chilled
  • One clove of garlic
  • Sprig of lemon thyme
  • Canola oil for frying
  • Extra salt for seasoning
  • Lemon wedges to serve

Method

  1. Heat a large frypan on medium.
  2. Assess the thickness of the fish fillets. If quite thick; score the flesh side of the fish with a knife every 2cm to allow for more even cooking.
  3. Dry the fillets with kitchen towl to remove excess moisture.
  4. Season the fillets with salt.
  5. On a plate – mix the flour with the tsp of salt. Dust the fillets liberally with the seasoned flour and shake off the excess.
  6. Heat the oil and add the fish skin side down. Cook for a couple of minutes until the fish is half cooked through.
  7. Carefully turn the fish a cook until the fish is almost cooked though. Remove the fish to a plate.
  8. Add the ale, lemon thyme and whole garlic clove to the pan. Bring to a simmer and reduce the heat.
  9. Add one piece of butter and stir until it completely emulsify into the liquid. Repeat with the other chunks of butter – one by one.
  10. Remove the thyme and garlic.
  11. Taste the sauce. Adjust the seasoning if needs.
  12. Add the fish back to the pan to warm through. Spoon the sauce over the fish.
  13. Serve with the buttered sauce and lemon.

Notes

  • Serving suggestions – simple blanched or steamed greens
  • I was constrained by what ingredients I had on hand. Some modifications can be:
    • A white wine Iike a riesling
    • Tarragon instead of thyme
  • When tasting if the ale has made the sauce too bitter – add a bit of sugar.
  • If I had the right ingredients I would have probably made the following recipe from Neil Perry.

The Story of the Coral Trout catch

Theory

My brother was shocked that such a large Coral Trout was caught off an estuary jetty as they are usually found on the reef.

His angler friend’s theory was the particular jetty we were fishing off. It is a jetty where fishing vessels dock to transfer their catch. The vessels would catch Coral Trout on the reef and bring them back alive. They then will measure for size and throw the undersize fish off the jetty.

Our fish probably hung around under the jetty after being released and grew to its final 50cm size.

A pretty Good Bolognese

There is no such thing as a recipe for “The Best Bolognese”.  The best Bolognese recipe is the one that you cook and you like. This is my favourite over 20 years (geeze – I feel old now) of experimenting with all different variations that I have gleaned from different recipes and friends. Remember – don’t be afraid to experiment and try something new.

Ingredients

Serves about 6

Vegetables (Add more or less as you desire)

  • 2 brown onions – diced
  • 2 stalks of celery – diced
  • 2 carrots – diced
  • 1 red capsicum – diced
  • 2 zucchini – diced
  • Handful of Button mushrooms – diced (optional)
  • 2-8 cloves of garlic to taste – minced

The rest

  • 1kg beef mince
  • 1L beef stock (extra points for home made beef stock)
  • 750gms Passata
  • 2tbs Worcestershire sauce
  • 2 bay leaves
  • 2tsp dried oregano
  • 1tsp dried thyme
  • Pepper
  •  500gms dried pasta
  • 4tbs of cooking oil (vegetable/canola/olive oil)
  • Cheese to serve –  parmesan for the traditionalists/any other hard cheese of choice for the commoner

Method

Clean bench, sharp knife, stable cutting board – let’s go:



1. Heat 2tbs of the oil in a large fry pan on medium high.  Add the mince and break apart the lumps.  Cook stirring occasionally until the beef is dry and crumbly, starting to catch at the bottom and smell like cooked steak.  If this step is done before the vegetables are soften; turn off the heat



2. In a large pot; heat to medium heat and add the remaining cooking oil.  Add all the vegetables; except for the garlic and fry until the vegetables are soft and the onion is translucent.  Add the garlic and fry for another two minutes.


3. Add the browned mince to the large pot of vegetables.  Deglaze the fry pan with a cup of beef stock.  Add the liquid into the large pot.


4. Add the beef stock, passata, Worcestershire sauce, bay leaves, dried herbs and pepper to the large pot and bring to a boil.  The mixture will appear very watery; almost like a soup.

Turn down the heat to a very low simmer and cook for 3 – 6 hours stirring occasionally.  Adjust the heat and liquid levels depending on how long you want to cook it for.

Hold off on seasoning with salt until the end as the amount of salt you will need depends on the amount of salt that was in the beef stock and passata.



5. When getting close to the right consistency; cook the pasta as per the packet instructions.

Way to serve – fancy way

  1. Undercook the past by a couple of minutes in step 5
  2. Heat up a large pot to medium heat and add in the well drained pasta
  3. Add some of the Bolognese sauce into the pot.
  4. Cook for a couple of minutes until the pasta is cooked through.
  5. Serve with chese

Way to serve – to the point way

  • Pasta in the bowl
  • Bolognese sauce on top
  • Cheese on top

Notes

There are many/many variations of Bolognese out there and I have tried and honed my favourite recipes over many years.

It all comes down to what you like – that is the best Bolognese recipe

To me a good Bolognese has the key balance between tomatoes and meat flavour.

I have tried some popular variations and added some notes:

Wine

A popular addition is to add wine to the recipe.  This radically changes the flavour profile.

I’m not a big fan of it.

I suspect that it is because I usually have strongly flavoured Australian Shiraz or Cabernet sauvignon on hand.  Maybe a lighter red wine would be a suitable match.

Meat

Minced beef is the most popular ground beef in our region so that’s what I tend to use.

Veal and pork is a more traditional choice.  If this is what you want to try; see if you can get some pork or veal stock.  This will create a lighter sauce and better match for the meat combination.

Some people also add bacon or speck to their Bolognese recipe.  This drastically alters the flavour and I am not a fan of it.  But if not sure; give it a go as an experiment

Milk?

I have seen recipes where you add half a cup of milk to the Bolognese sauce.  The theory is the the enzymes in the milk further tenderises the meat.  I have tried it but felt it made no noticeable difference

Sugar

Some recipes add a couple of teaspoons of  sugar to the sauce to balance out the acidity of the tomatoes.  I think it depending of the quality of the passata and your own personal preference.  Taste the sauce at the end of the cooking process and assess the taste profile of the tomatoes to see if it needs some sweetening.

Extras

  • Dried red lentils gives the recipe a nuttier taste and stretches the recipe further.  Well worth it if you have more mouths to feed on a budget.
  • You can add more or less vegetables as you wish.  If you add more vegetable; or grate them up finer to hide them from kids – you will compromise on the meat and tomato flavour.

Happy cooking 

Qlik Replicate – “Json doesn’t start with ‘{‘ [xxxxxxx] (at_cjson.c:1773)” error

Had a shocker of a week.

You know those weeks; where everything went wrong.

Busy fixing other systems; after Operating system patching done by our IT team I didn’t look closely to our Qlik Replicate nodes that have been running smoothly over the past year 

After all there were no alerts; and a quick glance all our tasks were in a running status and none were in suspended or error status.

Next day One of our junior admin the pointed out some Qlik tasks using a high amount of memory.

I looked in and my stomach dropped.

Although the task was “green” and running; no changes were getting through to the destinations (AWS S3 and GCS).  The log file was filled with errors like:

00002396: YYYY-MM-DDT15:21:14 [AT_GLOBAL ]E: Json doesn't start with '{' [xxxxxxx] (at_cjson.c:1773)
00002396: YYYY-MM-DDT15:21:14 [AT_GLOBAL ]E: Cannot parse json: [xxxxxxx(at_protobuf.c:1420)

And hundreds and thousands of transactions were waiting to be written out.

The problem only existed on one QR cluster and only jobs that were writing to AWS S3 and GCS; the Kafka one was fine.  The other QR clusters were running fine

The usual “Turn it off and on again” didn’t work in either stopping or resuming the task; or restarting the server.

In the end I contacted Qlik Supported.

They hypothesised that the blanked patching caused the Qlik Replicate cluster to fail over and corrupt the captured changes stored up waiting to be written out in the next batch process.  When QR tried to read the captured changes – the json was corrupted.

Their fix strategy was:

  1. Stop the task
  2. Using the log file; find out the last successful time or stream position that the task.  This is usually found at the end of the log files.
  3. Using the Run -> Advance Run option; restart the task from the time last written out.

If this didn’t work; the recommended rebuilding the whole task and following the above steps

Luckily their first steps worked.  After finding the correct timestamps we could restart the QR tasks from the correct position.

Now looking into some alerting to prevent this problem again.

Python – Unpacking a COMP-3 number

New business requirement today.  We have some old mainframe files we have to run through Qlik Replicate.

Three problems we have to overcome:

  1. The files are in fixed width format
  2. The files are in EBCDIC format; specifically Code 1047
  3. Inside the records there are comp-3 packed fields 

The mainframe team did kindly provide us with a schema file that showed us the how many bytes make up each field so we could divide up the fixed width file by reading in a certain number of bytes per a field.

Python provided a decode function to decode the fields read to a readable format:

focus_data_ascii = focus_data.decode("cp1047").rstrip()

The hard part now was the comp-3 packed fields. They are made up with some bit magic and working with bits and shifts is not my strongest suite  

I have been a bit spoilt so far working with python and most problems can be solved by “find the module to do the magic for you.”

But after ages of scouring for a module to handle the conversion for me; I had a lot of false leads – testing questionable code with no luck.

Eventually I stumbles upon:

zorchenhimer/cobol-packed-numbers.py

Thank goodness.

It still works with bits ‘n’ shift magic – but it works on the data that I have and now have readable text 

I extended the code to fulfil the business requirements:

# Source https://gist.github.com/zorchenhimer/fd4d4208312d4175d106
def unpack_number(field, no_decimals):
    """ Unpack a COMP-3 number. """
    a = array('B', field)
    value = float(0)

    # For all but last digit (half byte)
    for focus_half_byte in a[:-1]:
        value = (value * 100) + ( ( (focus_half_byte & 0xf0) >> 4) * 10) + (focus_half_byte & 0xf)

    # Last digit
    focus_half_byte = a[-1]
    value = (value * 10) + ((focus_half_byte & 0xf0) >> 4)

    # Negative/Positve check.  If 0xd; it is a negative value
    if (focus_half_byte & 0xf) == 0xd:
        value = value * -1

    # If no_decimals = 0; it is just an int
    if no_decimals == 0:
        return_int = int(value)
        return (return_int)
    else:
        return_float = value / pow(10, no_decimals)
        return (return_float)

Qlik Replicate – “SYS-E-HTTPFAIL, SYS-E-UNRECREQ, Unrecognized request pattern” problem

After a weekend of patching in our dev environment; we came in to discover that half of our Qlik Replicate Nodes were offline in Enterprise manager with the following error message

4 2022-08-08 13:19:24 [ServerDto      ] [ERROR] Test connection failed for server:MY_QRNODE. Message:'SYS-E-HTTPFAIL, SYS-E-UNRECREQ, Unrecognized request pattern 'GET: /servers/local/adusers/devdomain/qlik_user?directory_lookup=false'..'.

We could still access the node through their individual node’s web gui and the tasks were still happily running in the background.  The other half of our QR nodes were still online in Enterprise manager

The usual troubleshooting of restarting the services and restarting the server didn’t fix the problem; and the patching team washed their hands of the problem.  (I can’t really list the patches they applied due to security issues)

A database administrator mentioned it might be a TLS problem as the server team has been changing TLS settings in various places.  This lead me to comparing the connection settings between a QR node that was working to not working (we checked other things like patch levels etc).

Some servers had the username in domainusername format; while others didn’t.  Coincidentally the ones who had the  domainusername format were the ones not working,

Removing the domain section of the username resolved the problem.

So not sure what in the patching caused this issue; but something we have to check on our prod servers before the patches are applied to them.