Limit OneDrive and Windows Update bandwidth hogging

Have a really horrible internet connection currently, and whenever Windows Update and OneDrive starts downloading stuff, I can basically not do anything else because they’re hogging all my bandwidth.


  1. Open Local Group Policy Editor.
  2. Go to Computer Configuration / Administrative Templates / Network / Background Intelligent Transfer Service (BITS).
  3. Enable Limit the maximum network bandwidth for BITS background transfers, and optionally adjust the rate and hours.
  4. Reboot, possibly?


QoS Policy

  1. Open Local Group Policy Editor.
  2. Go to User Configuration / Windows Settings / Policy-based QoS.
  3. Right-click and hit Create new policy.
  4. Set DSCP Value to 1 and/or Outbound Throttle Rate to something appropriate.
  5. Set QoS policy to apply to applications with executable name onedrive.exe (or skydrive.exe, check your process list).
  6. Reboot, possibly?

Source: Don’t remember…

How to reset enemies in Factorio

Playing Factorio and loving it! But I’m playing rather slowly, so even though I like that the enemies are aggressive (didn’t select the peaceful option), they have evolved much further than I’m comfortable with compared to my ability to deal with them at the moment…

Found some console commands for resetting the evolution factor (what gradually increases and makes the enemies more and more nasty), and for nuking already spawned enemies.

Check your keyboard settings for how to toggle the console.

/c game.evolution_factor = 0
/c game.forces["enemy"].kill_all_units()

To see the current evolution factor:

/c game.local_player.print(game.evolution_factor)

Excel: Function for nslookup in worksheet

Just a copy of a function I found in a blog post for doing nslookup calls in a worksheet, in case I need it again in the future. I’ve changed the return value for failing lookups to a blank string, “”, rather than “NotFound”, but otherwise it’s unchanged.

Usage, given an IP in cell A1, to get the hostname: =NSLookup(A1; 2)

Public Function NSLookup(lookupVal As String, Optional addressOpt As Integer) As String
   Const NAME_LOOKUP = 2
   Const AUTO_DETECT = 0
   'Skip everything if the field is blank
  If lookupVal <> "" Then
        Dim oFSO As Object, oShell As Object, oTempFile As Object
        Dim sLine As String, sFilename As String
        Dim intFound As Integer
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        Set oShell = CreateObject("Wscript.Shell")
        'Handle the addresOpt operand
       'Regular Expressions are used to complete a substring match for an IP Address
       'If an IP Address is found, a DNS Name Lookup will be forced
       If addressOpt = AUTO_DETECT Then
            ipLookup = FindIP(lookupVal)
            If ipLookup = "" Then
                addressOpt = ADDRESS_LOOKUP
                addressOpt = NAME_LOOKUP
                lookupVal = ipLookup
            End If
        'Do a regular expression substring match for an IP Address
       ElseIf addressOpt = NAME_LOOKUP Then
            lookupVal = FindIP(lookupVal)
        End If
        'Run the nslookup command
       sFilename = oFSO.GetTempName
        oShell.Run "cmd /c nslookup " & lookupVal & " > " & sFilename, 0, True
        Set oTempFile = oFSO.OpenTextFile(sFilename, 1)
        Do While oTempFile.AtEndOfStream <> True
            sLine = oTempFile.Readline
            cmdStr = cmdStr & Trim(sLine) & vbCrLf
        oFSO.DeleteFile (sFilename)
        'Process the result
       intFound = InStr(1, cmdStr, "Name:", vbTextCompare)
        If intFound = 0 Then
            NSLookup = ""
            Exit Function
        ElseIf intFound > 0 Then
            'TODO: Cleanup with RegEx
           If addressOpt = ADDRESS_LOOKUP Then
                loc1 = InStr(intFound, cmdStr, "Address:", vbTextCompare) + InStr(intFound, cmdStr, "Addresses:", vbTextCompare)
                loc2 = InStr(loc1, cmdStr, vbCrLf, vbTextCompare)
                nameStr = Trim(Mid(cmdStr, loc1 + 8, loc2 - loc1 - 8))
            ElseIf addressOpt = NAME_LOOKUP Then
                loc1 = InStr(intFound, cmdStr, "Name:", vbTextCompare)
                loc2 = InStr(loc1, cmdStr, vbCrLf, vbTextCompare)
                nameStr = Trim(Mid(cmdStr, loc1 + 5, loc2 - loc1 - 5))
            End If
        End If
        NSLookup = nameStr
        NSLookup = "N/A"
    End If
End Function

Function FindIP(strTest As String) As String
    Dim RegEx As Object
    Dim valid As Boolean
    Dim Matches As Object
    Dim i As Integer
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Pattern = "\b(?:\d{1,3}\.){3}\d{1,3}\b"
    valid = RegEx.test(strTest)
    If valid Then
        Set Matches = RegEx.Execute(strTest)
        FindIP = Matches(0)
        FindIP = ""
    End If
End Function


PHP: Stream a file line-by-line using a generator

This function will “stream” a file line-by-line, as a Generator.

Can be very useful if for example you need to process a big file, don’t want to read the whole thing into memory, but only process each line by itself.

function read($file)
    $fp = fopen($file, 'rb');

    while(($line = fgets($fp)) !== false)
        yield rtrim($line, "\r\n");


// Usage
foreach(read('') as $line)

CSS: Super simple design guides

Needed to see if I had lined some stuff up correctly on a website I’m making. Came up with this simple CSS to add two guides to the page that I can move around freely in the browser developer console (just nudge their position around to where I need them).

It’s really simple, but for some reason didn’t think of it until now…

html::after {
    content: "";
    height: 1px;
    width: 100%;
    background: red;
    position: fixed;
    left: 0;
    bottom: 5px; /* Change this to move the guide horizontally */
html::before {
    content: "";
    height: 100%;
    width: 1px;
    background: red;
    position: fixed;
    top: 0;
    right: 5px; /* Change this to move the guide vertically */

PHP: Delete directory recursively

function delete_directory($dir)
    if( ! file_exists($dir))

    $it = new RecursiveDirectoryIterator($dir);
    $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);

    foreach($it as $file)

With a hint of Social Ineptitude