How to test AA and AAA batteries using a multimeter

I have a drawer full of spare AA and AAA batteries. Some are fresh, some are from remote controls that died last winter, some I found in a toy. Before tossing them or putting them to use, I check the voltage with a multimeter. It takes thirty seconds and saves you from guessing. What you need A cheap multimeter is all you need. Any digital one will do — I’ve used the same £8 model from Amazon for years. The probes should be intact and the battery in the multimeter itself should have charge (if it beeps when you turn it on, you’re good). ...

Iceraven and Ironfox browser comparison

Both are Firefox forks for Android. Both strip out telemetry. They diverge on what to do after that. Iceraven is built around customisation. It exposes about:config, supports a wider range of add-ons than stock Firefox for Android, and tries to replicate the desktop Firefox experience on mobile. Updates come through GitHub releases. It’s aimed at people who want to tweak their browser. IronFox comes from Mull, which itself is a privacy-hardened Firefox fork. It removes more telemetry than Iceraven, disables features that leak data by default (WebGL, for example), and keeps the interface stripped down. It’s on F-Droid and Accrescent as well as GitHub. The trade-off is that some websites break because of the aggressive defaults. ...

'How To Get BIOS Serial Numbers On Linux'

The quickest way to get a BIOS serial number on Linux: sudo dmidecode -s system-serial-number That’s usually all you need. dmidecode reads the DMI/SMBIOS table and prints the serial number directly. Other options If dmidecode isn’t available or doesn’t return what you need: # lshw sudo lshw -C bios | grep serial # /sys class interface (no sudo needed) cat /sys/class/dmi/id/product_serial The /sys/class/dmi/id/ path is the cleanest option if you want to avoid sudo. It exposes several DMI fields: ...

Self-hosted services worth running on your homelab

I’ve been running a small homelab for a few years now, mostly just to tinker and escape the subscription treadmill. Over time I’ve collected a bunch of services that actually earn their keep, and this is a running list of the ones I’d recommend to someone starting out or looking to fill gaps in their setup. Nothing fancy. Just stuff that works, runs quietly, and gives you back control of your own data. ...

Shrinking PDFs with Ghostscript on the command line

I needed to shrink a PDF last week — something I don’t do often enough to remember the flags. Ghostscript is the tool, and it’s already on most Linux machines or a quick apt install ghostscript away. The command is: gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf The bit that actually matters is -dPDFSETTINGS=/screen. That’s the quality dial. /screen gives you the smallest file — fine for emailing or uploading, rubbish if you need to print anything. ...

How I set up a data pipeline that actually works

I spent three months building a data pipeline last year and another two months fixing the things I got wrong. What follows is the architecture I ended up with, and more importantly the decisions that shaped it. Where the data comes from We pull from three kinds of sources. Internal databases, mostly PostgreSQL instances running on our own infrastructure. Third-party APIs for things we don’t control, like payment providers and analytics platforms. And CSV files that land in an S3 bucket whenever someone exports a report from a legacy system that nobody knows how to update. ...

Shutdown Proxmox VM using CLI

SSH into the Proxmox host and run: qm shutdown <VMID> This sends an ACPI shutdown signal to the guest OS for a graceful shutdown. To find the VM ID: qm list If the VM doesn’t respond to the shutdown signal, force it: qm stop <VMID> qm stop is equivalent to pulling the power cable. Use it only when qm shutdown hangs.

Learn Ansible

Ansible manages remote machines over SSH. No agents needed. You write playbooks in YAML that describe what the target state should be, and Ansible makes it happen. SSH setup Generate a key pair on the control node and copy it to your targets: ssh-keygen -t rsa ssh-copy-id username@target_host Inventory An inventory file lists your hosts and groups them: # my_inventory.ini [web] 192.168.1.2 [db] 192.168.1.3 You can also use dynamic inventory scripts that output JSON. ...

How to count words in a PDF from the Linux command line

The simplest approach: pdftotext input.pdf - | wc -w pdftotext is in the poppler-utils package (sudo apt install poppler-utils or sudo yum install poppler-utils). The - sends output to stdout instead of a file. Other options pdfminer: pdf2txt.py input.pdf | wc -w Install with pip install pdfminer.six. Python with PyPDF2: import PyPDF2 with open("input.pdf", "rb") as f: reader = PyPDF2.PdfReader(f) total = sum(len(page.extract_text().split()) for page in reader.pages) print(total) Note: PyPDF2’s PdfFileReader and getPage() are deprecated in newer versions — use PdfReader and index into reader.pages instead. ...

Install psql on macOS with Homebrew

brew install libpq brew link --force libpq psql --version libpq includes psql and other PostgreSQL client utilities. The brew link --force step symlinks the binaries into your PATH so psql is available from any terminal. If you don’t have Homebrew installed yet: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

How to avoid other pods from being scheduled on your node in Kubernetes

Taints on nodes repel pods. Tolerations on pods let them ignore specific taints. Together they give you control over scheduling. Taint effects NoSchedule — pods without a matching toleration won’t be scheduled on the node. PreferNoSchedule — the scheduler avoids the node but will use it if there’s nowhere else. NoExecute — pods without a matching toleration are evicted and won’t be rescheduled there. Applying a taint kubectl taint nodes node1 type=db:NoSchedule This prevents any pod from being scheduled on node1 unless it has a toleration for type=db. ...

Kubernetes Tolerations

Taints and tolerations work together to control which pods land on which nodes. Taints go on nodes and repel pods. Tolerations go on pods and let them ignore specific taints. Taint effects There are three effects: NoSchedule — pods without a matching toleration won’t be scheduled on the node. Existing pods are unaffected. PreferNoSchedule — the scheduler avoids the node but will use it if there’s nowhere else. NoExecute — pods without a matching toleration are evicted from the node and won’t be rescheduled there. Applying taints # Add a taint kubectl taint nodes node1 example-key=example-value:NoSchedule # Remove a taint kubectl taint nodes node1 example-key=example-value:NoSchedule- # Multiple taints at once kubectl taint nodes node1 key1=value1:NoSchedule key2=value2:PreferNoSchedule View taints on a node: ...

Remove lines matching a pattern from files recursively in Linux

find . -name "*.md" -type f -exec sed -i '/pattern/d' {} \; This one-liner walks the directory tree, finds every .md file, and strips out any line that matches the given pattern. The sed -i edits each file in place, and the {} gets swapped out for whatever path find hands it. Breaking it down find . -name "*.md" -type f does the walking. The -type f bit is important – without it, find would also match directories and pass them to sed, which would error out. The -exec ... \; at the end runs the command for each file individually. ...

Deleting files by content match in Linux

There are two ways to interpret this question, and the answer changes completely depending on which one you mean. Deleting files by filename If you want to nuke every file whose name contains a particular string: find . -type f -name '*string*' -delete The -type f keeps it from touching directories. The -delete flag removes whatever find matches. Simple enough. A word of caution: test without -delete first. Run the same command and replace it with -print to see what would actually get deleted. I’ve lost files to typos in wildcard patterns more times than I care to admit. ...

How to Resolve "Cannot Unregister the Machine While It Is Locked" Error in Vagrant

Running vagrant destroy sometimes fails with: VBoxManage: error: Cannot unregister the machine 'CnC_default_1643660523119_45689' while it is locked The VM is locked because a VirtualBox process is still holding onto it. Kill the headless process and try again: killall -9 VBoxHeadless && vagrant destroy killall -9 VBoxHeadless force-kills any running VirtualBox headless instances. The && runs vagrant destroy only if that succeeds.

Grabbing an SSL certificate from a remote server

There are moments when you need to inspect the certificate a remote server is presenting – maybe it’s expired and you’re trying to work out why things are breaking, or maybe you need the raw certificate data for some other reason and don’t have access to the server’s configuration. The quickest way is with openssl s_client: openssl s_client -connect {HOSTNAME}:{PORT} -showcerts Replace {HOSTNAME} with the server address and {PORT} with the port (usually 443 for HTTPS). The -showcerts flag dumps the full certificate chain rather than just the leaf certificate. ...

Replace all dots in filenames except the extension on Linux

Had a directory full of files with dots in the names and needed them all cleaned up. Something like my.report.final.pdf should become my_report_final.pdf, not my_report_final..pdf or worse. This one-liner does the job: for f in *; do pre="${f%.*}"; suf="${f##*.}"; mv -i -- "$f" "${pre//./_}.${suf}"; done Here’s what each part does. ${f%.*} strips everything from the last dot onwards, giving you the filename without its extension. ${f##*.} grabs just the extension by stripping everything up to and including the final dot. Then ${pre//./_} replaces every dot in the base name with an underscore. ...

Count directories in the current folder with a one-liner

A common question that comes up when you’re first getting comfortable with the command line: how do you count just the directories in your current folder? The quick answer is: ls -1 | wc -l This pipes a one-per-line listing of everything in the current directory into wc -l, which counts lines. Simple enough. But there’s a catch. This counts everything – files, symlinks, hidden items, the lot. If you only want directories, you need to be a bit more selective. ...

Count files in a directory with a one-liner

Another quick command line question: how do you count just the files in a directory, excluding subdirectories and other stuff? The classic answer: ls -l . | egrep -c '^-' This lists everything in long format (ls -l), then counts lines that start with a hyphen – which is how ls marks regular files. Directories show up as d, symlinks as l, and so on, so the regex filters them out. It works, but it’s a bit of a trick and relies on understanding ls output format. A more straightforward approach uses find: ...

'Installing Multiple PHP Versions on Debian 9'

Sometimes you need more than one PHP version on the same server. Maybe an old project still runs on 5.6, another one needs 7.2, and you want to test something on 7.4 before committing. Debian’s default repositories only ship one version, so you need a third-party source. The Sury repository is the standard way to get multiple PHP versions on Debian. Ondrej Surý has maintained it for years and it’s trusted by most people running PHP on Debian. ...

Fix casks with `depends_on` that reference pre-Mavericks

If you get an error like Error: Cask 'hex-fiend-beta' definition is invalid: invalid 'depends_on macos' value: ":lion", where hex-fiend-beta can be any cask name and :lion any macOS release name, run the following command: /usr/bin/find "$(brew --prefix)/Caskroom/"*'/.metadata' -type f -name '*.rb' -print0 | /usr/bin/xargs -0 /usr/bin/perl -i -pe 's/depends_on macos: \[.*?\]//gsm;s/depends_on macos: .*//g' This strips out all depends_on macos references from installed casks. It’s a blunt instrument – you’re editing Homebrew’s metadata files directly – but it gets things working again. ...

How to run VLC player as root user

I ran into this a while back when I needed VLC running as root on a headless server, and the usual --no-sandbox flag didn’t cut it. VLC refuses to start as root by default, which makes sense from a security standpoint but is annoying when you actually need it. The fix is brutal and hacky, but it works: sed -i 's/geteuid/getppid/' /usr/bin/vlc What’s actually happening here? VLC’s startup script checks whether the effective user ID is zero (root). If it is, it bails out. By swapping geteuid with getppid, we’re telling the script to check the parent process ID instead of the effective UID. Since getppid() returns a number way bigger than zero, the check passes and VLC starts. ...

List all Azure VM extensions

az vm extension image list [ { "name": "AcronisBackup", "publisher": "Acronis.Backup", "version": "1.0.33" }, { "name": "AcronisBackupLinux", "publisher": "Acronis.Backup", "version": "1.0.33" }, { "name": "AlertLogicLM", "publisher": "alertlogic", "version": "1.3.0.1" }, { "name": "AlertLogicLM", "publisher": "AlertLogic.Extension", "version": "1.3.0.0" }, { "name": "AlertLogicLM", "publisher": "AlertLogic.Extension", "version": "1.4.0.0" }, { "name": "AlertLogicLM", "publisher": "AlertLogic.Extension", "version": "1.9.0.0" }, { "name": "AlertLogicLM", "publisher": "AlertLogic.Extension", "version": "1.9.1.0" }, { "name": "AgentWinExt", "publisher": "bmc.ctm", "version": "9.0.0.1" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "11.18.6.2" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1207.12.3.0" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.109.1004" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.109.1005" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.110.1000" }, { "name": "ChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.110.1001" }, { "name": "LinuxChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "11.18.6.2" }, { "name": "LinuxChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1207.12.3.0" }, { "name": "LinuxChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.109.1004" }, { "name": "LinuxChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.110.1000" }, { "name": "LinuxChefClient", "publisher": "Chef.Bootstrap.WindowsAzure", "version": "1210.12.110.1001" }, { "name": "CloudLinkSecureVMLinuxAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "5.0.22503.21808" }, { "name": "CloudLinkSecureVMLinuxAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "5.5.23389.23430" }, { "name": "CloudLinkSecureVMLinuxAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "6.0.62.0" }, { "name": "CloudLinkSecureVMWindowsAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "5.5.6.23416" }, { "name": "CloudLinkSecureVMWindowsAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "6.0.66.0" }, { "name": "CloudLinkSecureVMWindowsAgent", "publisher": "CloudLinkEMC.SecureVM", "version": "6.5.69.0" }, { "name": "ConferForAzure", "publisher": "Confer", "version": "1.0.5.38" }, { "name": "ConferForAzure", "publisher": "Confer", "version": "1.0.5.39" }, { "name": "ConferForAzure", "publisher": "Confer", "version": "1.0.5.40" }, { "name": "BmcCtmAgentLinux", "publisher": "ctm.bmc.com", "version": "9.0.0.1" }, { "name": "DatadogLinuxAgent", "publisher": "Datadog.Agent", "version": "0.4" }, { "name": "DatadogLinuxAgent", "publisher": "Datadog.Agent", "version": "0.6.1" }, { "name": "DatadogLinuxAgent", "publisher": "Datadog.Agent", "version": "0.6.2" }, { "name": "DatadogWindowsAgent", "publisher": "Datadog.Agent", "version": "0.4.1" }, { "name": "DatadogWindowsAgent", "publisher": "Datadog.Agent", "version": "0.5" }, { "name": "DatadogWindowsAgent", "publisher": "Datadog.Agent", "version": "0.5.2" }, { "name": "DatadogWindowsAgent", "publisher": "Datadog.Agent", "version": "0.6.0" }, { "name": "dtmanaged", "publisher": "dynatrace.ruxit", "version": "1.4.0.11" }, { "name": "dtmanaged", "publisher": "dynatrace.ruxit", "version": "1.4.0.13" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.150.0.0" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.151.0.1" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.151.0.2" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.99.1.2" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.99.2.0" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "1.99.2.1" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.2.0.0" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.2.0.1" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.2.0.2" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.3.0.0" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.3.0.1" }, { "name": "oneAgentLinux", "publisher": "dynatrace.ruxit", "version": "2.3.0.2" }, { "name": "oneAgentManagedWindows", "publisher": "dynatrace.ruxit", "version": "1.0.0.4" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.150.0.0" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.150.0.1" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.151.0.2" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.99.1.1" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.99.1.2" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "1.99.1.3" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "2.2.0.0" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "2.2.0.1" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "2.2.0.2" }, { "name": "oneAgentWindows", "publisher": "dynatrace.ruxit", "version": "2.3.0.2" }, { "name": "FileSecurity", "publisher": "ESET", "version": "6.5.12010.1000" }, { "name": "FileSecurity", "publisher": "ESET", "version": "6.5.12014.1002" }, { "name": "FileSecurity", "publisher": "ESET", "version": "7.0.12014.1002" }, { "name": "ProtectVClientLinuxExtension", "publisher": "Gemalto.SafeNet.ProtectV", "version": "3.0.0.205" }, { "name": "ProtectVClientWindowsExtension", "publisher": "Gemalto.SafeNet.ProtectV", "version": "3.0.0.318" }, { "name": "DotnetAgent", "publisher": "HPE.Security.ApplicationDefender", "version": "1.0.0.2" }, { "name": "DotnetAgent", "publisher": "HPE.Security.ApplicationDefender", "version": "1.0.0.4" }, { "name": "DotnetAgent", "publisher": "HPE.Security.ApplicationDefender", "version": "1.6.13.0" }, { "name": "DotnetAgent", "publisher": "HPE.Security.ApplicationDefender", "version": "1.6.14.0" }, { "name": "DotnetAgent", "publisher": "HPE.Security.ApplicationDefender", "version": "1.6.9.0" }, { "name": "KESL", "publisher": "KasperskyLab.SecurityAgent", "version": "1.0.0.0" }, { "name": "KSWS", "publisher": "KasperskyLab.SecurityAgent", "version": "1.0.0.0" }, { "name": "McAfeeEndpointSecurity", "publisher": "McAfee.EndpointSecurity", "version": "6.0" }, { "name": "Compute.AKS-Engine.Linux.Billing", "publisher": "Microsoft.AKS", "version": "1.0.0" }, { "name": "AADLoginForWindows", "publisher": "Microsoft.Azure.ActiveDirectory", "version": "0.3.0.0" }, { "name": "AADLoginForWindows", "publisher": "Microsoft.Azure.ActiveDirectory", "version": "0.3.1.0" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.4870001" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.4890001" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.5160001" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.5920001" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.6350001" }, { "name": "AADLoginForLinux", "publisher": "Microsoft.Azure.ActiveDirectory.LinuxSSH", "version": "1.0.6430001" }, { "name": "IaaS47C6E03DTest", "publisher": "Microsoft.Azure.Applications", "version": "1.0.0.3" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.116.0" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.117.0" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.118.0" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.121.0" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.124.0" }, { "name": "MyBackupTest", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.125.0" }, { "name": "Compute.AKS-Engine.Windows.Billing", "publisher": "Microsoft.AKS", "version": "1.0.0" }, { "name": "MyBackupTestLinuxInt", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.9142.0" }, { "name": "MyBackupTestLinuxInt", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.9143.0" }, { "name": "MyBackupTestLinuxInt", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.9144.0" }, { "name": "MyBackupTestLinuxInt", "publisher": "Microsoft.Azure.Backup.Test", "version": "1.0.9147.0" }, { "name": "Compute.AKS.Linux.Billing", "publisher": "Microsoft.AKS", "version": "1.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.1.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.10.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.10.0.1" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.10.1.1" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.1.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.2.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.1" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.10" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.12" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.5" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.7" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.11.3.9" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.12.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.12.1.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.2.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.3.1.6" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.4.2.1" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.5.9.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.6.2.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.6.3.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.6.4.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.7.1.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.7.3.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.7.4.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.8.0.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.8.1.0" }, { "name": "IaaSDiagnostics", "publisher": "Microsoft.Azure.Diagnostics", "version": "1.9.0.0" }, { "name": "Compute.AKS.Windows.Billing", "publisher": "Microsoft.AKS", "version": "1.0.0" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.0" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.1" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.2" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.3" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.4" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.5" }, { "name": "CustomScript", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.6" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.101" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.103" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.107" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.109" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.111" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.113" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.115" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.Azure.Diagnostics", "version": "3.0.117" }, { "name": "GenevaMonitoring", "publisher": "Microsoft.Azure.Geneva", "version": "1.0.0.3" }, { "name": "GenevaMonitoring", "publisher": "Microsoft.Azure.Geneva", "version": "1.0.0.6" }, { "name": "GenevaMonitoring", "publisher": "Microsoft.Azure.Geneva", "version": "1.0.0.8" }, { "name": "GenevaMonitoring", "publisher": "Microsoft.Azure.Geneva", "version": "1.8.0.2" }, { "name": "GenevaMonitoring", "publisher": "Microsoft.Azure.Geneva", "version": "1.8.0.3" }, { "name": "KeyVaultForWindows", "publisher": "Microsoft.Azure.KeyVault", "version": "0.1.0.717" }, { "name": "KeyVaultForWindows", "publisher": "Microsoft.Azure.KeyVault", "version": "0.2.0.898" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.0.1512030601" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1512090359" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1512180541" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1601070410" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1601140348" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1602270800" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1604142300" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.1.1606092330" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.2.0" }, { "name": "DockerExtension", "publisher": "Microsoft.Azure.Extensions", "version": "1.2.2" }, { "name": "KeyVaultForWindows", "publisher": "Microsoft.Azure.KeyVault.Edp", "version": "0.0.0.705" }, { "name": "KeyVaultForWindows", "publisher": "Microsoft.Azure.KeyVault.Edp", "version": "0.0.0.867" }, { "name": "KeyVaultForWindows", "publisher": "Microsoft.Azure.KeyVault.Edp", "version": "0.0.0.887" }, { "name": "FixEmulatedIO", "publisher": "Microsoft.Azure.Extensions", "version": "1.0.0" }, { "name": "AquariusLinux", "publisher": "Microsoft.Azure.Networking.SDN", "version": "1.4.0.0" }, { "name": "AquariusLinux", "publisher": "Microsoft.Azure.Networking.SDN", "version": "1.5.0.0" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.1.0.886" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.2.0.1001" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.2.1.1014" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.3.0.1058" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.4.0.1112" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.4.1.1134" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.4.2.1150" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.5.0.1174" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.5.1.1204" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.6.2.1366" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.1.1416" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.3.1475" }, { "name": "DependencyAgentLinux", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.4.3150" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.105.0" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.306.5" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.411.1" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.466.1" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.493.1" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.518.1" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.526.2" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.585.2" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.861.1" }, { "name": "NetworkWatcherAgentLinux", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.861.2" }, { "name": "FixLinuxDiagnostic", "publisher": "Microsoft.Azure.Extensions", "version": "1.0.0" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.1.0.886" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.2.0.1001" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.2.1.1014" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.3.0.1058" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.4.0.1112" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.4.1.1134" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.5.0.1174" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.6.2.1366" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.1.1416" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.3.1475" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.4.3150" }, { "name": "DependencyAgentWindows", "publisher": "Microsoft.Azure.Monitoring.DependencyAgent", "version": "9.7.5.3590" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.104.0" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.306.5" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.411.1" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.466.1" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.493.1" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.518.1" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.526.2" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.585.2" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.861.1" }, { "name": "NetworkWatcherAgentWindows", "publisher": "Microsoft.Azure.NetworkWatcher", "version": "1.4.861.2" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.1" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.10" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.11" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.12" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.2" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.5" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.6" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.7" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.8" }, { "name": "AzurePerformanceDiagnostics", "publisher": "Microsoft.Azure.Performance.Diagnostics", "version": "1.0.9" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.0.1" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.1.0" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.1.1" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.0" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.1" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.2" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.3" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.4" }, { "name": "LinuxAsm", "publisher": "Microsoft.Azure.Extensions", "version": "2.2.5" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.40.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.42.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.43.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.46.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.47.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.49.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.53.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.54.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9124.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9125.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9126.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9127.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9128.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9131.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9133.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9134.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9135.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9136.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9137.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9140.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9141.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9142.0" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices", "version": "1.0.9143.0" }, { "name": "VMSnapshot", "publisher": "Microsoft.Azure.RecoveryServices.Edp", "version": "1.0.39.0" }, { "name": "Linux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "Linux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "Linux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "Linux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "Linux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9107" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9102" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9103" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9104" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9106" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.1" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.10" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.12" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.4" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.5" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.6" }, { "name": "AzureBackupLinuxWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.9" }, { "name": "VMSnapshotLinux", "publisher": "Microsoft.Azure.RecoveryServices.Edp", "version": "1.0.9125.0" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9102" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9103" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9104" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9106" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.0" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.2" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.4" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.0.0.5" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.1" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.2" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.3" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.4" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.5" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.6" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.7" }, { "name": "AzureBackupWindowsWorkload", "publisher": "Microsoft.Azure.RecoveryServices.WorkloadBackup", "version": "1.1.0.8" }, { "name": "ADETest", "publisher": "Microsoft.Azure.Security", "version": "1.4.0.8" }, { "name": "ADETest", "publisher": "Microsoft.Azure.Security", "version": "2.0.0.4" }, { "name": "ADETest", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.4" }, { "name": "LinuxOL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxSLES12", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9103" }, { "name": "LinuxSLES12", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9104" }, { "name": "LinuxSLES12", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9105" }, { "name": "LinuxSLES12", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9106" }, { "name": "LinuxSLES12", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery2", "version": "1.0.0.9107" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "1.0.0.0" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.0" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.1" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.2" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.4" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.0.0.0" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.1.0.0" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.1" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.2" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.3" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.4" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security", "version": "2.2.0.5" }, { "name": "DSMSForWindows", "publisher": "Microsoft.Azure.Security.Dsms", "version": "2.15.794.0" }, { "name": "DSMSForWindows", "publisher": "Microsoft.Azure.Security.Dsms", "version": "2.17.869.0" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "ADETest", "publisher": "Microsoft.Azure.Security.Edp", "version": "2.2.0.4" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999302" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999304" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999305" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999306" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999307" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999308" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999309" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999313" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999315" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999316" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999319" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999321" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999322" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999326" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.999327" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.0.0.0" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.0" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.14" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.15" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.17" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.20" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.21" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.5" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.6" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9107" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security.Test", "version": "1.5.2.0" }, { "name": "AzureDiskEncryption", "publisher": "Microsoft.Azure.Security.Edp", "version": "2.2.0.4" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.0.0.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.1.0.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.2.0.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.3.0.2" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.3.0.3" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.4.0.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.4.0.1" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.0.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.2.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.4.2" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.4.3" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.4.4" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.5.0" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.5.1" }, { "name": "IaaSAntimalware", "publisher": "Microsoft.Azure.Security", "version": "1.5.5.9" }, { "name": "Linux", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.2.0.250" }, { "name": "Linux", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.2.0.252" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security.Edp", "version": "0.1.0.999327" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.Azure.Security.Edp", "version": "1.1.0.20" }, { "name": "TestGenevaMonitoringExtension", "publisher": "Microsoft.Azure.Security", "version": "1.7.0.6" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.339" }, { "name": "LinuxOL6", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.341" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.247" }, { "name": "LinuxDEBIAN7", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.249" }, { "name": "VMBackupForLinuxExtension", "publisher": "Microsoft.Azure.Security", "version": "0.1.0.995" }, { "name": "LinuxOL7", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.63" }, { "name": "LinuxOL7", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.65" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9107" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.247" }, { "name": "LinuxDEBIAN8", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.249" }, { "name": "TestMSILinuxExtension", "publisher": "Microsoft.Azure.Test.Identity", "version": "1.0.0.7" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.5.0.342" }, { "name": "LinuxRHEL6", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.5.0.344" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9101" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9107" }, { "name": "LinuxOL7", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.28" }, { "name": "LinuxOL7", "publisher": "Microsoft.Azure.SiteRecovery2.Test", "version": "1.0.0.29" }, { "name": "TestMSIWindowsExtension", "publisher": "Microsoft.Azure.Test.Identity", "version": "1.0.0.11" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.339" }, { "name": "LinuxRHEL7", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.341" }, { "name": "SiteRecovery", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "0.0.0.0" }, { "name": "AzureCATExtensionHandler", "publisher": "Microsoft.AzureCAT.AzureEnhancedMonitoring", "version": "2.2.0.48" }, { "name": "AzureCATExtensionHandler", "publisher": "Microsoft.AzureCAT.AzureEnhancedMonitoring", "version": "2.2.0.68" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.335" }, { "name": "LinuxSLES11SP3", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.337" }, { "name": "SiteRecoveryLinux", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "0.0.0.1" }, { "name": "VMJITAccessExtension", "publisher": "Microsoft.AzureSecurity.JITAccess", "version": "1.0.0.0" }, { "name": "VMJITAccessExtension", "publisher": "Microsoft.AzureSecurity.JITAccess", "version": "1.0.1.0" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.335" }, { "name": "LinuxSLES11SP4", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.3.0.337" }, { "name": "Windows", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9102" }, { "name": "Windows", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9103" }, { "name": "Windows", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9104" }, { "name": "Windows", "publisher": "Microsoft.Azure.RecoveryServices.SiteRecovery", "version": "1.0.0.9106" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.1338.47" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.1338.48" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.0" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.2" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.3" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.4" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.5" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.6" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.7" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.1.0.8" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.1338.47" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.1338.48" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.1338.49" }, { "name": "WorkloadBackup", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.1338.50" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.340" }, { "name": "LinuxUBUNTU1404", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.342" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.1" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.11" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.12" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.14" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.15" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.16" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.17" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.18" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.19" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.2" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.3" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.5" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.6" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.7" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.8" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension", "version": "1.0.0.9" }, { "name": "BGInfo", "publisher": "Microsoft.Compute", "version": "2.1" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.0.14" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.0.15" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.0.16" }, { "name": "WorkloadBackupLinux", "publisher": "Microsoft.CloudBackup.Workload.Extension.Edp", "version": "1.0.0.17" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.253" }, { "name": "LinuxUBUNTU1604", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.0.0.255" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.0.1" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.0.2" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.0.3" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.1.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.2.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "2.3.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "3.0.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "3.1.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "3.3.0" }, { "name": "NullLinux", "publisher": "Microsoft.CPlat.Core", "version": "4.0.1" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.0.1" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.0.3" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.1" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.2" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.3" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.4" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.7" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.8" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.9" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.9.1" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.9.2" }, { "name": "CustomScriptExtension", "publisher": "Microsoft.Compute", "version": "1.9.3" }, { "name": "WindowsTest", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.4.0.257" }, { "name": "WindowsTest", "publisher": "Microsoft.Azure.SiteRecovery.Test", "version": "1.4.0.261" }, { "name": "NullSeqA", "publisher": "Microsoft.CPlat.Core", "version": "2.0.1" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11049.5" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11049.7" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11072.0" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11072.1" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11081.1" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11081.2" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11081.4" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.11081.5" }, { "name": "JsonADDomainExtension", "publisher": "Microsoft.Compute", "version": "1.0" }, { "name": "JsonADDomainExtension", "publisher": "Microsoft.Compute", "version": "1.3" }, { "name": "JsonADDomainExtension", "publisher": "Microsoft.Compute", "version": "1.3.2" }, { "name": "NullSeqB", "publisher": "Microsoft.CPlat.Core", "version": "2.0.1" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.0.217.0" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.2.148.0" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.3.127.5" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.3.127.7" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.3.18.7" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.45.2" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.45.3" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.55.4" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.56.5" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.58.7" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.59.1" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.4.60.2" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.6.42.0" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.7.3" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.7.7" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.7.9" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.8.11" }, { "name": "OmsAgentForLinux", "publisher": "Microsoft.EnterpriseCloud.Monitoring", "version": "1.8.9" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.0" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.0.1" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.0.2" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.3" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.4" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.4.1" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.4.2" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.4.3" }, { "name": "VMAccessAgent", "publisher": "Microsoft.Compute", "version": "2.4.4" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.1" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.2" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.3" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.1.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.2.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.3.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.0.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.1.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.2.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.4.0" }, { "name": "NullWindows", "publisher": "Microsoft.CPlat.Core", "version": "4.0.0" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring.Test", "version": "1.0.11030.0" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring.Test", "version": "1.0.11049.0" }, { "name": "MicrosoftMonitoringAgent", "publisher": "Microsoft.EnterpriseCloud.Monitoring.Test", "version": "1.0.11049.1" }, { "name": "OtherNullLinux", "publisher": "Microsoft.CPlat.Core", "version": "3.0.1" }, { "name": "DSC", "publisher": "Microsoft.GuestConfig.Test", "version": "2.2.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration.Test", "version": "1.0.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration.Test", "version": "1.1.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration.Test", "version": "1.2.0.0" }, { "name": "ConfigurationForLinux", "publisher": "Microsoft.GuestConfiguration", "version": "0.2.0" }, { "name": "ConfigurationForLinux", "publisher": "Microsoft.GuestConfiguration", "version": "1.0.0" }, { "name": "ConfigurationForLinux", "publisher": "Microsoft.GuestConfiguration", "version": "1.1.0" }, { "name": "ConfigurationForLinux", "publisher": "Microsoft.GuestConfiguration", "version": "1.2.1" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.1" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.2" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.0.3" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.1.0" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.2.0" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "2.3.0" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.0.0" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "3.2.0" }, { "name": "OtherNullWindows", "publisher": "Microsoft.CPlat.Core", "version": "4.0.0" }, { "name": "HpcVmDrivers", "publisher": "Microsoft.HpcCompute", "version": "1.1.0.0" }, { "name": "HpcVmDrivers", "publisher": "Microsoft.HpcCompute", "version": "1.1.1.1" }, { "name": "HpcVmDrivers", "publisher": "Microsoft.HpcCompute", "version": "1.1.2.0" }, { "name": "HpcVmDrivers", "publisher": "Microsoft.HpcCompute", "version": "1.1.3.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration", "version": "1.2.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration", "version": "1.3.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration", "version": "1.4.0.0" }, { "name": "ConfigurationforWindows", "publisher": "Microsoft.GuestConfiguration", "version": "1.5.1.0" }, { "name": "RunCommandLinux", "publisher": "Microsoft.CPlat.Core", "version": "1.0.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.0.0.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.1.0.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.1.1.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.1.2.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.1.3.0" }, { "name": "NvidiaGpuDriverLinux", "publisher": "Microsoft.HpcCompute", "version": "1.2.0.0" }, { "name": "HPCAcmAgent", "publisher": "Microsoft.HpcPack", "version": "1.0.30.0" }, { "name": "HPCAcmAgent", "publisher": "Microsoft.HpcPack", "version": "1.0.31.0" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.1" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.10" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.11" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.12" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.13" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.3" }, { "name": "ManagedIdentityExtensionForLinux", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.8" }, { "name": "RunCommandWindows", "publisher": "Microsoft.CPlat.Core", "version": "1.0.0" }, { "name": "RunCommandWindows", "publisher": "Microsoft.CPlat.Core", "version": "1.0.1" }, { "name": "RunCommandWindows", "publisher": "Microsoft.CPlat.Core", "version": "1.1.0" }, { "name": "NvidiaGpuDriverWindows", "publisher": "Microsoft.HpcCompute", "version": "1.0.0.0" }, { "name": "NvidiaGpuDriverWindows", "publisher": "Microsoft.HpcCompute", "version": "1.1.0.0" }, { "name": "NvidiaGpuDriverWindows", "publisher": "Microsoft.HpcCompute", "version": "1.2.0.0" }, { "name": "LinuxNodeAgent", "publisher": "Microsoft.HpcPack", "version": "1.5.1.0" }, { "name": "LinuxNodeAgent", "publisher": "Microsoft.HpcPack", "version": "1.6.18.3" }, { "name": "LinuxNodeAgent", "publisher": "Microsoft.HpcPack", "version": "1.7.11.2" }, { "name": "LinuxNodeAgent", "publisher": "Microsoft.HpcPack", "version": "2.1.5.0" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.1" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.10" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.11" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.12" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.13" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.3" }, { "name": "ManagedIdentityExtensionForWindows", "publisher": "Microsoft.ManagedIdentity", "version": "1.0.0.8" }, { "name": "ApplicationHealthLinux", "publisher": "Microsoft.ManagedServices", "version": "1.0.0" }, { "name": "LinuxNodeAgent2016", "publisher": "Microsoft.HpcPack", "version": "2.1.6.0" }, { "name": "ApplicationHealthWindows", "publisher": "Microsoft.ManagedServices", "version": "1.0.4" }, { "name": "AzureDiskEncryptionForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "0.1.0.999105" }, { "name": "LinuxNodeAgent2016U1", "publisher": "Microsoft.HpcPack", "version": "2.3.4.0" }, { "name": "LinuxNodeAgent2016U1", "publisher": "Microsoft.HpcPack", "version": "2.3.4.1" }, { "name": "LinuxNodeAgent2016U1", "publisher": "Microsoft.HpcPack", "version": "2.3.6.0" }, { "name": "AzureDiagnosticsLinuxExtIaaS7.Test", "publisher": "Microsoft.OSTCExtensions.Test", "version": "1.0.0.0" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.2" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.0.1" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.0.5" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.0.97" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.0.98" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.0.99" }, { "name": "AzureEnhancedMonitorForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "3.0.1.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.10.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.13.2.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.14.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.15.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.16.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.17.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.18.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.19.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.20.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.21.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.22.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.23.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.24.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.25.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.26.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.26.1.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.4.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.5.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.6.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.7.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.70.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.71.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.71.1.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.72.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.73.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.74.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.75.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.76.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.77.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.8.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell", "version": "2.9.1.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell.Test", "version": "2.76.0.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell.Test", "version": "2.76.1.0" }, { "name": "DSC", "publisher": "Microsoft.Powershell.Test", "version": "2.76.2.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.1" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.1" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.1.1" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.2.2.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.3.0.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.3.0.1" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.3.0.2" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.0.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.1.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.2.0" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.2.1" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.2.2" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.3" }, { "name": "CustomScriptForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.4" }, { "name": "DSC", "publisher": "Microsoft.Powershell.Test01", "version": "1.0.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.1.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.2.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.4.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.5.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.6.0.0" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.10" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.2" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.3" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.4" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.7" }, { "name": "DSCForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.70.0.8" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.10.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.11.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.12.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.13.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.14.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.15.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.16.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.17.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.18.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.19.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.20.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.22.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.24.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.29.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.30.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "1.2.9.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.1.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.3.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.4.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.5.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.6.0" }, { "name": "SqlIaaSAgent", "publisher": "Microsoft.SqlServer.Management", "version": "2.0.7.0" }, { "name": "MSEnterpriseApplication", "publisher": "Microsoft.SystemCenter", "version": "1.0.5.0" }, { "name": "TestSqlIaaSAgent", "publisher": "Microsoft.TestSqlServer.Edp", "version": "1.4.0.0" }, { "name": "TestSqlIaaSAgent", "publisher": "Microsoft.TestSqlServer.Edp", "version": "2.0.0.1" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.9023" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.1.9023" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.2.9023" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.9023" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.9025" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.9027" }, { "name": "LinuxDiagnostic", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.9029" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.1.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.1.0.1" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.2.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.3.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.4.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.5.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.6.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.7.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.7.1.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.7.2.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.7.3.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "0.8.0.0" }, { "name": "VSETWTraceListenerService", "publisher": "Microsoft.VisualStudio.Azure.ETWTraceListenerService", "version": "1.0.0.0" }, { "name": "TestSqlIaaSAgentLinux", "publisher": "Microsoft.TestSqlServer.Edp", "version": "1.0.16" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.0.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.0.3" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.1.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.2.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.3.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.1.0.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.2.0.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "1.3.0.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.0" }, { "name": "Null", "publisher": "Microsoft.OSTCExtensions", "version": "2.1.0.0" }, { "name": "VSRemoteDebugger", "publisher": "Microsoft.VisualStudio.Azure.RemoteDebug", "version": "1.1.1.0" }, { "name": "VSRemoteDebugger", "publisher": "Microsoft.VisualStudio.Azure.RemoteDebug", "version": "1.1.2.0" }, { "name": "VSRemoteDebugger", "publisher": "Microsoft.VisualStudio.Azure.RemoteDebug", "version": "1.1.3.0" }, { "name": "SqlIaaSAgentLinux", "publisher": "Microsoft.SqlServer.Management", "version": "1.0.0.0" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0.1.1" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.0" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.1" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.2" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.0.0.5" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.1.0.0" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.2.0.0" }, { "name": "OSPatchingForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "2.3.0.1" }, { "name": "ServiceProfilerAgent", "publisher": "Microsoft.VisualStudio.ServiceProfiler", "version": "0.1.0.24" }, { "name": "ServiceProfilerAgent", "publisher": "Microsoft.VisualStudio.ServiceProfiler", "version": "0.1.0.25" }, { "name": "RDMAUpdateForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "0.1.0.9" }, { "name": "TeamServicesAgent", "publisher": "Microsoft.VisualStudio.Services", "version": "1.20.0.0" }, { "name": "TeamServicesAgent", "publisher": "Microsoft.VisualStudio.Services", "version": "1.21.0.0" }, { "name": "TeamServicesAgent", "publisher": "Microsoft.VisualStudio.Services", "version": "1.22.0.0" }, { "name": "TeamServicesAgent", "publisher": "Microsoft.VisualStudio.Services", "version": "1.23.0.0" }, { "name": "AzureRemoteAppTestAgentV2", "publisher": "Microsoft.Windows.AzureRemoteApp.Test", "version": "1.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.1" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.2" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.3.0.1" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.0.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.1.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.2.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.3.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.4.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.5.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.6.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.7.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.4.7.1" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.0" }, { "name": "VMAccessForLinux", "publisher": "Microsoft.OSTCExtensions", "version": "1.5.1" }, { "name": "TeamServicesAgentLinux", "publisher": "Microsoft.VisualStudio.Services", "version": "1.15.0.0" }, { "name": "TeamServicesAgentLinux", "publisher": "Microsoft.VisualStudio.Services", "version": "1.16.0.0" }, { "name": "TeamServicesAgentLinux", "publisher": "Microsoft.VisualStudio.Services", "version": "1.17.0.0" }, { "name": "TeamServicesAgentLinux", "publisher": "Microsoft.VisualStudio.Services", "version": "1.18.0.0" }, { "name": "TeamServicesAgentLinux", "publisher": "Microsoft.VisualStudio.Services", "version": "1.19.0.0" }, { "name": "AzureLogCollector", "publisher": "Microsoft.WindowsAzure.Compute", "version": "1.0.0.7" }, { "name": "AzureLogCollector", "publisher": "Microsoft.WindowsAzure.Compute", "version": "1.0.0.8" }, { "name": "AzureLogCollector", "publisher": "Microsoft.WindowsAzure.Compute", "version": "1.0.0.9" }, { "name": "VMBackupForLinuxExtension", "publisher": "Microsoft.OSTCExtensions", "version": "0.1.0.993" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.104" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.108" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.113" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.135" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.156" }, { "name": "OctopusDeployWindowsTentacle", "publisher": "OctopusDeploy.Tentacle", "version": "2.0.164" }, { "name": "PuppetAgent", "publisher": "puppet", "version": "1.4.2" }, { "name": "PuppetAgent", "publisher": "puppet", "version": "1.5.2" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "2015.2.3" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "2015.3.3" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "3.2.1" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "3.2.2" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "3.2.3" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "3.7.2" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs", "version": "3.8.4" }, { "name": "PuppetEnterpriseAgent", "publisher": "PuppetLabs.Test", "version": "3.8.4" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.1" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.3" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.4" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.5" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.7" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.8" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "0.0.0.9" }, { "name": "QualysAgent", "publisher": "Qualys", "version": "1.6.4.9" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.5.0.72" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.5.0.73" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.5.0.82" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.1" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.100" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.3" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.90" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.91" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.93" }, { "name": "QualysAgentLinux", "publisher": "Qualys", "version": "1.6.0.96" }, { "name": "InsightAgentLinux", "publisher": "Rapid7.InsightPlatform", "version": "2.0.0.2" }, { "name": "InsightAgentWindows", "publisher": "Rapid7.InsightPlatform", "version": "2.0.0.2" }, { "name": "Site24x7ApmInsightExtn", "publisher": "Site24x7", "version": "1.9.0.0" }, { "name": "Site24x7LinuxServerExtn", "publisher": "Site24x7", "version": "1.5.0.0" }, { "name": "Site24x7LinuxServerExtn", "publisher": "Site24x7", "version": "1.6.0.0" }, { "name": "Site24x7WindowsServerExtn", "publisher": "Site24x7", "version": "1.6.0.0" }, { "name": "Site24x7WindowsServerExtn", "publisher": "Site24x7", "version": "1.8.0.0" }, { "name": "StackifyLinuxAgentExtension", "publisher": "Stackify.LinuxAgent.Extension", "version": "1.0.0.21" }, { "name": "IaaSDiagnostics", "publisher": "StatusReport.Diagnostics.Test", "version": "0.27.0.0" }, { "name": "SymantecEndpointProtection", "publisher": "Symantec", "version": "12.1.4100.2" }, { "name": "SymantecEndpointProtection", "publisher": "Symantec", "version": "12.1.7007.6505" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.7.0.0" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.8.0.0" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.9.0.0" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "2.0.0.0" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "2.1.0.0" }, { "name": "SCWPAgentForLinux", "publisher": "Symantec.CloudWorkloadProtection", "version": "2.2.0.0" }, { "name": "SCWPAgentForLinuxTest", "publisher": "Symantec.CloudWorkloadProtection.Test", "version": "2.0.0.0" }, { "name": "SCWPAgentForLinuxTest", "publisher": "Symantec.CloudWorkloadProtection.Test", "version": "2.1.0.0" }, { "name": "SCWPAgentForLinuxTest", "publisher": "Symantec.CloudWorkloadProtection.Test", "version": "2.2.0.0" }, { "name": "SCWPAgentForLinuxTestOnStage", "publisher": "Symantec.CloudWorkloadProtection.TestOnStage", "version": "1.5.0.0" }, { "name": "SCWPAgentForLinuxTestOnStage", "publisher": "Symantec.CloudWorkloadProtection.TestOnStage", "version": "1.6.0.0" }, { "name": "SCWPAgentForLinuxTestOnStage", "publisher": "Symantec.CloudWorkloadProtection.TestOnStage", "version": "1.8.0.0" }, { "name": "SCWPAgentForLinuxTestOnStage", "publisher": "Symantec.CloudWorkloadProtection.TestOnStage", "version": "1.9.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.4.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.5.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.6.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.7.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.8.0.0" }, { "name": "SCWPAgentForWindows", "publisher": "Symantec.CloudWorkloadProtection", "version": "1.9.0.0" }, { "name": "SCWPAgentForWindowsTest", "publisher": "Symantec.CloudWorkloadProtection.Test", "version": "1.8.0.0" }, { "name": "SCWPAgentForWindowsTest", "publisher": "Symantec.CloudWorkloadProtection.Test", "version": "1.9.0.0" }, { "name": "TrendMicroDSA", "publisher": "Test.TrendMicro.DeepSecurity", "version": "10.0.0.10705" }, { "name": "TrendMicroDSA", "publisher": "Test.TrendMicro.DeepSecurity", "version": "9.6.2.11301" }, { "name": "TrendMicroDSALinux", "publisher": "Test.TrendMicro.DeepSecurity", "version": "10.0.0.10601" }, { "name": "TrendMicroDSALinux", "publisher": "Test.TrendMicro.DeepSecurity", "version": "9.6.2.11401" }, { "name": "TrendMicroDSA", "publisher": "TrendMicro.DeepSecurity", "version": "10.0.0.107" }, { "name": "TrendMicroDSA", "publisher": "TrendMicro.DeepSecurity", "version": "9.6.2.113" }, { "name": "TrendMicroDSALinux", "publisher": "TrendMicro.DeepSecurity", "version": "10.0.0.106" }, { "name": "TrendMicroDSALinux", "publisher": "TrendMicro.DeepSecurity", "version": "9.6.2.114" }, { "name": "PortalProtectExtension", "publisher": "TrendMicro.PortalProtect", "version": "2.1" }, { "name": "VormetricTransparentEncryptionAgent", "publisher": "Vormetric", "version": "5.2.339.0" }, { "name": "IaaSDiagnostics", "publisher": "WAD2AI.Diagnostics.Test", "version": "0.23.0.0" }, { "name": "IaaSDiagnostics", "publisher": "WAD2EventHub.Diagnostics.Test", "version": "0.1.0.0" } ]

Update all globally installed npm packages at once

I keep meaning to run this but always forget the flag. There’s no npm update-all or anything – it’s just: npm update -g The -g tells npm to operate on the global package registry instead of the local node_modules. Without it, npm update only touches packages listed in your project’s package.json, which is the default behaviour and what you want most of the time. One thing to bear in mind: npm update won’t bump you to a new major version, even if one’s available. It respects the semver range in whatever pinned your package – so if you installed commander@2.x and 4.x is out, you’ll stay on 2.x. If you actually want to upgrade majors, you need to be explicit: ...

'Decoding the Error: StatusCode=0 "ReferencedResourceNotProvisioned" in Azure'

Introduction If you’re working with Azure, you might have seen an error like this: “Failure sending request: StatusCode=0 — Original Error: Code=‘ReferencedResourceNotProvisioned’ Message=‘Cannot proceed with operation because resource used by resource is not in Succeeded state. Resource is in Updating state and the last operation that updated/is updating the resource is PutSubnetOperation.’” It looks worse than it is. Here’s what it means and how to fix it. Why Does This Error Occur? A related resource is stuck in an ‘Updating’ state, so Azure won’t let the operation proceed. This usually means another operation is still running on that resource or one it depends on. ...

Import a Resource to a Terraform Module

Importing an existing AWS instance into a Terraform module is straightforward, but the syntax trips people up because you need to specify the full module path. terraform import module.foo.aws_instance.bar i-abcd1234 The format is module.<module_name>.<resource_type>.<resource_name>, followed by the resource ID. In this case, foo is the module name, aws_instance is the resource type, bar is the resource name inside that module, and i-abcd1234 is the AWS instance ID. Once imported, Terraform will manage the instance and track any configuration drift going forward.

Terraform Modules in Subdirectories

Terraform modules are usually at the root of a repository. Sometimes they’re nested in a subdirectory, and you need to point Terraform at the right one. Terraform handles this with a double-slash (//) in the source path. Everything after the // is treated as a subdirectory within the package. How It Works The syntax is straightforward: module "consul" { source = "hashicorp/consul/aws//modules/consul-cluster" } The hashicorp/consul/aws part is the module registry path. The //modules/consul-cluster tells Terraform to look inside that package for the actual module. ...

Fixing "RPC failed; HTTP 413 curl 22" in Nginx

You get this when you try to push a large commit over HTTP and Nginx decides your request is too big: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large The fix is adding one line to your Nginx config. Open /etc/nginx/nginx.conf and find the http, server, or location block you want to change, then add: client_max_body_size 50m; The 50m is 50 megabytes. Change it if you need more or less. Then reload Nginx: ...

Installing gems from local files

Picked up a server that needed gems but had no internet access. Copied the .gem files across and ran this to install them all in one go: gem install --force --local *.gem The --force flag is what does the trick here. Without it, gem will skip any files that are already installed, even if they’re older versions. With --local, it looks only in the current directory instead of trying to reach out to rubygems.org.

Stop buying tools, start solving problems

I’ve been watching a pattern repeat itself for years, and it’s starting to grate. Someone at a conference hears about a new tool — some Kubernetes operator, or service mesh, or GitOps platform that’s supposedly going to fix everything — and they come back convinced their team needs it yesterday. Not because there’s a problem that needs solving. Because the tool exists. This isn’t about being anti-technology. I love good tools. But somewhere along the line, DevOps culture got it backwards. We’re picking solutions first and frantically searching for problems they might address, instead of looking at what’s actually broken and finding the simplest thing that fixes it. ...

'scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory'

sudo apt-get install -y libssl-dev

'/bin/sh: 1: bison: not found'

sudo apt-get install bison

'[solved] xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist'

Error: xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist Use sudo xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools, or use xcode-select --install to install the standalone command line developer tools. See man xcode-select for more details. xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist Use sudo xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools, or use xcode-select --install to install the standalone command line developer tools. See man xcode-select for more details. ...

Merging Unrelated Git Histories

You’ve got two repositories with completely separate histories, and you need to bring them together. Maybe it’s an old project you’re absorbing into a new one, or a submodule that started life as its own thing. You try a standard git merge and Git immediately shuts you down: fatal: refusing to merge unrelated histories This isn’t a bug – it’s Git being cautious. When two branches share no common ancestor, Git assumes you’ve made a mistake and refuses to play along. But sometimes you genuinely want this merge, and there’s a flag for that. ...

Using Ansible with Packer

Packer builds machine images. Ansible configures servers. Together, they let you bake your configuration straight into the image – no manual setup required after deployment. The Ansible provisioner in Packer runs your playbooks during the image build process. You write a normal Ansible playbook, point Packer at it, and when the image is ready, your software is already installed and configured. Note: If you specify a remote_user in your Ansible tasks, Packer will ignore it. The provisioner connects using the username from Packer’s own configuration. ...

Installing SSHPass on Ubuntu and macOS

SSHPass is a small command-line utility that lets you pass a password directly to an SSH connection, which means no interactive password prompt. Useful when you’re writing scripts that need to connect to remote machines without manual intervention. A word of warning before you go ahead: SSHPass is not secure. The password gets passed as a command-line argument, which means it can show up in process listings and shell history. It’s fine for personal automation on your own machines, but don’t use it in shared environments or anything that touches production systems. ...

Installing Docker CE on Ubuntu

What You Need Before You Begin Docker CE runs on a handful of 64-bit Ubuntu releases, so check you’re on one of these before carrying on: Ubuntu 18.04 (Bionic) - LTS Ubuntu 17.10 (Artful) Ubuntu 16.04 (Xenial) - LTS Ubuntu 14.04 (Trusty) - LTS The supported architectures are x86_64, armhf, s390x (IBM Z), and ppc64le (IBM Power). If you’re on IBM Z or Power, you’ll need at least Ubuntu 16.04 (Xenial). ...

The big data life cycle

I keep coming back to the same problem: everyone talks about big data as if it’s a thing you have, when really it’s a process you go through. There’s no single tool or platform that solves it. What you end up with is a series of messy stages, each with its own set of headaches, and most organisations I’ve spoken to are stuck somewhere in the middle without a clear picture of what comes next. ...

Applicable values for AddItemRequest.Item.Country

Applicable values for AddItemRequest.Item.Country When listing an item via the eBay Trading API, the Item.Country field expects a two-letter ISO 3166-1 alpha-2 country code. The table below lists every value eBay accepts, along with the country name. All codes are valid for both incoming (selling) and outgoing (shipping) directions unless noted otherwise. Country codes Code Country Notes AA — APO/FPO. Not in ISO 3166; retained for backward compatibility. AD Andorra AE United Arab Emirates AF Afghanistan AG Antigua and Barbuda AI Anguilla AL Albania AM Armenia AN Netherlands Antilles AO Angola AQ Antarctica AR Argentina AS American Samoa AT Austria AU Australia AW Aruba AZ Azerbaijan BA Bosnia and Herzegovina BB Barbados BD Bangladesh BE Belgium BF Burkina Faso BG Bulgaria BH Bahrain BI Burundi BJ Benin BM Bermuda BN Brunei Darussalam BO Bolivia BR Brazil BS Bahamas BT Bhutan BV Bouvet Island BW Botswana BY Belarus BZ Belize CA Canada CC Cocos (Keeling) Islands CD Congo, The Democratic Republic of the CF Central African Republic CG Congo CH Switzerland CI Cote d’Ivoire CK Cook Islands CL Chile CM Cameroon CN China CO Colombia CR Costa Rica CU Cuba CustomCode — Reserved for internal or future use. CV Cape Verde CX Christmas Island CY Cyprus CZ Czech Republic DE Germany DJ Djibouti DK Denmark DM Dominica DO Dominican Republic DZ Algeria EC Ecuador EE Estonia EG Egypt EH Western Sahara ER Eritrea ES Spain ET Ethiopia FI Finland FJ Fiji FK Falkland Islands (Malvinas) FM Micronesia, Federated States of FO Faroe Islands FR France GA Gabon GB United Kingdom GD Grenada GE Georgia GF French Guiana GG Guernsey GH Ghana GI Gibraltar GL Greenland GM Gambia GN Guinea GP Guadeloupe GQ Equatorial Guinea GR Greece GS South Georgia and the South Sandwich Islands GT Guatemala GU Guam GW Guinea-Bissau GY Guyana HK Hong Kong HM Heard Island and McDonald Islands HN Honduras HR Croatia HT Haiti HU Hungary ID Indonesia IE Ireland IL Israel IN India IO British Indian Ocean Territory IQ Iraq IR Iran, Islamic Republic of IS Iceland IT Italy JE Jersey JM Jamaica JO Jordan JP Japan KE Kenya KG Kyrgyzstan KH Cambodia KI Kiribati KM Comoros KN Saint Kitts and Nevis KP Korea, Democratic People’s Republic of KR Korea, Republic of KW Kuwait KY Cayman Islands KZ Kazakhstan LA Lao People’s Democratic Republic LB Lebanon LC Saint Lucia LI Liechtenstein LK Sri Lanka LR Liberia LS Lesotho LT Lithuania LU Luxembourg LV Latvia LY Libyan Arab Jamahiriya MA Morocco MC Monaco MD Moldova, Republic of ME Montenegro MG Madagascar MH Marshall Islands MK Macedonia, the Former Yugoslav Republic of ML Mali MM Myanmar MN Mongolia MO Macao MP Northern Mariana Islands MQ Martinique MR Mauritania MS Montserrat MT Malta MU Mauritius MV Maldives MW Malawi MX Mexico MY Malaysia MZ Mozambique NA Namibia NC New Caledonia NE Niger NF Norfolk Island NG Nigeria NI Nicaragua NL Netherlands NO Norway NP Nepal NR Nauru NU Niue NZ New Zealand OM Oman PA Panama PE Peru PF French Polynesia Includes Tahiti. PG Papua New Guinea PH Philippines PK Pakistan PL Poland PM Saint Pierre and Miquelon PN Pitcairn PR Puerto Rico PS Palestinian territory, Occupied PT Portugal PW Palau PY Paraguay QA Qatar QM — Former eBay code for Guernsey (pre-ISO). Retained for backward compatibility. QN — Former eBay code for Jan Mayen (pre-ISO). Retained for backward compatibility. QO — Former eBay code for Jersey (pre-ISO). Retained for backward compatibility. RE Reunion RO Romania RS Serbia RU Russian Federation RW Rwanda SA Saudi Arabia SB Solomon Islands SC Seychelles SD Sudan SE Sweden SG Singapore SH Saint Helena SI Slovenia SJ Svalbard and Jan Mayen SK Slovakia SL Sierra Leone SM San Marino SN Senegal SO Somalia SR Suriname ST Sao Tome and Principe SV El Salvador SY Syrian Arab Republic SZ Swaziland TC Turks and Caicos Islands TD Chad TF French Southern Territories TG Togo TH Thailand TJ Tajikistan TK Tokelau TM Turkmenistan TN Tunisia TO Tonga TP — No longer in use. TR Turkey TT Trinidad and Tobago TV Tuvalu TW Taiwan, Province of China TZ Tanzania, United Republic of UA Ukraine UG Uganda UM — No longer viable. Use US instead. Retained for backward compatibility. US United States UY Uruguay UZ Uzbekistan VA Holy See (Vatican City state) VC Saint Vincent and the Grenadines VE Venezuela VG Virgin Islands, British VI Virgin Islands, U.S. VN Viet Nam VU Vanuatu WF Wallis and Futuna WS Samoa YE Yemen YT Mayotte YU — No longer in use. See RS for Serbia and ME for Montenegro. ZA South Africa ZM Zambia ZW Zimbabwe ZZ — Unknown country.

Dumping a node field as an array in Drupal 6

There are times in Drupal 6 when you need to see what’s actually sitting inside a node’s field – the raw structure, the keys, the values. The UI won’t show you that, and dpm() from Devel can be overkill if you just want a quick dump. The content_fields() function returns the field data as an array, and wrapping it in var_export() gives you a readable output you can paste into a debugger or log file. ...

Drupal 7 Mobile Boilerplate Theme

Mobile web development in 2013 is a mess of browser quirks, viewport headaches, and CSS bugs that multiply with every platform you touch. I built the Mobile Boilerplate theme for Drupal 7 to stop reinventing the wheel every time I needed a mobile-ready starting point. It’s a collection of fixes, polyfills, and sensible defaults that handle the boring stuff so you can focus on building something that works. What’s in it The theme ships with a bunch of things you’d otherwise spend an afternoon Googling: ...

Building an Online Temperature Monitoring System

I built this as a final year project — an embedded system that reads temperature from sensors, stores the data, and makes it available over a serial connection. Nothing fancy, but it was a useful exercise in getting hardware and software to talk to each other. You can download the project report. What it does The system reads temperature from external sensors, converts the analog signal to digital, logs the readings with timestamps, and exposes the data over a serial link so a PC can pull it. A 16x2 LCD shows the current state locally. ...

Hiding a DataTables column without removing it from the DOM

Sometimes you want to hide a column in a DataTable but keep its data in the DOM – maybe you need it for export, for a tooltip, or for some other operation that happens after the table renders. Removing the column entirely means losing that data, which isn’t always an option. The fix is embarrassingly simple: CSS. The setup Add a class to the column you want to hide using the sClass option in your DataTables initialisation: ...

eBay UK shipping services — a complete list from the API

<?xml version="1.0&#8243; encoding="UTF-8&#8243;?> <GeteBayDetailsResponse xmlns="urn:ebay:apis:eBLBaseComponents"> <Timestamp>2013-04-13T07:54:20.770Z</Timestamp> <Ack>Success</Ack> <Version>813</Version> <Build>E813\_INTL\_BUNDLED\_15816370\_R1</Build> <ShippingServiceDetails> <Description>Standard Int'l Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_SellersStandardInternationalRate</ShippingService> <ShippingServiceID>50301</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collect+ Tracked: drop at store-delivery to door</Description> <ShippingService>UK_CollectPlusTrakedDeliveryToDoor</ShippingService> <ShippingServiceID>330</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Airmail (Small Packets)</Description> <InternationalService>true</InternationalService> <ShippingService>UK_RoyalMailAirmailInternational</ShippingService> <ShippingServiceID>50302</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Hermes Tracked</Description> <ShippingService>UK_myHermesDoorToDoorService</ShippingService> <ShippingServiceID>322</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 1st Class</Description> <ShippingService>UK_RoyalMailFirstClassStandard</ShippingService> <ShippingServiceID>301</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 1st Class Standard Medium Parcel</Description> <ShippingService>UK_RoyalMailFirstClassStandardMediumParcel</ShippingService> <ShippingServiceID>332</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Airsure</Description> <InternationalService>true</InternationalService> <ShippingService>UK_RoyalMailAirsureInternational</ShippingService> <ShippingServiceID>50303</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 2nd Class</Description> <ShippingService>UK_RoyalMailSecondClassStandard</ShippingService> <ShippingServiceID>302</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Surface Mail</Description> <InternationalService>true</InternationalService> <ShippingService>UK_RoyalMailSurfaceMailInternational</ShippingService> <ShippingServiceID>50304</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 1st Class Signed For</Description> <ShippingService>UK_RoyalMailFirstClassRecorded</ShippingService> <ShippingServiceID>303</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 1st Class Recorded Medium Parcel</Description> <ShippingService>UK_RoyalMailFirstClassRecordedMediumParcel</ShippingService> <ShippingServiceID>333</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail 2nd Class Signed For</Description> <ShippingService>UK_RoyalMailSecondClassRecorded</ShippingService> <ShippingServiceID>304</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail International Signed-for</Description> <InternationalService>true</InternationalService> <ShippingService>UK_RoyalMailInternationalSignedFor</ShippingService> <ShippingServiceID>50305</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail HM Forces Mail</Description> <InternationalService>true</InternationalService> <ShippingService>UK_RoyalMailHMForcesMailInternational</ShippingService> <ShippingServiceID>50306</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Special Delivery</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_RoyalMailSpecialDelivery</ShippingService> <ShippingServiceID>305</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>0</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Tracked 48</Description> <ShippingService>UK_RoyalMailTracked</ShippingService> <ShippingServiceID>327</ShippingServiceID> <ShippingTimeMax>3</ShippingTimeMax> <ShippingTimeMin>2</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Special Delivery (TM) 1:00 pm</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_RoyalMailSpecialDeliveryNextDay</ShippingService> <ShippingServiceID>312</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Special Delivery (TM) 9:00 am</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_RoyalMailSpecialDelivery9am</ShippingService> <ShippingServiceID>313</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Tracked 24</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_RoyalMailNextDay</ShippingService> <ShippingServiceID>328</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce International Datapost</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceInternationalDatapost</ShippingService> <ShippingServiceID>50307</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Royal Mail Standard Parcels</Description> <ShippingService>UK_RoyalMailStandardParcel</ShippingService> <ShippingServiceID>306</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce 24</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_Parcelforce24</ShippingService> <ShippingServiceID>307</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Ireland 24</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceIreland24International</ShippingService> <ShippingServiceID>50308</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collect+ Tracked (Jiffy Bag up to 2Kg): drop at store – deliver to door</Description> <ShippingService>UK_CollectPlusTrackJiffyBag</ShippingService> <ShippingServiceID>324</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collect+ : drop at store-delivery to door</Description> <ShippingService>UK_CollectDropAtStoreDeliveryToDoor</ShippingService> <ShippingServiceID>323</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collect+ Tracked (Standard up to 5kg): drop at store – deliver to door</Description> <ShippingService>UK_CollectPlusTrackStandard</ShippingService> <ShippingServiceID>325</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collect+ Tracked (Heavy up to 10kg): drop at store – deliver to door</Description> <ShippingService>UK_CollectPlusTrackHeavy</ShippingService> <ShippingServiceID>326</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce 48</Description> <ShippingService>UK_Parcelforce48</ShippingService> <ShippingServiceID>308</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Euro 48</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceEuro48International</ShippingService> <ShippingServiceID>50309</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Global Express</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceIntlExpress</ShippingService> <ShippingServiceID>50316</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other 24 Hour Courier</Description> <ExpeditedService>true</ExpeditedService> <ShippingService>UK_OtherCourier24</ShippingService> <ShippingServiceID>314</ShippingServiceID> <ShippingTimeMax>1</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ONE_DAY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Global Priority</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceInternationalScheduled</ShippingService> <ShippingServiceID>50310</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Global Value</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceIntlValue</ShippingService> <ShippingServiceID>50317</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Parcelforce Global Economy (Not available for destinations in Europe)</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ParcelForceIntlEconomy</ShippingService> <ShippingServiceID>50318</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Economy Int'l Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_OtherCourierOrDeliveryInternational</ShippingService> <ShippingServiceID>50311</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other 48 Hour Courier</Description> <ShippingService>UK_OtherCourier48</ShippingService> <ShippingServiceID>315</ShippingServiceID> <ShippingTimeMax>2</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other Courier 3 days</Description> <ShippingService>UK_OtherCourier3Days</ShippingService> <ShippingServiceID>317</ShippingServiceID> <ShippingTimeMax>3</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DimensionsRequired>true</DimensionsRequired> <ValidForSellingFlow>true</ValidForSellingFlow> <ShippingCarrier>Other</ShippingCarrier> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other Courier 5 days</Description> <ShippingService>UK_OtherCourier5Days</ShippingService> <ShippingServiceID>318</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>0</ShippingTimeMin> <ServiceType>Flat</ServiceType> <DimensionsRequired>true</DimensionsRequired> <ValidForSellingFlow>true</ValidForSellingFlow> <ShippingCarrier>Other</ShippingCarrier> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other Courier</Description> <ShippingService>UK_OtherCourier</ShippingService> <ShippingServiceID>309</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Express Int'l Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_CollectInPersonInternational</ShippingService> <ShippingServiceID>50312</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>EXPEDITED</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other Courier 3-5 days</Description> <ShippingService>UK_SellersStandardRate</ShippingService> <ShippingServiceID>310</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>ECONOMY</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Collection in Person</Description> <ShippingService>UK_CollectInPerson</ShippingService> <ShippingServiceID>311</ShippingServiceID> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>PICKUP</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>International Tracked Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_IntlTrackedPostage</ShippingService> <ShippingServiceID>50319</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>2</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>EXPEDITED</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Economy Delivery from outside UK</Description> <ShippingService>UK_EconomyShippingFromOutside</ShippingService> <ShippingServiceID>319</ShippingServiceID> <ShippingTimeMax>22</ShippingTimeMax> <ShippingTimeMin>10</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Standard Delivery from outside UK with Royal Mail</Description> <ShippingService>StandardDeliveryfromOutsideUKwithRoyalMail</ShippingService> <ShippingServiceID>329</ShippingServiceID> <ShippingTimeMax>13</ShippingTimeMax> <ShippingTimeMin>7</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Standard Delivery from outside UK</Description> <ShippingService>UK_StandardShippingFromOutside</ShippingService> <ShippingServiceID>320</ShippingServiceID> <ShippingTimeMax>10</ShippingTimeMax> <ShippingTimeMin>4</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Express Delivery from outside UK</Description> <ShippingService>UK_ExpeditedShippingFromOutside</ShippingService> <ShippingServiceID>321</ShippingServiceID> <ShippingTimeMax>3</ShippingTimeMax> <ShippingTimeMin>1</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>FedEx International Economy</Description> <ShippingService>UK_FedExIntlEconomy</ShippingService> <ShippingServiceID>168</ShippingServiceID> <ShippingTimeMax>4</ShippingTimeMax> <ShippingTimeMin>3</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <SurchargeApplicable>true</SurchargeApplicable> <ShippingCarrier>FedEx</ShippingCarrier> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>TNT International Express</Description> <ShippingService>UK_TntIntlExp</ShippingService> <ShippingServiceID>170</ShippingServiceID> <ShippingTimeMax>3</ShippingTimeMax> <ShippingTimeMin>2</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <ShippingCarrier>Other</ShippingCarrier> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Tracked delivery from outside UK</Description> <ShippingService>UK_TrackedDeliveryFromAbroad</ShippingService> <ShippingServiceID>331</ShippingServiceID> <ShippingTimeMax>5</ShippingTimeMax> <ShippingTimeMin>2</ShippingTimeMin> <ServiceType>Flat</ServiceType> <ValidForSellingFlow>true</ValidForSellingFlow> <ShippingCarrier>Other</ShippingCarrier> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Promotional Postage Service</Description> <ShippingService>PromotionalShippingMethod</ShippingService> <ShippingServiceID>399</ShippingServiceID> <ServiceType>Flat</ServiceType> <ServiceType>Calculated</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>PROMOTIONAL</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Freight</Description> <ShippingService>Courier</ShippingService> <ShippingServiceID>316</ShippingServiceID> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>NONE</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Other Int'l Postage (see description)</Description> <InternationalService>true</InternationalService> <ShippingService>UK_OtherInternationalPostage</ShippingService> <ShippingServiceID>50315</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>OTHER</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Standard Int'l Flat Rate Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_StandardInternationalFlatRatePostage</ShippingService> <ShippingServiceID>50313</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>STANDARD</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Expedited Int'l Flat Rate Postage</Description> <InternationalService>true</InternationalService> <ShippingService>UK_ExpeditedInternationalFlatRatePostage</ShippingService> <ShippingServiceID>50314</ShippingServiceID> <ServiceType>Flat</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>EXPEDITED</ShippingCategory> </ShippingServiceDetails> <ShippingServiceDetails> <Description>Promotional Postage Service</Description> <InternationalService>true</InternationalService> <ShippingService>PromotionalShippingMethod</ShippingService> <ShippingServiceID>50399</ShippingServiceID> <ServiceType>Flat</ServiceType> <ServiceType>Calculated</ServiceType> <DetailVersion>74</DetailVersion> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> <ShippingCategory>PROMOTIONAL</ShippingCategory> </ShippingServiceDetails> <UpdateTime>2013-04-08T14:42:28.000Z</UpdateTime> </GeteBayDetailsResponse>

BottomToolBar - a scrolling ticker for your website

I’ve been working on something called BottomToolBar. It’s a small piece of JavaScript that drops a scrolling bar into the bottom of your browser window – the kind you see on news channels, the one that runs along the bottom of the screen with headlines and images. I thought it might be useful for websites. How it works The bar sits at the bottom of the viewport, fixed in place, always on top of everything else. Content scrolls through it from right to left (or left to right, your call), separated by images – usually a logo or icon. It pulls text and images from a server, so you can update what it shows without touching the page itself. ...

Generic Hardening - A Reference Guide

I put together this document as a reference for system hardening. It covers the basics – what hardening actually means, the formula for building a hardened system, and how virtualisation changes the picture. You can download the full guide as a Word document. What is System Hardening? Hardening is just the practice of making a system more resistant to attack. The guiding idea is least privilege: only what’s needed runs, only what’s needed is exposed. ...

Juniper Hardening Procedure

DOWNLOAD - Juniper device hardening Introduction Rationale An out-of-box firewall implementation is not fully secure and needs to be hardened. This document details the various aspects of Juniper firewall security and standards implemented for securing Juniper firewalls. Purpose This document is to define a baseline security standard for the Juniper Firewall implementations by firewall administrators. Scope These security standards cover the Juniper Firewall Screen OS implementation. However, for some setups, this minimum requirement and some features of these standards may not be practical for implementation. For exceptions, the system administrators must document the reasons for not complying fully with these standards and request an exemption from the Security department. ...

Hardening Solaris Systems in Production

Hardening Solaris Systems in Production When you’re running enterprise workloads on Solaris — databases, application servers, web fronts — the gap between “it works” and “it’s secure” is a lot wider than most people expect. I spent a good chunk of time working through hardening procedures for a fleet of Solaris boxes, and what follows is the procedure we landed on. The scope covered four server types: database, web, application, and utility. Every one of them got the same four security layers, regardless of role. ...

Firefox OS Clock app running on Ubuntu with Firefox Marketplace in the background

Running Firefox OS apps on Ubuntu Linux

Mozilla announced Firefox OS back in 2011 under the codename Boot2Gecko, and since then the project has gone from a concept to something you can actually run on your desktop. I’ve been following it closely and finally got around to setting it up on my Ubuntu machine. Here’s how. What is Firefox OS? Firefox OS is Mozilla’s attempt at building a mobile operating system entirely from web standards. There’s no Java, no native SDK, no proprietary frameworks. The entire user interface – called Gaia – is built in HTML, CSS, and JavaScript. The rendering engine underneath is Gecko, the same one that powers Firefox. And at the bottom, it runs on a Linux kernel. ...

Release Engineering

Release Engineering I’ve been thinking about how we get changes from a laptop into production without someone having to SSH in and type things by hand. The answer, as it turns out, is a pipeline. Nothing fancy. Just a chain of steps that each do one thing and pass the result to the next. Here’s what we’re building. Git Everything starts in a Git repository. Puppet manifests, config files, deployment scripts — all of it. If it’s not in Git, it doesn’t exist. This is the part that matters most and the part people resist the most, because Git means your changes are visible. ...

Perl Expect Bindings - A Simple Example

I ran into a situation recently where I needed a Perl script to launch another program, wait for it to finish, and move on. Nothing fancy. A simple spawn-and-wait. But doing it the naive way — backticks, pipe reads, polling — felt like overkill for what should be a two-liner. That’s where the Expect module comes in. It’s been around since the 90s, originally ported from the Tcl expect tool, and it does exactly what you’d expect: it spawns a process, talks to its stdin, reads its stdout, and waits for specific patterns. For simple cases it’s overkill. For anything that involves an interactive prompt or a non-trivial exit condition, it saves you from writing your own state machine. ...

Continuous Delivery

I’ve been thinking about continuous delivery a lot lately, and the thing that keeps coming back to me is how much of a pain it is when someone logs into a server and makes a change by hand. You know the type. Production is down, someone jumps in, tweaks a config file, restarts a service, and everything works again. Great. Except now that server has a configuration that exists in no repository, no documentation, and no one else’s head. Next time something breaks, you’ll spend hours chasing a difference that nobody bothered to record. ...

'How much memory is actually free?'

I keep forgetting this one, so here it is. vmstat -s -SM | grep "free memory" | awk -F" " '{print$1}' It pipes vmstat output through grep and awk to pull just the number – no units, no labels, just the gigabytes sitting there doing nothing.

Effective human-computer interaction through cognitive biometrics

This is a paper I wrote exploring how brain-machine interfaces could change the way we interact with computers. The core idea was simple: most interfaces still demand motor work — hands on a keyboard, fingers on a mouse. What if you could skip that entirely? The problem Human-computer interaction has come a long way. Touchscreens let you bypass the mouse. But you still need hands. For some people — those with motor impairments, for example — that’s a real barrier. Even for everyone else, there’s something inherently slower about translating a thought into a hand movement, then into a keystroke or click. ...

Applications of Neural Networks

This is a collection of research projects and applications I worked on using neural networks. Most of the video demos linked below are no longer available — the servers they lived on have been dead for years. I’m keeping the descriptions because they capture what the work was about. What is a Neural Network? An artificial neural network (ANN) is an information processing system inspired by biological nervous systems. It’s made up of a large number of interconnected processing elements — neurons — that work together to solve problems. Like people, ANNs learn by example. You configure them for a task, whether that’s pattern recognition or data classification, and they figure out the solution through a learning process. In biological systems, learning means adjusting synaptic connections between neurons. Neural networks do the same thing. ...

Walking Through OTC in SAP

Download Full Guide: OTC Flow Document Sales Order T-Code: VA01 Setting Value Company Code 4700 Sales Document Type ZOR Sales Area 4700/10/10 Header level: Sold-to-party: 1000991 Ship-to-party: 1000991 PO Number: ‘Test’ Payment term: 0001 Item level: Material code: 1000309 Order Quantity: 1 Plant: 4702 Press Enter Item billing: INCOTerms: CFR (Cost and Freight) Save Delivery T-Code: VL01N Setting Value Delivery Document Type ZLF Shipping Point 4702 Enter the Sales Document number from the previous step. Make sure the Delivery Date is set — it should pull through from the Schedule Lines in the Sales Order. ...

Status Quo — A Review of Some Testing Practices

I spent a fair amount of time on SAP implementations, and testing was always one of those areas that people talked about in the project plan but never really thought through until something broke. So here is a review of some testing practices I encountered — what worked, what did not, and what I wish someone had told me earlier. Methodology Matters (Even If You Think It Does Not) Every SAP project has a methodology. Sometimes it is a proper one — Deloitte’s Thread Manager, IBM’s Ascendant, SAP’s own Roadmap through Solution Manager. Sometimes it is “we did something similar last time, let’s do that again.” Sometimes it is nothing at all, and the project is winging it. ...

Replacing an IP address with sed

Sometimes you need to swap an IP address out of a file. Maybe you are moving a server to a new host, updating a config, or just tired of grepping through logs to find the old address. Whatever the reason, sed makes it trivial. The trick is matching the dotted-decimal pattern. An IP address is four groups of numbers separated by dots, so the regex needs to capture that structure. Here is the one-liner: ...

How I Built My First Website for My College

Hello everyone! Today I want to share with you the first project I ever did: the college website! This was a very old project that I did with the help of Subhash Dasyam. It was a great learning experience for me and I’m excited to tell you more about it. The Project The college website was a simple static website that showcased the information and achievements of our college, ASTRA. It had pages for the departments, faculty, students, events, gallery, and contact. It also had a login system for the admin and the students. ...

Disable services in Solaris 10

Managing services on Solaris 10 is nothing like Linux. There are no /etc/init.d/ scripts, no service command, no chkconfig. Instead, Solaris uses SMF — the Service Management Facility — and everything goes through svcadm. If you are new to Solaris, this can feel unnecessarily complicated. It is not, once you learn the pattern. Disabling a service You need root privileges or sudo access. The command is: svcadm disable network/cswpuppetd:default The argument is the service FMRI (Fault Management Resource Identifier). For Puppet installed from OpenCSW, the FMRI is network/cswpuppetd:default. The :default part refers to the default instance of the service. Some services have multiple instances, but most only have one. ...

Puppet logs on Solaris 10

Puppet on Solaris 10 stores its logs in the SMF log directory, which is different from the /var/log location you might be used to on Linux. If you are looking for the usual log files and cannot find them, this is probably why. Agent logs The Puppet agent (puppetd) runs as an SMF service, and its log is at: /var/svc/log/network-cswpuppetd:default.log To watch it in real time: tail -f /var/svc/log/network-cswpuppetd:default.log Master logs The Puppet master (puppetmasterd) follows the same pattern: ...

Release Engineering 101 — Using Version Control System (Subversion)

The build script from the last post turns your source code into something runnable. But it does not tell you which version of the source code you are building. That is where version control comes in. I am going to use Subversion for this post because that is what most of the projects I have worked on have used, and it is still the most common version control system in enterprise Java development. Git is fine for other kinds of projects, but the concepts here apply regardless of which system you choose. ...

Notes on Build Scripts — What I Learned the Hard Way

I wrote my first build script in my second year of college. It was a shell script that compiled a few Java files and copied the output into a folder. It worked. For that project, at least. Three years later, working on a team project with five other developers, I realised that script was useless. It assumed a specific directory layout. It assumed a specific version of the JDK. It assumed nobody had moved the source files. It assumed the build machine had the same libraries installed as my laptop. It assumed a lot of things, and every assumption was a potential failure point. ...

Release Engineering 101 — Build Scripts

Every project I have worked on, from small college assignments to larger team efforts, has eventually hit the same wall: someone runs the build, something breaks, and nobody knows why. The code was fine five minutes ago. The build server is down. The classpath is wrong. The compiled output is three versions behind. It is frustrating, it is wasteful, and it is entirely preventable. The fix is a build script. ...

running firefox 4 and firefox 3 side by side on ubuntu

Firefox 4 just dropped and you want to try it without losing your current setup? You can run both versions at the same time. Add the Mozilla Daily PPA, update, then install: sudo add-apt-repository ppa:ubuntu-mozilla-daily/ppa sudo apt-get update sudo apt-get install firefox-4.0 Firefox 3 stays as firefox. Firefox 4 runs as firefox-4.0. Both show up in your applications menu, or you can launch them from the terminal whichever you need.

puppet "could not find class in namespace" — it's probably a missing brace

Got this from Puppet? err: Could not retrieve catalogue: Could not find class php in namespaces standardbuild at /etc/puppet/manifests/templates.pp:15 on domain.internal.com The error points at a missing class, but the real culprit is often a missing closing brace somewhere above that line. Puppet’s parser gets confused and reports the wrong thing. Check your manifests for unmatched { and }. A syntax highlighter helps — or just count your braces.

phpize failed? install the dev files

Hit phpize and got a “not found” error? You’re missing the PHP development package. sh: phpize: not found ERROR: `phpize' failed On Ubuntu or Debian, grab it with: sudo apt-get install php5-dev That’s it. phpize should work after that.

bug on google chrome extension labs website

Bug on the Chrome Extension Labs Website

Spotted this broken link on the Chrome Extension Labs page. Looks like the Google developers forgot to update the path. Archived link: https://web.archive.org/web/2014/http://code.google.com/chrome/extensions/apps.html

Stop Deploying by Hand

The idea that you could push code to production without anyone touching a server, running a script, or holding their breath still sounds a bit mad to most developers. Most teams deploy like this: someone merges code, someone else pulls it down on a staging server, runs the tests manually, fixes whatever broke, then schedules a deployment window. Someone SSHs into production, runs a script or types commands by hand, crosses their fingers, and hopes nothing catches fire. If something does go wrong, you roll back by remembering what the last working version was and praying your backups are current. ...

Disabling Google Analytics

Google offers a browser plugin to opt out of Analytics tracking. Grab it from http://tools.google.com/dlpage/gaoptout

Getting the Current Unix Timestamp

Perl: time PHP: time() Ruby: Time.now.to_i Python: import time int(time.time()) Java: long epoch = System.currentTimeMillis() / 1000; C#: epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; VBScript: DateDiff("s", "01/01/1970 00:00:00", Now()) Erlang: calendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(now())) - 719528*24*3600. MySQL: SELECT unix_timestamp(now()) PostgreSQL: SELECT extract(epoch FROM now()); Oracle: SELECT (SYSDATE - TO_DATE('01-01-1970', 'DD-MM-YYYY')) * 24 * 60 * 60 FROM DUAL SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) JavaScript: Math.round(new Date().getTime() / 1000) Bash: date +%s PowerShell: Get-Date -UFormat "%s"

Database Integration -- Points to Keep in Mind

Have a single authoritative source for your schema. Everyone should know where the official schema lives. You should be able to walk up to a fresh machine, pull from source control, build, and run a simple tool to set up the database. Ideally the build process handles it automatically. Version your database. The goal is to propagate changes from development to test to production in a controlled way. You should also be able to recreate the database at any point in time. If someone reports a bug in build 20100612.1, you need to reproduce the exact database state from that build.

Getting System Load in Perl

Use qx() to capture the output of uptime and parse the load averages: # 1-minute load average my $load1 = qx(uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f1); # 5-minute load average my $load5 = qx(uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f2); # 15-minute load average my $load15 = qx(uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f3); Note: use qx() not exec() – exec replaces the current process and doesn’t return.

Gearman Perl "syswrite on an undefined value" Error

If you get this error when running Gearman client code: Can't call method "syswrite" on an undefined value at /usr/local/share/perl/5.10.1/Gearman/Taskset.pm line 202. The fix is to specify the port explicitly. Change: $client->job_servers('127.0.0.1'); To: $client->job_servers('127.0.0.1:4730');

Distributing Work with Gearman and Perl

I’ve been playing with Gearman over the past few weeks and I’m impressed by how little friction there is between the idea of distributing work across machines and actually making it happen. The Perl module, Gearman::Client and Gearman::Worker, is straightforward enough that you can have a client and a worker talking to each other through a job server in under an hour. The basic model is simple. You have a client that submits jobs, a worker that performs them, and a job server sitting in the middle dispatching work to whichever worker is free. The client and worker can be written in different languages, run on different machines, and you don’t need to worry about the networking yourself — Gearman handles all of that through TCP sockets to the job server. ...

Preserving File Permissions When Copying in Linux

Use the -p flag with cp to preserve file permissions: cp -p /aaa/bbb /ccc/ddd

Ajax Tabbed Google Search screenshot

Ajax Tabbed Google Search for Typo3

My first Typo3 extension. It’s a front-end plugin that displays a customised Google search engine on your site, using Ajax with tabs for different result types – no page reload needed. You can download it from the Typo3 Forge (link no longer available). The SVN repository was at svn.typo3.org/TYPO3v4/Extensions/ajax_google_search.

Typo3 Reference Manuals as a Chrome Extension

My first Google Chrome extension. It’s a collection of Typo3 reference manuals compiled from typo3.org. Useful if you have a slow or unreliable internet connection (looking at you, India), or if you prefer to stay in the browser while searching the Typo3 swx reference manuals. I wanted to publish it on the Chrome Extension Directory, but the file is 19.86 MB and Google has a 10 MB limit. If anyone knows a workaround, let me know. ...

SVN revision control – slides

I put together a presentation on Subversion for a class this semester. The slides cover the basics of revision control and why you should be using it for any project with more than one developer. The problem is simple: how do you coordinate code between multiple people without everything falling apart? You could work on the same machine and take turns. You could email files back and forth. You could dump everything on a shared drive. None of these approaches scale past two people, and even then they’re fragile. ...

Installing PHP 5.3.1 on Ubuntu

Two lines. That’s all it takes. Ubuntu x64: sudo su cd /tmp && mkdir php53 && cd php53 && wget http://php53.dotdeb.org/dotdeb_all.deb && wget http://php53.dotdeb.org/dotdeb.2004.02.25.key && apt-key add dotdeb.2004.02.25.key && dpkg -i dotdeb_all.deb && aptitude update && aptitude install php5 Ubuntu 32-bit (i386): Same command. The dotdeb repository handles both architectures.

Reading a File into a Variable in Perl

For large files, consider File::Slurp. It’s faster than the conventional approaches: # Slurp the whole file { local $/ = undef; open my $fh, '<', 'myfile' or die "Couldn't open file: $!"; binmode $fh; my $string = <$fh>; close $fh; } Without binmode: { local $/ = undef; open my $fh, '<', 'myfile' or die "Couldn't open file: $!"; my $string = <$fh>; close $fh; } Join the lines: open my $fh, '<', 'myfile' or die "Couldn't open file: $!"; my $string = join('', <$fh>); close $fh; Append in a loop: open my $fh, '<', 'myfile' or die "Couldn't open file: $!"; my $string; while (<$fh>) { $string .= $_; } close $fh; Read a fixed number of bytes: open my $fh, '<', 'sample.txt' or die "Error: $!\n"; read($fh, my $data, 2000); close $fh; The read function takes a filehandle, a destination variable, and the number of bytes to read. The example above reads 2000 bytes into $data. ...

There Is No Such Thing as Hack-Proof Encryption

The goal of encryption isn’t to create something uncrackable. The only truly unhackable computer is one that’s turned off, unplugged, and locked in a vault – and even then, someone could just carry the vault away. Encryption is about making it difficult enough that attackers give up and move on to easier targets. It’s a cost calculation, not a guarantee.

Go Programming Language - What's the Deal?

Google announced a new programming language called Go on November 10th. It’s from Robert Griesemer, Rob Pike, and Ken Thompson. That last name should tell you something — Ken Thompson co-designed Unix and invented the C programming language. The pitch was simple: a compiled language that feels as quick to write as a scripting language, with built-in concurrency and garbage collection. It’s aimed at the kind of problems that C was always used for, but without the pain of manual memory management and with better support for multi-core processors. ...

Lessons Learned – from a CMS developer

After building and maintaining CMS sites for a while, here are the things I’ve learned the hard way. Don’t run your site from the root directory. Put the CMS in a subdirectory and forward requests there with .htaccess or whatever your server supports. It keeps the CMS files out of the way and makes it harder for someone to guess where things are. A small thing, but it helps. Be careful about advertising what CMS you’re running. ...

Sales and Distribution module (SAP)

Notes on the SAP SD (Sales and Distribution) module from an implementation project. Mostly for my own reference. What SD does SD covers the sales process from order to cash. It handles customer master data, pricing, orders, deliveries, shipping, and billing. It’s integrated with other SAP modules — MM for materials, FI for finance, PP for production — so changes in SD ripple through the rest of the system. Organisational structure ...

Final Year Project Abstract — Test Automation in ERP Applications

This was my final year project for the B.Tech in Computer Science and Engineering (2008–09), done with K. Nishant. Test Automation in ERP Applications: Optimisation and Enhancement Most large organisations run their business on packaged ERP systems like SAP, Oracle, or PeopleSoft. These get heavily customised to fit each company’s processes, and testing those customisations is expensive and time-consuming. The goal of this project was to build a test automation framework that could run hundreds of test scenarios from a single script. ...

9 skills developers will need in the next five years

I was reading through some job listings recently and noticed a pattern. The same skills keep appearing, and the ones that were important five years ago are shifting. Not disappearing entirely, but moving around. Here’s what I think developers should be focusing on right now if they want to stay employable over the next few years. This isn’t exhaustive. There are plenty of specialisms and niches I’m ignoring deliberately. I’m thinking about mainstream development work, the kind most people do. ...

Flash z-order — always on top?

I had a JavaScript pull-down menu that overlapped with a Flash movie. No matter what z-index I set, the menu always rendered behind the Flash content. Classic problem. The fix is to set wmode to transparent on both the <object> and <embed> tags: <object ...> <param name="wmode" value="transparent"> <embed ... wmode="transparent"></embed> </object> This tells the Flash player to respect the browser’s stacking context instead of rendering in its own window layer. The menu displays correctly over the Flash movie after that.

Choose your titles wisely for better URLs

If your CMS generates URLs from page titles, choose those titles carefully. The slug becomes part of the URL and search engines use it as a ranking signal. Use hyphens to separate words, not underscores. Google treats my-page-title as three distinct words but reads my_page_title as one mangled string. Good: /blog/choose-your-titles-wisely-for-better-urls Bad: /blog/choose_your_titles_wisely_for_better_urls Keep titles short and descriptive. Avoid stop words where you can — “the”, “and”, “of” take up space in a URL without adding meaning. And watch out for special characters; they get mangled into ugly encoded strings.

CSS Browser Compatibility Improvement Tip

Different browsers apply different default padding and margin to the <html> and <body> elements. If you don’t reset them, you’ll get unexpected whitespace that varies from one browser to another. The fix is to simply zero them out at the top of your stylesheet: html { padding: 0; margin: 0; } body { padding: 0; margin: 0; } This is the first rule I add to any new project.

CSS fail

Never do this: position: absolute; left: 99px; It feels like a handy quick fix to shove an element where you want it, but it never actually works. The layout breaks as soon as the content changes, the screen resizes, or anyone else touches the code. I learned this the hard way more times than I’d like to admit.