www.andyparkhill.co.uk Open in urlscan Pro
2a00:1450:400d:807::2013  Public Scan

Submitted URL: http://andyparkhill.co.uk/
Effective URL: https://www.andyparkhill.co.uk/
Submission: On March 09 via api from US — Scanned from DE

Form analysis 2 forms found in the DOM

Name: contact-form

<form name="contact-form">
  <p></p> Name <br>
  <input class="contact-form-name" id="ContactForm1_contact-form-name" name="name" size="30" type="text" value="">
  <p></p> Email <span style="font-weight: bolder;">*</span>
  <br>
  <input class="contact-form-email" id="ContactForm1_contact-form-email" name="email" size="30" type="text" value="">
  <p></p> Message <span style="font-weight: bolder;">*</span>
  <br>
  <textarea class="contact-form-email-message" cols="25" id="ContactForm1_contact-form-email-message" name="email-message" rows="5"></textarea>
  <p></p>
  <input class="contact-form-button contact-form-button-submit" id="ContactForm1_contact-form-submit" type="button" value="Send">
  <p></p>
  <div style="text-align: center; max-width: 222px; width: 100%">
    <p class="contact-form-error-message" id="ContactForm1_contact-form-error-message"></p>
    <p class="contact-form-success-message" id="ContactForm1_contact-form-success-message"></p>
  </div>
</form>

https://www.andyparkhill.co.uk/search

<form action="https://www.andyparkhill.co.uk/search" class="gsc-search-box" target="_top">
  <table cellpadding="0" cellspacing="0" class="gsc-search-box">
    <tbody>
      <tr>
        <td class="gsc-input">
          <input autocomplete="off" class="gsc-input" name="q" size="10" title="search" type="text" value="">
        </td>
        <td class="gsc-search-button">
          <input class="gsc-search-button" title="search" type="submit" value="Search">
        </td>
      </tr>
    </tbody>
  </table>
</form>

Text Content

MAGICANDI'S BLOG

Will code for cake...


 * Home
 * About
 * Links
 * Running
 * Projects
 * Reading List
 * Contact






15 JAN 2022


MOVING ON... A NEW BLOG



Folks, after 12 years, I've decided to start up a new blog at
https://tangiest.co.uk/. The new blog is a bit minimal right now, but I plan to
extend it, and eventually migrate all the content from this blog to the new
site.

Thank you for taking the time to read this blog, and I look forward to seeing
you at the new one!


Posted by Andy Parkhill at 20:05 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest




9 SEPT 2021


WHAT I'M READING #6



The latest in an irregular series of posts on what I've been reading.


BOOKS


MR MERCEDES

by Stephen King

A pretty decent crime thriller, showing that Stephen King can write a lot more
than just horror. I recently read his novella, The Colorado Kid, and learnt from
the foreword to that book about the Bill Hodges trilogy. Having read this, the
first novel in the series, I'm looking forward to reading the rest, and also
watching the TV series.


STAR WARS: AFTERMATH

by Chuck Wendig

This Star Wars novel was recommended by a number of people to me, and I have to
admit, I found it well written and even moving at times as it imagined the
massive changes following the supposed end of the Empire. But in the end, it
just didn't keep my attention, and I don't plan to read the rest of the series.


FRAGILE THINGS

by Neil Gaiman

I picked up this collection of short stories simply for the first story, 'A
Study in Emerald'. This is is cross-over of a Sherlock Holmes mystery and
Lovecraftian horror, and it is just excellent. I tried to read a few of the
other stories and gave up - I find Neil Gaiman pretty self-indulgent at the best
of times, and this collection confirmed it. As much as I enjoyed the
re-imagining of Sherlock Holmes, I really can't recommend this book.


HEART SHAPED BOX

by Joe Hill

A simply fantastic read. You aren't just reading this horror story, you feel you
are living it.


DREAMING IN CODE

by Scott Rosenberg

Again, a book highly recommended by others, but one I felt was ultimately
disappointing. While this exploration of an open-source project was interesting,
the project's initial technology choices meant it was ultimately doomed, and
this was compounded by weak project leadership. Some of the meta-discussion
about open source and technology was interesting, but I ended the book wondering
what the point of it all was.


ARTICLES


FACEBOOK’S BATTLE FOR DOMINATION

by John Naughton

John Naughton's review of An Ugly Truth by Sheera Frenkel and Cecilia Kang reads
like a long overdue indictment of Facebook, and I've added An Ugly Truth to my
reading list as a result.


ONE BAD APPLE

by Dr. Neal Krawetz

This long and forensic article takes apart some of the claims made by Apple in
defence of their proposed (and now postponed) Child Sexual Abuse Material
solution.


DESPERATE GRADUATES RUSH TO STUDY ‘PANIC MASTERS’ AFTER JOB REJECTIONS

by Rachel Hall

This article on the jump in applications to 'panic Masters' courses due to the
uncertain economic climate caught my eye.


WHY ELON MUSK ISN’T SUPERMAN

by Tom O'Reilly

This article dissects exactly how Elon Musk got so amazingly wealthy despite
owning an unprofitable car maker.


CARL LENTZ AND THE TROUBLE AT HILLSONG

by Alex French and Dan Adler

My wife and I recently watched the Storyville documentary, Hillsong Church:
Church goes viral. As Christians, we found it an extremely unsettling film. One
of its themes was the double standards that operated in the Hillsong church
movement - this article looks at (only) one instance of this, the scandal around
one of the more well known pastors, Carl Lentz.


Posted by Andy Parkhill at 21:09 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest




11 AUG 2021


THE CASE OF THE UNKNOWN 'ˆF_BISA' GMAIL LABEL



I noticed yesterday an unknown label, 'ˆf_bisa' appearing in Gmail. I assumed it
had been created by my son messing with the keyboard whilst he was watching
YouTube earlier (not yet 5 and already a Lego Ninjago fan), and deleted it.



I thought nothing more about it... until I noticed it was back today. I have
tried deleting it a few times, but it refuses to go. I'm assuming it is a bug,
possibly due to the synchronization between Gmail and the iOS Mail app?
Regardless, a search shows I'm not the only person experiencing this issue:



Both posts have appeared on Gmail forums in the past few days complaining about
the label. Nice to know I'm not alone. Apologies to anyone who has come here
looking for an answer - I haven't a clue what is causing this. If you know,
please get in touch!


UPDATE - 13/08/2021

I came across this article that suggests it may be due to a third party read
receipt script hosted at https://t.sidekickopen45.com. The subdomain
t.sidekickopen45.com redirects to the page
https://www.hubspot.com/abuse-complaints. Sidekick also used to be the name of
Hubspot's email tracking tool.


FURTHER UPDATE - 20/08/2021

In the original update, I mis-identified the company that was behind the read
receipt script. Apologies to those concerned. Thanks to Derek/Dmitry for
reaching out to let me know.


Posted by Andy Parkhill at 22:59 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest




21 JUL 2021


ORGANISING MY PHOTO BACKUPS



For the last few years, I have been taking regular backups of the various iOS
devices around the house. As well as using iTunes, I have taken backups of the
photos stored on the device directly. Over time, these photos backups have built
up, until I took some time last week to finally organise them.

I wrote the PowerShell script below to process the backup photos by:

 * Checking if a photo with the same file hash exists; if it does, I ignore the
   duplicate file
 * I rename the photo to the date and time it was taken, along with the photo
   resolution, and then move it to the target directory

There are numerous examples of similar scripts out there, so this is nothing
special. It could do with being optimised further, and I need to look into
assigning a frame resolution for videos. But it took just two hours to put
together, and ended up saving me 60 GB of disk space, so it was time well spent.

This file contains bidirectional Unicode text that may be interpreted or
compiled differently than what appears below. To review, open the file in an
editor that reveals hidden Unicode characters. Learn more about bidirectional
Unicode characters
Show hidden characters

# =============================================================================
# # Script Name: Organise-Photos # # Author: Andy Parkhill # # Date Created:
09/07/2021 # # Description: A script to organize my photos (and backups) into a
coherent # file structure, and remove duplicates, etc. # # Usage:
.\Organise-Photos.ps1 -sourceDirectory C:\Temp -targetDirectory D:\Photos # #
============================================================================= #
============================================================================= #
Parameters #
=============================================================================
Param ( [Parameter(Position=0,Mandatory=$true, HelpMessage='The source directory
path.')] [string]$sourceDirectory, [Parameter(Position=1,Mandatory=$false,
HelpMessage='The target directory path.')] [string]$targetDirectory='' ) #
============================================================================= #
Constants #
=============================================================================
Set-Variable ScriptName -option Constant -value "Organise-Photos" #
============================================================================= #
Script Variables #
=============================================================================
$ErrorActionPreference = "Stop" #
============================================================================= #
Functions #
============================================================================= #
Taken from https://gist.github.com/woehrl01/5f50cb311f3ec711f6c776b2cb09c34e
function Get-FileMetaData { param ( [Parameter(Mandatory=$True)]
[System.IO.FileInfo] $file = $(throw "Parameter -file is required.") )
if(!(Test-Path -Path $file.Fullname)) { throw "File does not exist:
$($file.Fullname)" Exit 1 } $pathname = $file.DirectoryName $filename =
$file.Name $hash = @{} try{ $shellobj = New-Object -ComObject Shell.Application
$folderobj = $shellobj.namespace($pathname) $fileobj =
$folderobj.parsename($filename) for($i=0; $i -le 294; $i++) { $name =
$folderobj.getDetailsOf($null, $i); if($name){ $value =
$folderobj.getDetailsOf($fileobj, $i); if($value){ $hash[$($name)] = $($value) }
} } }finally{ if($shellObject){
[System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$shellObject)
| out-null } } return New-Object PSObject -Property $hash } function
Get-DateTaken { param ( [Parameter(Mandatory=$True)] [PSCustomObject] $metadata
= $(throw "Parameter -metadata is required.") ) $dateTaken = $metadata.'Date
taken' if(! $dateTaken) { $dateTaken = $metadata.'Date created' } $dateTaken =
$dateTaken -replace '[^a-zA-z0-9/: ]', '' $dateTaken = $dateTaken -replace '/',
'-' $dateTaken = $dateTaken -replace ':', '' $dateTaken = $dateTaken -replace '
', '-' return $dateTaken } function Get-ImageSize { param (
[Parameter(Mandatory=$True)] [PSCustomObject] $metadata = $(throw "Parameter
-metadata is required.") ) $dimensions = '' if ($metadata.Dimensions -ne $null)
{ $dimensions = $metadata.Dimensions -replace '[^a-zA-z0-9]', '' } return
$dimensions } function Get-HashesForImagesInTargetDirectory { Write-Host
"Entering Get-HashesForImagesInTargetDirectory()" $existingImages =
Get-ChildItem -Path $targetDirectory -File -Recurse $hashes = @{} foreach($image
in $existingImages) { $hashes.Add($image.FullName, (Get-FileHash
$image.FullName).Hash) } Write-Host "Exiting
Get-HashesForImagesInTargetDirectory()" return $hashes } function Main { if(!
(Test-Path -Path $sourceDirectory)) { Write-Host "The source directory does not
exist at '$sourceDirectory'." -ForegroundColor Red return } if(! (Test-Path
-Path $targetDirectory)) { Write-Host "The target directory does not exist at
'$targetDirectory'." -ForegroundColor Red return; } $extensions = @('.mp4',
'.jpg', '.mov', '.jpeg', '.m4v', '.png', '.bmp', '.gif') $properties =
@('Attributes', 'Bit depth', 'Computer', 'Date accessed', 'Date created', 'Date
modified', 'Dimensions', 'EXIF version', 'File extension', 'Filename', 'Folder',
'Folder name', 'Folder path', 'Height', 'Horizontal resolution', 'Item type',
'Kind', 'Link status', 'Name', 'Owner', 'Path', 'Perceived type', 'Rating',
'Shared', 'Size', 'Space free', 'Space used', 'Total size', 'Type', 'Vertical
resolution', 'Width', 'Bit rate', 'Length', 'Media created', 'Protected', '35mm
focal length', 'Camera maker', 'Camera model', 'Date taken', 'Exposure bias',
'Exposure program', 'Exposure time', 'F-stop', 'Flash mode', 'Focal length',
'ISO speed', 'Metering mode', 'Orientation', 'Program mode', 'Program name',
'White balance', 'Light source', 'Max aperture', 'Saturation', 'Subject',
'Title') $imageHashes = Get-HashesForImagesInTargetDirectory $images =
Get-ChildItem -Path $sourceDirectory -File -Recurse | Sort-Object -Property
LastWriteTime -Descending $toSortFolder =
[System.IO.Path]::Combine($targetDirectory, "ToSort"); New-Item -ItemType
Directory -Force -Path $toSortFolder | Out-Null foreach($image in $images) {
Write-Host "Processing image: $($image.Fullname)"
if($extensions.Contains($image.Extension.ToLower())) { $metadata =
Get-FileMetaData -file $image $dateTaken = Get-DateTaken -metadata $metadata
$imageSize = Get-ImageSize -metadata $metadata $extension =
$image.Extension.ToLower() $imageHash = (Get-FileHash $image.FullName).Hash if(!
$imageHashes.ContainsValue($imageHash)) { $split = $dateTaken.split("-") $year =
$split[2] $month = (Get-Culture).DateTimeFormat.GetMonthName($split[1])
$yearFolder = [System.IO.Path]::Combine($targetDirectory, $year); New-Item
-ItemType Directory -Force -Path $yearFolder | Out-Null $monthFolder =
[System.IO.Path]::Combine($yearFolder, $month); New-Item -ItemType Directory
-Force -Path $monthFolder | Out-Null $filename = [string]::Format("{0}_{1}{2}",
$dateTaken, $imageSize, $extension) $filePath =
[System.IO.Path]::Combine($monthFolder, $filename) if (! (Test-Path -Path
$filePath)) { Copy-Item $image.FullName -Destination $filePath } else {
for($index = 1; $index -lt 10; $index++) { $filename =
[string]::Format("{0}_{1}_{2}{3}", $dateTaken, $imageSize, $index, $extension)
$filePath = [System.IO.Path]::Combine($monthFolder, $filename) if (! (Test-Path
-Path $filePath)) { Copy-Item $image.FullName -Destination $filePath break; } }
} if(! $imageHashes.ContainsKey($filePath)) { $imageHashes.Add($filePath,
$imageHash) } } } elseif($image.Extension.ToLower() -eq '.aae') { # Ignore file
} else { Copy-Item $image.FullName -Destination $toSortFolder } } Write-Host ""
Write-Host "Total images processed: $($images.Count)" -ForegroundColor Green } #
============================================================================= #
Start of Script Body #
=============================================================================
$timeStamp= (Get-Date).ToString("HH:mm dd/MM/yyyy") Write-Host "Starting
$ScriptName at $timeStamp" $scriptTimer =
[System.Diagnostics.Stopwatch]::StartNew() Main $elapsedTime =
$scriptTimer.Elapsed $message = [string]::Format("Script total execution time:
{0} seconds", $elapsedTime.TotalSeconds.ToString("#")) Write-Host $message
Write-Host Write-Host "Exiting $ScriptName" #
============================================================================= #
End of Script Body #
=============================================================================

view raw Organise-Photos.ps1 hosted with ❤ by GitHub

Posted by Andy Parkhill at 22:18 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest
Labels: Photos, PowerShell, Scripting



15 MAY 2021


WHAT I'M READING #5



The latest in an irregular series of posts on what I've been reading.


BOOKS


BAD BLOOD

by John Carreyrou

Despite knowing the Theranos story, and having read John Carreyrou's reporting
on the story at the time, at the end of this book, I had to stop and ask myself
"WTF did I just read?". The answer was a thrilling book detailing what must be
the wildest startup scandal in Silicon Valley.


ZED

by Joanna Kavenna

I found this novel to be so disappointing. It had an interesting premise for a
novel, basically updating 1984 to have Big Brother make use of Artificial
Intelligence and other technology, and adding an element of Kafka.
Unfortunately, the author has tried to be clever, and the result was more
irritating than illuminating.


THE INSTITUTE

by Stephen King

An excellent novel. Stephen King has been back on form for a while (check out
Sleeping Beauties if you haven't already read it), and this book is proof his
current run of form is continuing.


ARTICLES


HUMANS WILL NEVER COLONIZE MARS

by George Dvorsky

For the attention of Elon Musk and Jeff Bezos. In space, no one can hear your
workers scream...


A DEEP DIVE INTO SAINT BOT, A NEW DOWNLOADER

After being on the wrong end of a cyber attack recently, I am fascinated by
these detailed descriptions of how malware works. In particular, I love reading
about how cyber criminals take the everyday tools I use in my work (.NET and
PowerShell) and use them (poorly in most cases) to create new malware vectors.


BLOODY SUNDAY AND HOW THE BRITISH EMPIRE CAME HOME

by Adam Ramsay

After the recent verdict into the Ballymurphy shootings, I re-read this article
on how Bloody Sunday and Ballymurphy weren't abberations, but part of a long
history of illegal killings by the British Army.


COUNTER-FORENSICS. PROTECTING YOUR SMARTPHONE AGAINST THE FIVE EYES

The first tutorial I've came across on protecting your smart phone that goes
beyond the naive 'enable the screen lock' advice. Worth a read to learn of the
real threats to your smart phone's data.


NO ONE WILL READ YOUR BOOK (AND OTHER TRUTHS ABOUT PUBLISHING)

by Elle Griffin

This long read details exactly why most authors fail to make a living, despite
more people reading than ever over lockdown.


THE INCREDIBLE RISE OF NORTH KOREA’S HACKING ARMY

by Ed Caesar

A long article that details the development of North Korean state sanctioned
hackers.


Posted by Andy Parkhill at 19:10 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest




17 MAR 2021


WHAT I'M READING #4



The latest in an approximately monthly series of posts on what I've been
reading.


BOOKS


84K

This is the first book I've read by Claire North, and I found it astonishingly
good. It is a tale of a dystopian United Kingdom where a price is literally put
on people's lives. I'm eagerly looking forward to reading more books by the
author.


THE ABSTAINER

This was a highly rated book from Ian McGuire, with rave reviews ('The Wire by
gaslight'). The first 2 thirds of the book were enjoyable, but the ending was
very anti-climatic. As a result, I found it only a so-so read - not so much
watching 'The Wire' but more like suffering a rather humdrum episode of NCIS.


ARTICLES


EXITING THE VAMPIRE CASTLE

Mark Fisher's classic take on the infighting and policing that takes place in
left-wing social media.


UNIONIST IDENTITY IN IRELAND

An in-depth analysis of unionist identity from Choyaa.


DEMYSTIFYING SEO WITH EXPERIMENTS

An interesting article from the Pinterest Engineering team on how to experiment
with search engine optimisation (SEO) at scale.


WHAT’S THE POINT OF A LECTURER?

A provoking article on the future of Higher Education and lecturing in
universities from Terence Eden. I'm not personally entirely convinced that
online learning is the paancea that he thinks it is - the research so far
suggests that online learning results in poorer engagement with students, and
worse outcomes for disadvantaged students. Blended learning, as proposed by
Terence, seems to have similar outcomes to traditional lecturing, but most
EdTech seems focussed on online learning only, as this appears to offer the
greatest cost savings for institutions (though the evidence for this seems
sketchy at best). In the aftermath of the Covid-19 lockdowns, and a year of
enforced online learning, it will be interesting to see what effect it has on
current students, and what their opinion of it is. I susoect it will be like my
opinion of working from home - that it is highly overrated.


ELECTRONICS AND THE DIM FUTURE OF THE UNIVERSITY

Courtesy of John Naughton's recent column on Universities and the upheavals in
Higher Education due to the pandemic, I read this prescient article (from 1995!)
on the future of the University in an online world. We are certainly seeing
universities being forced to consider what exactly they are for at the moment.


Posted by Andy Parkhill at 21:39 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest




17 FEB 2021


MIGRATING FROM ONENOTE TO MARKDOWN



Over the past few weeks, I've been working on migrating my extensive collection
of notes from OneNote into Markdown files. I am writing my migration process up
for anyone else considering moving from OneNote to Markdown.


WHY MIGRATE?

I recently found that I wasn't making use of my OneNote notes as much as I had
previously. I realised that I hated using the OneNote client on my iPhone (5s,
so a small screen), and also that my notes had grown so large (after 8 years of
use) that they really needed pruning. Additionally, I didn't really like having
my notes in a proprietary format that I was unable to backup and version. So I
looked at the usual alternatives (Notion, SimpleNote) and also at open source
alternatives (Joplin, and Laverna), but ultimately, I decided to use Markdown
files in a VSCode workspace, synchronized using Dropbox.


HOW

I used this PowerShell script to export my OneNote notes into a basic Markdown
file from the OneNote desktop client on Windows 10. It took approximately 4
hours to export all my notes (some 2640 files), across vraious OneNote
notebooks.

I then wrote a second PowerShell script to format the exported Markdown files.
This second script:

 * Removed any non-ASCII characters from the exported files
 * Set the page title as a level 1 header
 * Remove any empty comments from the exported files
 * Correct the list indentation for the rules used by the MarkdownLint extension
   in VSCode
 * Remove blank lines
 * Update source path for images (also exported out by the initial script)



SETUP

As noted already, I'm using VSCode to edit my new Markdown files on my desktop.
I created a new workspace for my notes that I have colour coded using the
Peacock extension for VSCode. I have my notes organised in a Dropbox directory,
and this is automatically backed up daily to a Git repository.

I can then access my notes on my mobile via the Dropbox app. I tried initially
to use the built-in Dropbox text editor, but found this a bit limited. I
eventually settled on using the 1Writer app to create and edit notes on my
mobile, and I've been impressed by how intuitive it is to use.

I have been using my current setup for a few weeks now. The main pain has
actually been curating the exported notes, and archiving those no longer
required. I have came across a few more structured ways of using Markdown files
(Foam, Obsidian), and may end up using one in the future, but for now I'm happy
with my current setup.


Posted by Andy Parkhill at 22:12 0 comments
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest
Labels: notes, OneNote, VSCode

Older Posts Home

Subscribe to: Posts (Atom)



CONTACT FORM



Name




Email *




Message *











SUBSCRIBE

Posts
Atom

Posts

All Comments
Atom

All Comments





SEARCH THIS BLOG






ABOUT ME

I am a software developer from Coleraine, Northern Ireland with over 10 years of
experience, primarily in .Net and SharePoint.

I am a frequent lurker and an occasional contributor on StackOverflow.com as
MagicAndi.




FOLLOW ME

GitLab  Github




SUBSCRIBE VIA EMAIL

Subscribe to MagicAndi's Blog by Email



BLOG ARCHIVE

 * ▼  2022 (1)
   * ▼  January (1)
     * Moving On... A New Blog

 * ►  2021 (8)
   * ►  September (1)
   * ►  August (1)
   * ►  July (1)
   * ►  May (1)
   * ►  March (1)
   * ►  February (2)
   * ►  January (1)

 * ►  2020 (7)
   * ►  June (4)
   * ►  April (2)
   * ►  March (1)

 * ►  2019 (3)
   * ►  October (1)
   * ►  April (1)
   * ►  January (1)

 * ►  2018 (10)
   * ►  December (1)
   * ►  November (1)
   * ►  October (1)
   * ►  August (4)
   * ►  June (1)
   * ►  May (1)
   * ►  April (1)

 * ►  2017 (6)
   * ►  November (1)
   * ►  June (1)
   * ►  May (1)
   * ►  April (1)
   * ►  February (1)
   * ►  January (1)

 * ►  2016 (9)
   * ►  December (1)
   * ►  November (2)
   * ►  October (1)
   * ►  August (1)
   * ►  July (1)
   * ►  June (1)
   * ►  April (1)
   * ►  February (1)

 * ►  2015 (7)
   * ►  December (1)
   * ►  October (1)
   * ►  April (2)
   * ►  February (1)
   * ►  January (2)

 * ►  2014 (3)
   * ►  December (1)
   * ►  September (1)
   * ►  January (1)

 * ►  2013 (6)
   * ►  October (1)
   * ►  May (2)
   * ►  April (1)
   * ►  March (2)

 * ►  2012 (10)
   * ►  September (1)
   * ►  July (1)
   * ►  April (1)
   * ►  February (3)
   * ►  January (4)

 * ►  2011 (7)
   * ►  October (2)
   * ►  August (1)
   * ►  July (1)
   * ►  January (3)

 * ►  2010 (45)
   * ►  December (1)
   * ►  September (2)
   * ►  August (6)
   * ►  July (11)
   * ►  June (3)
   * ►  May (12)
   * ►  April (8)
   * ►  March (2)




LABELS

#derry2013 2020 apology Articles Azure Best Practices blog migration Blogging
bodyweight bookmarks books browsers C# Career Certification China
cloud-computing Code community Computer Science Coronavirus data Derry Dublin
Events Exams fitness Git GitHub GitLab Goals Hardware Holidays Industry
Interviews iphone Jobs jQuery LinkedIn Links Linux Macro maker maker faire
Mobile MOSS 2007 Music notes OneNote open source Operating System Personal
Photos PowerShell Productivity professional programming projects Quantified Self
Quotes Reading Relaxation Resolutions RSS running Scripting SharePoint
SharePoint 2001 SharePoint 2003 SharePoint 2007 SharePoint 2010 SharePoint 2013
SharePoint 2016 SharePoint 2019 Social Media Software stackoverflow static site
generators SysAdmins teaching Technical testing tools Travel TV Tweet Twitter
utility Virtual Machines Visual Studio VSCode web applications webdev What I'm
Reading Windows x64



COPYRIGHT NOTICE


MagicAndi's Blog by Andy Parkhill is licensed under a Creative Commons
Attribution-Non-Commercial-Share Alike 3.0 Unported License.


© 2010-2023, Andrew Parkhill.

Disclaimer:
The opinions expressed herein are my own personal opinions and do not represent
my employer's view in any way.




Powered by Blogger.



Diese Website verwendet Cookies von Google, um Dienste anzubieten und Zugriffe
zu analysieren. Deine IP-Adresse und dein User-Agent werden zusammen mit
Messwerten zur Leistung und Sicherheit für Google freigegeben. So können
Nutzungsstatistiken generiert, Missbrauchsfälle erkannt und behoben und die
Qualität des Dienstes gewährleistet werden.Weitere InformationenOk