A powerful pattern in software engineering is where you pass in a function or an object to another, which executes this given one dynamically. This allows you to extend behavior of code without having to edit that code. It's known as the Strategy ...

Click here to read this mailing online.

Your email updates, powered by FeedBlitz

Here is a sample subscription for you. Click here to start your FREE subscription

"n3wjack's blog" - 5 new articles

  1. passing a function as a parameter in PowerShell
  2. jeskola buzz is 20 years and here are 282 tunes to celebrate
  3. getting rid of the McAfee Process Validation Service which I never installed
  4. chill and drones
  5. how to stop windows 10 from rearranging your desktop icons
  6. More Recent Articles

passing a function as a parameter in PowerShell

reflectionsA powerful pattern in software engineering is where you pass in a function or an object to another, which executes this given one dynamically. This allows you to extend behavior of code without having to edit that code. It’s known as the Strategy Pattern and allows for nice, clean and decoupled code.

In Powershell you can do this by passing a function as an argument to another function. When I tried to do this, I found out this wasn’t as trivial as I thought it would be, so here’s the nitty gritty on to work that magical extend-ability pattern.

Basically you want to do something like passing in a function which processes a single item in a loop controlled by another piece of code. Something like:

function Print-Number($number){    echo "Number is $number"}function Do-Loop($function){    $numbers = 1..10    foreach ($number in $numbers)    {        # Here we should call $function and pass in $number    }    }# Call Do-Loop with the PrintNumber function as a parameter here.

I ran into 2 problems here.

  1. How do I pass in a function as a reference to another one?
  2. How do I call one of those function blocks from the function that receives it?

First things first. The syntax for passing in a function inline looks like this:

Do-Loop ${function:Print-Number}

Note the function: prefix there. It’s the magic bit. This accesses the function object’s script block without executing it.
You can also list all functions available in your PowerShell session like this:

ls function:

If you want to pass in a script block like an anonymous lamba C# style, without defining a function first, you can do this:

Do-Loop { param($content) write-host $content }

Want to reuse that function a few times and store it in a variable? No problemo, just do this:

$function = { param($content) write-host $content }Do-Loop $functionDo-SomethingElse $function

That pretty much covers all the options for problem number 1.
So now on the second problem: calling that passed in function or script block inside our host function.

Let’s say we want to call that function from a loop. To call the function you need to use the Invoke-Command commandlet and pass in the argument using the ArgumentList parameter like this:

foreach ($number in $numbers){    Invoke-Command $function -ArgumentList $number}

Pretty simple right?
The argument list expects an array as it’s value. So if you want to pass in 2 parameters like a number and a message text that would look something like this:

Invoke-Command $function -ArgumentList $number, $message

Putting it all together, here’s the working sample code:

function Print-Number($number){    echo "Number is $number"}function Do-Loop($function){    $numbers = 1..3    foreach ($number in $numbers)    {        Invoke-Command $function -ArgumentList $number    }    }Do-Loop ${function:\Print-Number}

Because of this array-as-a-parameter thing however I did run into a little snag for my actual code.
What if the first and only parameter is an array in itself? How do make it clear to the Invoke-Command commandlet that the array is a single parameter, not a list of parameters to pass into the function?

In my case I was passing in the content of a text file which is an array of strings. My first argument ended up being the first string of that array and I was lacking the rest of the file’s lines.

$array = Get-Content .\somefile.txtInvoke-Command $function -ArgumentList $array # ?????

Again, there’s a little trick to that which I found on [Stack Overflow](https://stackoverflow.com/questions/7152740/how-to-pass-an-array-as-a-parameter-to-another-script). The syntax to pass in an array as a parameter is:

Invoke-Command $function -ArgumentList (,data)

The last bit seems to work by creating an array (that comma) where the first element is nothing and the second is our array.
Apparently the first element is then skipped and our second is passed in as the required array parameter.
A silly example to demonstrate this:

function Enhance($lines){    $lines | % { "  > $_" }}function Do-It($function){    $content = get-content .\awesome.txt    Invoke-Command $function -ArgumentList (,$content)}Do-It ${function:\Enhance}

jeskola buzz is 20 years and here are 282 tunes to celebrate

Audio MixJeskola Buzz is a free DAW that’s been around for 20 years already. To celebrate that special event a collection has been assembled on the Jeskola forum from all Buzz artists willing to participate with tunes that are over 10 years old.
So people went through their digital archives and dug up unfinished pearls, snippets and small songs from long ago.

The collection is a cool mix of tunes spanning the full spectrum of electronic music. Great for hours of unexpected sounds when you want some background tunes while doing work, or writing blog posts like this one. Put it on shuffle and allow yourself to be surprised.

Photo by Sergiu Bacioiu, cc-licensed.


getting rid of the McAfee Process Validation Service which I never installed

Recently I noticed my laptop was acting rather sluggish after rebooting. As a Windows geek I swiftly started the improved Windows 10 task manager and noticed something peculiar.

A “McAfee Process Validation Service” (or mfevtps.exe for you techies) was gobbling up a lot of CPU cycles. I know McAfee of course, but I never installed any of their antivirus products, so how on earth did that get on my system?

A screenshots showing the McAfee service scanning and slowing down my system why I didn't even install it. How queer.

I found out that this thing is actually a Windows service, which you can see in the Service tab of your Task Manager. So when you look into the startup tab to see what triggers the process, you don’t even see it there.

It also turns out that this bit of software is automatically installed when you run the McAfee Stinger antivirus detection software.
Now Stinger is great, or at least used to be great. It’s supposed to be a standalone executable you can just pop onto any system and use it to scan for viruses and malware without having to install any full blow antivirus suite.

Unfortunately this now also installs a bit of malware itself.

Now how do I get rid of something that I never installed? It can’t be found anywhere when you use the regular Windows uninstall tools. I knew this thing was sitting in my c:\windows\system32 folder, but I didn’t want to just rip it out by hand because there might still be some other crap littered here and there that I don’t know about, and might be causing problems once it’s half destroyed.

If found out that McAfee has a specific removal tool. I guess they get this question a lot…
Finally this MCPR.exe removal tool deleted the unwanted service and after a single reboot my system now is a tiny bit cleaner and a tiny bit faster again.

Which is nice.


chill and drones

Time to chill to some nice ambient tunes from the French one-woman project Zalys. I ran into this one by accident on bandcamp. I also found a nice range of her atmospheric deep space ambient, sci-fi backgrounds and apocalyptic dark-ambient tracks on Soundcloud. I kid you not, that’s what is says on the Soundcloud bio.
Good stuff to block out noise, get into the (dark) zone and get some work done, or just have in the background will chilling, reading or whatever.

Here’s a taste. You’ll also find this in my ambient playlist filled with more chilly goodness.

Now that we’re in a sci-fi mood we have some more of those eery space drone type soundscapes from jonnie13black.
He’s an ambient DJ of sorts, if that’s even a thing, and you can find him mixing all sorts of ambient darkness into long sets on Youtube. If you dig some background drones there’s plenty right there.
This is also an excellent resource to find some more artists in this realm as each set comes with a complete playlist. Way to go Jonnie.

Here’s another taste of what you can expect.


Can’t get enough? Try some previous posts with stuff from Moby or this.


how to stop windows 10 from rearranging your desktop icons

I’m a desktop minimalist myself and the trashcan is about all I want to see on my desktop. However if you like your desktop with lots of icons on it, arranged according to some non-alphabetical grouping system you might find out that Windows sometimes rearranges them nicely in alphabetical order, aligning them all nicely to the top left of your desktop without your prior consent.
This typically happens after reboots, switching between resolutions, plugging and unplugging a secondary screen or docking/un-docking the laptop.
It can drive people mad.

This seems to be an issue that has been plaguing Windows 8 and 10 for quite a while already, driving lot’s of people bonkers. Unfortunately when looking for a solution online in various fora you tend to find a lot of useless tips or the suggestion to install some third-party desktop icon position-saving software. Eew.

There is a simple solution in the Windows settings however, but I have to admit it’s not very obvious and I had to look for it quite a bit to find it.

It’s all in the settings as expected, but it’s spread out in two different spots, which makes it hard to get right.

Here’s how to fix it:

1. Right click on your desktop and disable the auto arrange feature by disabling the checkbox next in View > Auto arrange icons.

Shows how to disable the auto arrange icons feature in Windows.

You’d think that should do the trick right? Well most people do. But there’s another option that interferes with your desktop icon zen garden staying the way you want it.

2. Right click again on your desktop, now click Personalize.
You’ll see the Settings screen appear.
There you select Themes.
Now click Desktop icon settings.
Now look what we have there. A checkbox labeled “Allow themes to change desktop icons“.

Uncheck it and press OK.

You should now no longer experience the frustration of computer code messing with your desktop icons.

Zen at last.

Disable the Allow themes to change desktop icons checkbox



More Recent Articles

You Might Like

Safely Unsubscribe ArchivesPreferencesContactSubscribePrivacy