Move OutLook buttons down below instead of at left side

With the newer versions of Outlook, the standard buttons (for Mail, Calender, Tasks etc.) has been moved to the left side, instead of below the mailbox-contents

Left-Right screen estate is precious (for mail preview) while Up-Down is more allowable (at least to me.

https://learn.microsoft.com/en-us/answers/questions/4617774/can-we-move-the-toolbar-back-to-bottom-of-left-sid

It could seem like only the “Classic” Outlook supports this (Unconfirmed)

To my understanding you’re not using the new Outlook , I have done some research on your inquiry and concluded that Navigation bar location can be adjusted to the bottom by applying the following steps:

Open the Outlook desktop app.
Click File, then Options.
In the window that opens, select Advanced.
Under the Outlook Panes section, uncheck the box that says “Show apps in Outlook.”
Restart Outlook and your navigation bar would be relocated at the bottom

Azure Bicep deployment – non-descript error

Azure deployment can be hard.

To deploy and maintain azure resources, we are using bicep templates (a main template, invoking child modules to create individual resources). In addition we have environment-parameter-files, to encapsulate the differences between each environment.

Today, I had to add some Function App Alerts via the bicep-template. Basically the only part in this task, was to create a new module, that could create the Alerts for an array of Function Apps.

Feeling confident, I made the change, pushed it to the Azure Devops repository and invoked the Devops pipeline.

Sadly it failed with this very non-descriptive failure

ERROR: InvalidTemplate - Deployment template validation failed: 'The
template resource 'xxKeyVault' at line '1' and column '9939' is
not valid: The template function 'reference' is not expected at this
location. Please see https://aka.ms/arm-functions for usage details..
Please see https://aka.ms/arm-functions for usage details.'.

I had no idea about the reason – since i had changed nothing wrt. keyvaults and added no references.

az bicep lint showed no issues.

The ARM-template file that Devops was trying to deploy, was not available (we use MS agents)

Trying local deployment:

az deployment group what-if --name Test --resource-group rg-test-dev
--template-file modules\main.bicep --parameters params\dev.json
--subscription "Test - DEV" --mode Incremental

showed the same error – but gave no indications to the cause.

Doing a bicep build (az bicep build --file modules\main.bicep) produced a template-file, but it was clearly not identical to the one that Devops pipeline did

After hours of debugging, the error turned out to be simple:
module functionAppAlerts 'functionAppAlerts.bicep' = {
name: 'functionAppAlerts'
params: {
actionGroupId: actionGroups.outputs.actionGroupsId
timerTriggeredFunctionApps: functionAppNames_timerTriggered
location: location
tags: tags
}
}

I had not given the module a name.

Currently, I have no idea, how this oversight could lead to the error above.

Broadlink RM Pro – Setup

Bought a Broadlink RM Pro (with Wifi, IR and RF)

To setup without an app:
– Press reset (until it quick-blinks)
– Press reset (until it slow-blinks)
– Now it is in AP mode – showing an SSID called BroadlinkProv (or, on some devices, it is called BroadLink_WiFi_Device)
– Connect to this SSID (no encryption)
– No TCP ports are being listened on
– Broadlink devices uses QUIC protocol over UDP port 80
– It has been reverse engineered here: ipsumdomus.com
– in an test with nmap (sudo nmap -sU -p80-85 –system-dns) ports 82-85 (but NOT 81) also seemed open
– if I scanned more UDP ports, the AP would disappear (probably because it reboots because of no connectivity to cloud)
– python library can can setup (I have not made it work yet, though) and control Broadlink devices: github

Parsing a Database connectionstring to individual values

From time to time, you may have to access (in some code) the individual values of a database connectionstring – and what to do if you only have the connectionstring available?

In my case, it happened in Azure, where we normally use the connectionstring for Function Apps, but when I needed to deploy a Logic App, I suddenly needed the individual values (for the Logic App’s associated ‘API Connection’)

Here it tells us that this C# class can do the parsing, but it only mentions “Initial Catalog” and “Data Source” – and what do we do, if our connectionstring uses “Server” and “Database”

It turns out (also in above description) that the class can also handle the synonyms – so if your connectionstring uses “Database”, you can get that value via “InitialCatalog”.

Short example code showing the synonyms – it can be tested here

public static void Main()
{
var cs = “Server=tcp:yada1.database.windows.net,1433;Database=yada2-dev;Persist Security Info=False;User ID=yada3-dev;Password=yada4;...................”;

System.Data.SqlClient.SqlConnectionStringBuilder sb = new System.Data.SqlClient.SqlConnectionStringBuilder(cs);
Console.WriteLine($”Server: {sb[“Server”]}”);
Console.WriteLine($”DataSource: {sb.DataSource}”);
Console.WriteLine($”Database: {sb[“Database”]}”);
Console.WriteLine($”Database: {sb.InitialCatalog}”);
Console.WriteLine($”User: {sb.UserID}”);
Console.WriteLine($”Password: {sb.Password}”);
}

Azure Bicep Deployment – Maintenance Windows for sql-databases

Automating things using bicep for Azure deployment can be hard.

While it is trivially easy to find out how to configure maintenance windows for an SQL database using the Azure Portal directly, it is equally hard to find out how to set it using bicep deployment

No direct search gives any relevant links (apart from saying the the maintenanceConfigurationId in the bicep-file must a “string”)

Continue reading “Azure Bicep Deployment – Maintenance Windows for sql-databases”

Linux: Temporarily remap /tmp

In my case, I am using gogs on an Azure VM, which has a not-large main drive, but a rather large drive that only exists as long as the VM is running.

Given that the gogs backup is rather disk hungry, I found the need to move its use away from /tmp and onto the temporary disk.

# Since "resource" is owned by root, make a subfolder and make it world-usable
sudo mkdir /mnt/resource/TEMP && sudo chmod 777 /mnt/resource/TEMP
# Verify
ls -ld /mnt/resource/TEMP
# while TMP and TEMP did not affect gogs, TMPDIR DID, indicating that gogs uses mktemp
TMPDIR=/mnt/resource/TEMP ./gogs backup

Continue reading “Linux: Temporarily remap /tmp”

Excel : No more conversion of large numbers to Scientific Notation

To my extremely great surprise, Microsoft has finally fixed a very annoying feature in Excel.

When importing CSV-files to Excel that contained (what could look like) a number, Excel would without fail convert that to a number during import and, if it was large enough like 1000000000001234567, convert it to Scientific Notation (1.000E+18) and in the process remove precision in the number. Even if you later forced it back to text or similar, it had forever lost the precision (1000000000001234000) and was hence utterly useless.

That is happily a feature in the past for Office 365. Now you can disable this impressively stupid behaviour in “Options”

Continue reading “Excel : No more conversion of large numbers to Scientific Notation”

Battery replacement on Ventus GPS Route Logger G730

Disassembling Ventus GPS Route Logger G730 for battery replacement

  • Remove the purple cover that covers the round bottom at the top
    • It can carefully be angled out from the backend, and when it is free, the top part kan be lifted
  • Inside the new opening, there are a metal clip on each side. Push both toward the middle at the same time
    • Top cover now slides off
  • By lifting slightly on the back and pushing on the USB Connector, the whole circuit board can now be pushed out

The battery inside is labeled:

– 502248
+ 450mAh 3.7V

It seems to be glued in place