[
  {
    "url": "https://melcher.dev/2023/12/microsoft-store-stuck-in-pending/",
    "title": "Microsoft Store: Stuck in Pending",
    "date_published": "2023-12-13T08:49:25+01:00",
    "description": "This will be a quick one: I am trying to install a game from the Microsoft Store and it is stuck in \u0026ldquo;Pending\u0026rdquo; for days. I searched around and the suggested fixes did not work for me.\nReset the Store Cache via wsreset.exe Run wsreset.exe as Administrator - no change.\nRelog into the Store App Profile picture in the top right - no change.\nReset the Store App via Settings Windows-key + i Apps Installed Apps Search for Microsoft Store \u0026gt; System Components Search for Microsoft Store again Click on the three dots \u0026gt; Advanced Options Click on Reset No change.",
    "content": "This will be a quick one: I am trying to install a game from the Microsoft Store and it is stuck in \u0026ldquo;Pending\u0026rdquo; for days. I searched around and the suggested fixes did not work for me.\nReset the Store Cache via wsreset.exe Run wsreset.exe as Administrator - no change.\nRelog into the Store App Profile picture in the top right - no change.\nReset the Store App via Settings Windows-key + i Apps Installed Apps Search for Microsoft Store \u0026gt; System Components Search for Microsoft Store again Click on the three dots \u0026gt; Advanced Options Click on Reset No change.\nReset the Store App via PowerShell Get-AppxPackage -allusers Microsoft.WindowsStore | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register \u0026#34;$($_.InstallLocation)\\AppXManifest.xml\u0026#34;} Ensured Windows Updates are installed Everything is installed and up-to-date.\nService \u0026lsquo;Gaming Service\u0026rsquo; I noticed an Eventlog entry \u0026lsquo;The server {834366DA-2D43-4FE3-8DCD-42FF2274BD0D} did not register with DCOM within the required timeout.\u0026rsquo; - this seems to be the Gaming Service.\nThere are also two services listed in the Services MMC - one was running, one had no status:\nSo I reinstalled the gaming service via PowerShell (as Administrator):\nGet-AppxPackage Microsoft.GamingServices | Remove-AppxPackage -allusers And reinstalled it through the Store App:\nstart ms-windows-store://pdp/?productid=9MWPM2CQNLHN And after that, the game installed just fine.\nSummary I was very close in resetting Windows for this - glad I got it fixed.\nHope it helps someone else, too - happy gaming!\nMax\n",
    "tags": ["Windows Store","Microsoft Store","Gamepass"],
    "categories": ["Website"],
    "feature": "https://melcher.dev/2023/12/microsoft-store-stuck-in-pending/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2023/10/azure-arc-list-cpu-cores/",
    "title": "Azure Arc - List CPU Cores",
    "date_published": "2023-10-13T12:52:44+02:00",
    "description": "This post shows how to list the CPU cores of your Azure Arc connected machines in a table.\n",
    "content": "This post shows how to list the CPU cores of your Azure Arc connected machines in a table.\nMotivation The Azure Arc agent is a small agent that you can install on your on-premises servers to connect them to Azure. This allows you to manage your on-premises servers with Azure services like Azure Policy, Azure Monitor, Azure Security Center, Azure Automation, Azure Update Management, and more.\nRecently there is a big push to Azure Arc because of the end of life of Windows Server 2012/R2.\nThis is especially interesting for customers that have a lot of servers that are not virtualized and cannot be migrated to Azure - and they need to be supported for months/years because of whatever reasons.\nTypically customers then bought Extended Support Updatate (ESU) license. Since September this is now possible through Azure and gives you the flexiblity to only pay for the servers that you need to support.\nYou do not need ESU if you:\nMigrate to Azure - ESU is free Upgrade to a newer version of Windows Server - ESU is not longer needed. Decommission the server. With Azure Arc through ESU you can adjust the license count and benefit from pay as you go terms.\nBut how many ESU licenses do you need?\nThe Problem Azure Arc does collect the number of CPU cores of your connected machines - but it is not visibly exposed in the Azure Portal (yet?).\nYou need to click on the connected Machine on the JSON View to see the individual CPU cores: And then you need to count the cores manually.\nThe Solution Of course, there is a better way. Azure Resource Graph to the rescue!\nUse the following link: Azure Resource Graph Explorer\nThe following query does list the CPU cores of all connected machines in a table:\nresources | where type =~ \u0026#39;microsoft.hybridcompute/machines\u0026#39; and kind !contains \u0026#34;AVS\u0026#34; | extend machineId = tolower(tostring(id)) | extend datacenter = iif(isnull(tags.Datacenter), \u0026#39;\u0026#39;, tags.Datacenter) | extend state = properties.status | extend status = case( state =~ \u0026#39;Connected\u0026#39;, \u0026#39;Connected\u0026#39;, state =~ \u0026#39;Disconnected\u0026#39;, \u0026#39;Offline\u0026#39;, state =~ \u0026#39;Error\u0026#39;, \u0026#39;Error\u0026#39;, state =~ \u0026#39;Expired\u0026#39;, \u0026#39;Expired\u0026#39;, \u0026#39;\u0026#39;) | extend osSku = properties.osSku | extend os = properties.osName | extend osName = case( os =~ \u0026#39;windows\u0026#39;, \u0026#39;Windows\u0026#39;, os =~ \u0026#39;linux\u0026#39;, \u0026#39;Linux\u0026#39;, \u0026#39;\u0026#39;) | extend operatingSystem = iif(isnotnull(osSku), osSku, osName) | join kind=leftouter ( resources | where type =~ \u0026#34;microsoft.hybridcompute/machines/extensions\u0026#34; | extend machineId = tolower(tostring(trim_end(@\u0026#34;\\/\\w+\\/(\\w|\\.)+\u0026#34;, id))) | extend provisioned = tolower(tostring(properties.provisioningState)) == \u0026#34;succeeded\u0026#34; | summarize MDEcnt = countif(properties.type in (\u0026#34;MDE.Linux\u0026#34;, \u0026#34;MDE.Windows\u0026#34;) and provisioned), AMAcnt = countif(properties.type in (\u0026#34;AzureMonitorWindowsAgent\u0026#34;, \u0026#34;AzureMonitorLinuxAgent\u0026#34;) and provisioned), WACcnt = countif(properties.type in (\u0026#34;AdminCenter\u0026#34;) and provisioned), UMcnt = countif(properties.type in (\u0026#34;WindowsOsUpdateExtension\u0026#34;,\u0026#34;LinuxOsUpdateExtension\u0026#34;, \u0026#34;WindowsPatchExtension\u0026#34;) and provisioned) by machineId ) on machineId | extend defenderStatus = iff ((MDEcnt\u0026gt;0), \u0026#39;Enabled\u0026#39;, \u0026#39;Not enabled\u0026#39;) | extend monitoringAgent = iff ((AMAcnt\u0026gt;0), \u0026#39;Installed\u0026#39;,\u0026#39;Not installed\u0026#39;) | extend wacStatus = iff ((WACcnt\u0026gt;0), \u0026#39;Enabled\u0026#39;, \u0026#39;Not enabled\u0026#39;) | extend updateManagement = iff ((UMcnt\u0026gt;0), \u0026#39;Enabled\u0026#39;, \u0026#39;Not enabled\u0026#39;) | extend hostName = tostring(properties.displayName) | extend manufacturer = properties.detectedProperties.manufacturer | extend name = iif(properties.cloudMetadata.provider == \u0026#39;AWS\u0026#39; and name != hostName, strcat(name, \u0026#34;(\u0026#34;, hostName, \u0026#34;)\u0026#34;), name) | extend isSqlServer = properties.detectedProperties.mssqldiscovered | extend logicalCoreCount = properties.detectedProperties.logicalCoreCount | extend processorCount = properties.detectedProperties.processorCount | extend coreCount = properties.detectedProperties.coreCount | project name, status, manufacturer, processorCount, logicalCoreCount, coreCount, isSqlServer, resourceGroup, subscriptionId, datacenter, operatingSystem, id, type, location, kind, tags, machineId, defenderStatus, monitoringAgent, wacStatus, updateManagement, hostName | project name,manufacturer, processorCount, logicalCoreCount, coreCount, isSqlServer,status,resourceGroup,subscriptionDisplayName,operatingSystem,defenderStatus,monitoringAgent,id,type,location,subscriptionId,tags | sort by (tolower(tostring(name))) asc This is how it looks like:\nYou can then export the table to Excel and do the math.\nIf you only want to see the detected SQL Server, then you can add\n| where isSqlServer == true before the | sort at the end.\nHope it helps,\nMax\n",
    "tags": ["Azure Arc","ESU","Extended Support Updates","Connected Machine"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2023/10/azure-arc-list-cpu-cores/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2022/11/monitor-unattached-disks-with-azure-logic-apps/",
    "title": "Monitor Unattached Disks with Azure Logic Apps",
    "date_published": "2022-11-19T15:16:28+01:00",
    "description": "In this article I explain how to use Azure Logic App to monitor unattached disks in Azure. This is a very common scenario in Azure, where you have a lot of VMs and you want to make sure that you don\u0026rsquo;t have any unattached disks. This can happen if you delete a VM and forget to delete the disk, \u0026lsquo;I will delete this later\u0026hellip;\u0026rsquo;. Can also be adjusted for other resources like NICs, NSGs, etc.",
    "content": "In this article I explain how to use Azure Logic App to monitor unattached disks in Azure. This is a very common scenario in Azure, where you have a lot of VMs and you want to make sure that you don\u0026rsquo;t have any unattached disks. This can happen if you delete a VM and forget to delete the disk, \u0026lsquo;I will delete this later\u0026hellip;\u0026rsquo;. Can also be adjusted for other resources like NICs, NSGs, etc.\nIntroduction When you run Azure at scale and lots of users provision VMs in Azure, there will be a lot of disks. It is very easy to forget to delete a disk when you delete a VM. This can lead to a lot of unattached disks in your subscription. This is not only a waste of money.\nRecently Azure introduced a new feature to also delete Disks when the VM is deleted, but many people don\u0026rsquo;t know about this feature or the feature is not enabled when you provision a VM with infrastructure as code.\nTherefore a small monitoring script comes in handy - and there are multiple ways to do this:\nGoing to the Disks blade in the Azure Portal and check if there are any unattached disks. But this is not very efficient and you have to do this manually. Using Azure Policy to monitor unattached disks - this is the best approach to centralize this governance aspect, but central IT most of the times cannot decide if a disk should be deleted or not. Therefore this is not a good approach for all scenarios. Using Azure Logic App to monitor unattached disks - this is a good approach to monitor unattached disks and send an alert to the owner of the disk. This is a good approach for most scenarios. But as the title of this post says, I will show you how to use Azure Logic App to monitor unattached disks.\nLogic App The following picture shows how the Logic App looks like: The high level steps are:\nTrigger the Logic App with a recurring schedule, e.g. once a month Get all disks in a subscription Filter out all disks that are attached to a VM Send an email with a HTML table (not in the screenshot) At first I wanted to get all the disks in one go, unfortunately the \u0026lsquo;List resources by subscription\u0026rsquo; does not return the ARM property that shows if a disk is attached to a VM or not. Therefore I had to get all the disks in a subscription and then get the details of each disk. This is not very efficient, but it works.\nThe example here only monitors one subscription - but you can also adjust the Logic App to monitor multiple subscriptions.\nThe for each loop on every disk resource then fetches the disk details and checks if the disk is attached to a VM. If the disk is not attached to a VM, the disk details are added to a list. This list is then used to create the HTML table in the email with the action \u0026lsquo;Create HTML table\u0026rsquo;.\nThe tricky part for me was to get the correct filters. For \u0026lsquo;List resources by subscription\u0026rsquo; I use the filter:\nresourceType eq 'Microsoft.Compute/disks' Then in the for each loop iterating over the \u0026lsquo;value\u0026rsquo; of the \u0026lsquo;List resources by subscription\u0026rsquo; I use the following parameters:\nResource Group: split(item().id,\u0026rsquo;/\u0026rsquo;)[4] Provider: Microsoft.Compute Short Resource Id: disks/[Name] And lastly the json with all the details and parameters of tfe logic app. If you copy that to the \u0026lsquo;Code view\u0026rsquo; of the Logic App, you can adjust the parameters and configure the email notification (needs a little back and forth because of the missing Azure parameter).\nHope it helps,\nMax\n{ \u0026#34;definition\u0026#34;: { \u0026#34;$schema\u0026#34;: \u0026#34;https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#\u0026#34;, \u0026#34;actions\u0026#34;: { \u0026#34;Create_HTML_table\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;format\u0026#34;: \u0026#34;HTML\u0026#34;, \u0026#34;from\u0026#34;: \u0026#34;@variables(\u0026#39;unattachedDisks\u0026#39;)\u0026#34; }, \u0026#34;runAfter\u0026#34;: { \u0026#34;For_each\u0026#34;: [ \u0026#34;Succeeded\u0026#34; ] }, \u0026#34;type\u0026#34;: \u0026#34;Table\u0026#34; }, \u0026#34;For_each\u0026#34;: { \u0026#34;actions\u0026#34;: { \u0026#34;Condition\u0026#34;: { \u0026#34;actions\u0026#34;: { \u0026#34;Append_to_array_variable\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;unattachedDisks\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;@body(\u0026#39;Read_a_resource\u0026#39;)\u0026#34; }, \u0026#34;runAfter\u0026#34;: {}, \u0026#34;type\u0026#34;: \u0026#34;AppendToArrayVariable\u0026#34; } }, \u0026#34;expression\u0026#34;: { \u0026#34;and\u0026#34;: [ { \u0026#34;equals\u0026#34;: [ \u0026#34;@body(\u0026#39;Parse_JSON\u0026#39;)?[\u0026#39;diskState\u0026#39;]\u0026#34;, \u0026#34;Unattached\u0026#34; ] } ] }, \u0026#34;runAfter\u0026#34;: { \u0026#34;Parse_JSON\u0026#34;: [ \u0026#34;Succeeded\u0026#34; ] }, \u0026#34;type\u0026#34;: \u0026#34;If\u0026#34; }, \u0026#34;Parse_JSON\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;content\u0026#34;: \u0026#34;@body(\u0026#39;Read_a_resource\u0026#39;)?[\u0026#39;properties\u0026#39;]\u0026#34;, \u0026#34;schema\u0026#34;: { \u0026#34;properties\u0026#34;: { \u0026#34;creationData\u0026#34;: { \u0026#34;properties\u0026#34;: { \u0026#34;createOption\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;imageReference\u0026#34;: { \u0026#34;properties\u0026#34;: { \u0026#34;id\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; }, \u0026#34;diskIOPSReadWrite\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;integer\u0026#34; }, \u0026#34;diskMBpsReadWrite\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;integer\u0026#34; }, \u0026#34;diskSizeBytes\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;integer\u0026#34; }, \u0026#34;diskSizeGB\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;integer\u0026#34; }, \u0026#34;diskState\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;encryption\u0026#34;: { \u0026#34;properties\u0026#34;: { \u0026#34;type\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; }, \u0026#34;hyperVGeneration\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;networkAccessPolicy\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;osType\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;provisioningState\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;publicNetworkAccess\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;supportedCapabilities\u0026#34;: { \u0026#34;properties\u0026#34;: { \u0026#34;acceleratedNetwork\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;boolean\u0026#34; }, \u0026#34;architecture\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; }, \u0026#34;supportsHibernation\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;boolean\u0026#34; }, \u0026#34;tier\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;timeCreated\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; }, \u0026#34;uniqueId\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; } }, \u0026#34;runAfter\u0026#34;: { \u0026#34;Read_a_resource\u0026#34;: [ \u0026#34;Succeeded\u0026#34; ] }, \u0026#34;type\u0026#34;: \u0026#34;ParseJson\u0026#34; }, \u0026#34;Read_a_resource\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;host\u0026#34;: { \u0026#34;connection\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;@parameters(\u0026#39;$connections\u0026#39;)[\u0026#39;arm\u0026#39;][\u0026#39;connectionId\u0026#39;]\u0026#34; } }, \u0026#34;method\u0026#34;: \u0026#34;get\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/subscriptions/@{encodeURIComponent(\u0026#39;36d3ff36-dc30-4224-9970-6c24b9043705\u0026#39;)}/resourcegroups/@{encodeURIComponent(split(item().id,\u0026#39;/\u0026#39;)[4])}/providers/@{encodeURIComponent(\u0026#39;Microsoft.Compute\u0026#39;)}/@{encodeURIComponent(\u0026#39;disks/\u0026#39;,items(\u0026#39;For_each\u0026#39;)?[\u0026#39;name\u0026#39;])}\u0026#34;, \u0026#34;queries\u0026#34;: { \u0026#34;x-ms-api-version\u0026#34;: \u0026#34;2021-12-01\u0026#34; } }, \u0026#34;runAfter\u0026#34;: {}, \u0026#34;type\u0026#34;: \u0026#34;ApiConnection\u0026#34; } }, \u0026#34;foreach\u0026#34;: \u0026#34;@body(\u0026#39;List_resources_by_subscription\u0026#39;)?[\u0026#39;value\u0026#39;]\u0026#34;, \u0026#34;runAfter\u0026#34;: { \u0026#34;Initialize_variable\u0026#34;: [ \u0026#34;Succeeded\u0026#34; ] }, \u0026#34;type\u0026#34;: \u0026#34;Foreach\u0026#34; }, \u0026#34;Initialize_variable\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;variables\u0026#34;: [ { \u0026#34;name\u0026#34;: \u0026#34;unattachedDisks\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;array\u0026#34; } ] }, \u0026#34;runAfter\u0026#34;: { \u0026#34;List_resources_by_subscription\u0026#34;: [ \u0026#34;Succeeded\u0026#34; ] }, \u0026#34;type\u0026#34;: \u0026#34;InitializeVariable\u0026#34; }, \u0026#34;List_resources_by_subscription\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;host\u0026#34;: { \u0026#34;connection\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;@parameters(\u0026#39;$connections\u0026#39;)[\u0026#39;arm\u0026#39;][\u0026#39;connectionId\u0026#39;]\u0026#34; } }, \u0026#34;method\u0026#34;: \u0026#34;get\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/subscriptions/@{encodeURIComponent(\u0026#39;36d3ff36-dc30-4224-9970-6c24b9043705\u0026#39;)}/resources\u0026#34;, \u0026#34;queries\u0026#34;: { \u0026#34;$expand\u0026#34;: \u0026#34;resourceGroup\u0026#34;, \u0026#34;$filter\u0026#34;: \u0026#34;resourceType eq \u0026#39;Microsoft.Compute/disks\u0026#39;\u0026#34;, \u0026#34;x-ms-api-version\u0026#34;: \u0026#34;2016-06-01\u0026#34; } }, \u0026#34;runAfter\u0026#34;: {}, \u0026#34;type\u0026#34;: \u0026#34;ApiConnection\u0026#34; } }, \u0026#34;contentVersion\u0026#34;: \u0026#34;1.0.0.0\u0026#34;, \u0026#34;outputs\u0026#34;: {}, \u0026#34;parameters\u0026#34;: { \u0026#34;$connections\u0026#34;: { \u0026#34;defaultValue\u0026#34;: {}, \u0026#34;type\u0026#34;: \u0026#34;Object\u0026#34; } }, \u0026#34;triggers\u0026#34;: { \u0026#34;Recurrence\u0026#34;: { \u0026#34;evaluatedRecurrence\u0026#34;: { \u0026#34;frequency\u0026#34;: \u0026#34;Day\u0026#34;, \u0026#34;interval\u0026#34;: 1 }, \u0026#34;recurrence\u0026#34;: { \u0026#34;frequency\u0026#34;: \u0026#34;Day\u0026#34;, \u0026#34;interval\u0026#34;: 1 }, \u0026#34;type\u0026#34;: \u0026#34;Recurrence\u0026#34; } } }, \u0026#34;parameters\u0026#34;: { \u0026#34;$connections\u0026#34;: { \u0026#34;value\u0026#34;: { \u0026#34;arm\u0026#34;: { \u0026#34;connectionId\u0026#34;: \u0026#34;/subscriptions/36d3ff36-dc30-4224-9970-6c24b9043705/resourceGroups/mamelch_group/providers/Microsoft.Web/connections/arm\u0026#34;, \u0026#34;connectionName\u0026#34;: \u0026#34;arm\u0026#34;, \u0026#34;id\u0026#34;: \u0026#34;/subscriptions/36d3ff36-dc30-4224-9970-6c24b9043705/providers/Microsoft.Web/locations/westeurope/managedApis/arm\u0026#34; } } } } } ",
    "tags": ["Logic App","Alert","Governance","Cost Management"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2022/11/monitor-unattached-disks-with-azure-logic-apps/images/Unattached-Azure-Disks-Logo.png"
  },
  {
    "url": "https://melcher.dev/2021/10/three-years-at-microsoft-things-i-learned/",
    "title": "Three Years at Microsoft - Things I learned",
    "date_published": "2021-10-18T08:30:21Z",
    "description": "This post highlights key events \u0026amp; learnings as Microsoft Cloud Solution Architect in the Customer Success Unit. I want to share what I do, what I learned, community contributions, and more. Three years at Microsoft, what a ride!\n",
    "content": "This post highlights key events \u0026amp; learnings as Microsoft Cloud Solution Architect in the Customer Success Unit. I want to share what I do, what I learned, community contributions, and more. Three years at Microsoft, what a ride!\nCloud Solution Architect I joined Microsoft in October 2018: Little did I know back then, I learned and grew a lot.\nOne year in, I was still learning about my \u0026lsquo;Cloud Solution Architect\u0026rsquo; role, but came to see it as:\ndeveloping the right architecture to solve business, as well as, technical problems bridging the gap between customer and Microsoft product development groups prioritizing features/services and communicating customer feedback evangelizing Azure, speaking at customer and internal events help with pilots architecture and whiteboarding sessions understand consumption patterns and motions sharing best practices and explain new technologies/approaches onboard new customers and colleagues And, very important, we do not:\nhandle support cases write production code that is supported for 10 years and all that cover every product that Microsoft or Azure offers replace a customer cloud team and/or partner - you need them for production deployments and scale! Two years later, the role is the same, but I deliver it differently. I learned a lot about how to work at Microsoft - the internal network and knowledge, and how to leverage all the great people that work here. That is amazing. I can have a lot of impact on my customer because of the great work of others. Product groups, engineering, support, and Microsoft Partners - if all the parts are connected and balanced, everybody wins and the customer has huge success. Azure has also evolved a lot and this makes my role also really interesting: New services, new features, combined with interesting customer challenges; this keeps me motivated a lot.\nMicrosoft is constantly hiring - go check the careers.microsoft.com page for open positions. If you have questions, please reach out!\nMy effort to continuously adapt and grow resulted in a Gold Award in 2020.\nGold Award The distinguished Gold Club Award recognizes the extraordinary performance of individuals who transform and contribute to the overall success and growth of Microsoft. Recipients demonstrated significant impact on business results through growth mindset, transformational deals as One Microsoft, Customer \u0026amp; Partner obsession, making a difference to change the world, and acting in the spirit of One Microsoft.\nWinning the Gold Award was a crazy experience. My former manager Carolin Petzold put a fake meeting in my calendar and I was surprised by my skip-skip-level manager Wolfang Hoeffer, who also joined - and then they gave me the award. When they surprise joined, I initially thought they gonna fire me\u0026hellip;\nMaking a difference and having a positive impact on a customer, the internal community, and the external community brought me this award. Thanks to all who made this possible - that is a very special moment of my career!\nOne of the prizes was a meeting with Mala Anand (Corporate Vice President Customer Experience \u0026amp; Success at Microsoft) - she shared a lot about what is coming for the Customer Success Unit, her priorities, and I could also ask a couple of not so easy to answer questions about the Cloud Solution Architect role.\nIn the same year, I put a lot of effort into an internal competition - and I earned the next award.\nAzure World Cup In 2020, all Cloud Solution Architects (and some other roles) were invited to take part in an internal Azure competition, the so called Azure World Cup - a gamification-based training competition around the world. I thought I knew a lot about Azure and our internal processes, but this game helped me understand even more of it - I made new friends, learned a couple of tricks, this was gamification done right! Also, I am a very competitive person - and in the end, I won it with the most points worldwide: That was a great learning experience, that felt just perfect for me. Special thanks to Jan Kalis \u0026amp; team for organizing this!\nOne of the prizes was a 1:1 meeting with Mark Souza, Corporate Vice President for Customer Success at Microsoft for a career coaching - and I learned a lot, got new insights and perspectives. I am very grateful for the experience.\nCustomer \u0026amp; Customer Success I have the great luxury that I am a so-called \u0026lsquo;Pinned CSA\u0026rsquo; or \u0026lsquo;Dedicated CSA\u0026rsquo; - in my case I am responsible for exactly one customer. The customer is very big and complex - and I learned to like it. Three years ago I thought that their cloud demand was unrealistic - now it is my day-to-day job to enable them to find success with Azure. \u0026ldquo;Can we have a couple of thousand CPU cores by next week?\u0026rdquo;, \u0026ldquo;Why does it break if we have 20.000 concurrent users?\u0026rdquo;, \u0026ldquo;How can we make that happen?\u0026rdquo;. This also means that I can build up a relationship with the customer and be recognized as a trusted advisor - if they have technical challenges in regards to Azure, they hopefully reach out and most of them do. The scale and complexity of their \u0026lsquo;cloud journey\u0026rsquo; are increasing - and I enjoy being the \u0026rsquo;travel guide\u0026rsquo;.\nConveniently my customer\u0026rsquo;s headquarter is in Munich, where I live so I do not have to travel much. Working from home is my/our new normal, spending lots of time with the family and sleeping in my bed is improving my quality of life tremendously. Traveling several hours to a 30-minute customer meeting is hopefully not coming back.\nI will rather use my \u0026rsquo;travel\u0026rsquo; time to invest in learning new tech.\nAlways Learning After my onboarding at Microsoft, I gave feedback that our onboarding experience can be improved. My back-then manager said: \u0026ldquo;well, what can you do to improve it?\u0026rdquo;. Since then I have done 22+ onboardings of new Cloud Solution Architects, and recently of Customer Engineers (CE, former PFE). Getting to know the new folks, their background and experience, and putting their questions into perspective helps me a lot and is very rewarding.\nRegarding certification and formal training, I chose to do specialize in Kubernetes. This is a big trend for my customer, so upskilling myself is helping. I chose the Certified Kubernetes Administrator (CKA) and that was one of the most difficult exams I have done so far - the time pressure and the complexity of Kubernetes was a real challenge. Luckily I could prepare with my friend and colleague Frank, who made it fun to learn with. We built a learning circle and for this year we will extend our Kubernetes knowledge by doing the Certified Kubernetes Application Developer (CKAD) exam.\nOn the Azure side of learning, I renewed all the Azure certifications (Solution Architect Expert, Security Engineer Associate, Devops Engineer Expert, Developer Associate) and added the latest certificate Azure Network Engineer Associate (AZ-700). Keeping my knowledge up to date is super important for me and my role. And I am always eager to learn more. I keep my about page updated in regards to certification.\nAlso, spending time with friends is super important to me.\nCommunity Community and events were tough in the past two years - and I miss meeting people face to face. I have had so many Teams calls, seeing people, in reality, is different. I attended a couple of virtual events, they are not my thing. I helped organize CollabDays 2020 fully virtual, but it is not the same experience for me and I do not get that much out of it. What made me proud, is that, because it is fully virtual at almost ZERO cost, we could gift the sponsoring money directly to charity, almost 3000€ (~$3500) to a hospice for kids (Kinderhospiz München) and they sent us this nice letter:\nThanks to all the great sponsors and awesome organizers who made that possible!!! Antje, Corinna, Melanie, Thomy, Stefan - you rock!\nHopefully, we can run an #AzureSaturday again in Munich next year. The last one had to be canceled because of safety reasons - I miss my community and like-minded folks\nI also gave a talk at Sia Ghassemi\u0026rsquo;s \u0026ldquo;DevTalks\u0026rdquo; stream - that was fun. The recording is in German, but I talked about Azure Marketplace and how to publish apps in there: https://devtalks.de/ep-67-max-melcher/. If you want to invite me to further streams or talks, please reach out. I enjoy talking about Azure - one of the reasons we started to stream about it on Twitch.\nTwitch Frank and I started to stream about Azure and Azure Architecture on Twitch - #AzureTechTalk - typically we are live every second Monday. We use the live stream to discuss, build things and share ideas. Having fun with Azure is the main idea, especially if things do not work out as expected. Azure Static Web Apps, Azure Monitoring, Azure Kubernetes, Dapr - the topics are quite extensive. More details are available on our website: https://azuretechtalk.net/\nClosing That was a lengthy post, so much happened. Thanks to all people supporting me, wonderful teammates, colleagues, and managers - I am very thankful for all of this, I appreciate it and having lots of fun.\nThanks,\nMax\nPhoto by Annie Spratt on Unsplash\n",
    "tags": ["Learning","Microsoft","MicrosoftLife"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2021/10/three-years-at-microsoft-things-i-learned/images/annie-spratt-10b8Lvvc-4g-unsplash.png"
  },
  {
    "url": "https://melcher.dev/2021/10/migrating-to-azure-static-web-apps/",
    "title": "Migrating to Azure Static Web Apps",
    "date_published": "2021-10-07T15:36:22Z",
    "description": "My blog has a bit of legacy: From Wordpress to Hugo. From Azure App Service to Azure Static Websites on Azure Blob. And in this post, I tell you about my migration to Azure Static Web Apps.\nAzure Static Web Apps Azure Static Web Apps are generally available since May 2021 - and I waited way to long to migrate this blog to it, they are amazing! CDN, CI/CD, Custom Domain with SSL - pretty much everything that I puzzled together in previous iterations - \u0026ldquo;AS A SERVICE\u0026rdquo; for free (or little money).",
    "content": "My blog has a bit of legacy: From Wordpress to Hugo. From Azure App Service to Azure Static Websites on Azure Blob. And in this post, I tell you about my migration to Azure Static Web Apps.\nAzure Static Web Apps Azure Static Web Apps are generally available since May 2021 - and I waited way to long to migrate this blog to it, they are amazing! CDN, CI/CD, Custom Domain with SSL - pretty much everything that I puzzled together in previous iterations - \u0026ldquo;AS A SERVICE\u0026rdquo; for free (or little money).\nOld Setup The old setup used Azure DevOps for the hosting of my markdown files. Once I committed new files the following tasks were executed in an Azure DevOps pipeline:\nLatest version of hugo was installed Hugo compiled the website and pushed it to Azure Storage. Azure CDN was purged Azure Cognitive search indexer ran The old hosting environment was working well, actually no real need to change. Except, I wanted to learn more about move from Azure DevOps to GitHub, GitHub actions, and simplify the Azure CDN, Azure Storage and bit of history here and there.\nMoving to GitHub Firstly, I thought moving to GitHub will be easy. Create the git repository, adding a git remote, push and done. Then I learned that I have files bigger than 300MB in my repo and I had to remove it.\nFor this, the recommended way is to use git-filter-repo. Setting this up on Windows simply did not work - Debian in WSL2 to the rescue, it took minutes. Later on I nuked the entire repository, well, I learned a bit here and there.\nGitHub Action \u0026amp; Azure Static Web App Then I create the Azure Static Web App and connected it to the GitHub repository. The GitHub Action workflow ran right afterwards, it detected my Hugo blog, compiled and published it. Colour me impressed!\nBut, for my custom-built blog search, I need to provide a JSON file to Azure Cognitive Search, in my case I upload it to Azure Blob Storage.\nThe final tasks are now:\nactions/checkout@v2 (get the code) peaceiris/actions-hugo@v2 (compile hugo) Azure/static-web-apps-deploy@v1 (deploy to Azure Static Web Apps) bacongobbler/azure-blob-storage-upload@v1.2.0 (upload the feed.json to Azure Storage) satak/webrequest-action@master (start the Azure Cognitive Search indexer on that json file) And the workflow is:\nname: Azure Static Web Apps CI/CD on: push: branches: - main pull_request: types: [opened, synchronize, reopened, closed] branches: - main jobs: build_and_deploy_job: if: github.event_name == \u0026#39;push\u0026#39; || (github.event_name == \u0026#39;pull_request\u0026#39; \u0026amp;\u0026amp; github.event.action != \u0026#39;closed\u0026#39;) runs-on: ubuntu-latest name: Build and Deploy Job steps: - uses: actions/checkout@v2 with: submodules: true - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \u0026#39;latest\u0026#39; - name: Build run: hugo --enableGitInfo --i18n-warnings --verbose --cleanDestinationDir --destination public - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_RED_SAND_087339603 }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) action: \u0026#34;upload\u0026#34; ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: \u0026#34;/public\u0026#34; # App source code path api_location: \u0026#34;\u0026#34; # Api source code path - optional output_location: \u0026#34;public\u0026#34; # Built app content directory - optional skip_app_build: true ###### End of Repository/Build Configurations ###### - uses: bacongobbler/azure-blob-storage-upload@v1.2.0 with: source_dir: public/feed container_name: feed connection_string: ${{ secrets.storage }} extra_args: \u0026#39;--pattern *.json\u0026#39; sync: false - name: Start Azure Search Indexer uses: satak/webrequest-action@master with: url: https://melcher.search.windows.net/indexers/azureblob-indexer/run?api-version=2017-11-11 method: POST headers: \u0026#39;{\u0026#34;api-key\u0026#34;: \u0026#34;${{ secrets.azuresearchkey }}\u0026#34;}\u0026#39; close_pull_request_job: if: github.event_name == \u0026#39;pull_request\u0026#39; \u0026amp;\u0026amp; github.event.action == \u0026#39;closed\u0026#39; runs-on: ubuntu-latest name: Close Pull Request Job steps: - name: Close Pull Request id: closepullrequest uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_RED_SAND_087339603 }} action: \u0026#34;close\u0026#34; The entire run takes roughly 3 minutes for my blog with roughly 250mb of stuff in it.\nGIT LFS In Azure DevOps, maybe because of a 350MB file that I checked in, I used git lfs. Somehow I managed to add all my PNG pictures to that storage. In the GitHub Action [actions/checkout@v2] you have to explicitly to checkout LFS files. I tried to figure out why the PNG were not shown, but the JPG files were. I then reached out to Anthony Chu on Twitter - and he figured this out in seconds, you need to add a lfs: true in the checkout action. Very much appreciated!\n- uses: actions/checkout@v2 with: submodules: true lfs: true Summary I learned a ton of things and as crazy as it might sound - I had fun migrating it. Getting rid of old components and simplifying things is a nice benefit, too.\nKudos to the Azure Static Web Apps service team - you won me as fan.\nSend stickers, please.\n",
    "tags": ["Azure Static Web Apps","GitHub Actions","Azure Cognitive Search"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2021/10/migrating-to-azure-static-web-apps/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2021/08/release-annotations-for-azure-applications-insights-on-linux/",
    "title": "Release Annotations for Azure Applications Insights on linux",
    "date_published": "2021-08-04T13:11:09+02:00",
    "description": "I use Release Annotations to tell Azure Application Insights about notable changes. In exchange Application Insights can then tell me, that e.g. my latest deployment is slower than the previous one. I got a lot of value out of this so i wanted to have that for a current deployment. My build agent is Ubuntu-based - and the provided examples in the documentation use PowerShell scripts to annotate the deployment. I could obviously install powershell on my build agent, but it is just a single REST call so another dependency on the build agent was too much for me.",
    "content": "I use Release Annotations to tell Azure Application Insights about notable changes. In exchange Application Insights can then tell me, that e.g. my latest deployment is slower than the previous one. I got a lot of value out of this so i wanted to have that for a current deployment. My build agent is Ubuntu-based - and the provided examples in the documentation use PowerShell scripts to annotate the deployment. I could obviously install powershell on my build agent, but it is just a single REST call so another dependency on the build agent was too much for me.\nThe following snippet shows how to use a BASH runtime to annotate a deployment:\nID=$(uuidgen) ANNOTATIONNAME=$BUILD_BUILDNUMBER EVENTTIME=$(printf \u0026#39;%(%Y-%m-%dT%H:%M:%S)T\u0026#39;) CATEGORY=\u0026#34;Deployment\u0026#34; RESOURCE=\u0026#34;/subscriptions/[subscriptionid]/resourceGroups/[resourcegroup]/providers/microsoft.insights/components/[appinsightname]\u0026#34; JSON_STRING=$( jq -n -c \\ --arg id \u0026#34;$ID\u0026#34; \\ --arg an \u0026#34;$ANNOTATIONNAME\u0026#34; \\ --arg et \u0026#34;$EVENTTIME\u0026#34; \\ --arg cg \u0026#34;$CATEGORY\u0026#34; \\ \u0026#39;{Id: $id, AnnotationName: $an, EventTime: $et, Category: $cg}\u0026#39; ) JSON_STRING=$(echo $JSON_STRING | tr \u0026#39;\u0026#34;\u0026#39; \u0026#34;\u0026#39;\u0026#34;) echo $JSON_STRING az rest --method put --uri \u0026#34;$RESOURCE/Annotations?api-version=2015-05-01\u0026#34; --body \u0026#34;$JSON_STRING\u0026#34; There are more parameters that you can submit to Azure Application Insights, but I skipped them for now.\nJust drop in a Azure CLI task:\nScript Type: Shell\nScript Location: Inline SCript\nInline script: see above\nScript Arguments: can stay empty.\n",
    "tags": ["Application Insights"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2021/08/release-annotations-for-azure-applications-insights-on-linux/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2021/05/github-enterprise-server-with-azure-ad-auth-git--mfa/",
    "title": "GitHub Enterprise Server with Azure AD Auth: git + MFA",
    "date_published": "2021-05-18T08:10:46Z",
    "description": "GitHub Enterprise Server with Azure Active Directory Authentication (GHEAADPROXY) With GitHub Enterprise Server Version (GHE) 3.0.6 as self-hosted VM, you can configure SAML authentication backed by Azure Active Directory. This protects the web interface, you get conditional access policies with Multi Factor Authentiction powered by Azure Active Directory. Sessions do expire after a configurable lifetime, then the user must re-authenticate. With the current out-of-the-box design, GHE does not require the same authentication on the git command line.",
    "content": "GitHub Enterprise Server with Azure Active Directory Authentication (GHEAADPROXY) With GitHub Enterprise Server Version (GHE) 3.0.6 as self-hosted VM, you can configure SAML authentication backed by Azure Active Directory. This protects the web interface, you get conditional access policies with Multi Factor Authentiction powered by Azure Active Directory. Sessions do expire after a configurable lifetime, then the user must re-authenticate. With the current out-of-the-box design, GHE does not require the same authentication on the git command line. If you clone a repository, pull or push a username and PAT token or ssh key is being accepted as authentication. There is no session or multi-factor enforcement.\nWith the proof of concept (PoC) I want to showcase in this blog post, it it is possible to put a proxy in front of GitHub Enterprise Server that enforces MFA (based on the configuration in Azure Active Directory) and that the session expires.\nHigh Level Architecture From left to right we have three components: Azure Application Gateway, Azure Kubernetes Service(AKS), and lastly GitHub Enterprise Server (GHE) installed in a single VM on Azure. The AKS hosts the authentication proxy container, based on a .NET 5 in Alpine linux (107MB).\nThe following architecture depicts the two authentication flows. When a user wants to browse to the web-frontend of GitHub Enterprise (GHE) server, the traffic will be filtered on Azure Application Gateway/ Web Application Firewall (WAF). Afterwards, the traffic will hit the proxy. If there is no AUTHORIZATION bearer header, then the proxy will send a HTTP 302 redirect to Azure Active Directory. The user must sign in and depending on the configuration provide the second factor. Then the request is sent back to the WAF, reaches the proxy and then will be sent unmodified to GHE. When a user wants to use the git client, things become more challenging. The client itself is pretty simple on an auth perspective, but provides several options to piggyback additional authorization headers to GHE. The challenge is that GHE does not accept multiple AUTHORIZATION headers, if you provide them it will simply reject the request with a HTTP 400. Additionally the client does not authenticate un-asked. The first request is always unauthenticated, then gets a HTTP 401 by the server, then authenticates with username/password or username/personal access token (PAT).\nIf the proxy receives an openid connect bearer token, it will validate it. Afterwards it will send the request to GHE without the additional header - multiple or unexpected headers will lead to HTTP 400.\nThe following picture shows the git pull experience without a valid bearer token: The git client does not follow HTTP 302 redirects, no additional authentication will happen.\nBut it is really simple to get a valid token - the following powershell gets one and puts it in the git config file. This config can be local or global. It will be submitted to the proxy, stripped from the request and the actual request will go to GHE: Script to get the token:\n$bearer = $(az account get-access-token --resource api://253600a6-46b5-425f-ab7e-d70df34c97ae --query accessToken) git config --global http.extraHeader \u0026#34;MFA: bearer $($bearer)\u0026#34;\nDeployment To deploy this, you need two Azure Active Directory Applications. One Enterprise Application that handles the SAML authentication. The second one is for the openid connect authentication. I tried to combine it, but then only SAML works.\nI started with the SAML authentication for the GHE server - for this you need to register a new Enterprise Application. Only there you can configure the SAML URLs and get the certificate for GHE. The AAD documentation describes how to setup SAML with Azure Active Directory. Also this blog post helped me a lot setting up SAML: https://medium.com/@seifeddinemouelhi/setup-azure-active-directory-with-github-enterprise-server-dd734c5bf86\nThe URL https://ghe.francecentral.cloudapp.azure.com points to the frontend IP of the WAF.\nThe second AAD application is \u0026lsquo;only\u0026rsquo; an Application registration: It has the reply URL set to /signin-openidc and configured Access and ID tokens.\nThe proxy is using this application, therefore you need the application ID. It must be stored in the appsettings.json configuration or as a docker environment variable (AzureAd__ClientId). Additionally you need to expose an API, this is then needed to generate the access token via azure cli as shown above. The \u0026ndash;resource flag points to that API url. The client id 04b07795-8ddb-461a-bbee-02f9e1bf7b46 is the one of Azure CLI: Kubernetes Deployment I used the Azure Application Gateway Kubernetes Ingress to manage the WAF directly from the AKS. Additionally I wanted to have valid SSL certificates provided by LetsEncrypt. Once the core infrastructure was running, I deployed the container, a service and ingress as shown in the deploy.yaml.\nSome settings are hardcoded in the appsettings.json - they can be overwritten during the kubernetes deployment.\nOpenSource Components: YARP: Yet Another Reverse Proxy (https://github.com/microsoft/reverse-proxy) to proxy the request to GHE. Microsoft.Identity.Web to handle openid connect, JWT tokens. Source Code https://github.com/MaxMelcher/gheaadproxy/\nQuestions / Feedback You read so far? Wow - would be happy to get in touch. This is an exotic PoC, let me know if you have questions.\nLicense and Disclaimer It is a proof of concept - see license.\n",
    "tags": ["OpenSource","GitHub","MFA","AAD","Proxy","WAF","AKS"],
    "categories": ["Azure","GitHub"],
    "feature": "https://melcher.dev/2021/05/github-enterprise-server-with-azure-ad-auth-git--mfa/images/highlevel.png"
  },
  {
    "url": "https://melcher.dev/2020/10/vscode-remote-ssh-with-azure/",
    "title": "VSCode Remote-SSH with Azure",
    "date_published": "2020-10-23T23:59:47+02:00",
    "description": "VSCode Remote-SSH with Azure This article shows you how you can connect VSCode on your local computer to a linux VM on Azure.\n",
    "content": "VSCode Remote-SSH with Azure This article shows you how you can connect VSCode on your local computer to a linux VM on Azure.\nWith Visual Studio Code (VSCode) you can connect to a Linux VM (WSL, container or remote via SSH) and it will look and feel like it is running locally. It creates a tunnel to the remote machine / VM, connects the terminal, shows the folder and much more. It is so great that you typically cannot spot the difference.\nThe screenshot below is taken from a windows computer that is connected to a VM running on Azure. It shows the local file system of the remote machine, has syntax highlighting of the terraform code on the right, and shows the remote bash of the system. Even the extensions are running as if they would run locally.\nThe approach has several benefits compared to running VSCode locally.\nBandwidth If you develop and must download and upload huge files and need very good internet, then developing remotely in this full-featured development environment can be of great help. Azure VMs have great internet connection, uploading large files from there is very fast. If the target service is also an Azure service, then it is even faster. Pushing a docker image to Azure Container registry is done in seconds.\nPerformance Azure has 284 different VM sizes (more are being added all the times!), combinations of CPU and RAM. You need a faster CPU? More memory? More IOPS? A few clicks in the portal (or a script) and you have the developer machine that gets the job done.\nStability \u0026amp; Runtime Even with a slow and unreliable conference Wi-Fi there is a good chance that an SSH connection can be established. Same applies to traveling. If you must run a script that runs for several minutes or hours, you do not want to depend on your local connection. With the remote-ssh connection you have the best of both worlds, a great local development experience and the stability of the remote runtime.\nTipps \u0026amp; Tricks Do you use this setup already? Do you have other requirements to use such a setup? Then share them in the comments!\nHope it helps,\nMax\n",
    "tags": ["VSCode","Remote-SSH","Performance"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/10/vscode-remote-ssh-with-azure/images/Remote-SSH.png"
  },
  {
    "url": "https://melcher.dev/2020/10/load-balancing-on-azure-an-overview/",
    "title": "Load Balancing on Azure - An Overview",
    "date_published": "2020-10-21T17:57:26+02:00",
    "description": "Load Balancing on Azure - An Overview There are multiple options to do load balancing on Azure, this article will give you an overview and list the different scenarios when to use what.\n",
    "content": "Load Balancing on Azure - An Overview There are multiple options to do load balancing on Azure, this article will give you an overview and list the different scenarios when to use what.\n'Load Balancing' is here the distribution (e.g. web requests) based on defined criteria (e.g. user location, resource utilization or round robin) to achieve a goal, e.g. avoid overloading or in case of a disaster to increase availability by automatically failing over to a redundant component.\nPlease also look at the decision tree for when to use what.\nWe will start with the regional services followed by the global services.\nRegional Load Balancing Services A regional service is a service that is running in one region. If the region has an outage, then the service might stop working. If the target region has Availability Zones, you can deploy the regional service zone-redundant to get higher availability – but if the entire zone 'explodes' then you will be affected by this.\nPlease note: regional service does not mean that you must route the traffic to the same region!\nAzure Load Balancer (ALB) Azure Load Balancer is certainly one of the core services of Azure – they are available since 2014 and many iterations have been added since then. Back then only one SKU was available, now we have Standard and Basic Load Balancers available, with different capabilities, scale, SLA, and pricing.\nThe Azure Load Balancer is a Layer 4 network service (see OSI model), so it transports the traffic to the target service. It is working for all traffic (TCP, UDP) and its recommended for non-HTTP(S) traffic. It is obviously used once you deploy a VM in multiple Availability Zones, or if you use Kubernetes.\nAdditionally, there is an interesting feature in preview to make the Azure Load Balancer a cross-regional service. Follow the documentation or Azure Update for further information.\nDocs\nPricing\nSLA\nAzure Application Gateway (AAG) Azure Application Gateway is a Layer 7 network service (see OSI model) for HTTP(s)-based applications – compared to the previous mentioned Azure Load Balance the AAG is closer to the user, can therefore inspect the traffic and even offload the SSL termination. It can run with only private IPs, this is sometimes the decision point to use the service compared to the global services described later. A Web Application Firewall can also be added and configured to get protection against common attacks (e.g. SQL injection, cross site scripting).\nDocs\nPricing\nSLA\nGlobal Load Balancing Services Next, we look at the two global Azure Load Balancing services, Azure Traffic Manager and Azure Front Door – both require that the target service be accessible via the internet, in other words, must have a public IP.\nAzure Traffic Manager (ATM) Azure Traffic Manager is a DNS-based load balancer – you request the DNS name, it returns the best IP to connect to. This is sometimes misunderstood, ATM does not act like a proxy and tunnels the traffic to the target, it tells the client to what target it can connect – based on load, geographic proximity, or health of the endpoint. The target must be an internet-facing service.\nDocs\nPricing\nSLA\nAzure Front Door (AFD) Azure Front Door is very similar to Azure Traffic Manager but adds a ton of features for HTTP-based, internet-facing applications. It can do SSL termination for noticeable faster response times, can add a Web Application Firewall, supports HTTP/2, CDN – if you want to run a public website in multiple regions, then this service provides great flexibility.\nDocs\nPricing\nSLA\nHope it helps,\nMax\n",
    "tags": ["Load Balancer","Application Gateway","Application Gateway","Traffic Manager"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/10/load-balancing-on-azure-an-overview/images/LoadBalancer.png"
  },
  {
    "url": "https://melcher.dev/2020/10/running-containers-on-azure-all-options-explained/",
    "title": "Running Containers on Azure – All Options Explained",
    "date_published": "2020-10-19T17:12:13+02:00",
    "description": "If you want to run a container, most of the customers I talk to, immediately think about Kubernetes – this is obviously a correct answer, but there are plenty of other options available on Azure. In this post I am providing a quick overview of all the options. Firstly, I start with the standalone container options followed by the container orchestration options.\n",
    "content": "If you want to run a container, most of the customers I talk to, immediately think about Kubernetes – this is obviously a correct answer, but there are plenty of other options available on Azure. In this post I am providing a quick overview of all the options. Firstly, I start with the standalone container options followed by the container orchestration options.\nStandalone Container In this section I am going to explain the standalone container runtimes – while some of them could technically run multiple containers, the focus are mostly single instances of them.\nVirtual Machine (VM) Virtual Machines provide the greatest flexibility to run docker container. The 284 different (more are being added all the times!) combinations of CPU and RAM gives you the perfect platform to run one or more containers. On both windows and linux VMs you can install the docker runtime and you are ready – but – it’s a VM that you have to maintain and configure, I would only consider this work Dev/Test workloads simply because the operational efforts are too high.\nAzure Container Instance (ACI) Azure Container Instances are the exact opposite of the VM-based docker runtime: you provide the container; Azure will run it. If its one instance or a thousand does not really matter. The price depends on the number of vCPU and GBs of memory allocated per second – a serverless container runtime. This is ideal if you need to burst and simply do not know when the load is coming – prediction of the cost is sometimes a challenge if you can only work with estimates. You can even combine ACI with Azure Kubernetes Service to mix and match the workloads.\nAzure App Service Azure Web App for Containers – this is my personal hidden champion - you provide a container; App Service will run it. Ideal for web-based workloads because App Service is a web hosting platform. Deployment, scaling, and monitoring is already existing and can be utilized right out of the box.\nAzure Batch Batch compute and containers are a great combination – if the workload can be scaled across many batch jobs, you can put it in a container and scale it with Azure Batch. You can also leverage low priority VMs, great to reduce the cost.\nContainer Orchestration Now to the more complex and sophisticated options to run a container – container orchestrators. Like a symphony, you need to coordinate multiple containers on multiple hosts to ‘play’ together - in the following I explain the options.\nAzure Kubernetes Service (AKS) The fully fledged, fully managed Kubernetes service on Azure – most of the dev teams I talk to appreciate that they can just consume the Kubernetes as a platform, but running and operating them is simply not something they want to do. So, with AKS, this is taken care of, you select the version of Kubernetes and a few minutes later you have your cluster – and then you can run your container symphony on it.\nAzure Service Fabric Azure Service Fabric is a distributed system platform and the core of Azure. It is more of the exotic ways to run a container, but it can run, scale and operate them.\nSummary If this would have been a quiz, could you name them all before reading this post? The many options make it sometimes a little harder to choose, but having flexibility and choice is always great if you have a particular problem.\nHope it helps,\nMax\n",
    "tags": ["Azure Kubernetes Service","AKS","ACI","App Service","WebApps","Functions","Container"],
    "categories": ["Container"],
    "feature": "https://melcher.dev/2020/10/running-containers-on-azure-all-options-explained/images/ContainersOnAzure.png"
  },
  {
    "url": "https://melcher.dev/2020/10/staying-up-to-date-with-azure/",
    "title": "Staying up to date with Azure",
    "date_published": "2020-10-15T22:49:52+02:00",
    "description": "' Staying current with the always evolving Azure platform is not an easy task. Here are some tricks and websites to make this a little bit easier:\n",
    "content": "' Staying current with the always evolving Azure platform is not an easy task. Here are some tricks and websites to make this a little bit easier:\nAzure Learning Paths \u0026amp; Certifications https://docs.microsoft.com/en-us/learn/azure/ The learning paths are super helpful to discover and master Azure topics - they are free but still very high quality. Once you have done some learning paths, I highly recommend getting Azure certifications - they are great in the CV and help you speak the \u0026lsquo;Azure language\u0026rsquo;. Azure Friday Is it Friday again? The time of the week to stay current with short information presented from Scott Hanselman in \u0026lsquo;Azure Friday\u0026rsquo;. In these easy to digest 10-15 min videos Scott and his guests will present the best and latest in azure technologies and beyond.\nhttps://azure.microsoft.com/en-us/resources/videos/azure-friday/\nPodcasts Are you learning with your ears? Travelling a lot? Then maybe subscribe to an Azure podcast to stay current - the mentioned Azure Friday is available, too: https://channel9.msdn.com/Shows/Azure-Friday\nOr \u0026lsquo;The Azure Podcast\u0026rsquo; going back till 2013 with lots of Azure engineers sharing their expertise: http://azpodcast.azurewebsites.net/ Azure Community: Events \u0026amp; Social Media A while back I would have recommended to attend local community events, user groups or Azure Saturday\u0026rsquo;s - most of them are now fully virtual and its always great to connect with like-minded people: https://azure.microsoft.com/en-us/community/events/\nAdditionally, follow Azure engineers, PMs, advocates on Azure - the folks are very easy to reach there: https://twitter.com/azure Azure Updates https://azure.microsoft.com/en-us/updates/\nLast but not least, Azure updates - the central place for all new and updated Azure things. If you want to have the latest news, features and sometimes even retirements, watch this page!\nHow about you? You have other tricks? Things that work for you?\nShare them in the comments!\nHope it helps,\nMax\n",
    "tags": ["Learning","Certification","Podcast","Azure Friday"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/10/staying-up-to-date-with-azure/images/StayingUpToDateWithAzure2.png"
  },
  {
    "url": "https://melcher.dev/2020/10/enterprise-file-shares-on-azure/",
    "title": "Enterprise File Shares on Azure",
    "date_published": "2020-10-13T14:55:57+02:00",
    "description": "Enterprise File Shares on Azure Please see official documentation - this blog post might be outdated!: Azure Files and Azure NetApp Files comparison\nMy customer has a large on-premises file share environment based on Windows Server File Shares with petabytes of data. The maintenance and operations of those servers sounds like a simple task – but having this in a large and complex infrastructure can be challenging. If the file shares are run by multiple teams, then the overall SLA could be heavily impacted, and the run cost are very high.",
    "content": "Enterprise File Shares on Azure Please see official documentation - this blog post might be outdated!: Azure Files and Azure NetApp Files comparison\nMy customer has a large on-premises file share environment based on Windows Server File Shares with petabytes of data. The maintenance and operations of those servers sounds like a simple task – but having this in a large and complex infrastructure can be challenging. If the file shares are run by multiple teams, then the overall SLA could be heavily impacted, and the run cost are very high.\nAzure has viable alternatives to host files shares – in this post, I want to compare the different services – we will compare Azure Files (AZF) and Azure NetApp Files (ANF) to make the right choice when we migrate to Azure. In this post, I am comparing only the SSD tiers, AZF has additional HDD tiers.\nI discussed the scenario with Sebastian Brack – thanks a lot for providing the tables below and providing lots of insights!\nFeatures Feature Azure NetApp Files Azure Files Premium Native Azure Service, fully managed Yes Yes Protocol Compatibility SMB 2.1/3.0/3.1.1, NFS 3/4.1 Multiprocotol: SMB+NFSv3 FileREST, SMB 2.1/3.0, NFS 4.1 (Preview) Min Size 4 TiB 100 GiB Max Volume Size 100 TiB 100 TiB Max File Size 16 TiB 4 TiB Service Levels / Tiering Standard 0.124354€/GiBPremium 0.248091€/GiBUltra 0.331198€/GiB Premium 0.162€/GiB+ 0.1375€/GiB Snapshots.Additionally, there are Transaction Optimized, Hot and Cool tiers available. Shape Capacity/Performance independently Yes (Manual-QoS) No On-Prem Access (Hybrid) Yes (Express Route, VPN) Yes (ExpressRoute, VPN, Internet)Private Link ready (pricing) for VPN/ExpressRoute (Private Peering): €0.009 per GB In-/Outbound Data ProcessingOr ExpressRoute (Microsoft Peering). Regional Availability 22+ regions 32+ regions Regional Redundancy LRS equivalent (99.99% SLA) LRS (99.9% SLA)\nZRS (Asia Southeast, Australia East, Europe North, Europe West, US East, US East 2, US West 2)(99.9% SLA) Geo Redundancy Yes, Cross-Region Replication (Preview) No Storage at-rest encryption Yes (AES 256) Yes (AES 256) Backup Incremental Snapshots (4k block), Cross-Region Replication, 3rd party Incremental Snapshots (file), Azure Backup Integration Snapshot Integration into SMB Client Yes (Previous Versions + ~snapshot) Yes (Previous Versions) Snapshot Integration into NFS Client Yes (.snapshot) No Snapshot Restore via Portal Restore to new volume Yes Integrated Snapshot Scheduling Yes (Snapshot Policies) No Identity-based authentication and authorization Azure Active Directory Domain Services (Azure AD DS),On-premises Active Directory Domain Services (AD DS) Azure Active Directory (Azure AD)Azure Active Directory Domain Services (Azure AD DS)\nOn-premises Active Directory Domain Services (AD DS) via AD Connect (see full documentation) Note please note: the prices are taken from Azure West Europe region for comparison – they may vary depending on the service/region.\nThe features table looks quite similar – but the details make this more interesting:\nProtocol compatibility is a strength of ANF – more protocols and SMB combined with NFSv3: Some applications require both protocols, especially in an integration scenario. As of writing this, NFS is in Preview for Azure Files.\nAs of now, you must start with at least 4 TiB for ANF, for AZF it is only 100 GiB – if you only have a small scenario, then AZF scores here.\nHybrid connectivity is another important point for my customer – ANF is fully private with no way to expose it to the internet, AZF is accessible also via internet, privately via Private Link (additional cost!) or via ExpressRoute Microsoft Peering - Internet access can be disabled, too.\nPerformance, Throughput Feature Azure NetApp Files Azure Files Premium Transaction \u0026amp; data transfer prices Included Included Throughput (single volume/share) Ultra: 128MiB/s per provisioned TiB (auto)Premium: 64 MiB/s per provisioned TiB (auto)Standard: 16MiB/s per provisioned TiB (auto) Egress: 60MiB/s + 61.44 MiB/s per provisioned TiB Ingress: 40MiB/s + 40.96 MiB/s per provisioned TiB Shape capacity \u0026amp; performance independently Yes, Manual-QoS (preview) No IOPS (single volume/share) Not limited explicitly, dependent on throughput \u0026amp; IO Size (benchmark ~460.000)Example:1 IOPS @ 64kb per provisioned GiB Premium16 IOPS @ 4k per provisioned GiB Premium Baseline: 1 IOPS per provisioned GiB up to 100.000Burst: 3 IOPS per provisioned GiB up to 100.000 File level throughput limit Unlimited (volume throughput limit) Egress 300MiB/sIngress 200MiB/s File level IOPS limit Unlimited (volume throughput limit) 5000 IOPS Volume/Share Size adjustable Yes Yes, cooldown for decrease @ 24h Service Level changeable Yes, cooldown for decrease @ 7 days (Preview) No NFS nconnect Yes (NFSv3) No SMB Multichannel Yes No Note Please note: Features and performance may have changed since publishing this post – please verify! For ANF there is a \u0026quot;What's new page\u0026quot;, for AZF you can check Azure Update.\nNow let us look at the service level. ANF is more flexible, file shares can be divided in 3 performance tiers, AZF has two tiers. If you provision large, 100 TB shares with ANF, you get 1600 MiB/s throughput with the standard tier – even for single files (file level throughput depending on volume size or manual quota). The flexibility on the ANF side is a big benefit.\nChanging the service level on ANF can be done – please be aware of the cooldown period. Doing the same for AZF is possible, but its not as easy as with ANF.\nThe last two rows are very important regarding performance – both nconnect and multichannel allow to have multiple connections to the same to ANF drastically improving the bandwidth. Great stuff.\nHybrid Connectivity \u0026amp; Encryption Feature Azure NetApp Files Azure Files Premium SMB signing Yes SMB in-flight encryption Yes Yes NFS in-flight encryption Yes No Active Directory Integration Yes Yes Azure Active Directory Independent Yes No (AD-Connect required) AD Kerberos Authentication Yes (AES 256, AES128, DES) Yes (AES 256) AD LDAP Signing Yes Comparing the identity aspects, then both integrate into a on-premises Active Directory. AZF requires to have the identities synced to Azure Active Directory (AAD), ANF directly integrates into Active Directory.\nEncryption-wise, AZF supports SMB encryption – ANF does not have this yet.\nMany things to consider - if you have questions, please don\u0026rsquo;t hesitate to ask.\nHope it helps,\nMax\n",
    "tags": ["Azure Files","Azure NetApp Files","Enterprise File Shares"],
    "categories": ["Azure","ANF"],
    "feature": "https://melcher.dev/2020/10/enterprise-file-shares-on-azure/images/featured.jpg"
  },
  {
    "url": "https://melcher.dev/2020/08/azure-resource-graph-getting-node-sizes-and-node-count-of-all-kubernetes-clusters/",
    "title": "Azure Resource Graph: Getting node sizes and node count of all kubernetes clusters",
    "date_published": "2020-08-13T16:04:21+02:00",
    "description": "Today I wanted to quickly see how many Azure clusters there are in an azure environment, their node size and count.\n",
    "content": "Today I wanted to quickly see how many Azure clusters there are in an azure environment, their node size and count.\nAzure Resource Graph Azure Resource Graph is a service in Azure that is designed to extend Azure Resource Management by providing efficient and performant resource exploration with the ability to query at scale across a given set of subscriptions so that you can effectively govern your environment. -- https://docs.microsoft.com/en-us/azure/governance/resource-graph/overview If you are not familiar with Azure Resource Graph - the documentation is great. It took a couple of attempts and a little bit of fiddling, but with the following query gives you all the clusters you have access to and their corresponding size:\nResources | where type == \u0026#34;microsoft.containerservice/managedclusters\u0026#34; | extend properties.agentPoolProfiles | project subscriptionId, name, pool = (properties.agentPoolProfiles) | mv-expand pool | project subscription = subscriptionId, cluster = name, size = pool.vmSize, count = pool.[\u0026#39;count\u0026#39;] and the result is the following table: Can be directly executed with the following link.\nThe \u0026rsquo;escaping\u0026rsquo; of the .count took me a while to figure out.\nHope it helps,\nMax\n",
    "tags": ["Resource Graph","Kubernetes","AKS"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/08/azure-resource-graph-getting-node-sizes-and-node-count-of-all-kubernetes-clusters/images/AzureResourceGraphKubernetesSize.png"
  },
  {
    "url": "https://melcher.dev/2020/08/custom-rbac-on-azure-privatedns-a-record/",
    "title": "Custom RBAC on Azure PrivateDns A-Record",
    "date_published": "2020-08-03T16:21:06+02:00",
    "description": "In this post I want to show how to delegate the management of A-records in an Azure Private DNS zone to a specific user.\n",
    "content": "In this post I want to show how to delegate the management of A-records in an Azure Private DNS zone to a specific user.\nPrivate DNS zones become super relevant when you are in a hybrid environment and want to use Private Endpoints. If you are in this situation, I can highly recommend you the great overview of my colleague Daniel Mauser\u0026rsquo;s \u0026ldquo;Private Endpoint DNS Integration Scenarios - it\u0026rsquo;s the most complete documentation out there, a must read if you want to resolve Azure resources from onPrem.\nContext In our scenario we use a hub \u0026amp; spoke architecture and users get a spoke with contributor permissions. So they put their apps there and configure them to their needs. But - DNS and all network connectivity will be managed centrally in the hub - where the user has no permissions. The Private DNS zone is in the hub, e.g. for blob storage this would be privatelink.blob.core.windows.net. So once they configured the private endpoint connection for their Azure service, they need to put the A record in the central zone to make it resolvable from onPrem, e.g. mamelchtest.blob.core.windows.net pointing to 10.16.3.5 - the private endpoint IP of the storage account. The storage account can then be accessed via VPN or ExpressRoute - if the DNS resolution onPrem can resolve the resources on Azure (again, see Private Endpoint DNS Integration Scenarios).\nImplementation Luckily, the Private DNS zone is granular so that the individual records can have their own role-based access controls (RBAC): So after creating the A-record, we needed to grant permissions to the user and hand-over the management of the record and basically the responsibility of maintaining it. If you would need to manage all records centrally, then this would simply not scale - still, we need to ensure that they do not delete records to keep everything in sync.\nRBAC So we created a custom role with the following permissions:\n\u0026#34;permissions\u0026#34;: [ { \u0026#34;actions\u0026#34;: [ \u0026#34;Microsoft.Network/privateDnsZones/read\u0026#34;, \u0026#34;Microsoft.Network/privateDnsZones/write\u0026#34;, \u0026#34;Microsoft.Network/privateDnsZones/A/read\u0026#34;, \u0026#34;Microsoft.Network/privateDnsZones/A/write\u0026#34; ], \u0026#34;notActions\u0026#34;: [ \u0026#34;Microsoft.Network/privateDnsZones/A/delete\u0026#34; ], \u0026#34;dataActions\u0026#34;: [], \u0026#34;notDataActions\u0026#34;: [] } ] Dont forget to give the user read access to Private DNS zone so they can see that in the hub.\nAt first we tried it without \u0026ldquo;Microsoft.Network/privateDnsZones/read\u0026rdquo;, \u0026ldquo;Microsoft.Network/privateDnsZones/write\u0026rdquo; - but then the update of the record did not work. As this does not mean that user can create new records or delete existing ones this is an acceptable solution.\nHope it helps,\nMax\n",
    "tags": ["PrivateDNS"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/08/custom-rbac-on-azure-privatedns-a-record/images/privatednszone_a_record.png"
  },
  {
    "url": "https://melcher.dev/2020/07/azure-metadata-service-or-i-lost-my-vm-where-is-it/",
    "title": "Azure Metadata Service - or: I lost my VM, where is it?",
    "date_published": "2020-07-17T19:05:29+02:00",
    "description": "Ever lost track in what subscription your VM on Azure runs? Too many RDP profiles or SSH sessions and now you want to know where the VM resides or how it is configured? This short post tells you how to get this metadata from inside a VM.\n",
    "content": "Ever lost track in what subscription your VM on Azure runs? Too many RDP profiles or SSH sessions and now you want to know where the VM resides or how it is configured? This short post tells you how to get this metadata from inside a VM.\nAzure Instance Metadata Service The Azure Instance Metadata Service is a powerful, but not really well known service that can be really helpful. I just got access to a linux VM running on Azure and wanted to know how its configured - but my contact person was not available. Then I recalled that Azure has a metadata service that you can query from inside of the VM to get the details. This inspired me to write this post.\nAzure Instance Metadata Service from docs.microsoft.com:\nThe Azure Instance Metadata Service (IMDS) provides information about currently running virtual machine instances and can be used to manage and configure your virtual machines. This information includes the SKU, storage, network configurations, and upcoming maintenance events. For a complete list of the data that is available, see metadata APIs. Instance Metadata Service is available for both the VM and virtual machine scale set Instances. It is only available for running VMs created/managed using Azure Resource Manager. -- https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service In short: you query the well known IP 169.254.169.254 and get metadata back.\nUbuntu / RHEL / Linux Lets use that on Ubuntu or RHEL or what ever linux flavor you run: curl -H Metadata:true --noproxy \u0026#34;*\u0026#34; \u0026#34;http://169.254.169.254/metadata/instance?api-version=2019-06-01\u0026#34; | json_pp\nResults in the following JSON: { \u0026#34;compute\u0026#34; : { \u0026#34;resourceGroupName\u0026#34; : \u0026#34;perf\u0026#34;, \u0026#34;plan\u0026#34; : { \u0026#34;publisher\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;product\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;name\u0026#34; : \u0026#34;\u0026#34; }, \u0026#34;placementGroupId\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;platformUpdateDomain\u0026#34; : \u0026#34;0\u0026#34;, \u0026#34;version\u0026#34; : \u0026#34;18.04.202007081\u0026#34;, \u0026#34;sku\u0026#34; : \u0026#34;18.04-LTS\u0026#34;, \u0026#34;provider\u0026#34; : \u0026#34;Microsoft.Compute\u0026#34;, \u0026#34;vmSize\u0026#34; : \u0026#34;Standard_E2ds_v4\u0026#34;, \u0026#34;platformFaultDomain\u0026#34; : \u0026#34;0\u0026#34;, \u0026#34;osType\u0026#34; : \u0026#34;Linux\u0026#34;, \u0026#34;tags\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;zone\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;location\u0026#34; : \u0026#34;northeurope\u0026#34;, \u0026#34;publisher\u0026#34; : \u0026#34;Canonical\u0026#34;, \u0026#34;offer\u0026#34; : \u0026#34;UbuntuServer\u0026#34;, \u0026#34;publicKeys\u0026#34; : [ { \u0026#34;path\u0026#34; : \u0026#34;/home/mamelch/.ssh/authorized_keys\u0026#34;, \u0026#34;keyData\u0026#34; : \u0026#34;[redacted]\u0026#34; } ], \u0026#34;customData\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;azEnvironment\u0026#34; : \u0026#34;AzurePublicCloud\u0026#34;, \u0026#34;storageProfile\u0026#34; : { \u0026#34;imageReference\u0026#34; : { \u0026#34;id\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;publisher\u0026#34; : \u0026#34;Canonical\u0026#34;, \u0026#34;offer\u0026#34; : \u0026#34;UbuntuServer\u0026#34;, \u0026#34;version\u0026#34; : \u0026#34;latest\u0026#34;, \u0026#34;sku\u0026#34; : \u0026#34;18.04-LTS\u0026#34; }, \u0026#34;osDisk\u0026#34; : { \u0026#34;caching\u0026#34; : \u0026#34;ReadWrite\u0026#34;, \u0026#34;vhd\u0026#34; : { \u0026#34;uri\u0026#34; : \u0026#34;\u0026#34; }, \u0026#34;encryptionSettings\u0026#34; : { \u0026#34;enabled\u0026#34; : \u0026#34;false\u0026#34; }, \u0026#34;name\u0026#34; : \u0026#34;perf2_OsDisk_1_b6e097a5c44d4f0f95fad2e98375139d\u0026#34;, \u0026#34;image\u0026#34; : { \u0026#34;uri\u0026#34; : \u0026#34;\u0026#34; }, \u0026#34;createOption\u0026#34; : \u0026#34;FromImage\u0026#34;, \u0026#34;diskSizeGB\u0026#34; : \u0026#34;30\u0026#34;, \u0026#34;writeAcceleratorEnabled\u0026#34; : \u0026#34;false\u0026#34;, \u0026#34;managedDisk\u0026#34; : { \u0026#34;storageAccountType\u0026#34; : \u0026#34;Premium_LRS\u0026#34;, \u0026#34;id\u0026#34; : \u0026#34;/subscriptions/36d3ff36-dc30-4224-9970-6c24b9043705/resourceGroups/PERF/providers/Microsoft.Compute/disks/perf2_OsDisk_1_b6e097a5c44d4f0f95fad2e98375139d\u0026#34; }, \u0026#34;osType\u0026#34; : \u0026#34;Linux\u0026#34; }, \u0026#34;dataDisks\u0026#34; : [] }, \u0026#34;vmId\u0026#34; : \u0026#34;283f76e9-d830-4ed0-b889-e2c580d5fac8\u0026#34;, \u0026#34;subscriptionId\u0026#34; : \u0026#34;36d3ff36-dc30-4224-9970-6c24b9043705\u0026#34;, \u0026#34;resourceId\u0026#34; : \u0026#34;/subscriptions/36d3ff36-dc30-4224-9970-6c24b9043705/resourceGroups/perf/providers/Microsoft.Compute/virtualMachines/perf2\u0026#34;, \u0026#34;vmScaleSetName\u0026#34; : \u0026#34;\u0026#34;, \u0026#34;name\u0026#34; : \u0026#34;perf2\u0026#34; }, \u0026#34;network\u0026#34; : { \u0026#34;interface\u0026#34; : [ { \u0026#34;ipv6\u0026#34; : { \u0026#34;ipAddress\u0026#34; : [] }, \u0026#34;macAddress\u0026#34; : \u0026#34;000D3A650A84\u0026#34;, \u0026#34;ipv4\u0026#34; : { \u0026#34;subnet\u0026#34; : [ { \u0026#34;prefix\u0026#34; : \u0026#34;24\u0026#34;, \u0026#34;address\u0026#34; : \u0026#34;172.16.4.0\u0026#34; } ], \u0026#34;ipAddress\u0026#34; : [ { \u0026#34;privateIpAddress\u0026#34; : \u0026#34;172.16.4.4\u0026#34;, \u0026#34;publicIpAddress\u0026#34; : \u0026#34;[redacted]\u0026#34; } ] } } ] } }\nThats a lot and super helpful. Subscription Id, Location, Resource Group, Update/Fault Domain - even the disk setup is presented - very cool!\nTo just get the subscription id you can use this query: curl -H Metadata:true --noproxy \u0026#34;*\u0026#34; \u0026#34;http://169.254.169.254/metadata/instance/compute/subscriptionId?api-version=2019-06-01\u0026amp;format=text\u0026#34;\nWindows and for Windows in PowerShell you can use the following one-liner:\nInvoke-RestMethod -Headers @{\u0026#34;Metadata\u0026#34;=\u0026#34;true\u0026#34;} -Method GET -Uri \u0026#34;http://169.254.169.254/metadata/instance/compute/subscriptionId/?api-version=2019-06-01\u0026amp;format=text\u0026#34; Cool, right?\n",
    "tags": ["metadata","TIL"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2020/07/azure-metadata-service-or-i-lost-my-vm-where-is-it/images/metadata_ubuntu.png"
  },
  {
    "url": "https://melcher.dev/2020/07/gold-club-circle-of-excellence-2020-award/",
    "title": "Gold Club Circle of Excellence 2020 Award",
    "date_published": "2020-07-06T10:57:46+02:00",
    "description": "I am beyond grateful for receiving a Gold Club Circle of Excellence 2020 Award for my work and achievements of the past fiscal year.\n",
    "content": "I am beyond grateful for receiving a Gold Club Circle of Excellence 2020 Award for my work and achievements of the past fiscal year.\nThe distinguished Gold Club Award recognizes the extraordinary performance of individuals who transform and contribute to the overall success and growth of Microsoft. Recipients demonstrated significant impact to business results through growth mindset, transformational deals as One Microsoft, Customer \u0026amp; Partner obsession, making a difference to change the world and acting in the spirit of One Microsoft.\nThank you Carolin Petzold for the nomination and the empowerment in the past year, this means a lot to me!\nThanks to all who supported me, without you, this would not be possible.\nI love my job, I love working with all of you, and I’m looking forward to more in the next year - thanks #Microsoft!\n",
    "tags": ["Award","Azure","GoldClub","MicrosoftLife"],
    "categories": ["Microsoft"],
    "feature": "https://melcher.dev/2020/07/gold-club-circle-of-excellence-2020-award/images/goldclub.png"
  },
  {
    "url": "https://melcher.dev/2020/06/upgrading-my-home-office/",
    "title": "Upgrading my Home Office",
    "date_published": "2020-06-08T20:44:59+02:00",
    "description": "Given the COVID-19 situation and the flexibility I have working for Microsoft, I decided to invest a little bit in my home office and upgrade a few things here and there - I spent more than 8 hours in my home office every day, so every penny spent is a good investment, right?\n",
    "content": "Given the COVID-19 situation and the flexibility I have working for Microsoft, I decided to invest a little bit in my home office and upgrade a few things here and there - I spent more than 8 hours in my home office every day, so every penny spent is a good investment, right?\nDesk As you can see in the picture above, I built a pretty big desk. If I sit to much I get terrible back pain, thats why bought a height adjustable frame (Flexispot E5) and went to the hardware store and bought a 2 meter panel. Super happy about the outcome and it really reduced my back pain.\nPC Upgrade 99% of the times I work from my private PC with two screens. I have not upgraded my PC for 5 years, so I decided to buy a few new components to speed things up - looking at you Teams - and do some local development with VSCode \u0026amp; Docker. Right-sizing the upgrade was not easy, but I think I found a good mix:\nRayzen AMD Ryzen 7 3700X 8x 3.60GHz So.AM4 BOX RAM 16GB (2x 8192MB) G.Skill Trident Z Neo DDR4-3600 DIMM CL16-19-19-39 Dual Kit Motherboard MSI MPG X570 GAMING EDGE WIFI AMD X570 So.AM4 Dual Channel DDR4 ATX Retail The case, graphics card and power supply, disks and whatnot are already in place - keeping them for now. But upgrading from 4 cores to 16 cores is really really making a difference here. First time that I bought an AMD CPU instead of an Intel CPU.\nThe displays you can see above are Asus VG248QE 24-inch 3D LED Monitor - Black (1920x1080, 80000000:1, 144 Hz, 1ms, DVI Display Port, HDMI) - I tried one big screen and had to return it; two or three screens are my preference.\nInput The last purchase I made was a keyboard Logitech K740 wired keyboard that was recommended to me, now my muscle memory needs to be reset - typing is really hard now. But the keyboard is quiet enough so that I can type during meetings without being on mute. The keyboard is accompanied by a Logitech G500 mouse - now superseded by Logitech G502. Everything wired, I don\u0026rsquo;t want to charge mission-critical stuff.\nAudio / Video A really great investment is the Logitech Brio - the Windows Hello support is really great. I boot the computer, smile, and I am logged in. Having a good video quality in meetings is more important nowadays, too. If my wife and kid are around, then I typically switch to my headset ASTRO Gaming A50. It is super comfortable and the audio quality is just perfect. 8 hour meetings are doable with it - both the headset and the Brio work great with Teams/Webex/Hangout.\nEnvironmental things I am a big fan of Hue lights - the automation possibilities are really great. Therefore I bought a couple of them and added some magic to it. When someone rings the doorbell, only the lights blink - no noise that could bother me. Quite helpful when the kid sleeps, too. For some ambient lights, I bought two Hue Ambiance Light bars and turned them to the wall - with the hue sync app it is a really great experience especially during the night or when gaming! Additionally I bought an EVE Room 2 to monitor the air quality (if it decreases, one Hue light turns red) and the temperature. The runtime of this gadget with the e-ink display is like a month.\nFor the past couple of years I could perfectly live without a printer - but - staying at home changed this. Therefore I bought a color laser printer (HP Color Laser 179fwg). At first I thought the Wifi-integration is not needed, but I printed several times from my iPhone and that is really cool!\nClosing Lots of nice things here - some of them are gadgets and not really required - but it has to be fun, right? Anything you would recommend? Please don\u0026rsquo;t suggest a Stream Deck :)\n",
    "tags": ["Home Office"],
    "categories": ["Work"],
    "feature": "https://melcher.dev/2020/06/upgrading-my-home-office/images/homeoffice.jpg"
  },
  {
    "url": "https://melcher.dev/2019/11/my-first-year-at-microsoft-things-i-learned/",
    "title": "My First Year at Microsoft - Things I learned",
    "date_published": "2019-11-14T08:47:35Z",
    "description": "In this post, I will try to summarize the past year and very first year at Microsoft as Cloud Solution Architect in the Customer Success Unit and share some of the highlights with you.\n",
    "content": "In this post, I will try to summarize the past year and very first year at Microsoft as Cloud Solution Architect in the Customer Success Unit and share some of the highlights with you.\nCloud Solution Architect In October 2018, after only three weeks of hiring process, I was eager to join Microsoft. I landed my dream job (Cloud Solution Architect) in a dream team with an awesome manager. The role that initially sounded like a lot of marketing and pre-sales, but is very very technical (really!). Even with a ton of Azure knowledge and large-scale project experience, I am learning new stuff daily. Combine that with the Microsoft organizational complexity and - it\u0026rsquo;s quite some fun!\nAnd I thought, as former MVP, I knew Microsoft in and out!\nThere are multiple ways to live the role, but now, one year in the role, I help customers on their Azure cloud journey:\nfinding the right architecture to solve business as well as technical problems bridging the gap between customer and Microsoft product development groups,\nprioritizing the right things and communicate customer feedback that matters evangelizing Azure help with pilots architecture and whiteboarding sessions sharing best practices and new technologies/approaches helping onboard new customers and colleagues And, very important, we do not:\nhandle support cases write code that is meant for production and is supported for 10 years and all that cover every product that Microsoft has to offer replace a customer cloud team and/or partner - you need them for production deployments We now have more than 100 architects working in Germany alone and every person bringing their unique background and perspective into the mix. I enjoy this diversity of skills and ideas and love the everyday exchange in the office. I doubt you’ll find such a highly motivated team of experts anywhere else in Germany!\nCustomers Our Mission: Our mission is to empower every person and every organization on the planet to achieve more\nSatya Nadella microsoft.com/en-us/about Pretty much everything in the Cloud Solution Architect (CSA) role, circles around the customer - \u0026lsquo;customer-centricity\u0026rsquo; is what we use internally for that. In other words, we are advocates for the customer, help them get heard in the development teams, be the voice of the customer to our Microsoft product team - and get the most out of Azure.\nAfter joining I landed in the Financial Services and Insurance (FSI) sector, where we focus on all mayor German customers - and talking mayor, all of them are huge and with that have huge challenges in adopting cloud technologies. So if you think that something works great, throw 100.000 concurrent users at it and it will tell you very clearly that there is room for improvement.\nWhile some of the customers have near-zero cloud adoption ambitions, some of them have everything in the cloud - And this is what I like so much! I like the different stages and the great flexibility we have, to help the customers understanding what is required to tackle the next step in cloud maturity.\nAlways Learning The Learn-It-All Does Better Than the Know-It-All\nSatya Nadella source In the past year, I have learned so much and there was not a single day where I did not learn or had to learn. And the learning is so embraced and embedded in the company culture that blocking time during my week for learning is totally accepted - we even have organized learning days.\nIn the following section I want to emphasize that a little more:\nInfrastructure In my past I focused mainly on web-related development technologies - infrastructure topics were not in my comfort zone - but when you scroll through my previous blog posts, you might notice a transition.\nThis is mainly because my customer has tons of infrastructure-related questions - and with my strong development background I simply could not answer those in-depth - and I had to learn! Most of the time reading our docs was pretty helpful, but working at Microsoft gives you access to much more. Most importantly incredibly smart and helpful colleagues and a short Teams message or mail helped me. And in the end, I could transfer my knowledge to the customer. After about half a year I felt pretty confident with all these networking topics, still need to look up how many IPs are in a /27 subnet though.\nIn July then I decided to do the AZ-300 (Microsoft Azure Architect Technologies) exam. One of the most realistic exams I encountered so far because it covered the architecture challenges of the past half-year. Good stuff.\nAzure Certifications But the AZ-300 and AZ-301 were not the only certifications I have done in the last year - my default go-to would have been the AZ-203 (Developing Solutions for Microsoft Azure) and AZ-400, and once you are into this learning thing, it did them, too. The AZ-400 was my favorite in this track - simply because it covers so many DevOps-related questions and tasks.\nLearning, things other than Azure So technical skilling and learning are super important - but Microsoft embraces a holistic approach and even the typically quite boring \u0026ldquo;standards of business conduct\u0026rdquo; (SBC) are epic. See this thread by clicking on the twitter icon in the top right for more insights about it: This guy is one of the Hacker Cabal... (it\u0026#39;s an inclusive group of evil hackers, all types of people) pic.twitter.com/1uo9ChlERk\n\u0026mdash; Scott Hanselman 🌮 (@shanselman) July 16, 2018 OpenHack One of my learning-experience highlights is, again, the so-called OpenHack. I have done two OpenHacks before joining Microsoft, and two in the last year alone. And I can\u0026rsquo;t stress it enough - if it\u0026rsquo;s possible for you, go attend one! They are free, fun - and if learning in a small group with a smart proctor on real-world challenges is your thing - then go sign up: https://openhack.microsoft.com/\nMy OpenHacks covered the following topics:\nDevOps IoT + Data DevOps (again, customer-specific) Containers And there are more topics:\nServerless Intelligent Bots Modern Data Warehousing AI-Powered Knowledge Mining App Modernization with NoSQL The container OpenHack was awesome - the exercises made sense and with all this hands-on experience and the smart people that I am now connected with - it makes my life easier. It took you out of the comfort zone, in a good way, and I now feel really at ease answering questions about it without always bothering the container champs (subject matter experts) we have at Microsoft. Kubernetes all the things!\nSee this post by my colleague Mo and see the setup of the last OpenHack in Munich: https://www.linkedin.com/posts/mohghaleb_openhack-activity-6592384397096300544-TYU1\nSpeaker Training And even more learning. Just recently I signed up for an \u0026ldquo;Massively Open Online Course\u0026rdquo; (MooC) that\u0026rsquo;s called \u0026ldquo;Story Impact\u0026rdquo; to improve my speaking skills - it was time intensive and in the end, I had to hand in a video recording of me presenting. But well, I feel like it helped me a lot!\nCommunity When I joined Microsoft, I was worried that I cannot contribute to the community as much as I did back when I was a partner and an MVP. But quite the opposite, some tasks like getting a decent meeting room for a community event is now way easier. So last year we hosted, AzureSaturday Munich, the third time in the Microsoft Office in Munich - and supporting this as an employee was more efficient.\nEnd of November I will support the O365 community and co-organize the next SharePoint \u0026amp; O365 Saturday 2019 - Munich event. Additionally, I spoke at about two or three community events and gave a workshop at Techorama in Belgium - that was great fun!\nClosing I had a very successful and fun first year - and I am looking forward to the next. If you have questions or want to know more about anything at Microsoft, please feel free to put it in the comments down below or send me a message/LinkedIn.\nAnd if you want to become a Cloud Solution Architect at Microsoft yourself, give it a try and apply! We are hiring: careers.microsoft.com\nSpecial mention: I want to thank my manager Nadine, for giving me a chance and for a super awesome year - always taking time and getting things in motion! THANK YOU!\nThanks,\nMax\nPictures:\nPhoto by unsplash-logofreestocks.org Photo by unsplash-logoAustin Distel ",
    "tags": ["Learning","Microsoft","MicrosoftLife"],
    "categories": ["Retrospective"],
    "feature": "https://melcher.dev/2019/11/my-first-year-at-microsoft-things-i-learned/images/freestocks-org-qlS6vMR2PpU-unsplash.jpg"
  },
  {
    "url": "https://melcher.dev/2019/08/azure-policy-common-sense/",
    "title": "Azure Policy - Common Sense",
    "date_published": "2019-08-08T12:42:32+02:00",
    "description": "As of writing this post (August 8th, 2019) there are 159 Azure Policies available and 111 are in preview (and 27 deprecated). In this post I try to come up with a decent set of \u0026lsquo;common sense\u0026rsquo; policies that can prevent data leaks or other issues, I focus primarily on security-related policies. Some of them are so essential, that I would always recommend to enable them - some of them are very specific, so let us use the old consultant wisdom: \u0026ldquo;it depends\u0026rdquo;!\n",
    "content": "As of writing this post (August 8th, 2019) there are 159 Azure Policies available and 111 are in preview (and 27 deprecated). In this post I try to come up with a decent set of \u0026lsquo;common sense\u0026rsquo; policies that can prevent data leaks or other issues, I focus primarily on security-related policies. Some of them are so essential, that I would always recommend to enable them - some of them are very specific, so let us use the old consultant wisdom: \u0026ldquo;it depends\u0026rdquo;!\nThis post assumes that you are aware of the Azure Policy capabilities - if not, please read the excellent overview first. Azure Policy should be a critical component of ever Azure Governance implementation - combined with Azure Management Groups, Blueprints and Cost Management it is really a big enabler.\nAvailable Azure Policies The following tables contains all the policies that are available for production environments - and removed all that started with [Deprecated], 27 as of now. I used a simple powershell script that exports the available policies so I can use them in this post. Scroll all the way down if you want to see my recommendation or the custom policies I would add. It took me a month to finish this post, 10 new policies moved from preview to production and 60 new policies are available for preview.\nName Description A maximum of 3 owners should be designated for your subscription It is recommended to designate up to 3 subscription owners in order to reduce the potential for breach by a compromised owner. Access through Internet facing endpoint should be restricted Azure Security center has identified some of your Network Security Groups\u0026rsquo; inbound rules to be too permissive. Inbound rules should not allow access from \u0026lsquo;Any\u0026rsquo; or \u0026lsquo;Internet\u0026rsquo; ranges. This can potentially enable attackers to easily target your resources. Adaptive Application Controls should be enabled on virtual machines Possible Application Whitelist configuration will be monitored by Azure Security Center Advanced data security settings for SQL managed instance should contain an email address to receive security alerts Ensure that an email address is provided for the \u0026lsquo;Send alerts to\u0026rsquo; field in the Advanced Data Security server settings. This email address receives alert notifications when anomalous activities are detected on SQL managed instances. Advanced data security settings for SQL server should contain an email address to receive security alerts Ensure that an email address is provided for the \u0026lsquo;Send alerts to\u0026rsquo; field in the Advanced Data Security server settings. This email address receives alert notifications when anomalous activities are detected on SQL servers. Advanced data security should be enabled on your SQL managed instances Audit SQL managed instances without Advanced Data Security Advanced data security should be enabled on your SQL servers Audit SQL servers without Advanced Data Security Advanced Threat Protection types should be set to \u0026lsquo;All\u0026rsquo; in SQL managed instance Advanced Data Security settings It is recommended to enable all Advanced Threat Protection types on your SQL servers. Enabling all types protects against SQL injection, database vulnerabilities, and any other anomalous activities. Advanced Threat Protection types should be set to \u0026lsquo;All\u0026rsquo; in SQL server Advanced Data Security settings It is recommended to enable all Advanced Threat Protection types on your SQL servers. Enabling all types protects against SQL injection, database vulnerabilities, and any other anomalous activities. All authorization rules except RootManageSharedAccessKey should be removed from Event Hub namespace Event Hub clients should not use a namespace level access policy that provides access to all queues and topics in a namespace. To align with the least privilege security model, you shoud create access policies at the entity level for queues and topics to provide access to only the specific entity All authorization rules except RootManageSharedAccessKey should be removed from Service Bus namespace Service Bus clients should not use a namespace level access policy that provides access to all queues and topics in a namespace. To align with the least privilege security model, you shoud create access policies at the entity level for queues and topics to provide access to only the specific entity Allow resource creation if \u0026lsquo;department\u0026rsquo; tag set Allows resource creation only if the \u0026lsquo;department\u0026rsquo; tag is set Allow resource creation if \u0026rsquo;environment\u0026rsquo; tag value in allowed values Allows resource creation if the \u0026rsquo;environment\u0026rsquo; tag is set to one of the following values: production, dev, test, staging Allow resource creation only in Asia data centers Allows resource creation in the following locations only: East Asia, Southeast Asia, West India, South India, Central India, Japan East, Japan West Allow resource creation only in European data centers Allows resource creation in the following locations only: North Europe, West Europe Allow resource creation only in India data centers Allows resource creation in the following locations only: West India, South India, Central India Allow resource creation only in Japan data centers Allows resource creation in the following locations only: Japan East, Japan West Allow resource creation only in Japan data centers Allows resource creation in the following locations only: Japan East, Japan West Allow resource creation only in United States data centers Allows resource creation in the following locations only: Central US, East US, East US2, North Central US, South Central US, West US Allowed locations This policy enables you to restrict the locations your organization can specify when deploying resources. Use to enforce your geo-compliance requirements. Excludes resource groups, Microsoft.AzureActiveDirectory/b2cDirectories, and resources that use the \u0026lsquo;global\u0026rsquo; region. Allowed locations for resource groups This policy enables you to restrict the locations your organization can create resource groups in. Use to enforce your geo-compliance requirements. Allowed resource types This policy enables you to specify the resource types that your organization can deploy. Only resource types that support \u0026rsquo;tags\u0026rsquo; and \u0026rsquo;location\u0026rsquo; will be affected by this policy. To restrict all resources please duplicate this policy and change the \u0026lsquo;mode\u0026rsquo; to \u0026lsquo;All\u0026rsquo;. Allowed storage account SKUs This policy enables you to specify a set of storage account SKUs that your organization can deploy. Allowed virtual machine SKUs This policy enables you to specify a set of virtual machine SKUs that your organization can deploy. An Azure Active Directory administrator should be provisioned for SQL servers Audit provisioning of an Azure Active Directory administrator for your SQL server to enable Azure AD authentication. Azure AD authentication enables simplified permission management and centralized identity management of database users and other Microsoft services API App should only be accessible over HTTPS Use of HTTPS ensures server/service authentication and protects data in transit from network layer eavesdropping attacks. Append tag and its default value Appends the specified tag and value when any resource which is missing this tag is created or updated. Does not modify the tags of resources created before this policy was applied until those resources are changed. Does not apply to resource groups. Append tag and its default value to resource groups Appends the specified tag and value when any resource group which is missing this tag is created or updated. Does not modify the tags of resource groups created before this policy was applied until those resource groups are changed. Append tag and its value from the resource group Appends the specified tag with its value from the resource group when any resource which is missing this tag is created or updated. Does not modify the tags of resources created before this policy was applied until those resources are changed. Audit diagnostic setting Audit diagnostic setting for selected resource types Audit Linux VMs that do not have the specified applications installed This policy audits Linux virtual machines that do not have the specified applications installed. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Linux VMs that have the specified applications installed This policy audits Linux virtual machines that have the specified applications installed. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit resource location matches resource group location Audit that the resource location matches its resource group location Audit SQL DB Level Audit Setting Audit DB level audit setting for SQL databases Audit unrestricted network access to storage accounts Audit unrestricted network access in your storage account firewall settings. Instead, configure network rules so only applications from allowed networks can access the storage account. To allow connections from specific internet or on-premise clients, access can be granted to traffic from specific Azure virtual networks or to public internet IP address ranges Audit usage of custom RBAC rules Audit built-in roles such as \u0026lsquo;Owner, Contributer, Reader\u0026rsquo; instead of custom RBAC roles, which are error prone. Using custom roles is treated as an exception and requires a rigorous review and threat modeling Audit virtual machines without disaster recovery configured Audit virtual machines which do not have disaster recovery configured. To learn more about disaster recovery, visit https://aka.ms/asr-doc. Audit VMs that do not use managed disks This policy audits VMs that do not use managed disks Audit Windows Server VMs on which Windows Serial Console is not enabled This policy audits Windows Server virtual machines on which Windows Serial Console is not enabled. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs in which the Administrators group contains any of the specified members This policy audits Windows virtual machines in which the Administrators group contains any of the specified members. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs in which the Administrators group does not contain all of the specified members This policy audits Windows virtual machines in which the Administrators group does not contain all of the specified members. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs in which the Administrators group does not contain only the specified members This policy audits Windows virtual machines in which the Administrators group does not contain only the specified members. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs on which the specified services are not installed and \u0026lsquo;Running\u0026rsquo; This policy audits Windows virtual machines on which the specified services are not installed and \u0026lsquo;Running\u0026rsquo;. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that are not joined to the specified domain This policy audits Windows virtual machines that are not joined to the specified domain. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that are not set to the specified time zone This policy audits Windows virtual machines that are not set to the specified time zone. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that do not have the specified applications installed This policy audits Windows virtual machines that do not have the specified applications installed. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that do not have the specified Windows PowerShell execution policy This policy audits Windows virtual machines where Windows PowerShell is not configured to use the specified PowerShell execution policy. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that do not have the specified Windows PowerShell modules installed This policy audits Windows virtual machines that do not have the specified Windows PowerShell modules installed. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs that have the specified applications installed This policy audits Windows virtual machines that have the specified applications installed. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows VMs with a pending reboot This policy audits Windows virtual machines with a pending reboot. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Audit Windows web servers that are not using secure communication protocols This policy audits Windows web servers that are not using secure communication protocols (TLS 1.1 or TLS 1.2). This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Auditing should be enabled on advanced data security settings on SQL Server Auditing tracks database events and writes them to an audit log in the Azure storage account. It also helps to maintain regulatory compliance, understand database activity, and gain insight into discrepancies and anomalies that could indicate business concerns or suspected security violations. Authorization rules on the Event Hub instance should be defined Audit existence of authorization rules on Event Hub entities to grant least-privileged access Automatic provisioning of security monitoring agent Installs security agent on VMs for advanced security alerts and preventions in Azure Security Center. Applies only for subscriptions that use Azure Security Center. Automation account variables should be encrypted It is important to enable encryption of Automation account variable assets when storing sensitive data Azure Marketplace Policy Govern usage of Azure Marketplace resources Blacklisted Software This policy checks if a given software is installed CORS should not allow every resource to access your API App Cross origin Resource Sharing (CORS) should not allow all domains to access your API app. Allow only required domains to interact with your API app. CORS should not allow every resource to access your Function App Cross origin Resource Sharing (CORS) should not allow all domains to access your Function app. Allow only required domains to interact with your Function app. CORS should not allow every resource to access your Web Application Cross origin Resource Sharing (CORS) should not allow all domains to access your web application. Allow only required domains to interact with your web app. DDoS Protection Standard should be enabled DDoS protection standard should be enabled for all virtual networks with a subnet that is part of an application gateway with a public IP. Deploy Advanced Data Security on SQL servers This policy enables Advanced Data Security on SQL Servers. This includes turning on Threat Detection and Vulnerability Assessment. It will automatically create a storage account in the same region and resource group as the SQL server to store scan results, with a \u0026lsquo;sqlva\u0026rsquo; prefix. Deploy Advanced Threat Protection on Storage Accounts This policy enables Advanced Threat Protection on Storage Accounts. Deploy Auditing on SQL servers This policy ensures that Auditing is enabled on SQL Servers for enhanced security and compliance. It will automatically create a storage account in the same region as the SQL server to store audit records. Deploy default Log Analytics Agent for Ubuntu VMs This policy deploys the Log Analytics Agent on Ubuntu VMs, and connects to the selected Log Analytics workspace Deploy default Microsoft IaaSAntimalware extension for Windows Server This policy deploys a Microsoft IaaSAntimalware extension with a default configuration when a VM is not configured with the antimalware extension. Deploy Diagnostic Settings for Azure SQL Database to Event Hub Deploys the diagnostic settings for Azure SQL Database to stream to a regional Event Hub on any Azure SQL Database which is missing this diagnostic settings is created or updated. Deploy Diagnostic Settings for Key Vault to Event Hub Deploys the diagnostic settings for Key Vault to stream to a regional Event Hub when any Key Vault which is missing this diagnostic settings is created or updated. Deploy Diagnostic Settings for Network Security Groups This policy automatically deploys diagnostic settings to network security groups. A storage account with name \u0026lsquo;{storagePrefixParameter}{NSGLocation}\u0026rsquo; will be automatically created. Deploy network watcher when virtual networks are created This policy creates a network watcher resource in regions with virtual networks. You need to ensure existence of a resource group named networkWatcherRG, which will be used to deploy network watcher instances. Deploy requirements to audit Linux VMs that do not have the specified applications installed This policy creates a Guest Configuration assignment to audit Linux virtual machines that do not have the specified applications installed. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Linux VMs that have the specified applications installed This policy creates a Guest Configuration assignment to audit Linux virtual machines that have the specified applications installed. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows Server VMs on which Windows Serial Console is not enabled This policy creates a Guest Configuration assignment to audit Windows Server virtual machines on which Windows Serial Console is not enabled. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs in which the Administrators group contains any of the specified members This policy creates a Guest Configuration assignment to audit Windows virtual machines in which the Administrators group contains any of the specified members. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs in which the Administrators group does not contain all of the specified members This policy creates a Guest Configuration assignment to audit Windows virtual machines in which the Administrators group does not contain all of the specified members. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs in which the Administrators group does not contain only the specified members This policy creates a Guest Configuration assignment to audit Windows virtual machines in which the Administrators group does not contain only the specified members. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs on which the specified services are not installed and \u0026lsquo;Running\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines on which the specified services are not installed and \u0026lsquo;Running\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that are not joined to the specified domain This policy creates a Guest Configuration assignment to audit Windows virtual machines that are not joined to the specified domain. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that are not set to the specified time zone This policy creates a Guest Configuration assignment to audit Windows virtual machines that are not set to the specified time zone. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that do not have the specified applications installed This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not have the specified applications installed. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that do not have the specified Windows PowerShell execution policy This policy creates a Guest Configuration assignment to audit Windows virtual machines where Windows PowerShell is not configured to use the specified PowerShell execution policy. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that do not have the specified Windows PowerShell modules installed This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not have the specified Windows PowerShell modules installed. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs that have the specified applications installed This policy creates a Guest Configuration assignment to audit Windows virtual machines that have the specified applications installed. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows VMs with a pending reboot This policy creates a Guest Configuration assignment to audit Windows virtual machines with a pending reboot. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy requirements to audit Windows web servers that are not using secure communication protocols This policy creates a Guest Configuration assignment to audit Windows web servers that are not using secure communication protocols (TLS 1.1 or TLS 1.2). It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Deploy SQL DB transparent data encryption Enables transparent data encryption on SQL databases Deploy Threat Detection on SQL servers This policy ensures that Threat Detection is enabled on SQL Servers. Diagnostic logs in App Services should be enabled Audit enabling of diagnostic logs on the app. This enables you to recreate activity trails for investigation purposes if a security incident occurs or your network is compromised Diagnostic logs in Azure Data Lake Store should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Azure Stream Analytics should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Batch accounts should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Data Lake Analytics should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Event Hub should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in IoT Hub should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Key Vault should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Logic Apps should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Search services should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Service Bus should be enabled Audit enabling of diagnostic logs. This enables you to recreate activity trails to use for investigation purposes; when a security incident occurs or when your network is compromised Diagnostic logs in Virtual Machine Scale Sets should be enabled It is recommended to enable Logs so that activity trail can be recreated when investigations are required in the event of an incident or a compromise. Disk encryption should be applied on virtual machines VMs without an enabled disk encryption will be monitored by Azure Security Center as recommendations Email notifications to admins and subscription owners should be enabled in SQL managed instance advanced data security settings Audit that \u0026rsquo;email notification to admins and subscription owners\u0026rsquo; is enabled in the SQL managed instance advanced threat protection settings. This ensures that any detections of anomalous activities on SQL managed instance are reported as soon as possible to the admins. Email notifications to admins and subscription owners should be enabled in SQL server advanced data security settings Audit that \u0026rsquo;email notification to admins and subscription owners\u0026rsquo; is enabled in the SQL server advanced threat protection settings. This ensures that any detections of anomalous activities on SQL server are reported as soon as possible to the admins. Endpoint protection solution should be installed on virtual machine scale sets Audit the existence and health of an endpoint protection solution on your virtual machines scale sets, to protect them from threats and vulnerabilities. Enforce SSL connection should be enabled for MySQL database servers This policy audits any MySQL server that is not enforcing SSL connection. Azure Database for MySQL supports connecting your Azure Database for MySQL server to client applications using Secure Sockets Layer (SSL). Enforcing SSL connections between your database server and your client applications helps protect against \u0026lsquo;man in the middle\u0026rsquo; attacks by encrypting the data stream between the server and your application. Enforce SSL connection should be enabled for PostgreSQL database servers This policy audits any PostgreSQL server that is not enforcing SSL connection. Azure Database for PostgreSQL prefers connecting your client applications to the PostgreSQL service using Secure Sockets Layer (SSL). Enforcing SSL connections between your database server and your client applications helps protect against \u0026lsquo;man-in-the-middle\u0026rsquo; attacks by encrypting the data stream between the server and your application External accounts with owner permissions should be removed from your subscription External accounts with owner permissions should be removed from your subscription in order to prevent unmonitored access. External accounts with read permissions should be removed from your subscription External accounts with read privileges should be removed from your subscription in order to prevent unmonitored access. External accounts with write permissions should be removed from your subscription External accounts with write privileges should be removed from your subscription in order to prevent unmonitored access. Function App should only be accessible over HTTPS Use of HTTPS ensures server/service authentication and protects data in transit from network layer eavesdropping attacks. Gateway subnets should not be configured with a network security group This policy denies if a gateway subnet is configured with a network security group. Assigning a network security group to a gateway subnet will cause the gateway to stop functioning. Just-In-Time network access control should be applied on virtual machines Possible network Just In Time (JIT) access will be monitored by Azure Security Center as recommendations Key Vault objects should be recoverable This policy audits if key vault objects are not recoverable. Soft Delete feature helps to effectively hold the resources for a given retention period (90 days) even after a DELETE operation, while giving the appearance that the object is deleted. When \u0026lsquo;Purge protection\u0026rsquo; is on, a vault or an object in deleted state cannot be purged until the retention period of 90 days has passed. These vaults and objects can still be recovered, assuring customers that the retention policy will be followed. Management ports should be closed on your virtual machines Open remote management ports are exposing your VM to a high level of risk from Internet-based attacks. These attacks attempt to brute force credentials to gain admin access to the machine. Metric alert rules should be configured on Batch accounts Audit configuration of metric alert rules on Batch account to enable the required metric MFA should be enabled accounts with write permissions on your subscription Multi-Factor Authentication (MFA) should be enabled for all subscription accounts with write privileges to prevent a breach of accounts or resources. MFA should be enabled on accounts with owner permissions on your subscription Multi-Factor Authentication (MFA) should be enabled for all subscription accounts with owner permissions to prevent a breach of accounts or resources. MFA should be enabled on accounts with read permissions on your subscription Multi-Factor Authentication (MFA) should be enabled for all subscription accounts with read privileges to prevent a breach of accounts or resources. Monitor missing Endpoint Protection in Azure Security Center Servers without an installed Endpoint Protection agent will be monitored by Azure Security Center as recommendations Monitor unaudited SQL servers in Azure Security Center SQL servers which don\u0026rsquo;t have SQL auditing turned on will be monitored by Azure Security Center as recommendations Monitor unencrypted SQL databases in Azure Security Center Unencrypted SQL databases will be monitored by Azure Security Center as recommendations Network interfaces should disable IP forwarding This policy denies the network interfaces which enabled IP forwarding. The setting of IP forwarding disables Azure\u0026rsquo;s check of the source and destination for a network interface. This should be reviewed by the network security team. Network interfaces should not have public IPs This policy denies the network interfaces which are configured with any public IP. Public IP addresses allow internet resources to communicate inbound to Azure resources, and Azure resources to communicate outbound to the internet. This should be reviewed by the network security team. Network Security Group Rules for Internet facing virtual machines should be hardened Azure Security Center analyzes the traffic patterns of Internet facing virtual machines and provides Network Security Group rule recommendations that reduce the potential attack surface Not allowed resource types This policy enables you to specify the resource types that your organization cannot deploy. Only secure connections to your Redis Cache should be enabled Audit enabling of only connections via SSL to Redis Cache. Use of secure connections ensures authentication between the server and the service and protects data in transit from network layer attacks such as man-in-the-middle, eavesdropping, and session-hijacking Remote debugging should be turned off for API App Remote debugging requires inbound ports to be opened on an API app. Remote debugging should be turned off. Remote debugging should be turned off for Function App Remote debugging requires inbound ports to be opened on an function app. Remote debugging should be turned off. Remote debugging should be turned off for Web Application Remote debugging requires inbound ports to be opened on a web application. Remote debugging should be turned off. Require automatic OS image patching on Virtual Machine Scale Sets This policy enforces enabling automatic OS image patching on Virtual Machine Scale Sets to always keep Virtual Machines secure by safely applying latest security patches every month. Require encryption on Data Lake Store accounts This policy ensures encryption is enabled on all Data Lake Store accounts Require specified tag Enforces existence of a tag. Does not apply to resource groups. Require specified tag on resource groups Enforces existence of a tag on resource groups. Require SQL Server version 12.0 This policy ensures all SQL servers use version 12.0 Require tag and its value Enforces a required tag and its value. Does not apply to resource groups. Require tag and its value on resource groups Enforces a required tag and its value on resource groups. Secure transfer to storage accounts should be enabled Audit requirment of Secure transfer in your storage account. Secure transfer is an option that forces your storage account to accept requests only from secure connections (HTTPS). Use of HTTPS ensures authentication between the server and the service and protects data in transit from network layer attacks such as man-in-the-middle, eavesdropping, and session-hijacking Service Fabric clusters should have the ClusterProtectionLevel property set to EncryptAndSign Service Fabric provides three levels of protection (None, Sign and EncryptAndSign) for node-to-node communication using a primary cluster certificate. Set the protection level to ensure that all node-to-node messages are encrypted and digitally signed Service Fabric clusters should only use Azure Active Directory for client authentication Audit usage of client authentication only via Azure Active Directory in Service Fabric SQL Auditing settings should have Action-Groups configured to capture critical activities The AuditActionsAndGroups property should contain at least SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, BATCH_COMPLETED_GROUP to ensure a thorough audit logging SQL managed instance TDE protector should be encrypted with your own key Transparent Data Encryption (TDE) with your own key support provides increased transparency and control over the TDE Protector, increased security with an HSM-backed external service, and promotion of separation of duties. SQL server TDE protector should be encrypted with your own key Transparent Data Encryption (TDE) with your own key support provides increased transparency and control over the TDE Protector, increased security with an HSM-backed external service, and promotion of separation of duties. SQL servers should be configured with auditing retention days greater than 90 days. Audit SQL servers configured with an auditing retention period of less than 90 days. Storage accounts should be migrated to new Azure Resource Manager resources Use new Azure Resource Manager for your storage accounts to provide security enhancements such as: stronger access control (RBAC), better auditing, Azure Resource Manager based deployment and governance, access to managed identities, access to key vault for secrets, Azure AD-based authentication and support for tags and resource groups for easier security management Subnets should be associated with a Network Security Group Protect your subnet from potential threats by restricting access to it with a Network Security Group (NSG). NSGs contain a list of Access Control List (ACL) rules that allow or deny network traffic to your subnet. System updates on virtual machine scale sets should be installed Audit whether there are any missing system security updates and critical updates that should be installed to ensure that your Windows and Linux virtual machine scale sets are secure. System updates should be installed on your machines Missing security system updates on your servers will be monitored by Azure Security Center as recommendations The NSGs rules for web applications on IaaS should be hardened Azure security center has discovered that some of your virtual machines are running web applications, and the NSGs associated to these virtual machines are overly permissive with regards to the web application ports There should be more than one owner assigned to your subscription It is recommended to designate more than one subscription owner in order to have administrator access redundancy. Transparent Data Encryption on SQL databases should be enabled Audit transparent data encryption status for SQL databases Virtual machines should be associated with a Network Security Group Protect your VM from potential threats by restricting access to it with a Network Security Group (NSG). NSGs contain a list of Access Control List (ACL) rules that allow or deny network traffic to your VM from other instances, in or outside the same subnet. Virtual machines should be migrated to new Azure Resource Manager resources Use new Azure Resource Manager for your virtual machines to provide security enhancements such as: stronger access control (RBAC), better auditing, ARM-based deployment and governance, access to managed identities, access to key vault for secrets, Azure AD-based authentication and support for tags and resource groups for easier security management Vulnerabilities in container security configurations should be remediated Audit vulnerabilities in security configuration on machines with Docker installed and display as recommendations in Azure Security Center. Vulnerabilities in security configuration on your machines should be remediated Servers which do not satisfy the configured baseline will be monitored by Azure Security Center as recommendations Vulnerabilities in security configuration on your virtual machine scale sets should be remediated Audit the OS vulnerabilities on your virtual machine scale sets to protect them from attacks. Vulnerabilities on your SQL databases should be remediated Monitor Vulnerability Assessment scan results and recommendations for how to remediate database vulnerabilities. Vulnerabilities should be remediated by a Vulnerability Assessment solution Monitors vulnerabilities detected by Vulnerability Assessment solution and VMs without a Vulnerability Assessment solution in Azure Security Center as recommendations. Vulnerability assessment should be enabled on your SQL managed instances Audit SQL managed instances which do not have recurring vulnerability assessment scans enabled. Vulnerability assessment can discover, track, and help you remediate potential database vulnerabilities. Vulnerability assessment should be enabled on your SQL servers Audit Azure SQL servers which do not have recurring vulnerability assessment scans enabled. Vulnerability assessment can discover, track, and help you remediate potential database vulnerabilities. Web Application should only be accessible over HTTPS Use of HTTPS ensures server/service authentication and protects data in transit from network layer eavesdropping attacks. Preview Policies And the following policies are not yet supported for production:\nName Description [Preview]: Access to App Services should be restricted Azure security center has discovered that the networking configuration of some of your app services are overly permissive and allow inbound traffic from ranges that are too broad [Preview]: Audit application inside Windows VMs must NOT be present This policy will audit instances of applications running inside Windows virtual machines, to verify that the application does not exist. [Preview]: Audit Dependency Agent Deployment - VM Image (OS) unlisted Reports VMs as non-compliant if the VM Image (OS) is not in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Audit Dependency Agent Deployment in VMSS - VM Image (OS) unlisted Reports VMSS as non-compliant if the VM Image (OS) is not in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Audit Linux VMs that allow remote connections from accounts without passwords This policy audits Linux virtual machines that allow remote connections from accounts without passwords. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Linux VMs that do not have the passwd file permissions set to 0644 This policy audits Linux virtual machines that do not have the passwd file permissions set to 0644. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Linux VMs that have accounts without passwords This policy audits Linux virtual machines that have accounts without passwords. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Log Analytics Agent Deployment - VM Image (OS) unlisted Reports VMs as non-compliant if the VM Image (OS) is not in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Audit Log Analytics Agent Deployment in VMSS - VM Image (OS) unlisted Reports VMSS as non-compliant if the VM Image (OS) is not in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Audit Log Analytics Workspace for VM - Report Mismatch Reports VMs as non-compliant if they not logging to the LA workspace specified in the policy/initiative assignment. [Preview]: Audit Windows VMs on which the DSC configuration is not compliant This policy audits Windows VMs on which the Desired State Configuration (DSC) configuration is not compliant. This policy is only applicable to machines with WMF 4 and above. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs on which the Log Analytics agent is not connected as expected This policy audits Windows virtual machines on which the Log Analytics agent is not connected to the specified workspaces. This policy should only be used along with its corresponding deploy policy in an initiative/policy set. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs on which the remote host connection status does not match the specified one This policy audits Windows virtual machines on which the remote host connection status does not match the specified one. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs on which Windows Defender Exploit Guard is not enabled This policy audits Windows virtual machines on which Windows Defender Exploit Guard is not enabled. This policy should only be used along with its corresponding deploy policy in an initiative/policy set. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that allow re-use of the previous 24 passwords This policy audits Windows virtual machines that allow re-use of the previous 24 passwords. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that contain certificates expiring within the specified number of days This policy audits Windows virtual machines that contain certificates expiring within the specified number of days. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not contain the specified certificates in Trusted Root This policy audits Windows VMs that do not contain the specified certificates in the Trusted Root Certification Authorities certificate store (Cert:\\LocalMachine\\Root). This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not have a maximum password age of 70 days This policy audits Windows virtual machines that do not have a maximum password age of 70 days. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not have a minimum password age of 1 day This policy audits Windows virtual machines that do not have a minimum password age of 1 day. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not have the password complexity setting enabled This policy audits Windows virtual machines that do not have the password complexity setting enabled. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not restrict the minimum password length to 14 characters This policy audits Windows virtual machines that do not restrict the minimum password length to 14 characters. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that do not store passwords using reversible encryption This policy audits Windows virtual machines that do not store passwords using reversible encryption. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Audit Windows VMs that have not restarted within the specified number of days This policy audits Windows virtual machines that have not restarted within the specified number of days. This policy should only be used along with its corresponding deploy policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Authorized IP ranges should be defined on Kubernetes Services Restrict access to the Kubernetes Service Management API by granting API access only to IP addresses in specific ranges. It is recommended to limit access to authorized IP ranges to ensure that only applications from allowed networks can access the cluster. [Preview]: Deploy Dependency Agent for Linux VM Scale Sets (VMSS) Deploy Dependency Agent for Linux VM Scale Sets if the VM Image (OS) is in the list defined and the agent is not installed. Note: if your scale set upgradePolicy is set to Manual, you need to apply the extension to the all VMs in the set by calling upgrade on them. In CLI this would be az vmss update-instances. [Preview]: Deploy Dependency Agent for Linux VMs Deploy Dependency Agent for Linux VMs if the VM Image (OS) is in the list defined and the agent is not installed. [Preview]: Deploy Dependency Agent for Windows VM Scale Sets (VMSS) Deploy Dependency Agent for Windows VM Scale Sets if the VM Image (OS) is in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. Note: if your scale set upgradePolicy is set to Manual, you need to apply the extension to the all VMs in the set by calling upgrade on them. In CLI this would be az vmss update-instances. [Preview]: Deploy Dependency Agent for Windows VMs Deploy Dependency Agent for Windows VMs if the VM Image (OS) is in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Deploy Log Analytics Agent for Linux VM Scale Sets (VMSS) Deploy Log Analytics Agent for Linux VM Scale Sets if the VM Image (OS) is in the list defined and the agent is not installed. Note: if your scale set upgradePolicy is set to Manual, you need to apply the extension to the all VMs in the set by calling upgrade on them. In CLI this would be az vmss update-instances. [Preview]: Deploy Log Analytics Agent for Linux VMs Deploy Log Analytics Agent for Linux VMs if the VM Image (OS) is in the list defined and the agent is not installed. [Preview]: Deploy Log Analytics Agent for Windows VM Scale Sets (VMSS) Deploy Log Analytics Agent for Windows VM Scale Sets if the VM Image (OS) is in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. Note: if your scale set upgradePolicy is set to Manual, you need to apply the extension to the all VMs in the set by calling upgrade on them. In CLI this would be az vmss update-instances. [Preview]: Deploy Log Analytics Agent for Windows VMs Deploy Log Analytics Agent for Windows VMs if the VM Image (OS) is in the list defined and the agent is not installed. The list of OS images will be updated over time as support is updated. [Preview]: Deploy requirements to audit Linux VMs that allow remote connections from accounts without passwords This policy creates a Guest Configuration assignment to audit Linux virtual machines that allow remote connections from accounts without passwords. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Linux VMs that do not have the passwd file permissions set to 0644 This policy creates a Guest Configuration assignment to audit Linux virtual machines that do not have the passwd file permissions set to 0644. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Linux VMs that have accounts without passwords This policy creates a Guest Configuration assignment to audit Linux virtual machines that have accounts without passwords. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Administrative Templates - Control Panel\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - Control Panel\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Administrative Templates - Network\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - Network\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Administrative Templates - System\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - System\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Adminstrative Templates - MSS (Legacy)\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Adminstrative Templates - MSS (Legacy)\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Accounts\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Accounts\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Audit\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Audit\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Devices\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Devices\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Interactive Logon\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Interactive Logon\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Microsoft Network Client\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Microsoft Network Client\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Microsoft Network Server\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Microsoft Network Server\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Network Access\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Network Access\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Network Security\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Network Security\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Recovery console\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Recovery console\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - Shutdown\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Shutdown\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - System objects\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - System objects\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - System settings\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - System settings\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Options - User Account Control\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - User Account Control\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Security Settings - Account Policies\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Settings - Account Policies\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Account Logon\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Account Logon\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Account Management\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Account Management\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Detailed Tracking\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Detailed Tracking\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Logon-Logoff\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Logon-Logoff\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Object Access\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Object Access\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Policy Change\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Policy Change\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - Privilege Use\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Privilege Use\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;System Audit Policies - System\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - System\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;User Rights Assignment\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;User Rights Assignment\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Windows Components\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Windows Components\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs configurations in \u0026lsquo;Windows Firewall Properties\u0026rsquo; This policy creates a Guest Configuration assignment to audit Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Windows Firewall Properties\u0026rsquo;. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs on which the DSC configuration is not compliant This policy creates a Guest Configuration assignment to audit Windows VMs on which the Desired State Configuration (DSC) configuration is not compliant. This policy is only applicable to machines with WMF 4 and above. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs on which the Log Analytics agent is not connected as expected This policy creates a Guest Configuration assignment to audit Windows virtual machines on which the Log Analytics agent is not connected to the specified workspaces. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative/policy set. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs on which the remote host connection status does not match the specified one This policy creates a Guest Configuration assignment to audit Windows virtual machines on which the remote host connection status does not match the specified one. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs on which Windows Defender Exploit Guard is not enabled This policy creates a Guest Configuration assignment to audit Windows virtual machines on which Windows Defender Exploit Guard is not enabled. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative/policy set. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that allow re-use of the previous 24 passwords This policy creates a Guest Configuration assignment to audit Windows virtual machines that allow re-use of the previous 24 passwords. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that contain certificates expiring within the specified number of days This policy creates a Guest Configuration assignment to audit Windows virtual machines that contain certificates expiring within the specified number of days. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not contain the specified certificates in Trusted Root This policy creates a Guest Configuration assignment to audit Windows VMs that do not contain the specified certificates in the Trusted Root Certification Authorities certificate store (Cert:\\LocalMachine\\Root). It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not have a maximum password age of 70 days This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not have a maximum password age of 70 days. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not have a minimum password age of 1 day This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not have a minimum password age of 1 day. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not have the password complexity setting enabled This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not have the password complexity setting enabled. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not restrict the minimum password length to 14 characters This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not restrict the minimum password length to 14 characters. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that do not store passwords using reversible encryption This policy creates a Guest Configuration assignment to audit Windows virtual machines that do not store passwords using reversible encryption. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Deploy requirements to audit Windows VMs that have not restarted within the specified number of days This policy creates a Guest Configuration assignment to audit Windows virtual machines that have not restarted within the specified number of days. It also creates a system-assigned managed identity and deploys the VM extension for Guest Configuration. This policy should only be used along with its corresponding audit policy in an initiative. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: IP Forwarding on your virtual machine should be disabled Enabling IP forwarding on a virtual machine\u0026rsquo;s NIC allows the machine to receive traffic addressed to other destinations. IP forwarding is rarely required (e.g., when using the VM as a network virtual appliance), and therefore, this should be reviewed by the network security team. [Preview]: Kubernetes Services should be upgraded to a non-vulnerable Kubernetes version Upgrade your Kubernetes service cluster to a later Kubernetes version to protect against known vulnerabilities in your current Kubernetes version. Vulnerability CVE-2019-9946 has been patched in Kubernetes versions 1.11.9+, 1.12.7+, 1.13.5+, and 1.14.0+ [Preview]: Pod Security Policies should be defined on Kubernetes Services Define Pod Security Policies to reduce the attack vector by removing unnecessary application privileges. It is recommended to configure Pod Security Policies to only allow pods to access the resources which they have permissions to access. [Preview]: Role-Based Access Control (RBAC) should be used on Kubernetes Services To provide granular filtering on the actions that users can perform, use Role-Based Access Control (RBAC) to manage permissions in Kubernetes Service Clusters and configure relevant authorization policies. [Preview]: Sensitive data in your SQL databases should be classified Azure Security Center monitors the data discovery and classification scan results for your SQL databases and provides recommendations to classify the sensitive data in your databases for better monitoring and security [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Administrative Templates - Control Panel\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - Control Panel\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Administrative Templates - Network\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - Network\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Administrative Templates - System\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Administrative Templates - System\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Adminstrative Templates - MSS (Legacy)\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Adminstrative Templates - MSS (Legacy)\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Accounts\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Accounts\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Audit\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Audit\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Devices\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Devices\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Interactive Logon\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Interactive Logon\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Microsoft Network Client\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Microsoft Network Client\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Microsoft Network Server\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Microsoft Network Server\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Network Access\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Network Access\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Network Security\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Network Security\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Recovery console\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Recovery console\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - Shutdown\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - Shutdown\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - System objects\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - System objects\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - System settings\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - System settings\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Options - User Account Control\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Options - User Account Control\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Security Settings - Account Policies\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Security Settings - Account Policies\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Account Logon\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Account Logon\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Account Management\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Account Management\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Detailed Tracking\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Detailed Tracking\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Logon-Logoff\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Logon-Logoff\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Object Access\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Object Access\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Policy Change\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Policy Change\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - Privilege Use\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - Privilege Use\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;System Audit Policies - System\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;System Audit Policies - System\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;User Rights Assignment\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;User Rights Assignment\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Windows Components\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Windows Components\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol [Preview]: Show audit results from Windows VMs configurations in \u0026lsquo;Windows Firewall Properties\u0026rsquo; This policy should only be used along with its corresponding deploy policy in an initiative. This definition allows Azure Policy to process the results of auditing Windows virtual machines with non-compliant settings in Group Policy category: \u0026lsquo;Windows Firewall Properties\u0026rsquo;. For more information on Guest Configuration policies, please visit https://aka.ms/gcpol Recommendation The following 12 out-of-the-box policies belong to my favorites - I selected them with a typical \u0026ldquo;large enterprise central IT hub \u0026amp; spoke\u0026rdquo; setup in mind and do not cover specific cases, more the general hardening and guidance if you delegate subscriptions to business departments: Imagine you would have to secure the spokes without having direct access to it and still want to provide the business units with the flexibility and power of Azure. If you are in doubt if the policy guides the users or blocks them, start with an audit effect so you can assess the impact first and talk to the users that would be affected. Security and Governance is never a one-man-show and there are always scenarios that you could not come up with. Cloud-native governance must give you control but still ensures the speed of the business - having a traditional \u0026lsquo;get an approval first\u0026rsquo; process before someone can do something is not the way it should be, right?\nA maximum of 3 owners should be designated for your subscription \u0026amp; There should be more than one owner assigned to your subscription \u0026lsquo;Too many cooks spoil the broth\u0026rsquo; - if there are too many owners, who owns? Same applies to \u0026lsquo;only one\u0026rsquo; owner. So it should be 2-3 owners, not more, not less.\nAccess through Internet facing endpoint should be restricted Permissive NSGs or lack of Azure firewalls are potential entry points - secure that boundary.\nAllow resource creation if ‘environment’ tag value in allowed values Specifying if a resource is crucial or not can be super important. So having this policy in place enables transparency of what it dev, test or production. I would go a little further and combine the policy with resource locks. When a resource is flagged for production, there should be resource lock that prevents deletion - the policy should configured with an audit effect.\nThere are other \u0026lsquo;Allow if tag value is set\u0026rsquo; policies - depending on your scenario, they are worth a look!\nAllowed locations Typically there are agreed locations that can be used - prevent resource creation in other places. Ensure that the regions with availability zones are included - and do not forget the paired regions for disaster recovery.\nAudit virtual machines without disaster recovery configured That is a great policy. At least for all production VMs there should be Azure Size Recovery configured so that you can recover to a secondary region (I like the idea to combine it with further tags to have the policy more specific).\nAudit VMs that do not use managed disks It would discuss all usages of unmanged disks - if you create a new workload, I would use managed disks everywhere.\nFunction App should only be accessible over HTTPS What could be the reason to make a function available un-encrypted? Guide and ensure everyone to have them encrypted.\nMFA should be enabled on accounts with owner permissions on your subscription With great power comes great responsibility - and these people have to be protected. \u0026ldquo;81 percent of successful cyberattacks begin with a compromised username and password\u0026rdquo;, if MFA is an option for you, enforce it.\nSecure transfer to storage accounts should be enabled When I started to write this post, I thought this is a no-brainer. There is always an exception to the rule, right?\nWeb Application should only be accessible over HTTPS Again, always have HTTPS for traffic - see https://doesmysiteneedhttps.com/\n[Preview]: Audit Linux VMs that have accounts without passwords No password, really!? It makes a login really easy but it should not. This policy is in preview as of now, so no production-usage!\n[Preview]: Audit Windows VMs that contain certificates expiring within the specified number of days Where has this been all my life? I have seen so many production outages because of expiring certificates. A central place to audit this is great. This policy is in preview as of now, so no production-usage!\nCustom Policies I would add You can create and adjust the policies to your needs, and that is really the strength of the platform. There are already a lot of examples available in the Azure Policy repository, I typically start with them.\nSo in certain cases I would recommend the following:\nRegulate Azure Marketplace, see example in my post \u0026ldquo;AZURE GOVERNANCE: GOVERN THE AZURE MARKETPLACE WITH AZURE POLICY\u0026rdquo; No public IP for VMs. See the \u0026ldquo;Only Allow public IP in specific subnets\u0026rdquo; example and adjust it. This has huge impact to many services, start with AUDIT effect! More If you want to learn more about Azure Policy and Azure Governance in general, I can recommend you the following:\nBRK3062 - Architecting Security and Governance Across your Azure Subscriptions Azure Governance Documentation for an overview and very good documentation Azure Blog: Topic Management for latest updates Follow Satya Vel Watch my favorite real-world implementation by British Patrol: BP Azure Platform Adoption - A Megalopolis Architecture - BRK2445. This is pure Policy gold. Summary \u0026ldquo;Common sense is not that common\u0026rdquo; - my friend Tom Janetscheck uses in his excellent Azure Governance and Security workshops (stolen from Voltaire!). In this post I explained why I would always enable certain policies and what the impact is - if you have other \u0026lsquo;Azure Policy\u0026rsquo;-must-haves or questions, please let me know!\nHope it helps,\nMax\n",
    "tags": ["Azure Policy","Azure","Governance"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2019/08/azure-policy-common-sense/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2019/08/native-hugo-deployment-to-azure/",
    "title": "Native Hugo deployment to Azure",
    "date_published": "2019-08-07T10:47:56+02:00",
    "description": "In Hugo version 0.56 a native deployment command was introduced to deploy your blog/website to various cloud providers - one of them is Azure. In this post I show how I simplified my deployment pipeline with this command.\nHugo deploy The Hugo deploy command uses Azure CLI and your config.toml / config.yaml file and checks for a [deployment] section. Additionally, you need to have two environment variables present - even tho the documentation says you have to use az login (thats incorrect, it works without).",
    "content": "In Hugo version 0.56 a native deployment command was introduced to deploy your blog/website to various cloud providers - one of them is Azure. In this post I show how I simplified my deployment pipeline with this command.\nHugo deploy The Hugo deploy command uses Azure CLI and your config.toml / config.yaml file and checks for a [deployment] section. Additionally, you need to have two environment variables present - even tho the documentation says you have to use az login (thats incorrect, it works without). That has the benefit that your config file does not have the secrets and you can still publicly store it on github.\nEnvironment Variables You must have the environment variable AZURE_STORAGE_ACCOUNT and one of the following: AZURE_STORAGE_KEY or AZURE_STORAGE_SAS_TOKEN.\nIn powershell you can configure them like this: $Env:AZURE_STORAGE_ACCOUNT = \u0026#34;\u0026lt;AccountName\u0026gt;\u0026#34; $Env:AZURE_STORAGE_KEY = \u0026#34;\u0026lt;AccountKey\u0026gt;\u0026#34;\nOr if you want to have it dynamic - that requires you to be logged in with Azure CLI: $Env:AZURE_STORAGE_ACCOUNT = \u0026#34;\u0026lt;AccountName\u0026gt;\u0026#34; $Env:AZURE_STORAGE_KEY = az storage account keys list -n \u0026lt;AccountName\u0026gt; --query [0].value -o tsv\nDeployment Configuration My deployment configuration looks like this:\n[deployment] order = [\u0026#34;.jpg$\u0026#34;, \u0026#34;.gif$\u0026#34;] [[deployment.targets]] name = \u0026#34;azure\u0026#34; # Azure Blob Storage; see https://gocloud.dev/howto/blob/#azure URL = \u0026#34;azblob://$web\u0026#34; [[deployment.matchers]] # Cache static assets for 20 years. pattern = \u0026#34;^.+\\\\.(js|css|svg|ttf)$\u0026#34; cacheControl = \u0026#34;max-age=630720000, no-transform, public\u0026#34; gzip = true [[deployment.matchers]] pattern = \u0026#34;^.+\\\\.(png|jpg)$\u0026#34; cacheControl = \u0026#34;max-age=630720000, no-transform, public\u0026#34; gzip = false [[deployment.matchers]] pattern = \u0026#34;^.+\\\\.(html|xml|json)$\u0026#34; gzip = true And in action Simplified deployment with Azure DevOps As described in the post RUNNING HUGO ON AZURE FOR 2$ A MONTH, I use Azure DevOps to automatically deploy Hugo to Azure and have everything version-controlled. My old pipeline did the following:\nGenerate Hugo content Sync the content to Azure Storage (upload new files, delete no longer required files) Set the cache header of files Purge the Azure CDN Index the content with Azure Search I could combine the sync and cache header job with the Hugo native deployment - but as of know, the build task that I use, does not support that.\nUpdate (August 19th, 2019) I could not wait until the hugo extension is implementing the deploy command, so I thought lets try to use it with the PowerShell tasks of Azure DevOps.\nMy build server is a windows server (see post \u0026ldquo;SELF-HOSTED AZURE DEVOPS BUILD/RELEASE AGENT WITH TERRAFORM - WINDOWS-EDITION\u0026rdquo;) and I installed Hugo on it with Chocolatey. Then I used a powershell task to execute both the \u0026lsquo;hugo\u0026rsquo; publish and the \u0026lsquo;hugo deploy\u0026rsquo; command - and it worked straight out of the box!\nAnd the commands in a copy\u0026amp;paste-friendly version: #publish hugo --source $(Build.SourcesDirectory) --destination $(Build.SourcesDirectory)\\public --enableGitInfo --i18n-warnings --verbose --cleanDestinationDir #deploy $Env:AZURE_STORAGE_ACCOUNT = \u0026#34;\u0026lt;storageaccount\u0026gt;\u0026#34; $Env:AZURE_STORAGE_KEY = \u0026#34;\u0026lt;storageaccountkey\u0026gt;\u0026#34; hugo deploy azure --maxDeletes -1\nAfterwards I installed the chocolatey task to update Hugo to the latest version if there is one - that is not yet tested. Incremental deployment takes roughly 1 minute (for 1094 pages, 650MB) - thats awesome, right?\nFor local testing, the native deployment is great, too!\nHope it helps,\nMax\n",
    "tags": ["Azure CLI"],
    "categories": ["Azure","Hugo"],
    "feature": "https://melcher.dev/2019/08/native-hugo-deployment-to-azure/images/hugodeploy.gif"
  },
  {
    "url": "https://melcher.dev/2019/08/upload-custom-debian-image-to-azure-waagent-stuck/",
    "title": "Upload custom Debian image to Azure - waagent stuck",
    "date_published": "2019-08-06T10:47:56+02:00",
    "description": "Yesterday I spent my day trying to upload a custom Debian VM to Azure and stuck during the installation of the waagent daemon.\n",
    "content": "Yesterday I spent my day trying to upload a custom Debian VM to Azure and stuck during the installation of the waagent daemon.\nBackground I got an ISO file that installs a solution sitting on Debian 9. The goal was to create a VM with it and host it on Azure. So I created a new hyper-v VM on Azure with 32 cores and 128GB (D32s_v3) and followed the excellent guide in the Azure docs to prepare the VM to make it Azure-ready.\nIt worked flawlessly until I reached the point where you have to install the waagent daemon with\napt-get install waagent\nAs of writing this, the command installs the version 2.2.34-4 of waagent - and that killed my local VM during the installation of it: It somehow gets stuck and blocks the session. If you reconnect and continue with the steps in the article, the VM will not communicate with the Azure backend. And most importantly, SSH does not work at all so fixing the VM after copying to Azure is nearly impossible.\nSolution I tried to fix the waagent debian package but with zero success (dpkg-reconfigure, checking the logs, etc.) - I checked the github repository and the debian 2.2.34 package is quite dated (Nov 20, 2018!) - I opened an issue to get that fixed. Luckily you can install the waagent from source:\n#download the waagent version 2.2.42 apt-get update apt-get install unzip wget https://github.com/Azure/WALinuxAgent/archive/v2.2.42.zip unzip v2.2.42.zip cd WALinuxAgent-2.2.42 #installing prerequisites wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install -U pip setuptools #install the waagent python setup.py install --register-service #enable the service so it is started after reboot systemctl enable waagent After that you can \u0026lsquo;sysprep\u0026rsquo; the linux image with:\nwaagent -deprovision And then finally upload it to Azure, create a disk out of the VHD and create a VM with it. I used az storage blob upload in the first iterations, but was disappointed by the upload speed. Then I used Azure Storage Explorer and got speeds beyond 1000 Mbps. It uses AzCopy under the hood to make that possible:\n$env:AZCOPY_CRED_TYPE = \u0026#34;Anonymous\u0026#34;; ./azcopy.exe copy \u0026#34;\u0026lt;source\u0026gt;\u0026#34; \u0026#34;\u0026lt;targetSAS\u0026gt;\u0026#34; --overwrite=false --follow-symlinks --recursive --from-to=LocalBlob --blob-type=PageBlob --put-md5; $env:AZCOPY_CRED_TYPE = \u0026#34;\u0026#34;; And then I created a disk and with that a new VM:\naz disk create --resource-group \u0026lt;ResourceGroup\u0026gt; --name \u0026lt;DiskName\u0026gt; --source \u0026lt;UrlToBlob\u0026gt; az vm create --resource-group \u0026lt;ResourceGroup\u0026gt; --location \u0026lt;location\u0026gt; --name \u0026lt;VMName\u0026gt; --os-type linux --attach-os-disk \u0026lt;DiskName\u0026gt; --accelerated-networking true --size Standard_D4s_v3 After that the VM was registered correctly and I can access it via SSH.\nLearnings During the migration I (re-)learned a couple of things:\nNested-VMs on Azure is great for this. Spin up a decent VM with tons of cores and create a VM there. Networking took a while to configure, but the excellent post by Thomas Maurer helped me setting up the NAT so the inner VM could access the internet. His post was easier to understand than the Azure docs article. The VHD file must be fixed size and the old format - VHDX is not supported on Azure. Ensure that you have enough disk space on your OS disk if you place the file there. Oversizing the OS disk gives you a great performance boost - don\u0026rsquo;t be cheap, or be patient :) Uploading the fixed size VM, mine had 30GB takes a bunch of time - you can drastically speed things up if you use the AzCopy tool (or the Azure Storage Explorer). I reached 1100 Mbps! You can automate the entire chain of altering the image, stopping the VHD, uploading it, creating a disk, creating the VM - Azure CLI is awesome for that. That reduced my iteration time to ~15 minutes. A static IP within the nested VM is great to get going, but does not work once you have uploaded the VM to Azure. Don\u0026rsquo;t forget to change it to DHCP before you upload. Hope it helps,\nMax\n",
    "tags": ["waagent","quickfix"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2019/08/upload-custom-debian-image-to-azure-waagent-stuck/images/waagent-debian-manual.png"
  },
  {
    "url": "https://melcher.dev/2019/06/azure-storage-blob-sync-updates-to-azcopy-and-azure-cli/",
    "title": "Azure Storage Blob Sync - Updates to AzCopy and Azure CLI",
    "date_published": "2019-06-17T18:22:24+02:00",
    "description": "There is a new sync API available in AZCopy v10 that makes me happy - and its already included in Azure CLI: sync a folder or file to Azure blob storage (or vice versa) - in this post I show you how I use this for my blog!\n",
    "content": "There is a new sync API available in AZCopy v10 that makes me happy - and its already included in Azure CLI: sync a folder or file to Azure blob storage (or vice versa) - in this post I show you how I use this for my blog!\nIn version 10 of the AZCopy tool, a new feature was introduced that I was waiting for a long time that solves a simple problem: Sync a folder with Azure blob storage. Everything that is new or changed in a source folder should be uploaded to a target blob storage - and - optionally, files that are no longer required can be removed. Awesomesauce!\nAnd the same API is now available in Azure CLI (version \u0026gt;= 2.0.65, released on May 21, 2019) - the AZCopy v10 tool is included.\nWith the following line I publish this blog to Azure Storage:\naz storage blob sync -c $web \u0026ndash;account-name melcherit -s \u0026ldquo;C:\\agent_work\\1\\s\\public\u0026rdquo;\n\u0026ndash;account-name is the storage account name -c is the target blob storage container -s is the local source folder Update your Azure CLI (just run the installation again)!\nWarning! The Azure CLI command does not allow to specify if destination files should be deleted or not - if you need that control, you have to use the AZCopy v10 tool directly.\nThe full documentation is here:\naz storage blob sync AzCopy sync My use cases I use this to deploy this blog to Azure Storage Static Website - see details here - and my deployment did leave files behind that were no longer required. Or in the case I change the case of a file, the change was not replicated to Azure, because Azure blob storage is case-sensitive! That lead to unexpected behavior and simply was not clean. I experimented with deleting the entire container during a deployment, but deleting 2GB files and copying them again, took too long (I am terribly impatient!).\nIn the past, I used Azure Storage to distribute PowerShell scripts in a customer project - and not being able to sync (especially remove and rename scripts) easily, caused some issues - not great but now solved.\nUsage in Azure DevOps I automated the deployment of my blog (of course!) and use Azure DevOps for that - once I \u0026lsquo;git push\u0026rsquo; the changes, the Azure Pipeline compiles my blog and copies the file to Azure Storage. Before that, I used the Azure File Copy task (version 3) - and the sync API wont be supported in this task.\nI helped myself by using the AzureCLI task (version 1) with the exact same command I showed you above:\naz storage blob sync -c $web \u0026ndash;account-name melcherit -s \u0026ldquo;$(System.DefaultWorkingDirectory)\\public\u0026rdquo;\nYou can see that during the deployment, both source and target are enumerated and compared. Then files are transferred and deleted - cool. The task needs 22 seconds in my case and compares 3194 files (657MB). The first execution was fun - so much stuff on the blob storage that was no longer required.\nWarning! That leads to the second warning: The API is powerful - it might make sense to protect yourself by enabling soft delete so you can recover if something went wrong.\nSo, what are you waiting for?\nHope it helps,\nMax\n",
    "tags": ["AzCopy","AZ CLI","Azure CLI","Storage","Sync","Performance"],
    "categories": ["Hugo","Azure DevOps","Azure CLI"],
    "feature": "https://melcher.dev/2019/06/azure-storage-blob-sync-updates-to-azcopy-and-azure-cli/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2019/06/azure-storage-static-website-ssl-and-root-domain-dns/",
    "title": "Azure Storage Static Website - SSL and Root Domain DNS",
    "date_published": "2019-06-16T14:01:36+02:00",
    "description": "Azure Storage Static website feature is really awesome - and great websites for less than 1$ a month can be hosted with them - but unfortunately, they can only mapped to subdomains. In this article, I explain how to get it working for both root and subdomains.\n",
    "content": "Azure Storage Static website feature is really awesome - and great websites for less than 1$ a month can be hosted with them - but unfortunately, they can only mapped to subdomains. In this article, I explain how to get it working for both root and subdomains.\nAzure Storage Static Website As mentioned a few times here and there, I am using Azure Storage Static Websites to host a few websites (read more, here and here). It works great, is performant and overall I pretty much enjoy blogging more - maybe writing in VS Code gives me more joy than in Wordpress. The only thing that bugged me setting up the website, was the fact that you cannot host Azure Storage Static Websites on the root domain. So if your website only lives on www.yourawesomewebsite.net (subdomain) then you are fine - if you want to serve your website also on yourawesomewebsite.com (rootdomain) then you cannot do that natively on Azure Storage.\nI put a neat little note on the docs.microsoft.com page so that people do not waste too much time on it: It\u0026rsquo;s really awesome that you can just update the documentation if you think that something is missing or not like you would expect it.\nBut let\u0026rsquo;s move on to a solution.\nAzure CDN and Cloudflare In my solution, and I guess there are more ways to solve it, I use Azure CDN and Cloudfare to get my blog served on the rootdomains and subdomains:\nmelcher.dev melcher.it www.melcher.dev www.melcher.it For that, you have to create the Azure CDN that maps to your Azure Storage Static Website. You can do that by creating a CDN profile. I chose the Microsoft Standard CDN because its cheap and has the features that I need. Afterwards I created an endpoint that exposes the Azure Storage:\nNow my website is served through the cache and is available at melcher.azureedge.net\nThen the most time consuming part needs to be done. You have to request a free SSL certificates for the CDN for your root and subdomains - all of them. Click on Custom Domain and create them:\nThat process depends on your domain registrar, but the Azure wizard will guide you through it.\nOnce this is done, the Azure CDN can present a valid SSL certificate if it gets requested.\nThat could be it, but, there is a SEO downside if you just use it like that.\nRedirects for www and second domains I do not want to get SEO punished for serving content on the same domains (if you only have one root domain you are probably fine!), so I forward traffic from www to the rootdomain and from melcher.it to melcher.dev. In order to do this I use Cloudflare to manage my Domains (and have a second cache). The only issue I had with Cloudflare and Azure is the domain validation part. If you do validate the domain, you have to disable the Cloudflare proxy for that time (disable the cloud icon on the far right) - otherwise it wont work. If the validation does not work, try it with the alternative verification method - and be patient - DNS stuff takes time.\nAnd then, finally, you can manage the Cloudflare Page Rules to forward the traffic to the one and only domain:\nIn my case I route everything\nmelcher.it/\nto my new domain\nhttps://melcher.dev/$2\nthe * is a wildcard that matches everything and can be reused in $ variables. So $2 is the match behind melcher.it/.\nThat\u0026rsquo;s great - and you can do that with the Cloudflare basic account that is free. By enabling the Cloudflare proxy you get a second cache in front of the Azure CDN - so Cloudflare will reduce your Azure bill by reducing the requests. Awesome.\nThe request flows to the following services: It is not as convenient as it should be, but once configured it is mostly free and a super solid setup.\n",
    "tags": ["Storage","SubDomain","RootDomain","SSL"],
    "categories": ["Hugo","Azure"],
    "feature": "https://melcher.dev/2019/06/azure-storage-static-website-ssl-and-root-domain-dns/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2019/05/azure-devops-export-wiki-as-pdf/",
    "title": "Azure DevOps: Export Wiki as PDF",
    "date_published": "2019-05-27T23:30:17+02:00",
    "description": "Azure DevOps has undoubtedly a great wiki. Markdown support, copy and paste of screenshots transparently managed by git - awesome. Surprisingly, a \u0026rsquo;export as PDF\u0026rsquo; functionality is missing so I decided to create a small tool.\n",
    "content": "Azure DevOps has undoubtedly a great wiki. Markdown support, copy and paste of screenshots transparently managed by git - awesome. Surprisingly, a \u0026rsquo;export as PDF\u0026rsquo; functionality is missing so I decided to create a small tool.\nAzureDevOps.WikiPDFExport It started as a tiny proof of concept and took no longer as 1 hour to hack it together - a small, self-contained .NET Core console tool that converts a Azure DevOps wiki to a PDF.\nWhat would be better to showcase the functionality than to convert an actual wiki to an PDF?\nFunctionality Currently, the tool has only basic features - and maybe it stays like this forever. The feature-set is the following:\nExport all wiki pages (and sub pages) in the correct order including styles and formatting. Includes pictures (remote and relative urls) Creates PDF bookmarks to all pages for easier navigation within the PDF If you link to other wiki pages, the link in the PDF will work, too. Everything self-contained. Download the .exe file, run it, done. Tool can be used as part of a build, see Build Task It is fast: A wiki with 160 pages is created in less than a second. Open Source I put the source code to GitHub: https://github.com/MaxMelcher/AzureDevOps.WikiPDFExport\nDownload The latest version of the tool can be downloaded here. With VSCode and .NET Core 2.2 installed, you can build it by yourself, too.\nLicense The tool is MIT licensed:\nTHE SOFTWARE IS PROVIDED \u0026ldquo;AS IS\u0026rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nThanks I use a couple of other great open source libraries:\nCommandLineParser to parse the command line MarkDig to parse markdown files to HTML. DinkToPdf to export HTML to PDF dotnet-warp to release a self-contained exe file Closing Building this tiny tool was good fun and I learned a lot, again. I build the tool entirely with VSCode and I have to say, that was an awesome experience! So lean :)\nSo, go create some PDFs - but please don\u0026rsquo;t PRINT them.\nThanks\nMax\n",
    "tags": ["Wiki","PDF"],
    "categories": ["Azure DevOps"],
    "feature": "https://melcher.dev/2019/05/azure-devops-export-wiki-as-pdf/images/AzureDevOps_WikiPDFExport.png"
  },
  {
    "url": "https://melcher.dev/2019/03/quick-tip-use-terraform-to-secure-ssh/rdp-connections-to-azure-vms/",
    "title": "Quick tip: Use Terraform to secure SSH/RDP connections to Azure VMs",
    "date_published": "2019-03-27T15:21:45+01:00",
    "description": "I don\u0026rsquo;t want to expose VMs to the entire internet - and neither should you. That is basically an invite to brute force attack the VM. Therefore, if I don\u0026rsquo;t use a VPN or Express Route connection to use private IPs, I use Network Security Groups (NSG) to control the traffic to VMs by allowing a single source IP.\nIn this post, I show how I do that with Terraform.\n",
    "content": "I don\u0026rsquo;t want to expose VMs to the entire internet - and neither should you. That is basically an invite to brute force attack the VM. Therefore, if I don\u0026rsquo;t use a VPN or Express Route connection to use private IPs, I use Network Security Groups (NSG) to control the traffic to VMs by allowing a single source IP.\nIn this post, I show how I do that with Terraform.\nSource IP and NSGs The service ipify.org returns your current IP: This IP can then be used to configure a data provider in Terraform:\n# Request your IP data \u0026#34;http\u0026#34; \u0026#34;myip\u0026#34; { url = \u0026#34;https://api.ipify.org/\u0026#34; } Next up we want to use the data in an NSG rule to allow SSH (port 22) connections only from that IP:\n# Create Network Security Group and rule resource \u0026#34;azurerm_network_security_group\u0026#34; \u0026#34;onprem-nsg\u0026#34; { name = \u0026#34;nsg\u0026#34; #provide a value for the location location = \u0026#34;\u0026#34; #provide a value for the resource group resource_group_name = \u0026#34;\u0026#34; #Provision a security rule with your current IP as a source filter security_rule { name = \u0026#34;SSH\u0026#34; priority = 1001 direction = \u0026#34;Inbound\u0026#34; access = \u0026#34;Allow\u0026#34; protocol = \u0026#34;Tcp\u0026#34; source_port_range = \u0026#34;*\u0026#34; destination_port_range = \u0026#34;22\u0026#34; source_address_prefix = \u0026#34;${chomp(data.http.myip.body)}\u0026#34; destination_address_prefix = \u0026#34;*\u0026#34; } } The same approach can, of course, be used for other ports and protocols.\nOnce you execute/terraform apply that script, only connections from a single source IP are allowed. If your source IP changes, you must re-apply the scripts.\nHope it helps,\nMax\n",
    "tags": ["NSG","Terraform","Azure","Security","Network Security Group","Firewall"],
    "categories": ["Azure","Terraform"],
    "feature": "https://melcher.dev/2019/03/quick-tip-use-terraform-to-secure-ssh/rdp-connections-to-azure-vms/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2019/03/running-hugo-on-azure-for-2-a-month/",
    "title": "Running Hugo on Azure for 2$ a Month",
    "date_published": "2019-03-27T07:14:44+01:00",
    "description": "Hosting a super fast, modern, yet super-simple blog on Azure for 2$ a month? In this post, I explain, step by step, how I run this blog \u0026ldquo;serverless\u0026rdquo; and how my architecture evolved and simplified over time. Never had so much fun to blog.\n",
    "content": "Hosting a super fast, modern, yet super-simple blog on Azure for 2$ a month? In this post, I explain, step by step, how I run this blog \u0026ldquo;serverless\u0026rdquo; and how my architecture evolved and simplified over time. Never had so much fun to blog.\nHugo - a primer Hugo is a static website generator that I chose because of its simplicity and performance. You write a few lines of Markdown in VSCode, Hugo compiles them literally in milliseconds to HTML. You put the HTML on a web server and you are done. No additional moving parts like databases and pretty small attack surface because everything is static (looking at you, Wordpress plugins!). No parts that I have to patch! Simplicity wins.\nFrom the publishing side, with Hugo, you get a modern content management system with a great community and awesome features. And because you just write markdown files, you can choose every editor that you want to use. And you can compose them without internet connectivity. You can tell, I am a big fan!\nMy publishing workflow: I create my posts in VSCode - the experience for writing this post looks like this: With the local web server that comes with Hugo, I get an instant preview: Building my entire blog with 1087 pages and a lot of other stuff took 6 seconds: Great, right?\nAt first, I was worried about Markdown - but with the live preview and a markdown cheat sheet it is a what you see is what you get (WYSISWG) experience that just works everywhere. Because I can edit my posts in Azure DevOps in a browser, I am not even dependant on a local environment. That comes handy if you quickly want to fix a typo or a quick update. And with git as a backend, I can commit tiny changes, continue later, switch PCs - as simple as writing code ;)\nLastly, I use tinypng.com/ to compress my images. And the \u0026lsquo;Check my links\u0026rsquo; Chrome extension to quickly check that all links are correct.\nEvolving Architecture - things get faster, better, cheaper When I migrated of Wordpress to Hugo, I hosted this blog on Azure App Service. This was great to get going, and by then there was no alternative to me. Once the Azure Storage Static Website feature was available, I immediately made the switch to it. Having simple storage that can be exposed to the web is a quick win for static websites and a no-brainer from a cost perspective. So I migrated to that and switched to Azure DevOps for updating my blog in a CI/CD manner. Cutting the cost from 70$ to approx 2$ per month is awesome.\nThe old architecture was not overly complicated - but doing a build with a .deployment file pointing to a .bat file felt awkward. My source code was in bitbucket and a push to it triggered a deployment. Okayish, but too expensive for my tiny blog because of the fully fledged App Service.\nHow to build it So if you want to have a neat little website or blog for small money, I am going to give you a step by step instruction how to get up and running. Bare with me, it is a rather long post.\nAs a prerequisite you need the following:\nPrerequisites a free Azure Account. You can try for free for 12 months and get 5GB of storage to host your website. a free Azure DevOps Account. It\u0026rsquo;s free for up to 5 users and you get 1800 build minutes to update your blog. If you open source your code, then you get unlimited build minutes! VSCode (free) - or a similar and awesome code editor. Prerequisites for initial setup I use the awesome \u0026lsquo;yo team\u0026rsquo; generator by Donovan Brown to set up and configure Azure DevOps. This is not the only way to create an Azure DevOps project, but for me it automates the following:\nIt creates an Azure DevOps project It creates a Service Endpoint so Azure DevOps is allowed to create resources on Azure. It creates a new git project locally and connects it with the Azure DevOps git repository. A prerequisite for \u0026lsquo;yo team\u0026rsquo; is an installation of Node.js (install the LTS version!). Once you have it installed, you can install yeoman and the generator with\nnpm install -g yo generator-team Now let\u0026rsquo;s get started:\nStep 1: Setting up Azure DevOps As mentioned earlier, with \u0026lsquo;yo team\u0026rsquo; installed you can script the basic setup of Azure DevOps, the build pipeline and the connection to Azure. To make it work you need a Personal Access Token (PAT) to authenticate against Azure DevOps. You can create a PAT via the following link:\nhttps://dev.azure.com/[ORGANIZATION]/_usersSettings/tokens\nYou have to replace [ORGANIZATION] with your organization, of course. Then click on \u0026ldquo;New Token\u0026rdquo; on the left and create a token with full access scope that is valid for 30 days. We do this only once, so it is not required to have a token that lives longer.\nAfter saving the form, you get the PAT. Please copy it to a safe place so that we can use it later. Once you leave the page, you can\u0026rsquo;t see it again and would have to create a new one.\nNext up, copy the script below and replace the 3 placeholders:\n$projectName with the name of your new project $organizationName with the name of your Azure DevOps organization. $azureDevOpsPersonalAccessToken with the PAT you generated before. Then execute the following command to create the project: yo team:project --applicationName $projectName --tfs $organizationName --pat $azureDevOpsPersonalAccessToken\nAfterward, you have a new, empty project in Azure DevOps: Next up, we need to connect Azure DevOps with Azure so that we can create resources on Azure and finally store the HTML files. Therefore I use the yo team wizard to create the connection by using the command:\nyo team:azure The required values and the Azure connection is then prompted: After successfully providing all values, you have a new service connection in Azure DevOps: Url: https://dev.azure.com/[Organization]/[Project]/_settings/adminservices Please note down the Azure Subscription that you selected, in my case that is Microsoft Azure Internal Consumption.\nNext, we create a local git repository and connect it to Azure DevOps. Open a PowerShell prompt and navigate to a folder where the git repository should be stored and then execute: yo team:git\nAgain, provide the prompted values: Afterward, download the following yaml build file and open it with a text editor.\nIn line 17 you have to specify the Azure subscription name. When in doubt, get it here. In line 20 you can specify the resource group name. In line 21 you must specify the storage account name. This name must be unique, otherwise, the creation will fail. In line 22 you can specify the storage location. In line 33 you have to specify the Azure subscription name, same as line 17. In line 35 you have to add the same storage account name from line 21.\nOnce you commit this file and push it to Azure DevOps, a build is triggered. It will create a storage account for you with the static website feature enabled.\nThe foundation is done, now let\u0026rsquo;s configure Hugo.\nStep 2: Setting up Hugo The steps to create a new Hugo site are pretty easy. Firstly you need the Hugo executable. Most conveniently you get it via chocolatey by using choco install -y hugo but you could also just download the latest version of Github.\nOnce you have that, open a PowerShell prompt and navigate to the git folder we created above. The use hugo new site --force . to create a new, empty Hugo site.\nHugo comes by default without a theme, so you have to get one from the theme catalog. I started with the theme \u0026ldquo;Ananke\u0026rdquo; and cloned it into the themes subfolder.\ngit submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/gohugo-theme-ananke To start with an example site, use the following commands: #copy the example site to the parent folder Copy-Item -Recurse -Force .\\themes\\gohugo-theme-ananke\\exampleSite\\* . #adjust the theme configuration (Get-Content config.toml) -replace \u0026#39;themesDir = \u0026#34;../..\u0026#34;\u0026#39; | Set-Content config.toml\nThe rest of the theme options are explained in the theme repository - you can configure a lot of stuff. If you want to use my theme, I adjusted \u0026lsquo;[hugo-future-imperfect]\u0026rsquo;(https://github.com/jpescador/hugo-future-imperfect) to my needs.\nTo see the website locally, start Hugo in server mode:\nhugo server Then your website will be available at http://localhost:1313 and should look like this:\nStep 3: Publish Great, you read so far! You are just a push away to have the website running on Azure:\ngit add . git commit -m \u0026#34;first push\u0026#34; git push Then switch to Azure DevOps to see the build output\nhttps://dev.azure.com/[organization]/[project]/_build/ (replace the placeholder)\nA build takes approximately 3 minutes here - after the first build you could disable the Azure CLI task, that would save 50% so publishing only takes 90 seconds.\nOnce that successfully ran, the new website is available at:\nhttps://mamelch12345.z6.web.core.windows.net/ - your URL is of course different.\nYou can get your URL either in the Azure Portal or you can click on the Azure DevOps build on the Task \u0026ldquo;Azure CLI\u0026rdquo;. It is shown in the \u0026lsquo;primaryEndpoint\u0026rsquo; block:\nYour domain Lastly, you should, of course, point your domain to the storage account. This can be done in the Azure portal (no automation AFAIK), documentation is available here. Unfortunately, with this approach, you do not get an SSL certificate for your domain and you cannot add it right away, yet. To add a certificate and a custom domain, you should follow this guide, to put Azure CDN in front of the Azure Storage. My domain is currently managed by Cloudflare, I added their cloud proxy in front of the Azure CDN - that further reduces my cost.\nCurrent Architecture To sum it up: In my current architecture, I use Azure DevOps to store my source code (free), using the build minutes (free) to put the resulting HTML files on Azure Storage (almost free). Then I use Azure CDN to speed up the delivery worldwide (almost free). Additionally, I index my blog with Azure Search (free) to have a top-notch search function.\nMore Hugo In this post, I could only scratch the surface of what Hugo is capable of, so I really suggest you dive into the great documentation to learn more.\nCosts Ok, let\u0026rsquo;s have a look at the cost: So 5.63€ for March 2019? You said 2$ a month!!! Well, yes, on average it is that. But in March I experimented a lot and that resulted in several wipes of the entire Azure Storage. Additionally, I had GRS (geo-redundant storage) enabled on this storage account for reasons that are no longer available to me. The normal month is usually 2$ for me. All transaction- or transfer-related costs should be pretty much covered by the Cloudflare CDN proxy in front of the Azure CDN, so even huge spikes do not cost me anything. Awesome.\nFor completeness, here is the calculation.\n0.92$ - still not 2$. Yepp, I automated the post to Twitter and LinkedIn with a LogicApp and that one cost 1.11$ per month. And it checked my blog every minute for new posts by polling the RSS feed, reduced it to 60 minutes to save some pennies.\nPerformance Comparing website performance is a tough and complex matter. As mentioned above, every request is cached with the excellent Cloudflare proxy. Static HTML files are perfect for caching and there is no other IO dependency (e.g. database connect) for my blog:\nSo the response times around the globe are super low. Other performance optimizations like javascript \u0026amp; CSS bundling are provided by Hugo - but it really depends on the theme and how it is implemented. And on the images that you put on your pages\u0026hellip; Am I happy with the perceived performance? For 2$ a month and the little time I put into optimizing my blog: I am super happy.\nChrome most of the time loads in less than a second: Google Analytics claims that the average load time is: 2.91s I am questioning the numbers a little here - Internet Explorer is the fastest browser?!\nBut in general, I am totally fine with the performance - how fast did the page load for you?!\nSecurity Security and Static Websites are a great start for decent security. No SQL injections, no connection strings, no web servers that you have to patch, no PHP - nothing. And a free SSL certificate secures all traffic (Cloudflare makes that one very easy!) - good, right? Additionally, I configured HTTP Strict Transport Security (HSTS), so accessing this blog without SSL is prohibited. The only thing that I need to protect is the access to the Azure storage account and my CDNs. 2-Factor and passwords even I do not know should be ok.\nOn the other hand, additional headers, like Referrer-Policy or X-Frame-Options, Content-Security-Policy cannot be set.\nAnd then there are some parts that are a little out of my hands. Like the DISQUS comment integration. If they screw up, it will affect my blog. But I am pretty sure they have decent security measures, so I accept that risk.\nTiny things I love about Hugo Additionally, here are a few points that might come unnoticed if you briefly look at Hugo, but are great if you need them:\nSimple template language As mentioned before, I started with the awesome \u0026lsquo;hugo-future-imperfect\u0026rsquo; theme. It\u0026rsquo;s well written and the critical parts are documented. With that, it was rather easy for me to do tiny adjustments:\nAdding the free Azure Search as \u0026lsquo;search as you type\u0026rsquo; addon. changing the \u0026lsquo;scroll-to-top\u0026rsquo; function in the bottom right (turn sound on). Modernizing the javascript frameworks Adding placeholders here and there that are managed centrally. Showing the recent 3 posts in the sidebar, but not the one that is shown on the right. Putting the Xing social icon in the top Tweaked the header on the left Added yearly/monthly archives, e.g. all posts for 2019 or March 2019 Plain markdown files After migrating of Wordpress, I had lots of issues keeping my URL schema or my short URLs up and running. But I used a few lines of PowerShell to update the page metadata. I had to do this multiple times because of some edge cases, but with the power of git, a revert was super fast and effective. I really like the Front Matter, the metadata describing a post, in the readable form attached to a post. It makes just sense.\nIn the screenshot, you can see all the metadata I provide for my posts. You can easily extend them and use them in your theme.\nDrafts in the open / Short URLs Usually, a draft is not visible to anyone and of course, that is okay. But sometimes you want to share a draft with someone for a review or help. So on Wordpress, I, therefore, installed a plugin, that made private sharing possible by adding a token to the URL so that only people with that link could access the draft. And I thought I want to have that for Hugo, too. Luckily with the flexible template language of Hugo, that is very easy to do. Create a new folder in the content section and then hide it from the places where Hugo iterates all posts (for me that is index.HTML, home.json, rss.xml, sitemap.xml - but depends on your theme!). The iteration then looks like this:\n1 2 3 4 5 {{ $paginator := .Paginate (where .Site.RegularPages \u0026#34;Section\u0026#34; \u0026#34;not in\u0026#34; (slice \u0026#34;s\u0026#34; \u0026#34;draft\u0026#34;) ) }} {{ range $paginator.Pages }} {{ .Render \u0026#34;content-list\u0026#34; }} {{ partial \u0026#34;share-menu\u0026#34; . }} {{ end }} I line 1 you can see that I do a where clause on all Pages that are not in the Section \u0026ldquo;s\u0026rdquo; nor in \u0026ldquo;draft\u0026rdquo;. In other words I hide my shorturls and my drafts.\nIf you then add an Alias to the Front Matter, then the URL is still available after regular publishing.\nThe same approach can be used for short-URLs, too.\nSummary I guess that is the longest and detailed post I ever wrote: I hope you came so far and learned a bit here and there - if so, make my day and leave a comment! If things in the step-by-step guide did not work out for you, leave a comment. If you have other thoughts an concerns about the costs, security - leave a comment :)\nHope it helps,\nMax\n",
    "tags": ["Hugo","Performance","Azure","Azure Storage","Azure CDN","Cloudflare","Azure DevOps"],
    "categories": ["Hugo"],
    "feature": "https://melcher.dev/2019/03/running-hugo-on-azure-for-2-a-month/images/HugoAzureDevOpsAzureStorage.png"
  },
  {
    "url": "https://melcher.dev/2019/03/powershell-prompt-awesomeness-you-need-this/",
    "title": "PowerShell Prompt Awesomeness - you need this!",
    "date_published": "2019-03-12T23:53:16+01:00",
    "description": "Adjust the default prompt in PowerShell is possible: In this short post I show you how and share my new prompt!\n",
    "content": "Adjust the default prompt in PowerShell is possible: In this short post I show you how and share my new prompt!\nTwitter Serendipity I saw this thread on Twitter by some smart PowerShell folks: with the updated gist at https://t.co/zbpVShhSCr pic.twitter.com/AdKTWnZWTl\n\u0026mdash; Ryan (@ryanyates1990) March 12, 2019 \u0026hellip; and immediately thought that this would be EXTREMLY #awesomesauce to have.\nI am grateful that at least two of them, namely Ryan Yates and Amanda Debler shared their prompt function here and here - and I mixed both of them and came up my version.\nBackground - The Prompt Function If you open a PowerShell session and type in a command, every time you issue it, the Prompt() function defined in the path C:\\Users[USERNAME]\\Documents\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1 is executed. How cool is that. A prompt override!\nSo if you want to edit your Prompt() function you can open a new PowerShell session and type code $PROFILE or if you dont have VSCode (?!) installed notepad $PROFILE to open the file.\nMy Prompt Function So combining the two gists from Amanda and Ryan, my Prompt() function has three core features:\nOnly the last two folders and the root drive is shown in the current path. The path c:\\very\\deep\\path\\really\\really\\deep becomes to c:...\\really\\deep The execution time is shown Colored in green if the execution time is below 1 second; milliseconds are shown. Yellow if the time is below a minute; seconds are shown. Red if the time is above a minute; hours, minutes and seconds are shown. If you have a script that runs longer than a day (really?!) then you might have to fix that. If you are in a path that is a git repository, the branch and the state is shown. You need Posh-Git installed - with chocolatey its choco install poshgit. And all the features in one screenshot: And it even works in VSCode. Awesome, right?\nGive me the code And here comes my function - feel free to adjust to your needs:\nNote the posh-git path at the very end!\n\u0026lt;# .Description Custom Prompt() function with 3 features: 1. Show execution times for commands 2. Reduce path length to show only 2 parent folders 3. Show git status if the folder is under source control .Kudos As mentioned in the post, I mixed the script based on existing scripts by @ryanyates1990, @texmandie, @fatherjack, @FredWeinmann, @psdbatools, @cl #\u0026gt; function Prompt { try { $history = Get-History -ErrorAction Ignore -Count 1 if ($history) { Write-Host \u0026#34;[\u0026#34; -NoNewline $ts = New-TimeSpan $history.StartExecutionTime $history.EndExecutionTime switch ($ts) { {$_.TotalSeconds -lt 1} { [int]$d = $_.TotalMilliseconds \u0026#39;{0}ms\u0026#39; -f ($d) | Write-Host -ForegroundColor Black -NoNewline -BackgroundColor DarkGreen break } {$_.totalminutes -lt 1} { [int]$d = $_.TotalSeconds \u0026#39;{0}s\u0026#39; -f ($d) | Write-Host -ForegroundColor Black -NoNewline -BackgroundColor DarkYellow break } {$_.totalminutes -ge 1} { \u0026#34;{0:HH:mm:ss}\u0026#34; -f ([datetime]$ts.Ticks) | Write-Host -ForegroundColor Gray -NoNewline -BackgroundColor Red break } } Write-Host \u0026#34;] \u0026#34; -NoNewline } if(Get-Module Posh-git) { Write-VcsStatus Write-Host \u0026#34; \u0026#34; -NoNewline } } catch { } # New line Write-Host \u0026#34;\u0026#34; # show the drive and then last 2 directories of current path if (($pwd.Path.Split(\u0026#39;\\\u0026#39;).count -gt 3)){ write-host \u0026#34;$($pwd.path.split(\u0026#39;\\\u0026#39;)[0], \u0026#39;...\u0026#39;, $pwd.path.split(\u0026#39;\\\u0026#39;)[-2], $pwd.path.split(\u0026#39;\\\u0026#39;)[-1] -join (\u0026#39;\\\u0026#39;))\u0026#34; -NoNewline } else{ Write-Host \u0026#34;$($pwd.path)\u0026#34; -NoNewline } \u0026#34;\u0026gt; \u0026#34; } #Adjust your post-git path! I installed it with chocolatey! Import-Module \u0026#39;C:\\tools\\poshgit\\dahlbyk-posh-git-9bda399\\src\\posh-git.psd1\u0026#39; The only \u0026ldquo;disadvantage\u0026rdquo; I noticed is, that the initial load of the PowerShell is delayed by 1 second. I guess thats because the post-git module is loaded. That is acceptable.\nI thought about moving the path and the execution time to the PowerShell console title - but that would not work in VSCode so I left it. Still liking the idea, maybe it is something for you.\nHope it helps,\nMax\n",
    "tags": ["PowerShell","Customization","Prompt","VSCode","PoshGit"],
    "categories": ["PowerShell"],
    "feature": "https://melcher.dev/2019/03/powershell-prompt-awesomeness-you-need-this/images/VSCode_Prompt.png"
  },
  {
    "url": "https://melcher.dev/2019/03/self-hosted-azure-devops-build/release-agent-with-terraform-windows-edition/",
    "title": "Self-Hosted Azure DevOps Build/Release Agent with Terraform - Windows-Edition",
    "date_published": "2019-03-12T15:27:21+01:00",
    "description": "In February I created a Azure DevOps Build/Release agent with terraform running on Ubuntu and due to many requests, here is the terraform script to do the same, but on a Windows Server.\n",
    "content": "In February I created a Azure DevOps Build/Release agent with terraform running on Ubuntu and due to many requests, here is the terraform script to do the same, but on a Windows Server.\nThe Terraform Script The Terraform script is pretty much the same as for the Ubuntu one - and the comments inside are hopefully self-explaining. If not, please leave a comment.\nDownload the whole script and the variable file. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 #Specify Resource Group variable \u0026#34;resourcegroup\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the resource group where the VM should be created\u0026#34; } variable \u0026#34;location\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the location where the resources should be created, e.g. westeurope\u0026#34; } #Replace [Organization] https://dev.azure.com/[Organization]/_usersSettings/tokens variable \u0026#34;url\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the Azure DevOps url e.g. https://dev.azure.com/mmelcher\u0026#34; } #Create via https://dev.azure.com/[Organization]/_usersSettings/tokens variable \u0026#34;pat\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Provide a Personal Access Token (PAT) for Azure DevOps\u0026#34; } #The build agent pool. Create it via https://dev.azure.com/[Organization]/_settings/agentpools?poolId=8\u0026amp;_a=agents variable \u0026#34;pool\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the name of the agent pool - must exist before\u0026#34; } #The name of the agent variable \u0026#34;agent\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the name of the agent\u0026#34; } variable \u0026#34;size\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the size of the VM\u0026#34; } variable \u0026#34;hostname\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the hostname of the VM\u0026#34; } variable \u0026#34;admin_username\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the admin username of the VM\u0026#34; } variable \u0026#34;admin_password\u0026#34; { type = \u0026#34;string\u0026#34; description = \u0026#34;Specify the admin username of the VM\u0026#34; } # Create a resource group if it doesn’t exist resource \u0026#34;azurerm_resource_group\u0026#34; \u0026#34;azuredevops\u0026#34; { name = \u0026#34;${var.resourcegroup}\u0026#34; location = \u0026#34;${var.location}\u0026#34; tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Create virtual network resource \u0026#34;azurerm_virtual_network\u0026#34; \u0026#34;azuredevopsnetwork_win\u0026#34; { name = \u0026#34;AzureDevOpsVnet_Win\u0026#34; address_space = [\u0026#34;10.200.0.0/16\u0026#34;] location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Create subnet resource \u0026#34;azurerm_subnet\u0026#34; \u0026#34;azuredevopssubnet_win\u0026#34; { name = \u0026#34;AzureDevopsSubnet_Win\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; virtual_network_name = \u0026#34;${azurerm_virtual_network.azuredevopsnetwork_win.name}\u0026#34; address_prefix = \u0026#34;10.200.2.0/24\u0026#34; } # Create public IPs resource \u0026#34;azurerm_public_ip\u0026#34; \u0026#34;azuredevopspublicip_win\u0026#34; { name = \u0026#34;AzureDevOpsPublicIP_Win\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; allocation_method = \u0026#34;Dynamic\u0026#34; tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Create Network Security Group and rule resource \u0026#34;azurerm_network_security_group\u0026#34; \u0026#34;azuredevopsnsg\u0026#34; { name = \u0026#34;AzureDevOpsNetworkSecurityGroup\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Create network interface resource \u0026#34;azurerm_network_interface\u0026#34; \u0026#34;azuredevopsnic_win\u0026#34; { name = \u0026#34;AzureDevOpsNIC_win\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; network_security_group_id = \u0026#34;${azurerm_network_security_group.azuredevopsnsg.id}\u0026#34; ip_configuration { name = \u0026#34;AzureDevOpsNicConfiguration_Win\u0026#34; subnet_id = \u0026#34;${azurerm_subnet.azuredevopssubnet_win.id}\u0026#34; private_ip_address_allocation = \u0026#34;dynamic\u0026#34; public_ip_address_id = \u0026#34;${azurerm_public_ip.azuredevopspublicip_win.id}\u0026#34; } tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Generate random text for a unique storage account name resource \u0026#34;random_id\u0026#34; \u0026#34;randomId\u0026#34; { keepers = { # Generate a new ID only when a new resource group is defined resource_group = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; } byte_length = 8 } # Create storage account for boot diagnostics resource \u0026#34;azurerm_storage_account\u0026#34; \u0026#34;azuredevopsstorageaccount\u0026#34; { name = \u0026#34;diag${random_id.randomId.hex}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; location = \u0026#34;${var.location}\u0026#34; account_tier = \u0026#34;Standard\u0026#34; account_replication_type = \u0026#34;LRS\u0026#34; tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Create virtual machine resource \u0026#34;azurerm_virtual_machine\u0026#34; \u0026#34;azuredevopsvm_win\u0026#34; { name = \u0026#34;AzureDevOps\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; network_interface_ids = [\u0026#34;${azurerm_network_interface.azuredevopsnic_win.id}\u0026#34;] vm_size = \u0026#34;${var.size}\u0026#34; delete_os_disk_on_termination = \u0026#34;true\u0026#34; delete_data_disks_on_termination = \u0026#34;true\u0026#34; storage_os_disk { name = \u0026#34;AzureDevOpsOsDiskWin\u0026#34; caching = \u0026#34;ReadWrite\u0026#34; create_option = \u0026#34;FromImage\u0026#34; managed_disk_type = \u0026#34;Premium_LRS\u0026#34; } storage_image_reference { publisher = \u0026#34;MicrosoftWindowsServer\u0026#34; offer = \u0026#34;WindowsServer\u0026#34; sku = \u0026#34;2016-Datacenter\u0026#34; version = \u0026#34;latest\u0026#34; } os_profile { computer_name = \u0026#34;${var.hostname}\u0026#34; admin_username = \u0026#34;${var.admin_username}\u0026#34; admin_password = \u0026#34;${var.admin_password}\u0026#34; } os_profile_windows_config { provision_vm_agent = true enable_automatic_upgrades = true } boot_diagnostics { enabled = \u0026#34;true\u0026#34; storage_uri = \u0026#34;${azurerm_storage_account.azuredevopsstorageaccount.primary_blob_endpoint}\u0026#34; } tags { environment = \u0026#34;AzureDevOps\u0026#34; } } # Custom script extension to install the DevOps agent resource \u0026#34;azurerm_virtual_machine_extension\u0026#34; \u0026#34;azuredevopsvmex\u0026#34; { name = \u0026#34;AzureDevOpsAgent\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; virtual_machine_name = \u0026#34;${azurerm_virtual_machine.azuredevopsvm_win.name}\u0026#34; publisher = \u0026#34;Microsoft.Compute\u0026#34; type = \u0026#34;CustomScriptExtension\u0026#34; type_handler_version = \u0026#34;1.9\u0026#34; settings = \u0026lt;\u0026lt;SETTINGS { \u0026#34;fileUris\u0026#34;: [\u0026#34;https://maxmelcherdevops.blob.core.windows.net/terraform/devops_win.ps1?sp=r\u0026amp;st=2019-03-13T11:13:24Z\u0026amp;se=2022-03-13T19:13:24Z\u0026amp;spr=https\u0026amp;sv=2018-03-28\u0026amp;sig=%2BlOz%2Fza3vlunvhARYgG5GLlrhzRADE1LrLUWu9cIlUc%3D\u0026amp;sr=b\u0026#34;], \u0026#34;commandToExecute\u0026#34;: \u0026#34;powershell.exe -ExecutionPolicy Unrestricted -File ./devops_win.ps1 -URL ${var.url} -PAT ${var.pat} -POOL ${var.pool} -AGENT ${var.agent}\u0026#34;, \u0026#34;timestamp\u0026#34; : \u0026#34;12\u0026#34; } SETTINGS tags { environment = \u0026#34;Production\u0026#34; } } This time I installed an B1MS VM - burstable VMs are perfect for build servers and they are cheap. The whole setup cost around 22€/month for a 24/7 setup. Perfect for my use case!\nNote Again, there is no NSG rule to allow RDP connections. If you want to connect to the VM, then you have to create a allow rule first to accept the connection. Safety first.\nPowerShell Installation of Azure DevOps Agent The \u0026lsquo;magic\u0026rsquo; happens in the custom script extension. With the PowerShell script I download the latest Azure DevOps build agent and configure it. The configuration parameters are all set via the terraform variable file.\nparam ( [string]$URL, [string]$PAT, [string]$POOL, [string]$AGENT ) Start-Transcript Write-Host \u0026#34;start\u0026#34; #test if an old installation exists, if so, delete the folder if (test-path \u0026#34;c:\\agent\u0026#34;) { Remove-Item -Path \u0026#34;c:\\agent\u0026#34; -Force -Confirm:$false -Recurse } #create a new folder new-item -ItemType Directory -Force -Path \u0026#34;c:\\agent\u0026#34; set-location \u0026#34;c:\\agent\u0026#34; $env:VSTS_AGENT_HTTPTRACE = $true #github requires tls 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 #get the latest build agent version $wr = Invoke-WebRequest https://api.github.com/repos/Microsoft/azure-pipelines-agent/releases/latest -UseBasicParsing $tag = ($wr | ConvertFrom-Json)[0].tag_name $tag = $tag.Substring(1) write-host \u0026#34;$tag is the latest version\u0026#34; #build the url $download = \u0026#34;https://vstsagentpackage.azureedge.net/agent/$tag/vsts-agent-win-x64-$tag.zip\u0026#34; #download the agent Invoke-WebRequest $download -Out agent.zip #expand the zip Expand-Archive -Path agent.zip -DestinationPath $PWD #run the config script of the build agent .\\config.cmd --unattended --url \u0026#34;$URL\u0026#34; --auth pat --token \u0026#34;$PAT\u0026#34; --pool \u0026#34;$POOL\u0026#34; --agent \u0026#34;$AGENT\u0026#34; --acceptTeeEula --runAsService #exit Stop-Transcript exit 0 Video See the script in action: Summary Same as for the Ubuntu server: With the terraform script above you get a naked Windows Server 2016 VM registered as Azure DevOps build/release agent in roughly 10 minutes for a few Euros per month. Once the agent is up and running you can (and must!) configure the agent to your needs. Don\u0026rsquo;t forget to patch the agents - or destroy and recreate them regularly.\nHope it helps,\nMax\n",
    "tags": ["Automation","Custom Script Extension","Azure","Terraform","Azure DevOps","Self-Hosted Build-Agent"],
    "categories": ["Azure","Terraform","Azure DevOps"],
    "feature": "https://melcher.dev/2019/03/self-hosted-azure-devops-build/release-agent-with-terraform-windows-edition/images/featured2.png"
  },
  {
    "url": "https://melcher.dev/2019/03/start-azure-indexer-from-azure-devops/",
    "title": "Start Azure Indexer from Azure DevOps",
    "date_published": "2019-03-11T14:35:20+01:00",
    "description": "As described in my last post, I switched to Azure Search for my site search. And because I use Azure DevOps for publishing new blog posts, I wanted to trigger an index run from my build pipeline.\n",
    "content": "As described in my last post, I switched to Azure Search for my site search. And because I use Azure DevOps for publishing new blog posts, I wanted to trigger an index run from my build pipeline.\nSurprisingly there is no Azure CLI command to trigger an index run, but there is a REST operation available. So I quickly created this PowerShell script:\n$params = @{ \u0026#34;api-key\u0026#34;=\u0026#34;[ADMIN KEY]\u0026#34;; } Invoke-WebRequest -Uri https://[SERVICE NAME].search.windows.net/indexers/[INDEXER NAME]/run?api-version=2017-11-11 -Method POST -Headers $params -UseBasicParsing You only have to replace all the [] values.\nI then added it to my Azure DevOps build:\nI discovered, that if you run this command on self-hosted build agent, then it fails without the -UseBasicParsing switch.\nSo once a new build is running, the Azure Search index gets updated.\nHope it helps,\nMax\n",
    "tags": ["CLI","PowerShell"],
    "categories": ["Azure Search","Azure DevOps"],
    "feature": "https://melcher.dev/2019/03/start-azure-indexer-from-azure-devops/images/AzureDevOps_CICD_AzureSearch.png"
  },
  {
    "url": "https://melcher.dev/2019/03/azuresearch-and-hugo-free-and-awesome/",
    "title": "AzureSearch and Hugo - free and awesome!",
    "date_published": "2019-03-08T14:27:11+01:00",
    "description": "Yesterday, my blog used the Google Site Search for delivering search results for this blog. In this article, I show you how I used Azure Search to add an epic, search-as-you-type search for all of my blog posts.\n",
    "content": "Yesterday, my blog used the Google Site Search for delivering search results for this blog. In this article, I show you how I used Azure Search to add an epic, search-as-you-type search for all of my blog posts.\nMotivation If you used the search on this blog in the top right, you were directed to google site search, clicked hopefully on a hit and went back to my blog. From analytics, I knew that this is used more frequently than I thought - and I used it, too.\nBut: I was not very happy with it for some reasons:\nI do not have control over what is in the index. Neither timing- nor quality-wise I cannot control the design The user leaves my blog and then comes back Given the static nature of this blog, I could not simply hack some SQL queries together and pretend to have a search - I wanted \u0026ldquo;search-as-a-service\u0026rdquo; that I can put in the top right and just works. So I decided to use Azure Search as a search service - and the result blew me away! It is sooooo simple to get started - and surprisingly, it\u0026rsquo;s free!\nTo get going, I needed to do 3 steps:\nPrepare the data Feed them to Azure Search Create a search box and connect it to Azure Search Prepare the data - Hugo JSON Feed Some background: my blog is hosted on Azure Storage with Static Website feature enabled. Hugo generates pure HTML files upfront, they are then stored on the storage. No high-level runtime stuff available like PHP or ASP.net.\nThat\u0026rsquo;s why I first tried to index the entire blog with Azure Search (more about how I did this later) to see if the fields that add value, are indexed. They are:\nFull-text content Summary Title Date Url Picture Tags \u0026amp; Categories Indexing all the HTML files on the storage account gave me the following search results: Full-text of the entire page including the header and navigation is there, URL and Title could be added - but that\u0026rsquo;s pretty much it. For 1-minute effort actually not too bad. But of course, I wanted a better solution. I checked what Hugo has in the box for this and quickly discovered JSON Feeds as an output format. I followed this great article by Raymond Camden and added the following to my site configuration (config.toml):\n1 2 3 4 5 6 7 8 [outputFormats.json] mediaType = \u0026#34;application/json\u0026#34; baseName = \u0026#34;feed\u0026#34; path = \u0026#34;feed\u0026#34; isPlainText = true [outputs] home = [\u0026#34;html\u0026#34;, \u0026#34;json\u0026#34;, \u0026#34;rss\u0026#34;] In line 8 I configured that the output format JSON should be generated additionally to HTML and RSS. In line 1 I specified the JSON output further. Line 3 and 4 specifies where the JSON file is being placed, in my case /feed/feed.json (you can open that file, too).\nAfter that I created a template file to specify the contents of the json feed. I therefore created a file called home.json in the \\layouts_default folder of my theme:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [ {{ range $index, $e := .Site.RegularPages }} {{ if $index }}, {{ end }} { \u0026#34;url\u0026#34;: {{ .Permalink | jsonify }}, \u0026#34;title\u0026#34;: {{ .Title | jsonify }}, \u0026#34;date_published\u0026#34;: {{ .Date.Format \u0026#34;2006-01-02T15:04:05Z07:00\u0026#34; | jsonify }}, \u0026#34;description\u0026#34;: {{ .Summary | plainify | jsonify }}, \u0026#34;content\u0026#34;: {{ .Plain | jsonify }}, \u0026#34;tags\u0026#34;: {{ .Params.tags | jsonify }}, \u0026#34;categories\u0026#34;: {{ .Params.categories | jsonify }}, {{if .Params.featured}} \u0026#34;feature\u0026#34;: {{ printf \u0026#34;%s/%s\u0026#34; .Params.featuredpath .Params.featured | jsonify }} {{else}} \u0026#34;feature\u0026#34;: \u0026#34;/melcher.dev.png\u0026#34; {{end}} } {{- end }} ] In line 2 I iterate over all my blog posts. And from line 5-15 I export all the fields that I want to have available in the search index. You can even add logic to the output with the GO template language (line 12); I noticed that I had blog posts with no images so I added a placeholder there.\nThat gives me a beautiful json file: So we are set for indexing. No further manual step required once I craft a new post or update an existing one. Awesome.\nAzure Search I created the Azure Search service directly in the portal and the process is pretty much straight forward: I selected the free tier, for my blog its more than sufficient.\nNext up, I clicked on \u0026ldquo;Import data\u0026rdquo; to create an index:\nThe important field here is \u0026ldquo;Parsing mode\u0026rdquo; - the JSON Feed we created above exports as JSON array, so select that. In the next dialog you can further optimize the extraction and add all kinds of cognitive service fields to your hits (people names, org names, etc. ), I skipped that for now.\nAfter that you can customize the fields of the index: I removed all storage metadata and made all fields retrievable. The fields that have valuable fields, I made searchable and changed the Analyzer to \u0026ldquo;English - Microsoft\u0026rdquo;. My content is in English and I heard good things about the indexer that Microsoft maintains.\nLastly I set the indexer to \u0026ldquo;once\u0026rdquo;: I want to start the indexing once I publish (automated, of course) and not every x hours.\nImmediately after creating the index, the content was already indexed - it\u0026rsquo;s super fast. For my ~500 pages that are indexed, it took 1.5 seconds.\nAs you can see, I am using only 2.2% of the max index size of the free tier, I can use this service for free for a very long time! Great!\nIndexing all of this gives me a REST endpoint that I can use to fire queries against. E.g. https://melcher.search.windows.net/indexes/blog/docs?api-version=2017-11-11\u0026amp;$top=10\u0026amp;search=azure\u0026amp;api-key=291A630E0DAB2D652ECDF845294E793E gives me the top 10 posts that have the keyword azure in it. Pretty straightforward to me.\nIf you want to consume the search service via REST, you have to allow CORS. The option is \u0026ldquo;hidden\u0026rdquo; on the index.\notherwise you will get errors like this:\nAccess to XMLHttpRequest at \u0026lsquo;https://melcher.search.windows.net/indexes/blog/docs?api-version=2017-11-11\u0026amp;$top=10\u0026amp;search=azure\u0026amp;api-key=291A630E0DAB2D652ECDF845294E793E' from origin \u0026lsquo;http://localhost:1313\u0026rsquo; has been blocked by CORS policy: No \u0026lsquo;Access-Control-Allow-Origin\u0026rsquo; header is present on the requested resource.\nCreating the Search UI Now comes the tough part for me. I need to build a UI to surface the search results. At first, I looked at a few jQuery widgets that promised autocomplete, search-as-you-type and what not. But actually, that was a lot of pain to make it work so I decided to build a simple UI myself with good old jQuery.\nNote I doubt, that you can just copy\u0026amp;paste my customization directly to your blog - but they hopefully give you an idea how I did it.\nFirstly, I added a template rendering library mustache.js to my footer. I need it to dynamically render the search result. Mustache has a pretty flexible template language and you can adjust the delimiter to not interfere with Hugo\u0026rsquo;s template language.\nThen I added the javascript search logic to my main.js:\n(function (document) { var showSearch = $(\u0026#39;.fa-search\u0026#39;); //the search button in the top right var closeSearch = $(\u0026#39;.closebtn\u0026#39;); //the close button in the overlay var template = $(\u0026#34;#search-template\u0026#34;).html(); //the mustache.js search result template Mustache.tags = [ \u0026#39;[[\u0026#39;, \u0026#39;]]\u0026#39; ]; //replacing the {{ }} of mustache with [[ ]] - this interferes with hugo\u0026#39;s template language otherwise Mustache.parse(template); //parse the template //attach a click handler to the search icon showSearch.on(\u0026#34;click\u0026#34;, function () { $(\u0026#39;#overlay\u0026#39;).show(); //show the overlay $(\u0026#39;html, body\u0026#39;).css(\u0026#39;overflowY\u0026#39;, \u0026#39;hidden\u0026#39;); //remove the outer scroll bar $(\u0026#39;#searchinput\u0026#39;).focus(); //focus the input box }); //attach a click handler to the close icon closeSearch.on(\u0026#34;click\u0026#34;, function () { $(\u0026#39;#overlay\u0026#39;).hide(); //hide the overlay $(\u0026#39;html, body\u0026#39;).css(\u0026#39;overflowY\u0026#39;, \u0026#39;auto\u0026#39;); //add the outer scroll bar }); var $search_input = $(\u0026#39;#searchinput\u0026#39;); //attach a keyup handler to the search input box //delay the search by 500ms $search_input.on(\u0026#39;keyup\u0026#39;, delay(function (event) { search(); }, 500)); //the delay function I got from //https://stackoverflow.com/questions/1909441/how-to-delay-the-keyup-handler-until-the-user-stops-typing function delay(callback, ms) { var timer = 0; return function () { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { callback.apply(context, args); }, ms || 0); }; } //the actual search function function search() { //my api key var apikey = \u0026#34;291A630E0DAB2D652ECDF845294E793E\u0026#34;; //get the search query var query = $(\u0026#39;#searchinput\u0026#39;).val(); //properly encode it for the URL var encodedQuery = encodeURIComponent(query); //build the ajax call with the query url and the api key $.ajax({ type: \u0026#34;GET\u0026#34;, url: \u0026#34;https://melcher.search.windows.net/indexes/blog/docs?api-version=2017-11-11\u0026amp;$top=10\u0026amp;search=\u0026#34; + encodedQuery + \u0026#34;\u0026amp;api-key=\u0026#34; + apikey, dataType: \u0026#34;json\u0026#34;, success: function (data) { //clear the old results $(\u0026#34;.overlay-results\u0026#34;).empty(); //required for the \u0026#34;no results\u0026#34; template data.noResults = !data.value || data.value.length \u0026lt; 1; //render the search results as html var render = Mustache.render(template,data); //attach the html $(\u0026#34;.overlay-results\u0026#34;).html(render); } }); } })(document); It opens an overlay when you click on a button that has the class \u0026ldquo;fa-search\u0026rdquo;.\nThen I added the following to my header right before the closing \u0026lt;/head\u0026gt; node: \u0026lt;div id=\u0026#34;overlay\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;overlay-content\u0026#34;\u0026gt; \u0026lt;span class=\u0026#34;closebtn\u0026#34; title=\u0026#34;Close\u0026#34;\u0026gt;×\u0026lt;/span\u0026gt; \u0026lt;input id=\u0026#34;searchinput\u0026#34; type=\u0026#34;text\u0026#34; placeholder=\u0026#34;Search..\u0026#34; name=\u0026#34;search\u0026#34;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;overlay-results\u0026#34;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;promo\u0026#34;\u0026gt; Search results provided by \u0026lt;a href=\u0026#34;https://azure.microsoft.com/en-us/services/search/\u0026#34; target=\u0026#34;_blank\u0026#34;\u0026gt;Azure Search\u0026lt;/a\u0026gt; - read how I built it \u0026lt;a href=\u0026#34;https://melcher.dev/2019/03/azuresearch-and-hugo-free-and-awesome/\u0026#34;\u0026gt;in this post\u0026lt;/a\u0026gt;. \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;script id=\u0026#34;search-template\u0026#34; type=\u0026#34;x-tmpl-mustache\u0026#34;\u0026gt; [[#value]] \u0026lt;div class=\u0026#34;search-result\u0026#34;\u0026gt; \u0026lt;a href=\u0026#34;[[ url ]]\u0026#34;\u0026gt; \u0026lt;h1\u0026gt;[[ title ]]\u0026lt;/h1\u0026gt; \u0026lt;div class=\u0026#34;feature\u0026#34;\u0026gt; \u0026lt;img src=\u0026#34;[[ feature ]]\u0026#34;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;description\u0026#34;\u0026gt; [[ description ]] \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;clear\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;tags\u0026#34;\u0026gt; [[ #tags ]] #[[.]] [[ /tags]]\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026#34;categories\u0026#34;\u0026gt;\u0026lt;i class=\u0026#34;fa fa-sitemap\u0026#34;\u0026gt;\u0026amp;nbsp;\u0026lt;/i\u0026gt; [[ #categories ]] [[.]] [[ /categories]] \u0026lt;/div\u0026gt; \u0026lt;/a\u0026gt; \u0026lt;/div\u0026gt; [[/value]] [[#noResults]] \u0026lt;div class=\u0026#34;no-results\u0026#34;\u0026gt; \u0026lt;h1\u0026gt;no results :(\u0026lt;/h1\u0026gt; \u0026lt;/div\u0026gt; [[/noResults]] \u0026lt;/script\u0026gt;\nIt defines a block #overlay that has the input box and the close button. Additionally, it adds the mustache.js template that I use to render the results. The [[variable]] placeholders are then replaced with actual values.\nAnd lastly some styles to my main.css: /* Search */ #overlay { height: 100%; width: 100%; display: none; position: fixed; z-index: 100000; top: 0; left: 0; right: 0; bottom:0; background-color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0.9); } .overlay-content { width: 100%; margin: 4em 0 1em 4em; display: inline-block; } .overlay-results { display: inline-block; height: 75%; overflow-y: auto; margin-left: 4em; } .no-results h1 { color: white; } .promo { margin-left: 4em; color: #ccc; } .promo a { color: red; border-bottom: 1px dashed red; } .closebtn { position: absolute; top: 0px; right: 15px; font-size: 5em; font-weight: bolder; cursor: pointer; color: red; line-height: 60px; } #overlay input[type=text] { padding: 15px; font-size: 17px; border: 2px solid red; float: left; width: 80%; background: white; } #overlay input[type=text]:hover { background: #f1f1f1; } .search-result .feature img { width: 10%; float: left; } .search-result h1 { color: #ccc; margin-top: 5px; width: 70%; } .search-result .tags { color: red; width: 70% } .search-result .categories { color: #ccc; width: 70%; margin-bottom: 1em; } .search-result .description { width: 70%; float: left; margin-left: 1em; color: white; } .search-result .clear { clear: both; }\nSummary Ok, that\u0026rsquo;s it - I have the search that I wanted with all the flexibility that I need \u0026ldquo;as-a-service\u0026rdquo;. From an effort perspective, I took me 5 minutes to setup Azure Search. 30 minutes to teach Hugo how to export only the data that I need for search and approximately 2 hours for the UI. 2 hours 35 minutes of my life that I won\u0026rsquo;t get back - still, great learning expertise and I am a little proud of the output.\nDo you like it?\n",
    "tags": ["Azure Search","Hugo"],
    "categories": ["Azure Search","Hugo"],
    "feature": "https://melcher.dev/2019/03/azuresearch-and-hugo-free-and-awesome/images/Hugo_AzureSearch.gif"
  },
  {
    "url": "https://melcher.dev/2019/02/create-an-azure-devops-build/release-agent-with-terraform-ubuntu-edition/",
    "title": "Create an Azure DevOps Build/Release Agent with Terraform - Ubuntu-Edition",
    "date_published": "2019-02-21T09:54:57+01:00",
    "description": "In this post I show you how to create an Azure DevOps build/release agent on Ubuntu 16.04 with Terraform.\n",
    "content": "In this post I show you how to create an Azure DevOps build/release agent on Ubuntu 16.04 with Terraform.\nSelf-hosted Azure DevOps Build/Release agent I am a really big Azure DevOps fan - and the out-of-the-box capabilities that you get for build/release tasks are awesome. Any language, any platform - I simply push my changes and Azure DevOps builds my codes and releases it. And for open source projects they are free:\nFor Windows, Linux and Mac - awesome.\nSo why this post? The Microsoft-hosted build agents have only one disadvantage - they come with \u0026ldquo;zero\u0026rdquo; history. When you run a new build, they have to pull down everything they need to build your source, install all non-default tools and compile. That is sometimes a time-consuming tasks that can be avoided if you can cache or pre-install tools that you need. This can be 3-5 minutes if you have a tiny project or longer than 30 minutes if you have a huge project that does npm/nuget restore heavily. And most of the time I am really impatient. Or what if you need more CPU/RAM/Storage than the Microsoft-hosted agent provides? Luckily we can bring our own build agent.\nTerraform your build agent - the plan Next up comes my terraform script that provisions a Ubuntu 16.04 VM with a default size of B1s (1 core burst, 1 GB RAM) for incredible 14.75€/month (https://azure.com/e/c584a3cedb1d47b88e50d90f7a653eb5). That can of course be customized to your needs.\nI derived the terraform script from the docs.com linux how-to and added the installation of the build agent as custom script extension. The relevant change is this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 resource \u0026#34;azurerm_virtual_machine_extension\u0026#34; \u0026#34;azuredevopsvmex\u0026#34; { name = \u0026#34;hostname\u0026#34; location = \u0026#34;${var.location}\u0026#34; resource_group_name = \u0026#34;${azurerm_resource_group.azuredevops.name}\u0026#34; virtual_machine_name = \u0026#34;${azurerm_virtual_machine.azuredevopsvm.name}\u0026#34; publisher = \u0026#34;Microsoft.OSTCExtensions\u0026#34; type = \u0026#34;CustomScriptForLinux\u0026#34; type_handler_version = \u0026#34;1.2\u0026#34; settings = \u0026lt;\u0026lt;SETTINGS { \u0026#34;fileUris\u0026#34;: [\u0026#34;https://gist.github.com/MaxMelcher/bfe95eb55b33fa7b9bdbf68c9ac51811/raw/46374411cc8ac056edf9ab9a449dd9dff0b6550e/devops.sh\u0026#34;], \u0026#34;commandToExecute\u0026#34;: \u0026#34;bash devops.sh \u0026#39;${var.url}\u0026#39; \u0026#39;${var.pat}\u0026#39; \u0026#39;${var.pool}\u0026#39; \u0026#39;${var.agent}\u0026#39;\u0026#34;, \u0026#34;timestamp\u0026#34; : \u0026#34;11\u0026#34; } SETTINGS tags { environment = \u0026#34;Production\u0026#34; } } In line 12 you can see that the Custom Script Extension downloads this script from github and executes it in line 13.\n#!/bin/sh echo $@ echo \u0026#34;start\u0026#34; cd /home/azuredevopsuser mkdir agent cd agent AGENTRELEASE=\u0026#34;$(curl -s https://api.github.com/repos/Microsoft/azure-pipelines-agent/releases/latest | grep -oP \u0026#39;\u0026#34;tag_name\u0026#34;: \u0026#34;v\\K(.*)(?=\u0026#34;)\u0026#39;)\u0026#34; AGENTURL=\u0026#34;https://vstsagentpackage.azureedge.net/agent/${AGENTRELEASE}/vsts-agent-linux-x64-${AGENTRELEASE}.tar.gz\u0026#34; echo \u0026#34;Release \u0026#34;${AGENTRELEASE}\u0026#34; appears to be latest\u0026#34; echo \u0026#34;Downloading...\u0026#34; wget -O agent.tar.gz ${AGENTURL} tar zxvf agent.tar.gz chmod -R 777 . echo \u0026#34;extracted\u0026#34; ./bin/installdependencies.sh echo \u0026#34;dependencies installed\u0026#34; sudo -u azuredevopsuser ./config.sh --unattended --url $1 --auth pat --token $2 --pool $3 --agent $4 --acceptTeeEula --work ./_work --runAsService echo \u0026#34;configuration done\u0026#34; ./svc.sh install echo \u0026#34;service installed\u0026#34; ./svc.sh start echo \u0026#34;service started\u0026#34; echo \u0026#34;config done\u0026#34; exit 0 Thanks to Jasper Gilhuis\u0026rsquo;s article the configuration of the build agent was not too hard - still it took me a while to figure it out.\nNote The agent version is currently 2.147.1 - I do not plan to update the agent regularly. If you want a newer version, please just fork [my gist] (https://gist.github.com/MaxMelcher/bfe95eb55b33fa7b9bdbf68c9ac51811). Fixed (March, 1st): Darius commented and showed me how easy it is to stay current. So updating the agent means simply redeploying the agent. Awesome\nYou can get my entire terraform script here and the var file \u0026rsquo;terraform plan\u0026rsquo; gives you the following output:\nterraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: + azurerm_network_interface.azuredevopsnic id: \u0026lt;computed\u0026gt; applied_dns_servers.#: \u0026lt;computed\u0026gt; ... + azurerm_network_security_group.azuredevopsnsg id: \u0026lt;computed\u0026gt; location: \u0026#34;westeurope\u0026#34; name: \u0026#34;AzureDevOpsNetworkSecurityGroup\u0026#34; ... + azurerm_public_ip.azuredevopspublicip id: \u0026lt;computed\u0026gt; allocation_method: \u0026#34;Dynamic\u0026#34; ... + azurerm_resource_group.azuredevops id: \u0026lt;computed\u0026gt; location: \u0026#34;westeurope\u0026#34; ... + azurerm_storage_account.azuredevopsstorageaccount id: \u0026lt;computed\u0026gt; access_tier: \u0026lt;computed\u0026gt; account_encryption_source: \u0026#34;Microsoft.Storage\u0026#34; ... + azurerm_subnet.azuredevopssubnet id: \u0026lt;computed\u0026gt; address_prefix: \u0026#34;10.100.1.0/24\u0026#34; ... + azurerm_virtual_machine.azuredevopsvm id: \u0026lt;computed\u0026gt; ... + azurerm_virtual_machine_extension.azuredevopsvmex id: \u0026lt;computed\u0026gt; location: \u0026#34;westeurope\u0026#34; virtual_machine_name: \u0026#34;AzureDevOps\u0026#34; ... + azurerm_virtual_network.azuredevopsnetwork id: \u0026lt;computed\u0026gt; address_space.#: \u0026#34;1\u0026#34; address_space.0: \u0026#34;10.100.0.0/16\u0026#34; ... + random_id.randomId id: \u0026lt;computed\u0026gt; ... Plan: 10 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn\u0026#39;t specify an \u0026#34;-out\u0026#34; parameter to save this plan, so Terraform can\u0026#39;t guarantee that exactly these actions will be performed if \u0026#34;terraform apply\u0026#34; is subsequently run. I removed a lot of lines for better readability.\nThere is no Network Security Group rule to allow an ssh connection - if you need to connect to the VM, you have to allow the connection e.g with Azure CLI\naz network nsg rule create -g AzureDevOps --nsg-name AzureDevOpsNetworkSecurityGroup -n SSH --priority 100 --destination-port-ranges 22 The execution Let\u0026rsquo;s execute the script: For demonstration purposes I executed the script directly in VSCode - I usually check-in my scripts to Azure DevOps and a build agent then executes the scripts there. Would be too meta, right? :)\nSummary With the terraform script above you get a naked Ubuntu VM registered as Azure DevOps build/release agent in roughly 5 minutes for a few Euros per month. Once the agent is up and running you can (and must!) configure the agent to your needs. Don\u0026rsquo;t forget to patch the agents - or destroy and recreate them regularly.\nHope it helps,\nMax\np.s. If my build agents are getting old, please let me know! Fixed, see comments.\np.p.s. If you want to remove the agents, simply do a terraform destroy and then remove the agent in Azure DevOps on the agent page: https://dev.azure.com/mmelcher/_settings/agentpools?poolId=1\u0026amp;_a=agents\np.p.p.s. If you noted my Personal Access Token in the video - I of course invalidated that one :)\n",
    "tags": ["Automation","Custom Script Extension","Automation","Custom Script Extension","Azure","Terraform","Azure DevOps","Self-Hosted Build-Agent"],
    "categories": ["Azure","Terraform","Azure DevOps"],
    "feature": "https://melcher.dev/2019/02/create-an-azure-devops-build/release-agent-with-terraform-ubuntu-edition/images/featured2.png"
  },
  {
    "url": "https://melcher.dev/2019/02/azure-resource-graph-how-many-cpu-cores-are-used/",
    "title": "Azure Resource Graph: How many CPU cores are used",
    "date_published": "2019-02-09T16:41:50-08:00",
    "description": "Recently I was asked how many CPU cores were used in an Azure tenant. The intent of the question was to determine how many VMs could use the Azure Hybrid Benefit (AHUB) and to have a general number how many cores are in the cloud compared to onPrem. I thought that should be an easy exercise for Azure Resource Graph - and it is!\nIn this post I show you how I got the total count.\n",
    "content": "Recently I was asked how many CPU cores were used in an Azure tenant. The intent of the question was to determine how many VMs could use the Azure Hybrid Benefit (AHUB) and to have a general number how many cores are in the cloud compared to onPrem. I thought that should be an easy exercise for Azure Resource Graph - and it is!\nIn this post I show you how I got the total count.\nAzure Resource Graph Azure Resource Graph is a query language for Azure resources - or with more words:\nAzure Resource Graph is a service in Azure that is designed to extend Azure Resource Management by providing efficient and performant resource exploration with the ability to query at scale across all subscriptions and management groups so that you can effectively govern your environment. These queries provide the following features:\nAbility to query resources with complex filtering, grouping, and sorting by resource properties. Ability to iteratively explore resources based on governance requirements and convert the resulting expression into a policy definition. Ability to assess the impact of applying policies in a vast cloud environment. \u0026ndash; https://docs.microsoft.com/en-us/azure/governance/resource-graph/overview\nIf you have not used it yet, read the excellent docs how to get started here.\nGetting the CPU cores So once you have the graph extension added, you can use the following query to export a table of all VMs that you have at least read access to. I use the az cli with PowerShell in VSCode - it\u0026rsquo;s awesome.\n1 2 3 az login az extension add --name resource-graph az graph query --first 1000 -o tsv -q \u0026#34;project name, size = properties.hardwareProfile.vmSize, properties.licenseType, resourceGroup, subscriptionId, type, properties.storageProfile.osDisk.osType | where type =~ \u0026#39;Microsoft.Compute/virtualMachines\u0026#39;\u0026#34; | out-file cores.csv or grab my file here.\nWhen you want to know what fields are available, I suggest to go to resources.azure.com - there you can see all the fields and hierarchies so it is way easier to build your queries.\nIf you have more than 1000 VMs, you have to use the command multiple times and use the \u0026ndash;skip parameter (more details here) - the docs says that the maximum is 5000, my test only returned 1000 results. Not a big deal, if you know it.\nThe exported file can be opened in Excel: Unfortunately, the Azure Resource Manager (ARM) does not expose the core count directly, we only get the size of the VM. Merging that with the information of all the available VM sizes from \u0026ldquo;Sizes for Windows virtual machines in Azure\u0026rdquo; would be really time consuming - but luckily there is a az cli command to get a list:\n1 az vm list-sizes -o tsv -l westeurope | out-file numberofcores.csv gets you following: Now we have all the information that we need and can simply VLOOKUP-combine the files in Excel: Or do the same in Power Bi if you want to have more options: Hope it helps,\nMax\n",
    "tags": ["Azure Resource Graph","Reporting","Power Bi"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2019/02/azure-resource-graph-how-many-cpu-cores-are-used/images/PowerBiResourceGraph.jpg"
  },
  {
    "url": "https://melcher.dev/2019/01/outlook-rule-protip-defer-all-sent-mails-by-1-minute/",
    "title": "Outlook Rule ProTip: Defer all sent Mails by 1 Minute",
    "date_published": "2019-01-24T22:37:25+01:00",
    "description": "Have you ever sent a mail to hundreds of people because \u0026ldquo;Reply all\u0026rdquo; and send is so easy? Noticed that you forgot an attachment just right after you clicked on send? Or pressed ctrl+enter in an almost finished mail?\nWith one tiny change you have at least a chance to correct your mail and send it properly.\n",
    "content": "Have you ever sent a mail to hundreds of people because \u0026ldquo;Reply all\u0026rdquo; and send is so easy? Noticed that you forgot an attachment just right after you clicked on send? Or pressed ctrl+enter in an almost finished mail?\nWith one tiny change you have at least a chance to correct your mail and send it properly.\nMy Outlook Life-Saver When I setup Outlook on a new PC, the very first thing I configure is to submit emails with a 1 minute delay.\nTo configure that rule, simply open up \u0026ldquo;Rules\u0026rdquo; in the middle of the ribbon and click on \u0026ldquo;Manage Rules and Alerts\u0026rdquo;: Then click on \u0026ldquo;New Rule\u0026hellip;\u0026rdquo; and select \u0026ldquo;Apply rule on messages I send\u0026rdquo; at the very bottom of the wizard.\nAfterwards click on \u0026ldquo;next\u0026rdquo; without selecting a condition - and confirm that you want the rule to be applied to all messages you send. Next, check \u0026ldquo;defer delivery by a number of minutes\u0026rdquo; and configure the delay you want to have. 1 minute is fine for me. Finally you could add an exception to this. In my case I added \u0026ldquo;except if this is marked as importance\u0026rdquo; and configured high. Meaning: If I send an email that is marked with high importance, please send it ASAP.\nThen you can give the rule a name and click on \u0026ldquo;Finish\u0026rdquo;. Easy. Important: you have to do this setting on every PC - it does not work on mobile phones or in the web version!. Or in Outlook\u0026rsquo;s words: This rule will only run when you check your email in Outlook. If Outlook isn\u0026rsquo;t running, this rule won\u0026rsquo;t work for email you online or from another device.\nIt can\u0026rsquo;t be any good without a warning!\nIt\u0026rsquo;s such a small change, but makes a big difference. Right?\nHope it helps,\nMax\n",
    "tags": ["Rule","Ooooops"],
    "categories": ["Outlook","Productivity"],
    "feature": "https://melcher.dev/2019/01/outlook-rule-protip-defer-all-sent-mails-by-1-minute/images/DelayAllOutgoingMails_small.png"
  },
  {
    "url": "https://melcher.dev/2019/01/til-set-docker-environment-variables-in-visual-studio-for-easier-debugging/",
    "title": "TIL: Set Docker Environment Variables in Visual Studio for easier debugging",
    "date_published": "2019-01-20T12:57:11+01:00",
    "description": "Today I learned how to set Docker Environment Variables directly in Visual Studio to ease my debugging experience.\n",
    "content": "Today I learned how to set Docker Environment Variables directly in Visual Studio to ease my debugging experience.\nI really googled a lot to find an easy solution for this simple problem - and tried many different ways to pass variables directly into my attached docker container - but it took way too long to discover this StackOverflow post. Hopefully my post helps someone else, too!\nI even read the excellent docs from asp.net core - but there is no mention how to pass docker environment variables directly to the container so that you can debug them. In my side-project I have an asp.net core web app that needs one or more configuration parameters that can be set with the -e switch in the docker run command:\ndocker run -e \u0026#34;PAT=123\u0026#34; image But I want to have a Visual Studio debugger attached so that I can debug into my code as seen in the following screenshot: Following the accepted answer in the StackOverflow post, I created a file called \u0026ldquo;settings.env\u0026rdquo; and filled it with key/value pairs. Lines starting with # are comments:\n#Personal Access Token to write back the plan output to Azure DevOps PAT=[Personal Access Token] PROJECT=[Azure DevOps Project URL] VARIABLE=[Filename of the variable file including extension] WORKSPACE=[Name of the default workspace] Then I edited my project (.csproj) file and added\n\u0026lt;DockerfileRunEnvironmentFiles\u0026gt;settings.env\u0026lt;/DockerfileRunEnvironmentFiles\u0026gt; to a PropertyGroup-tag so it looks like the following:\n\u0026lt;Project Sdk=\u0026#34;Microsoft.NET.Sdk.Web\u0026#34;\u0026gt; \u0026lt;PropertyGroup\u0026gt; \u0026lt;TargetFramework\u0026gt;netcoreapp2.1\u0026lt;/TargetFramework\u0026gt; \u0026lt;DockerTargetOS\u0026gt;Linux\u0026lt;/DockerTargetOS\u0026gt; \u0026lt;DockerDefaultTargetOS\u0026gt;Linux\u0026lt;/DockerDefaultTargetOS\u0026gt; \u0026lt;DockerfileRunEnvironmentFiles\u0026gt;settings.env\u0026lt;/DockerfileRunEnvironmentFiles\u0026gt; \u0026lt;/PropertyGroup\u0026gt; \u0026lt;/Project\u0026gt; The I started the debugger with F5 and finally I can easily debug my solution even with docker environment variables: Hope it helps,\nMax\n",
    "tags": ["Debugging","F5","Debug","Environment Variables"],
    "categories": ["Docker","Visual Studio"],
    "feature": "https://melcher.dev/2019/01/til-set-docker-environment-variables-in-visual-studio-for-easier-debugging/images/Docker ENV file for Variables.png"
  },
  {
    "url": "https://melcher.dev/2019/01/setting-up-my-pc-with-azure-in-mind/",
    "title": "Setting up my PC with Azure in Mind",
    "date_published": "2019-01-18T10:32:05+01:00",
    "description": "I had to reset my Surface and reinstall every tool. That would be a very time consuming job - but it is 2019 - and can be automated very efficiently.\nIn this post, I show you how and what I install on every new PC I get with Chocolatey - with Azure in mind.\n",
    "content": "I had to reset my Surface and reinstall every tool. That would be a very time consuming job - but it is 2019 - and can be automated very efficiently.\nIn this post, I show you how and what I install on every new PC I get with Chocolatey - with Azure in mind.\nThe very first thing I do when I setup a new PC is I install Chocolatey - with it you can install software with simple commands - or in their words:\nChocolatey is a package manager for Windows (like apt-get or yum but for Windows). It was designed to be a decentralized framework for quickly installing applications and tools that you need. It is built on the NuGet infrastructure currently using PowerShell as its focus for delivering packages from the distros to your door, err computer. \u0026ndash; https://chocolatey.org/about\nThe installation of chocolatey is one powershell command. Then you can install software with choco install and most of the time you can guess the name of the package. You can see it in action in the gif at the top - installing Visual Studio Code took 18 seconds!\nAll my other files are either in OneDrive or stored in git, getting a new PC or resetting it is not a big deal for me and it should not.\nMy Tools list for Azure The following is my list of Azure tools that I usually install to use and manage Azure - it is opinionated.\n#Dev choco install vscode choco install gitextensions choco install dotnetcore #Azure choco install azure-cli choco install az choco install microsoftazurestorageexplorer choco install putty choco install terraform #AzureAd Install-Module -Name AzureAD #Productivity choco install googlechrome choco install adobereader choco install microsoft-teams choco install autohotkey choco install greenshot choco install paint.net #VS2017 choco install visualstudio2017enterprise choco install visualstudio2017-workload-azure #Container choco install kubernetes-helm #blogging choco install hugo After pasting everything above in an elevated powershell it takes ~2 hours and my PC is ready to go.\nAwesome, right?\n",
    "tags": ["Chocolatey","vscode","gitextensions","dotnetcore","azure-cli","az","AzureAD","googlechrome","adobereader","microsoft-teams","autohotkey","greenshot","paint.net","visualstudio2017enterprise","visualstudio2017-workload-azure","kubernetes-helm","terraform","putty"],
    "categories": ["Azure","Automation"],
    "feature": "https://melcher.dev/2019/01/setting-up-my-pc-with-azure-in-mind/images/Chocolatey.gif"
  },
  {
    "url": "https://melcher.dev/2019/01/az-203-learning-material-/-link-collection/",
    "title": "AZ-203: Learning Material / Link Collection",
    "date_published": "2019-01-10T10:47:40+01:00",
    "description": "I took the AZ-200 beta exam last year and the exam did not make it out of beta. It was replaced with the AZ-203 exam. I am pretty sure that I did not meet the 70% threshold to be automatically credited with the AZ-203 certification. I had to learn for the AZ-201 certification anyways.\nUpdate (18.01.2019): I did pass AZ-200, but it was not enough to get credited for AZ-203.",
    "content": "I took the AZ-200 beta exam last year and the exam did not make it out of beta. It was replaced with the AZ-203 exam. I am pretty sure that I did not meet the 70% threshold to be automatically credited with the AZ-203 certification. I had to learn for the AZ-201 certification anyways.\nUpdate (18.01.2019): I did pass AZ-200, but it was not enough to get credited for AZ-203.\nHere is my list of links that I use to prepare for the exam.\nTopics and Links Develop Azure Infrastructure as a Service Compute Solutions (10-15%) Implement solutions that use virtual machines (VM) Provision VMs\nhttps://docs.microsoft.com/en-us/azure/virtual-machines/ https://docs.microsoft.com/en-us/azure/virtual-machines/windows/tutorial-manage-vm\nCreate ARM templates\nhttps://docs.microsoft.com/en-us/azure/virtual-machines/windows/ps-template\nConfigure Azure Disk Encryption for VMs\nhttps://docs.microsoft.com/en-us/azure/virtual-machines/windows/encrypt-disks\nImplement batch jobs by using Azure Batch Services Manage batch jobs by using Batch Service API\nhttps://docs.microsoft.com/en-us/azure/batch/ https://docs.microsoft.com/en-us/azure/batch/batch-api-basics\nRun a batch job by using Azure CLI, Azure portal, and other tools\nhttps://docs.microsoft.com/en-us/azure/batch/batch-apis-tools\nWrite code to run an Azure Batch Services batch job\nhttps://docs.microsoft.com/en-us/azure/batch/quick-run-dotnet\nCreate containerized solutions Create an Azure Managed Kubernetes Service (AKS) cluster\nhttps://docs.microsoft.com/en-us/azure/aks/intro-kubernetes\nhttps://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough\nCreate container images for solutions\nhttps://docs.microsoft.com/en-us/azure/container-instances/container-instances-tutorial-prepare-app\nPublish an image to the Azure Container Registry\nhttps://docs.microsoft.com/en-us/azure/container-instances/container-instances-tutorial-prepare-acr\nRun containers by using Azure Container Instance or AKS\nhttps://docs.microsoft.com/en-us/azure/container-instances/container-instances-tutorial-deploy-app\nDevelop Azure Platform as a Service Compute Solutions (20-25%) Create Azure App Service Web Apps Create an Azure App Service Web App\nhttps://docs.microsoft.com/en-us/azure/app-service/app-service-cli-samples\nhttps://docs.microsoft.com/en-us/azure/app-service/app-service-powershell-samples\nhttps://blogs.msdn.microsoft.com/benjaminperkins/2017/10/02/create-an-azure-app-service-web-app-using-powershell/\nCreate an Azure App Service background task by using WebJobs\nhttps://docs.microsoft.com/en-us/azure/app-service/web-sites-create-web-jobs https://docs.microsoft.com/en-us/azure/app-service/websites-dotnet-deploy-webjobs\nEnable diagnostics logging\nhttps://docs.microsoft.com/en-us/azure/app-service/overview-diagnostics\nCreate Azure App Service mobile apps https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-value-prop\nAdd push notifications for mobile apps\nhttps://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-overview\nEnable offline sync for mobile app\nhttps://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-offline-data-sync\nImplement a remote instrumentation strategy for mobile devices\nhttps://docs.microsoft.com/en-us/intune/device-management\nCreate Azure App Service API apps Create an Azure App Service API app\nhttps://docs.microsoft.com/en-us/azure/app-service/\nCreate documentation for the API by using open source and other tools\nhttps://blog.kloud.com.au/2017/06/13/azure-functions-with-swagger/\nImplement Azure functions Implement input and output bindings for a function\nhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings\nImplement function triggers by using data operations, timers, and webhooks\nhttps://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-scenario-function-sb-trigger\nImplement Azure Durable Functions\nhttps://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview\nCreate Azure Function apps by using Visual Studio\nhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-create-your-first-function-visual-studio\nDevelop for Azure storage (15-20%) Develop solutions that use storage tables Design and implement policies for tables\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/establishing-a-stored-access-policy\nQuery table storage by using code\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/querying-tables-and-entities\nImplement partitioning schemes\nhttps://docs.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/designing-a-scalable-partitioning-strategy-for-azure-table-storage\nDevelop solutions that use Cosmos DB storage https://docs.microsoft.com/en-us/azure/cosmos-db/introduction\nCreate, read, update, and delete data by using appropriate APIs\nhttps://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-dotnet-samples\nImplement partitioning schemes\nhttps://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview\nSet the appropriate consistency level for operations\nhttps://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels\nDevelop solutions that use a relational database Provision and configure relational databases\nhttps://docs.microsoft.com/en-us/azure/sql-database/sql-database-get-started-portal\nConfigure elastic pools for Azure SQL Database\nhttps://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-pool\nCreate, read, update, and delete data tables by using code\nhttps://docs.microsoft.com/en-us/azure/sql-database/sql-database-design-first-database-csharp\nDevelop solutions that use blob storage Move items in blob storage between storage accounts or containers\nhttps://docs.microsoft.com/en-us/azure/storage/common/storage-moving-data\nSet and retrieve properties and metadata\nhttps://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/setting-and-retrieving-properties-and-metadata-for-blob-resources\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata\nImplement blob leasing\nhttps://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\nImplement data archiving and retention\nhttps://docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts\nImplement Azure security (10-15%) Implement authentication Implement authentication by using certificates, forms-based authentication, or tokens\nhttps://docs.microsoft.com/en-us/azure/active-directory/develop/authentication-scenarios\nImplement multi-factor or Windows authentication by using Azure AD\nhttps://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks\nImplement OAuth2 authentication\nhttps://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code\nImplement Managed Service Identity (MSI)/Service Principal authentication\nhttps://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview\nImplement access control Implement CBAC (Claims-Based Access Control) authorization\nhttps://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims?view=aspnetcore-2.2\nImplement RBAC (Role-Based Access Control) authorization\nhttps://docs.microsoft.com/en-us/azure/role-based-access-control/\nCreate shared access signatures\nhttps://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1\nImplement secure data solutions Encrypt and decrypt data at rest and in transit\nhttps://docs.microsoft.com/en-us/azure/storage/common/storage-service-encryption\nCreate, read, update, and delete keys, secrets, and certificates by using the KeyVault API\nhttps://docs.microsoft.com/en-us/azure/key-vault/\nMonitor, troubleshoot, and optimize Azure solutions (15-20%) Develop code to support scalability of apps and services Implement autoscaling rules and patterns\nhttps://docs.microsoft.com/en-us/azure/architecture/best-practices/auto-scaling\nImplement code that handles transient faults\nhttps://docs.microsoft.com/en-us/azure/architecture/best-practices/transient-faults\nIntegrate caching and content delivery within solutions Store and retrieve data in Azure Redis cache\nhttps://docs.microsoft.com/en-us/azure/azure-cache-for-redis/\nDevelop code to implement CDNs in solutions\nhttps://docs.microsoft.com/en-us/azure/cdn/\nInvalidate cache content (CDN or Redis) https://docs.microsoft.com/en-us/azure/cdn/cdn-purge-endpoint\nhttps://docs.microsoft.com/en-us/azure/azure-cache-for-redis/cache-administration#reboot\nInstrument solutions to support monitoring and logging Configure instrumentation in an app or service by using Application Insights\nhttps://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview\nAnalyze and troubleshoot solutions by using Azure Monitor\nhttps://docs.microsoft.com/en-us/azure/azure-monitor/\nImplement Application Insights Web Test and Alerts\nhttps://docs.microsoft.com/en-us/azure/azure-monitor/app/monitor-web-app-availability\nhttps://docs.microsoft.com/en-us/azure/azure-monitor/app/alerts\nConnect to and Consume Azure Services and Third-party Services (20-25%) Develop an App Service Logic App Create a Logic App\nhttps://azure.microsoft.com/en-gb/services/logic-apps/\nCreate a custom connector for Logic Apps\nhttps://docs.microsoft.com/en-us/connectors/custom-connectors/create-logic-apps-connector\nCreate a custom template for Logic Apps\nhttps://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-create-logic-apps-from-templates\nIntegrate Azure Search within solutions Create an Azure Search index\nhttps://docs.microsoft.com/en-us/azure/search/search-create-service-portal\nImport searchable data\nhttps://docs.microsoft.com/en-us/azure/search/search-semi-structured-data\nQuery the Azure Search index\nhttps://docs.microsoft.com/en-us/azure/search/search-query-overview\nEstablish API Gateways Create an APIM instance\nhttps://docs.microsoft.com/en-us/azure/api-management/api-management-key-concepts\nConfigure authentication for APIs\nhttps://docs.microsoft.com/en-us/azure/api-management/api-management-authentication-policies\nDefine policies for APIs\nhttps://docs.microsoft.com/en-us/azure/api-management/api-management-policies\nDevelop event-based solutions Implement solutions that use Azure Event Grid\nhttps://docs.microsoft.com/en-us/azure/event-grid/\nImplement solutions that use Azure Notification Hubs\nhttps://azure.microsoft.com/en-us/services/notification-hubs/\nImplement solutions that use Azure Event Hub\nhttps://docs.microsoft.com/en-us/azure/event-hubs/\nDevelop message-based solutions Implement solutions that use Azure Service Bus\nhttps://docs.microsoft.com/en-us/azure/service-bus/\nImplement solutions that use Azure Queue Storage queues\nhttps://docs.microsoft.com/en-us/azure/storage/queues/storage-dotnet-how-to-use-queues\nMapping of AZ-200 \u0026amp; AZ-201 to AZ-203 AZ-203 Exam Objective Previous Exam Module where covered Implement solutions that use virtual machines (VM) New objective, no existing content Implement batch jobs by using Azure Batch Services AZ-200.3: Develop Azure Platform as a Service solutions Scheduling bulk operations Create containerized solutions AZ-200.3: Develop Azure Platform as a Service solutions Create solutions that use Azure Kubernetes Service Create Azure App Service Web Apps AZ-200.3: Develop Azure Platform as a Service solutions Creating App Service Web Apps Create Azure App Service mobile apps AZ-200.3: Develop Azure Platform as a Service solutions Creating mobile apps Create Azure App Service API apps AZ-200.3: Develop Azure Platform as a Service solutions Creating App Service Web Apps (partial coverage) Implement Azure functions AZ-200.3: Develop Azure Platform as a Service solutions Creating Azure Functions Develop solutions that use storage tables AZ-200.2: Develop for Azure storage Develop solutions that use Azure Storage tables Develop solutions that use Cosmos DB storage AZ-200.2: Develop for Azure storage Develop solutions that use Azure Cosmos DB storage Develop solutions that use a relational database AZ-200.2: Develop for Azure storage Develop solutions that use a relational database Develop solutions that use blob storage AZ-200.2: Develop for Azure storage Develop solutions that use Microsoft Azure Blob storage Implement authentication AZ-200.4: Implement security in Azure development solutions Implementing authentication Implement access control AZ-200.4: Implement security in Azure development solutions Implementing access control Implement secure data solutions AZ-200.4: Implement security in Azure development solutions Implementing secure data solutions Develop code to support scalability of apps and services AZ-201.1: Develop for an Azure cloud model Develop for autoscaling Integrate caching and content delivery within solutions AZ-200.2: Develop for Azure storage Developing for caching and content delivery solutions Instrument solutions to support monitoring and logging AZ-201.1: Develop for an Azure cloud model Instrument an app or service and implement logging Develop an App Service Logic App AZ-200.3: Develop Azure Platform as a Service solutions Creating an app service Logic App Integrate Azure Search within solution AZ-201.1: Develop for an Azure cloud model Enable the search of textual content Establish API Gateways AZ-201.2: Implement Azure development integration solutions Manage APIs by using API Management (APIM) Develop event-based solutions AZ-201.2: Implement Azure development integration solutions Configure a message-based integration architecture Develop message-based solutions AZ-201.2: Implement Azure development integration solutions Develop an application message model Good luck\nMax\n",
    "tags": ["AZ-203"],
    "categories": ["Certification","Development"],
    "feature": "https://melcher.dev/2019/01/az-203-learning-material-/-link-collection/images/AZ-203.png"
  },
  {
    "url": "https://melcher.dev/2019/01/azure-devops-purge-azure-cdn/",
    "title": "Azure DevOps: Purge Azure CDN ",
    "date_published": "2019-01-07T10:00:21+01:00",
    "description": "This will be a quick one: In this post I show you how to purge/empty an Azure CDN during an Azure DevOps deployment.\n",
    "content": "This will be a quick one: In this post I show you how to purge/empty an Azure CDN during an Azure DevOps deployment.\nThe Why As described in this post, I use the fantastic Azure Storage Static Website feature to host this blog. SSL is a must, even for static websites - so I have to use an Azure CDN to get a free certificate. Every deployment rebuilds the entire blog and because of its static nature some artifacts can be cached for a longer duration (days!). But once I publish, I want to ensure that the most recent version is distributed and then cached in the CDN.\nDeployment with Azure DevOps I am already deploying this blog with Azure DevOps because its super fast and simple to setup - so I adjusted my build pipeline and added one more CLI task:\n#purge everything az cdn endpoint purge -g melcherit -n melcher --profile-name melcher --content-paths \u0026#34;/*\u0026#34; More infos about the CLI commands are available here.\nMy entire pipeline looks like this: or in YAML: steps: - task: AzureCLI@1 displayName: \u0026#39;Azure CLI: Purge CDN\u0026#39; inputs: azureSubscription: \u0026#39;\u0026lt;Subscription\u0026gt;\u0026#39; scriptLocation: inlineScript inlineScript: | #purge everything call az cdn endpoint purge -g melcherit -n melcher --profile-name melcher --content-paths \u0026#34;/*\u0026#34; Unfortunately the Standard Microsoft CDN Profile does not allow pre-loading of assets - but with the limit of 10 load requests per minute with up to 50 paths loading this blog with 8600 files would take ~18 minutes:\nAnd that would not make too much sense because the first load after the purge is really fast.\nOne small addition to my Azure DevOps pipeline - and it worked on the first try! Big like.\n",
    "tags": ["Azure CDN","Azure DevOps","Performance","Hugo"],
    "categories": ["Blog","Azure DevOps"],
    "feature": "https://melcher.dev/2019/01/azure-devops-purge-azure-cdn/images/azure-devops-deployment.png"
  },
  {
    "url": "https://melcher.dev/2019/01/inconvenient-hugo-yearly/monthly-archives/",
    "title": "Inconvenient Hugo Yearly/Monthly Archives",
    "date_published": "2019-01-05T08:32:05+01:00",
    "description": "Yesterday I noticed, that my blog did not have the very best urls for my posts than I could have - my last post had the url /post/2018-12-29-Recapping-2018/ and actually I thought it would (and should!) produce something like this: /2018/12/Recapping-2018-90-days-at-Microsoft/ After changing the urls to the correct schema (more in a bit) I noticed that the yearly (e.g. /2018) or monthly (e.g. /2018/12) links do not work at all.\nIn this post, I show you how I fixed those problems.\n",
    "content": "Yesterday I noticed, that my blog did not have the very best urls for my posts than I could have - my last post had the url /post/2018-12-29-Recapping-2018/ and actually I thought it would (and should!) produce something like this: /2018/12/Recapping-2018-90-days-at-Microsoft/ After changing the urls to the correct schema (more in a bit) I noticed that the yearly (e.g. /2018) or monthly (e.g. /2018/12) links do not work at all.\nIn this post, I show you how I fixed those problems.\nFirstly, I changed the links for the posts. My chosen blog engine, Hugo, is so awesome that this is just one setting in the config:\n1 2 [permalinks] post = \u0026#34;/:year/:month/:title/\u0026#34; After that, every \u0026ldquo;post\u0026rdquo; will have this link structure /year/month/title.Simple and easy to understand. That change, of course, breaks all the existing links out there and would potentially be a hit on your google SEO and kill all my tweets/posts etc. So I wrote a short PowerShell script to update all my posts to be available at the old address and the new address, in hugo language I added an alias. So far, so good, right? Changing all my posts with PowerShell is awesome, too :)\nYearly / Monthly archives for Hugo As mentioned in the introduction, I noticed that the yearly (e.g. /2018) and monthly (e.g. /2018/12) urls do not show the expected results - a list of posts from that time. And I am actually a little bit concerned if that is bad for my SEO or not. I didn\u0026rsquo;t like it, so I wanted to change it. There has to be flag to generate this list, right? Nope, afaik there is no such option yet. The github issue #448 for that feature request gets postponed regularly, so I had only 3 options for it:\nleave it learn go and submit a pull request find a workaround So 1. is not acceptable. 2. is unfortunately out of scope right now. So lets find a workaround: After extensive googling I found this workaround that used some javascript/node code to generate the archive pages. I want to stick to the standard, that does not feel right. So I tried another workaround were @onedrawingperday suggested to use a taxonomy to additionally tag the year and month on each post and use taxonomy list pages to show the posts. Not ideal, because the date is already in the frontmatter - but I can live with it. So I changed the site config to have a taxonomy per year: 1 2 3 4 5 6 7 8 9 10 11 12 [taxonomies] category = \u0026#34;categories\u0026#34; tag = \u0026#34;tags\u0026#34; 2011 = \u0026#34;2011\u0026#34; 2012 = \u0026#34;2012\u0026#34; 2013 = \u0026#34;2013\u0026#34; 2014 = \u0026#34;2014\u0026#34; 2015 = \u0026#34;2015\u0026#34; 2016 = \u0026#34;2016\u0026#34; 2017 = \u0026#34;2017\u0026#34; 2018 = \u0026#34;2018\u0026#34; 2019 = \u0026#34;2019\u0026#34; Then I created a second powershell to tag all my existing posts with the new date tags in the frontmatter. The month part is a two digit number that is quoted (for sorting, see later in this post!). 1 2 3 4 5 6 --- title: \u0026#34;Inconvenient Hugo Yearly/Monthly Archives\u0026#34; date: 2019-01-04T11:32:05+01:00 2019: \u0026#34;01\u0026#34; author: \u0026#34;Max Melcher\u0026#34; --- That generates a beautiful, but unfortunately empty page: Then I figured out that I can create taxonomy list pages to actually show content on those pages. Luckily the fabulous theme my blog uses had two templates that I could copy. Because I created 9 taxonomies, I had to create them for every year: I modified the taxonomy list template a tiny bit to replace the \u0026ldquo;02\u0026rdquo; tag value to \u0026ldquo;February\u0026rdquo;. I had to tag it with two digit numeral value to have a proper sorting on the page, here 2019.terms.html (name of the file is important!). I changed the template code to get the tags from .Data.Terms.Alphabetical (line 7) - because the values are two digit numerical, sorting works perfect for this case.\nPlease note: the files will only work with the theme future imperfect - if you want the same behavior you have to adjust the files to your theme!\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 {{ partial \u0026#34;general-title\u0026#34; . }} {{ partial \u0026#34;header\u0026#34; . }} {{ partial \u0026#34;navbar\u0026#34; . }} \u0026lt;!-- Main --\u0026gt; \u0026lt;div id=\u0026#34;main\u0026#34;\u0026gt; {{ $.Scratch.Set \u0026#34;tags\u0026#34; .Data.Terms.Alphabetical }} \u0026lt;ul class=\u0026#34;posts\u0026#34;\u0026gt; \u0026lt;header\u0026gt; \u0026lt;h1\u0026gt;// {{ .Data.Plural }}\u0026lt;/h1\u0026gt; \u0026lt;/header\u0026gt; {{ $data := .Data }} {{ $months := dict \u0026#34;01\u0026#34; \u0026#34;January\u0026#34; \u0026#34;02\u0026#34; \u0026#34;February\u0026#34; \u0026#34;03\u0026#34; \u0026#34;March\u0026#34; \u0026#34;04\u0026#34; \u0026#34;April\u0026#34; \u0026#34;05\u0026#34; \u0026#34;May\u0026#34; \u0026#34;06\u0026#34; \u0026#34;June\u0026#34; \u0026#34;07\u0026#34; \u0026#34;July\u0026#34; \u0026#34;08\u0026#34; \u0026#34;August\u0026#34; \u0026#34;09\u0026#34; \u0026#34;September\u0026#34; \u0026#34;10\u0026#34; \u0026#34;October\u0026#34; \u0026#34;11\u0026#34; \u0026#34;November\u0026#34; \u0026#34;12\u0026#34; \u0026#34;December\u0026#34; }} {{ range $key, $value := $.Scratch.Get \u0026#34;tags\u0026#34; }} \u0026lt;li\u0026gt; \u0026lt;article\u0026gt; \u0026lt;header\u0026gt; {{ if ne $value.Name \u0026#34;\u0026#34; }} {{ $month := index $months $value.Name }} \u0026lt;a href=\u0026#34;{{\u0026#34;/\u0026#34; | relURL}}{{ $data.Plural }}/{{ $value.Name | urlize }}\u0026#34;\u0026gt;{{ $month }}\u0026lt;/a\u0026gt; \u0026lt;span style=\u0026#34;float:right;\u0026#34;\u0026gt;({{ $value.Count }})\u0026lt;/span\u0026gt; {{ else }} Uncategorized \u0026lt;span style=\u0026#34;float:right;\u0026#34;\u0026gt;({{ $value.Count }})\u0026lt;/span\u0026gt; {{ end }} \u0026lt;/header\u0026gt; \u0026lt;/article\u0026gt; \u0026lt;/li\u0026gt; {{ end }} \u0026lt;/ul\u0026gt; \u0026lt;/div\u0026gt; {{ $.Scratch.Set \u0026#34;showCategories\u0026#34; false }} {{ partial \u0026#34;sidebar\u0026#34; . }} {{ partial \u0026#34;footer\u0026#34; . }} and 2019.html file:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 {{ partial \u0026#34;general-title\u0026#34; . }} {{ partial \u0026#34;header\u0026#34; . }} {{ partial \u0026#34;navbar\u0026#34; . }} \u0026lt;!-- Main --\u0026gt; \u0026lt;div id=\u0026#34;main\u0026#34;\u0026gt; \u0026lt;header\u0026gt; {{ $months := dict \u0026#34;01\u0026#34; \u0026#34;January\u0026#34; \u0026#34;02\u0026#34; \u0026#34;February\u0026#34; \u0026#34;03\u0026#34; \u0026#34;March\u0026#34; \u0026#34;04\u0026#34; \u0026#34;April\u0026#34; \u0026#34;05\u0026#34; \u0026#34;May\u0026#34; \u0026#34;06\u0026#34; \u0026#34;June\u0026#34; \u0026#34;07\u0026#34; \u0026#34;July\u0026#34; \u0026#34;08\u0026#34; \u0026#34;August\u0026#34; \u0026#34;09\u0026#34; \u0026#34;September\u0026#34; \u0026#34;10\u0026#34; \u0026#34;October\u0026#34; \u0026#34;11\u0026#34; \u0026#34;November\u0026#34; \u0026#34;12\u0026#34; \u0026#34;December\u0026#34; }} \u0026lt;h1\u0026gt;// {{ index $months .Title }} {{ .Section }}\u0026lt;/h1\u0026gt; \u0026lt;/header\u0026gt; {{ $paginator := .Paginate (where .Site.RegularPages \u0026#34;Type\u0026#34; \u0026#34;post\u0026#34;) }} {{ range $paginator.Pages }} {{ .Render \u0026#34;content-list\u0026#34; }} {{ end }} {{ partial \u0026#34;pagination\u0026#34; . }} \u0026lt;/div\u0026gt; {{ partial \u0026#34;sidebar\u0026#34; . }} {{ partial \u0026#34;footer\u0026#34; . }} Then I altered my archetype that I use to create new pages - it should automatically have the taxonomy value so I dont have to take care of it:\n1 2 3 4 5 6 --- title: \u0026#34;{{ replace .Name \u0026#34;-\u0026#34; \u0026#34; \u0026#34; | title }}\u0026#34; date: {{ .Date }} {{dateFormat \u0026#34;2006\u0026#34; .Date}}: \u0026#34;{{dateFormat \u0026#34;01\u0026#34; .Date}}\u0026#34; author: \u0026#34;Max Melcher\u0026#34; --- Archetypes are a neat feature!\nAnd that results in usable archive pages that fit my needs (see /2018/12 or /2018). A bit inconvenient is, that I have to remember that I need to create a new taxonomy next year and duplicate the taxonomy list template files. Or shall I pre-provision them now? :)\n",
    "tags": ["Archive","Yearly","Monthly","Archetypes","Taxonomy List Template","SEO"],
    "categories": ["Hugo"],
    "feature": "https://melcher.dev/2019/01/inconvenient-hugo-yearly/monthly-archives/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2018/12/recapping-2018-90-days-at-microsoft/",
    "title": "Recapping 2018: 90 days at Microsoft",
    "date_published": "2018-12-29T17:10:21+02:00",
    "description": "2018 was literally flying by - and was awesome. I had never ever so many changes in my life than in 2018 - and here are the notable ones!\n",
    "content": "2018 was literally flying by - and was awesome. I had never ever so many changes in my life than in 2018 - and here are the notable ones!\n90 days at Microsoft 1st of October 2018 was my first day with a blue badge. Giving back my MVP title was not an easy decision for me, one that I postponed for many years. But, things change - Microsoft did, too - and it was time for me to try something new. Meeting my role models in person like Scott Guthrie or Donovan Brown really helped me making this step. So for the past 90 days I am a Microsoft Cloud Solution Architect for Microsoft Germany. And it is great fun for me:\nThe first days at Microsoft were very overwhelming for me, understanding all the roles and acronyms flying around is hard. And I thought I knew Microsoft pretty well :) But everyone at Microsoft is super helpful and I really enjoyed the super professional onboarding: I watched videos for the entire first week and they are super helpful to understand who is doing what, responsibilities, goals etc.: I love it. So after 90 days I am responsible for the first really big customers, a really different level compared to my previous roles. It is a challenge, but a good one that motivates me big times and I can really identify myself with our mission \u0026ldquo;to empower every person and every organization on the planet to achieve more\u0026rdquo;.\nBig thanks to my onboarding buddy Steffen who helped me understand how things work! Also a special thanks to my team lead Nadine who supports me on a level I never experienced before!\nAzureSaturday Munich / AzureDays.org AzureSaturday is a really awesome, fun and rewarding event for me. It eats a lot of time, but getting more than 400 like-minded Azure folks in one location on a Saturday is awesome, awesome, awesome. Organizing it with my close friends Ben and Tom is always epic!\nAzure Saturday Munich is a free community-focused Azure event dedicated to educating and engaging members of the local technical community. Azure Saturday draws upon the expertise of local Azure IT professionals, developers and solutions architects who come together to share their real world experiences, lessons learned, best practices, and general knowledge with other like-minded individuals\nA few pictures from 2018: The next AzureSaturday in Munich is already scheduled: 18th May of 2019 at Microsoft Germany. It\u0026rsquo;s a free event with great speakers - get your ticket: azuresaturday.de And for the very first time, AzureSaturday is not only in Munich - our friends Janek and Ben are organizing one in Berlin (9th February, 2019) - go grab a ticket at (azuresaturdayberlin.de)[https://azuresaturdayberlin.de] We are currently supporting three more teams to organize an AzureSaturday internationally - if that is something you want to do, then check AzureDays.org for more details. It is easier than you might think! :)\nPersonal I married my girlfriend in Castle Oberschleissheim. Actually we wanted to do it in 2016, but then my wonderful daughter Sophia was born and we had to adjust our plans. Together with our families and closest friends we had a very special day:\nEverything was (and still is!) simply perfect.\nLearning My friend Jens asked me: \u0026ldquo;What did you learn in 2018?\u0026rdquo;. For the last 90 days I intensified my Azure skills and I tried to do that as broad and deep as possible. So I covered topics from Governance, Security, architecture for performance, Cost Management, Azure Websites, Azure Storage, SAP on Azure, Kubernetes, Terraform, Azure DNS, Azure VMs, Azure DevOps and many many more services - and luckily I had projects in those areas to battle test those learnings. Additionally I sat down to learn for the new Azure Certification AZ-200 - the certification did not made it out of beta and was replaced with AZ-203. Getting that one (and AZ-400) will be on the list for 2019.\nBlog My tiny blog had more than 100.000 views this year - that\u0026rsquo;s cool! Recently I wrote a lot more than in the beginning of the year - the post I had the most fun to write was \u0026ldquo;PENNY PINCHING: MIGRATING APP SERVICE TO AZURE STORAGE WEBSITE HOSTING\u0026rdquo; because I waited really long for this capability and it simply works. Combined with Azure DevOps and the hugo blog engine its terrific! For 2019 I will write down my learnings at Microsoft but primarily about my favorite cloud: Azure.\nParagliding In 2018 I had approximately 50 flights, not as many as I wanted, but still some very special locations.\nCastle Neuschwanstein, Germany: Bassano, Italy: Andelsbuch, Austria: Lefkas, Greece: Thank you So the end was a little picture-heavy - but - I really had a blast in 2018. Thanks to all who were flying with me, looking forward to meet you all in 2019.\nHappy new year!\nMax\n",
    "tags": ["Microsoft","MicrosoftLife","Paragliding","AzureSaturday","AzureEvents","AzureDays","Learning","Blog"],
    "categories": ["Retrospective"],
    "feature": "https://melcher.dev/2018/12/recapping-2018-90-days-at-microsoft/images/featured.jpg"
  },
  {
    "url": "https://melcher.dev/2018/12/logic-apps-monitor-email-and-attachments/",
    "title": "Logic Apps: Monitor, Email and Attachments",
    "date_published": "2018-12-09T16:05:57+01:00",
    "description": "This will be a short one: In this post I show how to use Logic Apps to monitor a file for changes - if the file was changed, send it via email as attachment.\n",
    "content": "This will be a short one: In this post I show how to use Logic Apps to monitor a file for changes - if the file was changed, send it via email as attachment.\nScenario I have a file that is changed periodically but unknown when. I want to be informed when the file is changed with the file as attachment. The solution should run at most 3 months and shouldn\u0026rsquo;t cost me too much.\nPossible Solutions I thought of multiple solutions, but wanted an easy, throw-away solution. Serverless? Of course. So I firstly thought of Azure Functions, but I did not want to spend too much time in developing stuff that is already available. Then I thought I should give Logic Apps a quick try - and I was amazed how fast I could solve that one.\nLogic App: Monitoring File and sending them by mail So I quickly came up with the following: The Logic App is executed in the following order:\nA recurring trigger: Repeat every 30 minutes Download the target file via http. The download needs a cookie authentication, but I could easily add that in the HTTP action. Neat! Parse the http headers as json. I need the header to determine if the file has changed so I extracted the content-disposition header: { \u0026#34;properties\u0026#34;: { \u0026#34;content-disposition\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34; } }, \u0026#34;type\u0026#34;: \u0026#34;object\u0026#34; } I download a text file from a blob storage. In the blob storage I store when the file was changed the last time (see 9.). I compare the blob value with the just downloaded value If equal, do nothing If changed Send me an email with attachment Update the text file on the blob storage I struggled the most with sending the downloaded file as attachment, so here is the relevant part of it were I use ContentBytes with the bytes I got from the http request: { \u0026#34;actions\u0026#34;: { \u0026#34;Send_an_email_2\u0026#34;: { \u0026#34;inputs\u0026#34;: { \u0026#34;body\u0026#34;: { \u0026#34;Attachments\u0026#34;: [ { \u0026#34;ContentBytes\u0026#34;: \u0026#34;@outputs(\u0026#39;HTTP\u0026#39;)[\u0026#39;body\u0026#39;][\u0026#39;$content\u0026#39;]\u0026#34;, \u0026#34;Name\u0026#34;: \u0026#34;file.xlsx\u0026#34; } ], \u0026#34;Body\u0026#34;: \u0026#34;New file\u0026#34;, \u0026#34;Subject\u0026#34;: \u0026#34;New file\u0026#34;, \u0026#34;To\u0026#34;: \u0026#34;max@melcher.it;\u0026#34; }, \u0026#34;host\u0026#34;: { \u0026#34;connection\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;@parameters(\u0026#39;$connections\u0026#39;)[\u0026#39;office365\u0026#39;][\u0026#39;connectionId\u0026#39;]\u0026#34; } }, \u0026#34;method\u0026#34;: \u0026#34;post\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/Mail\u0026#34; }, \u0026#34;runAfter\u0026#34;: {}, \u0026#34;type\u0026#34;: \u0026#34;ApiConnection\u0026#34; } } }\nSummary Overall I built the Logic App in approx. 60 minutes - If I\u0026rsquo;d knew how to send the attachment in the first place, even faster. But still, I automated an important task for me without a hazzle. Big like! From the cost perspective: I use 4 built-in actions and 2 standard connection actions. I repeat every 30 Minutes, so 48 times a day. So in a month that task will cost me 0.50$: Awesome, right?\n",
    "tags": ["Logic Apps","Email","Monitoring","Serverless"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2018/12/logic-apps-monitor-email-and-attachments/images/chris-liverani-552652-unsplash.jpg"
  },
  {
    "url": "https://melcher.dev/2018/11/simple-just-in-time-rdp/ssh-access-to-azure-vm/",
    "title": "Simple Just-in-Time RDP/SSH Access to Azure VM",
    "date_published": "2018-11-20T16:16:56+01:00",
    "description": "In this post I show you how to effortless Just-In-Time connect to an Azure VM.\n",
    "content": "In this post I show you how to effortless Just-In-Time connect to an Azure VM.\nIf you expose a VM directly to the internet (not recommended!) literally thousands of automated attacks will happen shortly after. This applies to all infrastructure, of course. If you use a weak combination of username and password, the VM will be taken over in minutes. Therefore a \u0026lsquo;Just in time\u0026rsquo; (JIT) concept was introduced to Azure, that basically does the following:\nLock down the VM: no connections via RDP (port 3389) or SSH (port 22) If a user wants to connect: grant the user\u0026rsquo;s IP access to the VM After a specified time: remove the rule and lock down the VM again The JIT concept that is part of the Azure Security Center is really sophisticated: You can control how long the connection can be open, from what range, to what port for all your VMs - and get a full connection audit! It\u0026rsquo;s awesome. A nice article from my friend [Tom](https://blog.azureandbeyond.com/ will give you more background.\nFor my use case of securing two or three VMs it was a little bit too much tho - and I wanted to connect to the VMs directly from my desktop and not through the portal. In other words: I created a script :)\nAssumptions My script has the following assumptions:\nThe VM has a public IP and is running The NSG has no general allow rule for RDP or SSH The connecting user has write permissions to the NSG and at least read permissions to the target VM For Linux: the admin user that was used to provision the VM is used for the connection The Script The following script is free for use and modification - but comes without any warranty of any kind. It works for me, maybe needs some changes to work for you:\n\u0026lt;# .SYNOPSIS . .DESCRIPTION A simple script to connect to Azure VMs (linux or windows). Firstly a NSG rule is created to allow the connection from your pc to the VM Then the conenction is established with either MSTSC or ssh After the connection is closed, the script removes the NSG rule Assumptions: The VM has a public IP and is running The NSG has no general allow rule for RDP or SSH For Linux: the admin user that was used to provision the VM is used for the connection .PARAMETER VMName Name of the VM you want to connect to .PARAMETER ResourceGroupName Name of the ResourceGroup of the VM .PARAMETER Protocol Protocol: RDP for Windows, SSH for Linux VMs .PARAMETER WaitTime The time the script waits until a session is established. This is because it takes a while until the NSG kicks in. .EXAMPLE jit-connect -protocol \u0026lt;RDP | SSH\u0026gt; -VMName \u0026lt;VMName\u0026gt; -ResourceGroup \u0026lt;ResourceGroupName\u0026gt; .NOTES Author: Max Melcher Date: November 21, 2018 Website: https://melcher.it/post/2018-11-20-AzureSecureRDPLogin/ #\u0026gt; Param( [Parameter(Position = 0, Mandatory = $True, ValueFromPipeline = $True)] [string]$VMName, [Parameter(Position = 1, Mandatory = $True, ValueFromPipeline = $True)] [string]$ResourceGroupName, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [ValidateSet(\u0026#39;RDP\u0026#39;,\u0026#39;SSH\u0026#39;)] [string]$Protocol, [Parameter(Position = 2, Mandatory = $False, ValueFromPipeline = $True)] [int]$WaitTime = 45 ) write-host \u0026#34;Establishing connection to VM $VMName\u0026#34; #check the connection - if not available, sign in $ctx = Get-AzureRmContext if (!$ctx.Account) { Connect-AzureRmAccount -WarningAction SilentlyContinue } $status = Get-AzureRmVm -ResourceGroupName $ResourceGroupName -Name $VMName ` -ErrorAction SilentlyContinue -Status -WarningAction SilentlyContinue $vm = Get-AzureRmVm -ResourceGroupName $ResourceGroupName -Name $VMName ` -ErrorAction SilentlyContinue -WarningAction SilentlyContinue if (!$status) { Write-Host \u0026#34;VM $VMName not found in ResourceGroup $ResourceGroupName\u0026#34; exit } foreach($vmStatus in $status.Statuses ){ if($vmStatus.Code -eq \u0026#34;PowerState/stopped\u0026#34; -or $vmStatus.Code -eq \u0026#34;PowerState/deallocated\u0026#34;) { write-host \u0026#34;$VMName is not running!\u0026#34; exit } } if ($Protocol -eq \u0026#34;RDP\u0026#34;) { $port = 3389 } else { #ssh $port = 22 } #get the VM\u0026#39;s public ip $nic = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName ` -Name $(Split-Path -Leaf $vm.NetworkProfile.NetworkInterfaces[0].Id) $config = $nic | Get-AzureRmNetworkInterfaceIpConfig $ipname = $config.PublicIpAddress.Id.Substring($config.PublicIpAddress.Id.LastIndexOf(\u0026#34;/\u0026#34;)+1) $vmIP = (Get-AzureRmPublicIpAddress -Name $ipname -ResourceGroupName $ResourceGroupName).IpAddress write-host \u0026#34;VM Public IP is: $vmIP\u0026#34; $hostname = $env:computername #your hostname $ip = Invoke-RestMethod http://ipinfo.io/json | Select -exp ip #your external IP write-host \u0026#34;Your Public IP is: $ip\u0026#34; #set the allow rule to the NSG $nsg = Get-AzureRmNetworkSecurityGroup -Name $nic.NetworkSecurityGroup.Id.Substring($nic.NetworkSecurityGroup.Id.LastIndexOf(\u0026#34;/\u0026#34;)+1) ` -ResourceGroupName $ResourceGroupName foreach ($rule in $nsg.SecurityRules) { if ($rule.Name -notlike \u0026#34;JIT-*\u0026#34; -and $rule.Access -eq \u0026#34;Allow\u0026#34; -and $rule.DestinationPortRange -eq $port) { Write-Host -ForegroundColor Red \u0026#34;The general rule \u0026#39;$($rule.Name)\u0026#39; for port $port is already present. Remove it or set the access to \u0026#39;deny\u0026#39;\u0026#34; exit } } #set the allow rule to the NSG $rule = Get-AzureRmNetworkSecurityRuleConfig -Name \u0026#34;JIT-$hostname\u0026#34; -NetworkSecurityGroup $nsg -ErrorAction SilentlyContinue if ($rule) { #do nothing because its there write-host \u0026#34;NSG rule is already present\u0026#34; } else { write-host \u0026#34;Creating $Protocol NSG rule for JIT access.\u0026#34; Add-AzureRmNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg -Name \u0026#34;JIT-$hostname\u0026#34; -Description \u0026#34;Allow $Protocol for $hostname\u0026#34; ` -Access \u0026#34;Allow\u0026#34; -Protocol \u0026#34;Tcp\u0026#34; -Direction \u0026#34;Inbound\u0026#34; -Priority \u0026#34;109\u0026#34; -SourceAddressPrefix $ip ` -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange $port | out-null $nsg | Set-AzureRmNetworkSecurityGroup | out-null #wait 10 seconds for the NSG rule write-host -ForegroundColor Yellow \u0026#34;waiting $WaitTime seconds for the NSG rule\u0026#34; Start-Sleep -Seconds $WaitTime } #launch session and wait till exit write-host \u0026#34;`n`n`n`n`n\u0026#34; write-host -ForegroundColor Yellow \u0026#34;#################################\u0026#34; write-host -ForegroundColor Yellow \u0026#34;#################################\u0026#34; write-host \u0026#34;Do not close this window until you have closed the $Protocol connection!\u0026#34; write-host -ForegroundColor Yellow \u0026#34;#################################\u0026#34; write-host -ForegroundColor Yellow \u0026#34;#################################\u0026#34; if ($Protocol -eq \u0026#34;RDP\u0026#34;) { mstsc /v:$vmIP | out-null } else { $user = $vm.OSProfile.AdminUsername ssh \u0026#34;$user@$vmIP\u0026#34; } #remove the nsg Rule write-host \u0026#34;`n`n`n`n`n\u0026#34; write-host \u0026#34;removing the NSG rule\u0026#34; Remove-AzureRmNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg -Name \u0026#34;JIT-$hostname\u0026#34; | out-null $nsg | Set-AzureRmNetworkSecurityGroup | out-null write-host -ForegroundColor Green \u0026#34;done.\u0026#34; or in action: If you create a shortcut to the powershell file with the required parameters, its a secure one-click connect to an Azure VM.\nHelpful? It might take a little longer to connect - but - it is secure.\nDoes it help you?\n",
    "tags": ["VM","RDP","SSH"],
    "categories": ["Azure"],
    "feature": "https://melcher.dev/2018/11/simple-just-in-time-rdp/ssh-access-to-azure-vm/images/featured.jpg"
  },
  {
    "url": "https://melcher.dev/2018/11/azure-policy-audit-installed-applications/",
    "title": "Azure Policy: Audit Installed Applications",
    "date_published": "2018-11-15T09:41:44+01:00",
    "description": "Azure Policies are the new silver bullet for all things governance: Last week (November 10, 2018) a new policy was introduced that can audit installed applications inside virtual machines (see intro post).\nI wanted to know wether it is possible to detect software that should not be installed. Imagine you want to discover all servers where a specific version is installed that ran out of support. Or maybe a software that has not been approved yet. There are many of those scenarios.\n",
    "content": "Azure Policies are the new silver bullet for all things governance: Last week (November 10, 2018) a new policy was introduced that can audit installed applications inside virtual machines (see intro post).\nI wanted to know wether it is possible to detect software that should not be installed. Imagine you want to discover all servers where a specific version is installed that ran out of support. Or maybe a software that has not been approved yet. There are many of those scenarios.\nThis case could have been handled with Azure Automation and Software inventory - but then you would need to add log analytics to all VMs and pay for the data ingestion. Its not much, but if you have lots of VMs then maybe the Azure Policy approach fits better.\nAudit Installed Software Note Please note: As indicated by the name, the used policies are in PREVIEW. Things may not be ready for production, yet!\nThe provided Azure Policy initiative \u0026ldquo;[Preview]: Audit applications inside Windows VMs\u0026rdquo; is a good starting point. It has two policies, one deploys the Microsoft Guest Configuration. It is required to get the installed software from within the VM. The other policy then actually checks if a given software is installed. If so, it marks the checked VM as compliant.\nI want the exact opposite case. I want to mark it non-compliant if a given software is installed.\nTo verify my approach, I created a new VM and installed Microsoft SQL Server 2017 - important is, the policy checks for installed software and does not check the file system: Setting up my test system with azure cli took me like 15-20 minutes (downloading and installing sql was not automated): az login az group create --name SQLAudit --location westeurope az vm create -g SQLAudit --image Win2012R2Datacenter --size Standard_DS2_v2 -n \u0026#34;SQLAudit\u0026#34; --admin-password \u0026#34;\u0026lt;Password\u0026gt;\u0026#34; --admin-username \u0026#34;\u0026lt;Username\u0026gt;\u0026#34; az vm open-port --name \u0026#34;SQLAudit\u0026#34; --port 3389 --resource-group SQLAudit mstsc /v:\u0026lt;PublicIP\u0026gt;\nThen I started to duplicate the built-in Azure Policy initiative. It took me a while to figure out how to create it with Azure CLI, so here are the commands and json files I used:\naz policy definition create --name \u0026#39;blacklisted-software\u0026#39; --display-name \u0026#39;Blacklisted Software\u0026#39; --description \u0026#39;This policy checks if a given software is installed\u0026#39; --rules \u0026#39;https://melcher.dev/2018/11/azure-policy-audit-installed-applications/CLI/Policy.BlacklistedApplication.json\u0026#39; --mode Indexed This creates an Azure Policy with the name \u0026ldquo;Blacklisted Software\u0026rdquo; and is similar to the built-in policy \u0026ldquo;[Preview]: Deploy VM extension to audit application inside Windows VMs must be present\u0026rdquo;. I only inverted the logic in the very last row and filter on \u0026lsquo;Non-compliant\u0026rsquo; entries: and the command to create the Azure Policy initiative: az policy set-definition create -n \u0026#34;Blackelisted Software\u0026#34; --definitions \u0026#34;https://melcher.dev/2018/11/azure-policy-audit-installed-applications/CLI/Policy.VMExtension.json\u0026#34; --params \u0026#34;https://melcher.dev/2018/11/azure-policy-audit-installed-applications/CLI/Policy.Params.json\u0026#34;\nAnd lastly the policy assignment: az policy assignment create --scope \u0026#34;/subscriptions/\u0026lt;ID\u0026gt;\u0026#34; -d \u0026#34;/providers/Microsoft.Authorization/policyDefinitions/\u0026lt;Id of the policy\u0026gt;\u0026#34; --name \u0026#34;Blacklisted Application\u0026#34; --params \u0026#34;https://melcher.dev/2018/11/azure-policy-audit-installed-applications/CLI/Policy.ParamsValue.json\u0026#34;\nResults in this assignment in the portal: Files to download: Policy 1 Policy 2 Params\nYou could even execute my commands - Azure CLI downloads the JSON files from my blog and executes them. In the Policy 2 file is my subscription id, so it wont work in this case - but the idea is awesome. Maybe the policies can be referenced by name instead of id, I\u0026rsquo;ll check that later.\nAfter Azure Policy did its magic (approx. 15 minutes), you can see that it discovered the one test installation of SQL Server in my VM: Please note: The policy does not check standard sql images that you can get in the marketplace. This is because the policy \u0026ldquo;[Preview]: Deploy VM extension to audit application inside Windows VMs must be present\u0026rdquo; only checks images with the following constraints: Basically it must be a standard windows server image, otherwise you have to adjust the first policy.\nSummary In this article I showed you how to use the new Azure Policy feature to audit installed applications.You find it as useful as I do?\n",
    "tags": ["Azure Policy","Inventory"],
    "categories": ["Governance"],
    "feature": "https://melcher.dev/2018/11/azure-policy-audit-installed-applications/images/featured.png"
  },
  {
    "url": "https://melcher.dev/2018/11/penny-pinching-migrating-app-service-to-azure-storage-website-hosting/",
    "title": "Penny Pinching: Migrating App Service to Azure Storage Website Hosting",
    "date_published": "2018-11-11T09:00:28Z",
    "description": "I am a very big fan of Azure App Service - the flexibility and power you get from this service always amazes me. But recently Static website hosting in Azure Storage was announced and because of the static nature of this blog it would be an ideal fit! So lets see how the migration goes, right? In this lengthy post I show you how I migrated from Azure App Service to Azure Storage Static Website Hosting, from Deployment to Custom Domain.\n",
    "content": "I am a very big fan of Azure App Service - the flexibility and power you get from this service always amazes me. But recently Static website hosting in Azure Storage was announced and because of the static nature of this blog it would be an ideal fit! So lets see how the migration goes, right? In this lengthy post I show you how I migrated from Azure App Service to Azure Storage Static Website Hosting, from Deployment to Custom Domain.\nFirstly I checked the requirements and the notes Preview feature. Hosting static files from a storage account - what could go wrong? It is a free feature, too!\nIt says I need a storage account of kind StorageV2 - so I created one: Note: I tried to upgrade an existing V1 storage - enabling the static website feature worked, but I did not get a website url then!\nThen I enable Static website (preview) feature: This gave me the website url: https://melcherit.z6.web.core.windows.net/ - I copied my index.html to the storage account and it worked on the first try: That is a very promising start.\nDeployment So building my entire site and uploading it to the storage account and we are set, right? There is even a VS Code extension to do that.\nNope. I am used to create my posts with VS Code and then pushing them to Bitbucket. After the pushs is registered, a deployment cmd file is trigger that pre-compiles my hugo blog posts to html files. That deployment option is not available with Storage Accounts so I need an alternative. Azure DevOps immediately came to my mind and I gave it a quick go.\nPush the repository to Azure Repos Create an Azure Pipeline build definition to pre-compile the website Create an Azure Pipeline release definition to copy the website to the storage account The first task was super easy. Created a new repo in Azure Repo - imported the entire repository (way faster than pushing it myself) and done. Secondly I checked if there is a build task for Hugo - and surprisingly there is one: Hugo by Giulio Vian That is super awesome!\nSo configured my build with that extension and run it: At first I wondered why there are no build artifacts / output - right, I need to publish them to see it: Unfortunately that took way too long (blog output is ~1GB with 7700 files) and I guess you would need to be patient for that approach. Actually I dont need to reuse the build output - a simple copy to the Azure Storage would be sufficient. So no classic Build/Release approach, only build for now.\nSo here comes build #3 - and that instantly failed. There you go, my perfect build history: Mhh, the container name is $web where the files must be copied to - nothing we can do about it. Before opening a issue for the Azure File Copy task, lets check if there is a new version of it. Indeed - Version 2 is available, here comes build 4: Only took 45 seconds - acceptable :)\nFinally: I only have to redirect my domain to the new storage web endpoint and done? Nope. Unfortunately, static website hosting does not support custom domains with SSL - the warning was so obvious that I ignored it: SSL is a must, even for static websites. So I googled if there are other options than the suggestion with the Azure CDN. There is one by Aaron Wislang that uses Cloudflare Workers to redirect the requests to the Azure Storage. I want to have as much as possible in Azure, so I will try the CDN path.\nSo I followed the guide to create an Azure CDN: Remember to set the origin to \u0026ldquo;custom origin\u0026rdquo; to set the source of the CDN to your Azure Storage Web Endpoint. And that seems to work - this blog delivered via the Azure CDN: melcher.azureedge.net/.\nTo have it mapped to my melcher.it domain I enabled a Custom Domain and started the verification to have a certificate. It took like 4-6 hours until I got a verification email, approved it - and waited again. After like 2 hours, the verification process was finished and I was able to redirect my domain to the CDN. Done.\nSummary So what did we get here? From a cost perspective I replaced one App Service Plan S1 (61.56€ per month) with one Azure Storage with 1gb with 100k read/write/list (0.96€ per month) and 1gb global traffic (0.62€) - traffic is estimated tho. But with the free Cloudflare CDN that I put in front of my Azure CDN I should be covered :)\nSo from 61.56€ down to 1.58€ or if you want to have it in percentage: 97% cost reduction!\nLooking at the complexity of the solution: I replaced a rather \u0026ldquo;stupid\u0026rdquo; deploy command with Azure DevOps (big like!) and I replaced 1 service with 2 services to cut the cost.\nIf that does not work out - you will read it here!\n",
    "tags": ["Azure Storage","Azure App Service","Hugo"],
    "categories": ["Azure","Development"],
    "feature": "/images/2018/AzureStorage/katie-harp-pinterest-manager-1080597-unsplash.png"
  },
  {
    "url": "https://melcher.dev/2018/11/azure-governance-govern-the-azure-marketplace-with-azure-policy/",
    "title": "Azure Governance: Govern the Azure Marketplace with Azure Policy",
    "date_published": "2018-11-09T09:30:28Z",
    "description": "The Azure Marketplace easily enables us to add new types of VMs to any Azure environment. Sometimes those VMs can have additional charges that were not approved. Sometimes those VMs come from a 3rd party source that was not approved. Unfortunately the Azure Marketplace can only be disabled or enabled for EA (Enterprise Agreement) customers according to the Marketplace FAQ, by now. This situation is far from ideal from a governance perspective.\nIn this post I will show you how to use the Azure Policy service to audit or even deny the creation of those VMs.\n",
    "content": "The Azure Marketplace easily enables us to add new types of VMs to any Azure environment. Sometimes those VMs can have additional charges that were not approved. Sometimes those VMs come from a 3rd party source that was not approved. Unfortunately the Azure Marketplace can only be disabled or enabled for EA (Enterprise Agreement) customers according to the Marketplace FAQ, by now. This situation is far from ideal from a governance perspective.\nIn this post I will show you how to use the Azure Policy service to audit or even deny the creation of those VMs.\nAzure Policy Azure Policy is a service in Azure that you use to create, assign and, manage policies. These policies enforce different rules and effects over your resources, so those resources stay compliant with your corporate standards and service level agreements. Azure Policy does this by running evaluations of your resources and scanning for those not compliant with the policies you have created. For example, you can have a policy to allow only a certain SKU size of virtual machines in your environment. Once this policy has been implemented, it will then be evaluated when creating and updating resources, as well as over your already existing resources. Later on in this documentation, we will go over more details on how to create and implement policies with Azure policy. \u0026ndash; https://docs.microsoft.com/en-us/azure/governance/policy/overview\nAzure Policy is a really great service to ensure governance in a subscription or even Azure tenant. If you have not heard of this rather new service, then watch the overview video from Build 2018.\nImage Publisher Policy As long as there is no other way to restrict the Azure Marketplace, I think it will help to limit the usage of items with a given publisher. The publisher can be for example \u0026lsquo;Microsoft\u0026rsquo; for stuff from Microsoft or \u0026lsquo;Canonical\u0026rsquo; for Ubuntu images. Luckily there are plenty of samples to get us started. For my neesd I adjusted one sample so the resulting json is:\n{ \u0026#34;if\u0026#34;: { \u0026#34;allOf\u0026#34;: [ { \u0026#34;field\u0026#34;: \u0026#34;type\u0026#34;, \u0026#34;in\u0026#34;: [ \u0026#34;Microsoft.Compute/disks\u0026#34;, \u0026#34;Microsoft.Compute/virtualMachines\u0026#34;, \u0026#34;Microsoft.Compute/VirtualMachineScaleSets\u0026#34; ] }, { \u0026#34;not\u0026#34;: { \u0026#34;allOf\u0026#34;: [ { \u0026#34;field\u0026#34;: \u0026#34;Microsoft.Compute/imagePublisher\u0026#34;, \u0026#34;in\u0026#34;: [ \u0026#34;Microsoft\u0026#34;, \u0026#34;Microsoft-AKS\u0026#34;, \u0026#34;Canonical\u0026#34; ] } ] } } ] }, \u0026#34;then\u0026#34;: { \u0026#34;effect\u0026#34;: \u0026#34;audit\u0026#34; } } The very last \u0026ldquo;then\u0026rdquo; in the json decides what to do if a resource violates the policy. If the effect is \u0026ldquo;audit\u0026rdquo;, the resource is shown as not compliant. If the effect is \u0026ldquo;deny\u0026rdquo;, the creation of the resource is blocked - it does not affect existing resources! In case you wonder: The publisher of a Azure Kubernetes node is Microsoft-AKS.\nAfterwards, add the policy to Azure with the following CLI command: az policy definition create --name \u0026#34;AzureMarketplacePolicy\u0026#34; --description \u0026#34;Govern usage of Azure Marketplace resources\u0026#34; --display-name \u0026#34;Azure Marketplace Policy\u0026#34; --mode All --rules \u0026#34;C:\\Git\\Scripts\\Policy\\Azure.Marketplace.Rules.json\u0026#34;\nAdds the policy to the portal like this: Lastly assign the policy to a scope: management groups, subscriptions, resource groups or even resources are possible. With the following command I assign the policy to a subscription:\naz policy assignment create --name \u0026#34;AzureMarketplacePolicy\u0026#34; --scope \u0026#34;/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX\u0026#34; --policy \u0026#34;AzureMarketplacePolicy\u0026#34; The nice thing here is that you can exclude scopes with --not-scopes - that is handy if you for example have multiple subscriptions - and in one there is automatic deployment or DevOPs with Marketplace resources - then you could exclude that subscription. After a short while (or multiple refreshs) you can see the policy compliance in the portal: I tried it with several marketplace resources - all of them were shown as not compliant in the portal: In the case of effect \u0026ldquo;deny\u0026rdquo; the result is pretty clear - non-compliant resources cannot be created. In the case of \u0026ldquo;audit\u0026rdquo; I wish there could be some sort of notification options. Right now I need to check the Policy page to see the compliance - not ideal, but way better than not having any governance in place. Right?\n",
    "tags": ["Azure Marketplace","Azure Policy"],
    "categories": ["Azure","Governance"],
    "feature": "/images/2018/AzurePolicyMarketplace/mark-duffel-422279-unsplash.png"
  },
  {
    "url": "https://melcher.dev/2018/10/bye-bye-mvp-bye-bye-alegri-hello-microsoft/",
    "title": "Bye Bye MVP, Bye Bye Alegri - Hello Microsoft!",
    "date_published": "2018-10-01T09:30:28Z",
    "description": "For the past 7.5 years I worked as Consultant at Alegri in Munich - and I am immensely grateful for all the experience I gathered there with awesome colleagues and a very open and rewarding culture! From SharePoint to Office 365 to Azure I had very diverse and challenging projects and I learned a lot and had good fun - thanks a lot!\nBut for some time now, I was thinking of heading in another direction.",
    "content": "For the past 7.5 years I worked as Consultant at Alegri in Munich - and I am immensely grateful for all the experience I gathered there with awesome colleagues and a very open and rewarding culture! From SharePoint to Office 365 to Azure I had very diverse and challenging projects and I learned a lot and had good fun - thanks a lot!\nBut for some time now, I was thinking of heading in another direction. Because one of my passions is learning new things and sharing knowledge with others, I accepted a job opportunity from Microsoft in Munich. As a Microsoft MVP, I already had a very intense relationship with Microsoft and I really like the \u0026ldquo;new\u0026rdquo; Microsoft with its open, innovative and very successful way of doing stuff - especially with my favorite cloud, Microsoft Azure!\nHello Microsoft So Monday, 1st October 2018, is my very first day at Microsoft in my new role as Cloud Solution Architect in the Customer Success Unit (CSU) - and I am super happy and excited about this new opportunity! With my broad focus and background I am looking forward to build awesome solutions on Azure - with strong Microsoft partners and many many customers, of course. As a long time partner myself, I know what it means to have a healthy relationship with Microsoft to drive the success of a project - and that\u0026rsquo;s exactly what I want to do in my new role. I call it a triple win: Customer, Partner, Microsoft - if there is a good balance, everybody is happy and the project succeeds expectations in short time.\nBye Bye MVP I have a laughing and a crying eye here: Accepting the role at Microsoft means that I am no longer a Microsoft MVP - the award is only granted to externals and meant a lot to me: I really had lots of fun as MVP. Organizing events, speaking at user groups, connecting people - or walking among the best and motivated people around was a great honor! Unfortunately, I couldn\u0026rsquo;t go to the MVP summit last year - but at least I don\u0026rsquo;t know now what I will miss :) One thing won\u0026rsquo;t change Tho: if my time allows it, I will still support the community as good as I can - I learned so much at all the events, got new friends and had fun - yupp, that will be continued.\nJob Interview at Microsoft Surprisingly the process to apply at Microsoft was rather uncomplicated. Apply for a job at careers.microsoft.com, and the platform will guide you through all the required steps. I was recommended for two jobs, so in total I had like 5 interviews. Until I had my contract was like 2-3 weeks - and that during summer vacation time in Munich.\nCloud Solution Architect So what is my new job about? Let\u0026rsquo;s look at the job description from the careers page:\nOverseeing Digital Transformation Success: The CSA plays a critical role in working with partners to provide deep Cloud Infrastructure technical support through solution build and first mile customer engagements including Proof of Concepts, Architectural Design Sessions (ADS).\nThe Role: The CSA is a Solutions Architect building relationship with partner technical and development resources designing and architecting new Cloud Infrastructure solutions on Microsoft\u0026rsquo;s Azure cloud platform and technologies. CSAs deliver value via a portfolio of service delivery engagements optimized to accelerate partner solution builds and first mile customer wins.\nA Solutions Architect: The CSA Is a technology expert who stands out because of their deep solutions knowledge. They can go toe-to-toe with Microsoft\u0026rsquo;s engineering teams and blackbelts often surfacing product issues, feeding back data and insights that accelerate fixes and updates.\nThat sounds like a lot of fun to me!\nQuestions If you have questions about applying or technical questions about Azure - use the comments or the contact form, I am happy to help!\n",
    "tags": ["MVP","MVPBuzz","Microsoft","MicrosoftLife","Alegri"],
    "categories": ["MVP","Community","Azure","Development","Microsoftie","Microsoft"],
    "feature": "https://melcher.dev/2018/10/bye-bye-mvp-bye-bye-alegri-hello-microsoft/images/2018/Microsoft.png"
  },
  {
    "url": "https://melcher.dev/2018/07/microsoft-mvp-2018-2019/",
    "title": "Microsoft MVP 2018-2019",
    "date_published": "2018-07-02T07:02:45+01:00",
    "description": "If you are on twitter and in the same filter bubble as I am you could not avoid to see many many tweets of fellow MVPs - yesterday was the global MVP reward day! And, I am happy to announce that I got re-awarded for the 2nd time!\n",
    "content": "If you are on twitter and in the same filter bubble as I am you could not avoid to see many many tweets of fellow MVPs - yesterday was the global MVP reward day! And, I am happy to announce that I got re-awarded for the 2nd time!\nI usually do not wait for mails - but the next one means a lot to me and I am very honoured to receive it - Microsoft Office Servers and Services MVP for another year:\nI assume you know about the award - if not, get more information here: Microsoft MVP Award Website\nSo what am I going to do with it? My planning for the entire year is obviously not done yet - but in the foreseeable future there will be many more events that I am going to organize and attend. Firstly, there will be AzureSaturday(hopefully many more of them!). Then there will be a new SharePoint Saturday in Munich that I am helping to organize - no date yet tho. And one or more global office 365 developer bootcamp in Germany. And did I mention that there is a 10 year anniversary of the SharePoint User Group in Munich - 2018 is packed! Maybe I find enough energy to blog a little bit more, too\u0026hellip;\nBig Thanks! I want to thank so many people for supporting me and making the most out of it: Friends, colleagues, Microsofties, fellow MVPs that make it so much more fun (especially looking at you Ben and Tom!) - and of course my wife who helps me set my priorities.\nThank you!\n",
    "tags": ["MVP","MVPBuzz"],
    "categories": ["MVP","Office365","Community","Azure","Development"],
    "feature": "/images/2018/MVP/MVP.png"
  },
  {
    "url": "https://melcher.dev/2018/01/azure-red-shirt-dev-tour-munich-2018-a-summary/",
    "title": "Azure Red Shirt Dev Tour Munich 2018 - a summary",
    "date_published": "2018-01-18T09:42:45+01:00",
    "description": "A summary of Scott Guthrie\u0026rsquo;s Azure Red Shirt Dev Tour in Munich - in short: it was SUPER AWESOME!\n",
    "content": "A summary of Scott Guthrie\u0026rsquo;s Azure Red Shirt Dev Tour in Munich - in short: it was SUPER AWESOME!\nScott Guthrie - the Red Shirt / \u0026ldquo;cloud boss\u0026rdquo; live on stage Yesterday, January 18th 2018 was the Red Shirt Dev Tour by Scott Guthrie @scottgu in Munich. The whole event was around 6 hours and I estimate that there were around 600 people: The venue, Alte Kongresshalle, in Munich was great for this type of event - but unfortunately no Wifi and no chargers. I wanted to blog more intensively about this event, but ran out of power\u0026hellip;\nSo here comes a (incomplete) list about the topics that Scott covered:\nVMs We saw a VM with 128 cores - must have been a M128s type, with A LOT OF MEMORY. Inside the Windows Server VM he started a Hyper-V manager, RDP\u0026rsquo;ed into a VM that had a HyperV manager and RDP\u0026rsquo;ed into a linux VM. Pure inception, pure awesome. The feature is called \u0026ldquo;nested virtualization\u0026rdquo;.\nAzure CLI Managing Azure with the Azure Portal is one of the options. Scott showed us how easy it is to use the Azure CLI and even the Azure Cloud shell directly in your browser. Clicking is sooooo yesterday!\nWeb Apps Scott spent a lot of time showing us how awesome Azure AppServices are. He showed a lot of demos (e.g. ASP .net core MVC) and showed us how easy it is to scale the sites vertically and horizontally - I am a web guy, this stuff is solid!\nDeployment Next topic was continuous deployment with Azure Websites - it was so easy, Scott did it live on stage in ~2 minutes. Create a deployment slot, deploy to it - swapping to prodution with ZERO downtime - as easy as it should be. And if things break there is a way back. I use this daily, big like from my side!\nXamarin Next up was Laurent Bugnion who showed us how easy it is to create awesome native apps with Xamarin - with live debugging on the iPhone: It was brief, but seeing this opens the horizont. Good stuff!\nContinuous Integration \u0026amp; Continuous Deployment (CI/CD) Scott showed us a Visual Studio Team Services (VSTS) project that he is responsible for - did some analysis of the recent commits, showed us fancy dashboards of the performance of the team - merged a pull request live on stage (that was rejected because of a policy).\nSQL Databases Azure SQL is a cool one - it was never easier to get a new database running (and maintained) than with Azure SQL. 3 clicks and 1 minute later you have a nie performing database that is always up to date, backups, high-availability and ready to use.\nCosmos DB The new kid in town: Cosmos \u0026ldquo;no-sql\u0026rdquo; database with high-performance, globally distributed, no schema awesomeness. I used it in a project in the past - once you understand it, its very very AWESOME.\nAzure Functions (serverless) Scott showed us how easy it is to integrate http hooks - in this case a github notification in a serverless Azure Function. Then he told us about a customer that notified that there must be a bug in the invoice - 1 billion executions cost them 80$ - but it\u0026rsquo;s not a bug, thats exactly what it is for. Batch processing in scale. Check the pricing page for the crazy, very low, numbers.\nLogic Apps Do you integrate services? If so, check out Logic Apps. Thats an area I will checkout sooner than later.\nCognitive Services Cognitive Services are always fun! Especially if Scott used them live on stage in a cool image recognition demo. Only if a picture contains a cat it was approved: The attendees uploaded pictures during Scott\u0026rsquo;s talk - but Cognitive Services filtered out the \u0026ldquo;dog\u0026rdquo; pictures.\nNext was live face and emotion detection. I never saw a \u0026ldquo;sad Scott\u0026rdquo; - but we all had really fun while he pretended to be sad! Azure Machine Learning I am not very sure here, but I think it was Paige Bailey @DynamicWebPaige who presented Azure Machine Learning. Data Cleaning was my favorite (I wish that would be available in Excel!!!). Brief, but again, excellent!\nAzure Stack Running a cruise ship? Other areas were you need Azure\u0026rsquo;s flexibility but offline? Then checkout Azure stack. I certainly will.\nAzure Advisor Paying too much? Azure Advisor can give you a help here. The Cloudyn reports are awesome, too - they tell you what you are paying and why.\nSecurity Center Security and Threat Detection is super important. You must trust the cloud and therefore the cloud must be secure! Scott showed us some incidents and how Azure protects us. Patching, too. Everything there. Important, very important options we have there.\nSummary It was awesome. I really enjoyed Scott\u0026rsquo;s presentation - giving a talk for 6 hours at this pace with that many topics. Simply WOW! But I am pretty sure I forgot to mention lots of topics like containers, SQL injections and what not - this day was soooooo broad!\nAnd the selfie, I wont forget that one.\nThanks for the day!!!\n",
    "tags": ["Scott Guthrie","Scott Gu"],
    "categories": ["Community","Azure","Development"],
    "feature": "/images/2018/Redshirt/ScottAndMax.png"
  },
  {
    "url": "https://melcher.dev/2018/01/til-send-e-mails-with-powershell-via-an-office-365-mail-account/",
    "title": "TIL: Send E-Mails with Powershell via an Office 365 Mail Account",
    "date_published": "2018-01-17T00:11:08+01:00",
    "description": "TIL: Today I learned how easy it is to send emails with Powershell and an Office 365 mail account.\n",
    "content": "TIL: Today I learned how easy it is to send emails with Powershell and an Office 365 mail account.\nToday I learned (TIL) In Windows Server 2012 or later it is no longer possible to send emails once an event is added to windows event log. It is deprecated and without authentication options no longer usable. Who would run a mailserver that accepts to send new mails without authentication, right? In my current project there is no decent monitoring solution available as of now - So I checked the options and found a nice post how to send mails with PowerShell and used that script in a new windows scheduled task. Call me paranoid, but I didnt want to add my credentials there in plain text - thats why I used a snipped from Todd Klindt\u0026rsquo;s post to store the credentials encrypted for later reuse. And of course I configured it to use the best mailserver in the world (that applies to all mailservers that work and that I don\u0026rsquo;t have to maintain!), in short, utilizing my Office 365 mail account.\nThe script #provide your account $userid=\u0026#39;\u0026lt;your-email-here\u0026gt;\u0026#39; #load the encrypted credentials $credfile = Get-ChildItem creds.xml #check if the credentials are stored if ($credfile) { #import the secured credentials $creds = Import-CliXml -Path creds.xml } else { #no credentials - ask for them $creds = Get-Credential -UserName $userid -Message \u0026#34;O365\u0026#34; $creds | Export-CliXml -Path creds.xml #store them encrypted } #and now the actual mail function Send-MailMessage ` -To \u0026#39;\u0026lt;to\u0026gt;\u0026#39; ` -subject \u0026#39;\u0026lt;subject\u0026gt;\u0026#39; ` -body \u0026#39;\u0026lt;body\u0026gt;\u0026#39; ` -UseSsl ` -Port 587 ` -SmtpServer \u0026#39;smtp.office365.com\u0026#39; ` -From $userid ` -Credential $creds The scheduled task The scheduled task needs three configurations:\n1.) Set the script to run even if the user is not logged on and with highest privileges: 2.) Then select your triggers. In my case its eventid 1000 (app crashed) and event id 1026 (net framework tells us something bad happend): 3.) then lastly what to do:\nProgram or script: powershell Arguments: -command \u0026ldquo;\u0026amp;{. .\\send-mail.ps1 }\u0026rdquo; -NoProfile Start in: c:\\notifier So in other words, once triggered, it launchs powershell with no user profile attached, switch to the path c:\\notifier and launch the script that sits there and is named send-mail.ps1.\nnote: you have to launch the script once in powershell to store the credentials. Don\u0026rsquo;t forget to cd into the correct directory.\nEasy, right? So that the script and the entire flow to add some very rough and basic monitoring to a windows server - if you know a better way, dont hesitate to tell me in the comments :)\n",
    "tags": ["E-Mail","O365"],
    "categories": ["Powershell","TIL","Office 365"],
    "feature": "/images/EventViewer-AttachTask.png"
  },
  {
    "url": "https://melcher.dev/2018/01/2017-retrospective/",
    "title": "2017 Retrospective",
    "date_published": "2018-01-05T15:08:08+01:00",
    "description": "2017 was a very special year. And a super busy one. And exciting - well, almost all adjectives would fit for that CRAZY year! It was full of work, community stuff - and family time\u0026hellip;!!!!\n",
    "content": "2017 was a very special year. And a super busy one. And exciting - well, almost all adjectives would fit for that CRAZY year! It was full of work, community stuff - and family time\u0026hellip;!!!!\nMy first MVP Award 1st of March 2017 was a very very surprising day for me: I was in the office, it was around 17:00 and I was working on something very focused. Then I noted a new mail in my inbox:\nThe mail of all mails! At first, I thought my friend Ben Abt sent me a fake mail to make fun of me - but once I checked the links in the mail and had to sign an NDA - I almost fell off my chair! Now, I am very proud to be an MVP and I hope that my passion and energy is enough to be an MVP for the years to come. There are so many great MVPs in this \u0026lsquo;family\u0026rsquo; that I can look up to and learn - good stuff!\nIf you want to be MVP yourself, I can recommend you this article\nEvents Reflecting the entire year is almost impossible. But I track a lot in my outlook calendar so let\u0026rsquo;s start with the events that I attended - compared to the last years that weren\u0026rsquo;t that many. Most notably, I attended the very excelent SharePoint Saturday in Munich (my review) and 2017 was the first time I organized a large event myself. Maybe I should track the online events this year, I attended countless online events, too.\nAzure Saturday It was 23rd of December 2016. Something crazy must have been in the drinking water because I skyped with Ben Abt, Tom Janetscheck, Patrick Heyde, Jan Schenk and Dennis Gassen (follow those guys on Twitter, they are awesome!) and suggested to have an event focussed on Azure similar to the awesome SharePoint Saturday events - thats how Azure Saturday was born. That idea was so much fun, that I spent over a month preparing and organizing everything to host an event for more than 250 people\u0026hellip;\nand there is even a youtube recording of Donovan Brown\u0026rsquo;s very awesome keynote: This was so awesome and will be repeated. I might regret it the weeks before, but once the event is running - its super fun.\nFamily March 2017 was really rewarding to me - first I got the MVP award as mentioned above - and on 6th of March my beautiful, always smiling first daughter was born. Sophia Linda makes me super super happy - and she is best thing that happened to me. Ever. Today I became a dad of a wonderful little angel name Sophia Linda - so so happy!!! pic.twitter.com/xSZxeEORUu\n\u0026mdash; Max Melcher (@maxmelcher) March 6, 2017 Global Office 365 Developer Bootcamp As you might have seen in this post I organized 3 bootcamps in Germany - they were all different, different speakers, different crowds - but all were fun. If there is a similar global event in 2018 - I will arrange at least one in Munich. This year we focused on Microsoft Teams and Azure Bots - great stuff, I learned a lot while having fun.\nShift of technology In the past I was heavily focused on SharePoint (server) and SharePoint Search - in 2017 things changed a lot in Germany and for me as consultant. Maybe it\u0026rsquo;s because of GDPR, the German Cloud or simply zeitgeist - people are switching to the cloud and I help them on their journey. So to my focus broadened a bit to Office 365, Azure (especially Azure Germany) and Microsoft Teams. Fun and interesting times for me!\nThis blog Recently I switch to Hugo (see this post) - and so far I really like it. It\u0026rsquo;s fast and lightweight - and writing posts is fun again. For 2018 my goal is to write more than just 1 post per month - maybe I even start smaller posts with things I learned today. In 2017 I created only 11 posts, but reached 100.000 page views per year - phew\u0026hellip;\nMy top posts are \u0026ldquo;old\u0026rdquo; but still attract many:\nPowershell: List all IIS WebApplications (.net version, state, identity) Create a Search Service Application and Search Topology Installing SharePoint 2013 SP1 with SQL Server 2014 on Windows Server 2012 R2 - Picture Love Story Install Office Web Apps 2013 for SharePoint 2013 - with PDF Preview Bootstrap and SharePoint Online - how to avoid css ricochet Cache cluster is down, restart the cache cluster and Retry Create a Display Template for SharePoint 2013 Search Quick fix: For security reasons DTD is prohibited in this XML document Powershell: Efficiently empty large SharePoint lists Future For 2018 I will try to speak and blog more - technology-wise there is enough coming to keep me busy and excited (looking at you, SharePoint 2019, Azure and Microsoft Teams!), thats for sure. 2018, go challenge us! Unfortunately I have to pass my very first MVP Summit in March next year - its the very first birthday of my little one and I wont miss it. But there will be a next time (hopefully).\nWith that said, I wish you all the best for 2018, health, prosperity, lots of excitement and fun - see you around!\n",
    "tags": null,
    "categories": ["Retrospective"],
    "feature": "/images/2017.png"
  },
  {
    "url": "https://melcher.dev/2018/01/til-logging-powershell-parameters/",
    "title": "TIL: Logging Powershell Parameters",
    "date_published": "2018-01-05T14:08:08+01:00",
    "description": "In my current project we provision large and complex Azure environments, subscriptions VMs, networking permissions and all that. Some of the scripts have many many parameters - so in a month it would be nice to see how the script were started and with what parameters. With the cmdlet start-transcript you get all the information what happens in the script as a nice log file. But unfortunately the parameters that were used to start the script are not in there. In this post, I show you how to easily add them to the transcript!\n",
    "content": "In my current project we provision large and complex Azure environments, subscriptions VMs, networking permissions and all that. Some of the scripts have many many parameters - so in a month it would be nice to see how the script were started and with what parameters. With the cmdlet start-transcript you get all the information what happens in the script as a nice log file. But unfortunately the parameters that were used to start the script are not in there. In this post, I show you how to easily add them to the transcript!\nLet\u0026rsquo;s use the following script:\n1 2 3 4 5 6 7 8 9 10 11 Param( [Parameter(Mandatory=$True, HelpMessage=\u0026#34;The first parameter\u0026#34;)] [string]$Parameter1, [Parameter(Mandatory=$True, HelpMessage=\u0026#34;The second parameter\u0026#34;)] [string]$Parameter2 ) start-transcript write-out \u0026#34;Do something\u0026#34; Start-Sleep -Seconds 3 write-out \u0026#34;Everything worked out!\u0026#34; Stop-Transcript After starting this script you will have a nice transcript (yellow part), but it does not contain with what parameters the script was started: Today I learned (TIL) So today I learned that you can write them to the transcript with just a few lines:\nParam( [Parameter(Mandatory=$True, HelpMessage=\u0026#34;The first parameter\u0026#34;)] [string]$Parameter1, [Parameter(Mandatory=$True, HelpMessage=\u0026#34;The second parameter\u0026#34;)] [string]$Parameter2 ) start-transcript #Export the parameters write-verbose \u0026#34;Parameters:\u0026#34; foreach ($p in $PsBoundParameters.GetEnumerator()) { write-verbose \u0026#34;`tParameter: $($p.Key) Value: $($p.Value)\u0026#34; } write-out \u0026#34;Do something\u0026#34; Start-Sleep -Seconds 3 write-out \u0026#34;Everything worked out!\u0026#34; Stop-Transcript If you do this, you will have a nice transcript that contain the parameters (yellow part): Why write-verbose you might ask? Then you have the choice when you start the script to log the parameters with -Verbose or to not log them if you dont need them. One little note: values of SecureStrings are not exported.\nPowershell is awesome. You agree?\n",
    "tags": ["Transcript","Logging"],
    "categories": ["Powershell","TIL"],
    "feature": "/images/2018-01-05 14_36_01-C__Users_mmelcher_Documents_PowerShell_transcript.PC-0DYG6P-MUC.SQ3NMhRW.2018010.png"
  },
  {
    "url": "https://melcher.dev/2017/12/my-first-interview-sharepoint-migration-to-office-365/",
    "title": "My first interview: 'SharePoint Migration to Office 365'",
    "date_published": "2017-12-11T17:00:26+01:00",
    "description": "Today I had my very first (recorded) interview. Thomas Maier from Office365akademie.de asked me some very interesting questions how to migrate from SharePoint 2007-2016 to SharePoint Online/Office 365. We talked almost 30 minutes about all challenges (there are more, of course!) you might encounter. Good fun!\n",
    "content": "Today I had my very first (recorded) interview. Thomas Maier from Office365akademie.de asked me some very interesting questions how to migrate from SharePoint 2007-2016 to SharePoint Online/Office 365. We talked almost 30 minutes about all challenges (there are more, of course!) you might encounter. Good fun!\nGo check the video here (in German): Topcis \u0026amp; questions What are the pain points of a migration? What are showstoppers? What can\u0026rsquo;t be migrated? Do you recommend going hybrid as temporary or even permanent solution? What\u0026rsquo;s your oppionion about the new migration tool for SharePoint? What other tools are available from Microsoft? When do you think that 3rd party tools are required? What can be done by the IT department? When does it make sense to contact a partner? Migrations from public cloud to German cloud? Is that possible? Summary So that was fun today - thanks Thomas for having me!\nIf German is not your thing you can post your questions to the comments and I\u0026rsquo;ll answer them there.\n",
    "tags": ["Interview","Office 365 Akademie","Migration","Thomas Maier"],
    "categories": ["Community","Office 365"],
    "feature": "/images/2017-12-11-interview.png"
  },
  {
    "url": "https://melcher.dev/2017/12/office-365-dev-bootcamp-looking-back-and-looking-forward/",
    "title": "Office 365 DEV Bootcamp: Looking back and looking forward",
    "date_published": "2017-12-05T13:04:26+01:00",
    "description": "Roughly 2 weeks after the last bootcamp its time to sum up - and share the slides!\n",
    "content": "Roughly 2 weeks after the last bootcamp its time to sum up - and share the slides!\nOffice 365 Dev Bootcamp in Munich / Hamburg / Berlin - a Retrospective! In September 2017 a global initiative was launched by Jeff Teper to organize deep dive bootcamps for developers - with focus topics around Office 365, of course. I had the pleasure to organize three bootcamps in Munich, Hamburg and Berlin - and had great fun presenting and sharing hands-on experiences with ~50 attendees. Munich and Berlin were hold in English, Hamburg (only few people made it) was in German.\nAs of now, there have been 31 events around the globe: Australia, Belgium, Canada, Chile, Denmark, Finland, Germany, India, Italy, Mexico, Netherlands, New Zealand, Norway, Singapore, South Africa, Span, Switzerland, United Kingdom, United States!\nThe preparations of the lab was the most time consuming part - even tho we got some lab content for Microsoft Teams - but really understanding the matter and getting things to actually work took me quite some time - and of course I didnt stick to the lab and tried to make it my own (guess where things did not work\u0026hellip;?!).\nDid I mention that MS Teams is awesome? Developing for it was good fun! I enjoyed creating a check-in page that posts back to a channel, developing a custom tab that shows all checked-in attendees and the \u0026ldquo;almost\u0026rdquo; finished sandwich bot - good stuff!\nHaving a team-space with a chat that all the attendees could use during the event was nice! I could imagine that we repeat that (once the onboarding process is less time consuming!).\nBig Thanks Below is the list of awesome people that helped me prepared and deliver the events - it was lots of work, but I had a ton of fun because of them:\nStefano Tempesta - thanks for joining me in Munich! Nicki Borell - thanks for joining me in Hamburg! Ben Abt - thanks for joining me in Berlin! Suzanna Zhuang - thanks for all the organization stuff, lunch and swag boxes! Lots of people that prepared the labs! Alice Piras and Isabell Fischer - my wonderful MVP Program Managers for the local support and sponsoring the venues! We even had signs in front of the rooms! and of course all attendees - we had great, diverse and fun crowds!\nSlides \u0026amp; Labs We had slightly evolving presentations in all three events - but the core set of all slides are available here:\nGlobal O365 Developer Bootcamp - MS Teams Teams Architecture for IT-Pros and Architects - credits to Nicki! Programming the Microsoft Bot Framework - credits to Stefano! If you want to do the labs (or finish your homework!) the labs are available in this repository: https://github.com/maxmelcher/O365Devbootcamp/\nNext year No more bootcamps this year from my side - but I plan to be part of the events in the second half of next year. Looking forward to it, I had great fun and learned a lot!\nSee ya,\nMax\n",
    "tags": ["O365 Developer Bootcamp","Berlin","Hamburg","Munich","Benjamin Abt","Nicki Borell","Stefano Tempesta"],
    "categories": ["Community","Conference","Development","MS Teams","Office 365","Office Graph","Bots"],
    "feature": "/images/go365devbootcamp_dark.png"
  },
  {
    "url": "https://melcher.dev/2017/12/red-shirt-dev-tour-in-germany-/-scott-guthrie-is-in-town/",
    "title": "Red Shirt Dev Tour In Germany / Scott Guthrie Is In Town!",
    "date_published": "2017-12-04T14:59:57+01:00",
    "description": "A must-go-to event is early next year! Scott Guthrie is coming to Germany - Berlin and Munich - and shows us a \u0026ldquo;code-first\u0026rdquo; event! He personally codes on stage - live!\n",
    "content": "A must-go-to event is early next year! Scott Guthrie is coming to Germany - Berlin and Munich - and shows us a \u0026ldquo;code-first\u0026rdquo; event! He personally codes on stage - live!\nIt’s all about helping you become a better developer by teaching skills to develop, deploy, and manage cloud applications through robust demos.\nI am really looking forward to the event and of course, signed up for Munich. I am waiting to see how all the tiny tips and tricks of \u0026ldquo;cloud boss\u0026rdquo; himself.\nAgenda The agenda is packed and we will learn a thing or two about Azure:\nTime Session 08:45 – 09:30 Check-in \u0026amp; Welcome 09:30 – 12:45 Keynote w/ Scott Guthrie. Two 1.5 hour Sessions with short Break in-between 12:45 – 13:30 Grab Some Lunch 13:30 – 14:45 Coding on Stage w/ Scott Guthrie. \u0026ldquo;Azure Tips \u0026amp; Tricks\u0026rdquo; 14:45 Thank You \u0026amp; Event Close Registration The event is free of charge - and there are limited seats available. Better sign up now:\nRegister for Berlin: January, 17th Register for Munich: January, 18th See you in Munich!\n",
    "tags": ["Red Shirt","Scott Guthrie"],
    "categories": ["Conference","Azure"],
    "feature": "/images/2017-12-04-guthrie-redshirt.jpg"
  },
  {
    "url": "https://melcher.dev/2017/11/quick-fix-resizable-quicklaunch-for-sharepoint-online/",
    "title": "Quick fix: Resizable Quicklaunch for SharePoint Online",
    "date_published": "2017-11-13T21:28:51+01:00",
    "description": "As you can see in the gif above, I created a very simple customization for a specific usecase: My users created deep folder hierarchies (of course I told them not to!) with very descriptive names (metadata!) - and if they navigate deep deep inside, they have to use the tiny scrollbar on the left. And once they navigate, the scroll position is gone. Bummer! Even the enabled tree view did not help. Let\u0026rsquo;s improve that!\n",
    "content": "As you can see in the gif above, I created a very simple customization for a specific usecase: My users created deep folder hierarchies (of course I told them not to!) with very descriptive names (metadata!) - and if they navigate deep deep inside, they have to use the tiny scrollbar on the left. And once they navigate, the scroll position is gone. Bummer! Even the enabled tree view did not help. Let\u0026rsquo;s improve that!\nLet\u0026rsquo;s modify the MasterPage For the sake of easiness I modified the seattle MasterPage (classic experience!) and added the following in the very top:\n\u0026lt;!-- load jquery and jquery ui --\u0026gt; \u0026lt;script src=\u0026#34;https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;!-- load jquery ui css --\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; href=\u0026#34;https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css\u0026#34; /\u0026gt; \u0026lt;!-- add a green border for the resize effect --\u0026gt; \u0026lt;style\u0026gt; .ui-resizable-helper { border: 2px dotted #89ba17; } \u0026lt;/style\u0026gt; \u0026lt;script\u0026gt; $(document).ready(function(){ //if we are in a dialog - do nothing! if (window.location.href.indexOf(\u0026#34;\u0026amp;IsDlg=1\u0026#34;) \u0026gt; -1) return; //make the quick launch resizable $(\u0026#39;#sideNavBox\u0026#39;).resizable( { helper: \u0026#34;ui-resizable-helper\u0026#34;, handles: \u0026#34;e\u0026#34; } ); //after the resize, store the width in the local storage to make it persistent $(\u0026#39;#sideNavBox\u0026#39;).on( \u0026#34;resizestop\u0026#34;, function( event, ui ) { // move the content box to the right $(\u0026#39;#contentBox\u0026#39;).css(\u0026#34;margin-left\u0026#34;, ui.size.width + 45 + \u0026#34;px\u0026#34;); localStorage.setItem(\u0026#34;quicklaunch.width\u0026#34;, ui.size.width); } ); //when the page is loaded and we have a width, set it. if (localStorage.getItem(\u0026#34;quicklaunch.width\u0026#34;)) { // move the content box to the right $(\u0026#39;#sideNavBox\u0026#39;).css(\u0026#39;width\u0026#39;, localStorage.getItem(\u0026#34;quicklaunch.width\u0026#34;) + \u0026#34;px\u0026#34;); $(\u0026#39;#contentBox\u0026#39;).css(\u0026#34;margin-left\u0026#34;, parseInt(localStorage.getItem(\u0026#34;quicklaunch.width\u0026#34;)) + 45 + \u0026#34;px\u0026#34;); } }); \u0026lt;/script\u0026gt; The result looks like this: Now, if a user resizes the quick launch, the width is stored in the local storage of a browser. Once a user clicks, the old width will be restored. Reloading or browser closing wont erase this setting - neat!\nOf course this customization could be rolled-out with PnP - or even done with a fancy SPFX Site Extension, but this site is classic only so a quick n\u0026rsquo; dirty masterpage customization did the trick.\nWhat you think? You think thats a good one? If so, leave a comment :)\n",
    "tags": ["SharePoint Online","Quick Launch","Quick Fix","MasterPage","JavaScript","JQuery"],
    "categories": ["SharePoint Online","Customization"],
    "feature": "/images/ResizableQuicklaunch.gif"
  },
  {
    "url": "https://melcher.dev/2017/11/bye-bye-wordpress-hello-hugo/",
    "title": "Bye Bye Wordpress - Hello Hugo",
    "date_published": "2017-11-02T20:28:33+01:00",
    "description": "After over 6 years and 185 blog posts its time to leave Wordpress as a blogging platform and move on to Hugo.\nThis move is not because I had to, but in the past I replaced many of the services I used to managed services (I am looking at you, Office 365!) - and this tiny blog is the only reason I have to maintain a, most of the time, outdated linux VM with a fully fledged nginx, a slow and certainly unsecured MySql database and what not - for a blog\u0026hellip; that does not feel right.",
    "content": "After over 6 years and 185 blog posts its time to leave Wordpress as a blogging platform and move on to Hugo.\nThis move is not because I had to, but in the past I replaced many of the services I used to managed services (I am looking at you, Office 365!) - and this tiny blog is the only reason I have to maintain a, most of the time, outdated linux VM with a fully fledged nginx, a slow and certainly unsecured MySql database and what not - for a blog\u0026hellip; that does not feel right. And is slow. And the server that runs on a VM is actually quite expensive. Its like using a database when you dont need it - similar to the experience that Scott Hanselman describes in his post Cloud Database? NoSQL? Nah, just use CSVs and CsvHelper. No more wordpress security updates for me.\nEnough of the past - lets make this awesome! So I checked many many blog engines - asked my friends - thought about coding my own like my friend Ben Abt\u0026rsquo;s SchwabenCode - and i came to the conclusion that I wanted to have a static site generator that compiles my blog posts into a super performing, zero maintenance website that simply works. So I checked the popular ones like Jekyll or Ghost - but Ruby ruled out the first (even the mature community did not convince me), and many negative comments about ghost ruled out the other. So I tried the \u0026ldquo;newcomer\u0026rdquo; Hugo and it instantly felt right. As editor I can use the tool I like - VS Code - with the git integration I can flawlessly check-in, version and backup my entire blog. And replicate it to all my devices. Awesome.\nMigration from Wordpress was not that easy - I had to install a plugin on the host, run the code in the ubuntu shell - and that created a 900mb zip with all my old assets and my blog posts as markup. I see some cleanup in the near future - but 90% automatically is better than 100% copy and paste\u0026hellip; wouldnt have done it without it, so I am thankful for the hard work! And keep all my old links - that is of course super important!\nThemes \u0026amp; Performance \u0026amp; Editing I tried to create and adjust my Wordpress theme - but my php skills retired and it always was pain for me: It loaded so much stuff, even with advanced techniques like http_spdy http/2 and wordpress caching plugins I had too many requests to make the page really fast. 70!!! http request for my landing page:\nand compared to the new Hugo landing page: Thats only 35% of the requests, 13% of the pagesize and blasting 6% of the load time I had before - on a 1 core Azure Website (S1). Could be further improved with a CDN or minifing the assets - but well, I can live with that and have less technical complexity.\nWith hugo, customizing is simply editing html files and adding placeholders - well, a bit more than that but I got easily used to it. In case you ask, the theme I use here is hugo-future-imperfect - and because of its open MIT license, I customized it to my basic needs. And it looks great on mobile. The hugo documentation is very helpful!\nHugo uses markdown to craft posts and pages - I have some experience with it from github - but checking this markdown cheat sheet helps. And the markdown preview in VS Code, of course.\nDeploy to Production Its no secret that I attend a lot of conferences. Most of the time I blog about the sessions I attend. In the past I add use the Wordpress browser editor which required a stable internet connection\u0026hellip; or lots of work after the session that I rather use to ask questions or chat with people. Wordpress sometimes blocked me - even if I miss the \u0026ldquo;drag and drop\u0026rdquo; insertion of a picture already.\nIn the future I can write these post entirely offline, add picture and make the post ready. Once that is done, I can preview the post locally and render it like it will be shown live. Then do a git commit and git push - and a short moment later (if the internet works) this website will be deployed to an Azure Website in all its beauty:\nBuilt site for language en: 0 of 36 drafts rendered 0 future content 0 expired content 154 regular pages created 114 other pages created 6955 non-page files copied 241 paginator pages created 0 tags created 48 categories created total in 11388 ms So 11 seconds for my entire website - awesomesauce! When I do write locally the delta-creation takes 400ms or so.\nSo how do I deploy this to my favorite cloud platform Azure? There is a cool deployment script for that (see my PR for latest Hugo binaries!) - and read this post for setting everything up. Entire deployment takes about 5 minutes - that could be improved, but I dont see the reason here.\nAdditionally the commenting experience changed - I migrated my comments to disqus - with wordpress I missed lots of comments and I hope that disqus works out.\nUnfortunately I cannot update my channels automatically once I publish a post - I will figure out how to that with the least effort.\nFuture So blogging is fun again - and thats how it is supposed to be!\nIf you have questions - please use the new comment system, I am eager to see how that works out!\n",
    "tags": ["Wordpress","Hugo","Performance"],
    "categories": ["Website"],
    "feature": "/images/2017-11-04 22_49_45-Melcher.it - Melcher.it.png"
  },
  {
    "url": "https://melcher.dev/2017/10/3x-office-365-developer-bootcamps-munich-berlin-hamburg/",
    "title": "3x Office 365 Developer Bootcamps: Munich, Berlin and Hamburg!",
    "date_published": "2017-10-03T10:03:23Z",
    "description": "There is something cool coming up! But who could explain it better than Jeff Teper?\nYou heard him right - a full day training, deep dive, one topic - for free! Global Office 365 Developer Bootcamps around the world:\nPlease join Microsoft MVPs Stefano Tempesta and Max Melcher for an all-day workshop in Microsoft Teams and Azure Bot Framework development!\nTo be successful in this workshop, you should have a general understanding of Office 365 and an ability to code in JavaScript/.",
    "content": "There is something cool coming up! But who could explain it better than Jeff Teper?\nYou heard him right - a full day training, deep dive, one topic - for free! Global Office 365 Developer Bootcamps around the world:\nPlease join Microsoft MVPs Stefano Tempesta and Max Melcher for an all-day workshop in Microsoft Teams and Azure Bot Framework development!\nTo be successful in this workshop, you should have a general understanding of Office 365 and an ability to code in JavaScript/.NET. From there, you\u0026rsquo;ll learn the technologies Microsoft Teams and the Bot Framework are built on!\nBased on that foundation, you\u0026rsquo;ll learn how to develop production-quality Azure Bots for use in enterprise solutions or product offerings. You\u0026rsquo;ll also learn to use and extend Microsoft Teams. The day will also include an overview of other development opportunities in Office 365, which can provide a tailored collaboration and productivity environment for end users.\nDon\u0026rsquo;t miss this opportunity to learn the latest Office 365 development technologies!\nGlobal Office 365 Developer Bootcamp - Munich, Germany Microsoft Deutschland GmbH | Walter-Gropius-Straße 5 | 80807 München | Germany\nSaturday, 21. October 2017, 09:30 to 17:00\nhttps://www.eventbrite.de/e/global-office-365-developer-bootcamp-munich-germany-tickets-38305243013 Go sign up quickly - tickets are almost gone!\nGlobal Office 365 Developer Bootcamp - Hamburg, Germany Microsoft Deutschland GmbH | Gasstraße 6A | Gebäude M | 22761 Hamburg | Germany\nThursday, 2. November 2017, 09:30 to 17:00\nhttps://www.eventbrite.de/e/global-office-365-developer-bootcamp-hamburg-germany-tickets-38430298056 Go sign up quickly - tickets are almost gone!\nGlobal Office 365 Developer Bootcamp - Berlin, Germany Microsoft Deutschland GmbH | Unter den Linden 17 | 10117 Berlin | Germany\nFriday, 17. November 2017, 09:30 to 17:00\nhttps://www.eventbrite.de/e/global-office-365-developer-bootcamp-berlin-germany-tickets-38430185720 Some tickets are still available - go tell your friends and colleagues!\nAll events are kindly hosted by Microsoft - thanks for the great support! - we even get free lunch!!!\nAgenda The agenda is 99% finalized and will look like this:\n09:30 – 10:00 Welcome 10:00 – 10:45 Introduction to MS Teams 10:45 – 11:00 Coffee break 11:00 – 12:00 Advanced integration scenarios in MS Teams - hands on! 12:00 – 13:00 Lunch break 13:00 – 13:45 Introduction to Bot Framework 13:45 – 14:00 Coffee break 14:00 – 15:00 Advanced programming of Bots with LUIS and Cognitive Services - hands on! 15:00 – 16:30 Hands-on Challenge - hands on, of course! 16:30 – 17:00 Sharing \u0026amp; Networking Bring your own! You have to bring your own notebook and a O365 dev tenant to be part of the action!\nIf you have questions, please let us know in the comments.\nLooking forward to the events!\np.s. there are plenty of other locations available outside of Germany: https://dev.office.com/blogs/global-office365-developer-bootcamp\n",
    "tags": null,
    "categories": ["Community","Conference","Development","MS Teams","Office 365","Office Graph"],
    "feature": "/images/go365devbootcamp_dark.png"
  },
  {
    "url": "https://melcher.dev/2017/09/powershell-upload-csv-file-sharepoint-list/",
    "title": "PowerShell: Upload a CSV file to a SharePoint List",
    "date_published": "2017-09-11T09:30:28Z",
    "description": "Wow, it\u0026rsquo;s been a while since I last blogged - and here comes a tiny helper to upload one or more CSV file to a SharePoint Online list.\nI think its the best documented script I ever created…!!!\nThe script The following script checks a folder for files - and opens them. Then each line will be uploaded to the specified SharePoint list defined by the provided mapping.\nThe mapping is kinda straight forward.",
    "content": "Wow, it\u0026rsquo;s been a while since I last blogged - and here comes a tiny helper to upload one or more CSV file to a SharePoint Online list.\nI think its the best documented script I ever created…!!!\nThe script The following script checks a folder for files - and opens them. Then each line will be uploaded to the specified SharePoint list defined by the provided mapping.\nThe mapping is kinda straight forward. The header (if present, skip it with -skipFirstRow flag) is not required, you have to provide it via the -mapping parameter.\nIf you have the following in your CSV:\nValue 1; Value 2\nand want those values in a list with Column1 and Column2, then provide the script -mapping Column1, Column2.\nPlease note: The types are currently not passed and I only tested it with text values - if that is something you need, it could be easily added.\nAnd the rest of the parameters? They are of course documented in the script. Copy it to a file and do get-help -full \u0026lt;yourfile.ps1\u0026gt; to get it!\n.SYNOPSIS This is a simple Powershell script to upload csv files to a SharePoint Online list - line by line. .DESCRIPTION To connect to SharePoint Online the script requires a username/password the url to the SharePoint site and the list title. To extract the csv files you musst provide the folder location and if the csv contains a header. Lastly the script needs a mapping to map the content of the csv file to the SharePoint list. .EXAMPLE The csv header is used to map the entries to the SharePoint list. The mapping is provided in PowerShell string array notation, no quotes, separated by comma - in this case the SharePoint list has the fields Counter, Title, Datum, Uhrzeit1, Uhrzeit2, Uhrzeit3, Uhrzeit4 and Anzahl - they appear in that order in the csv. In this order the columns are read from the csv and the csv should not have more or less columns than mapped to the SharePoint list: .\\csv2list.ps1 -folder C:\\Users\\Max\\Desktop\\csv -username maximilian.melcher@melcher.it -password xxx -url https://melcherit.sharepoint.com -list csv -mapping Counter,Title,Datum,Uhrzeit1,Uhrzeit2,Uhrzeit3,Uhrzeit4,Anzahl .EXAMPLE CSV has a header and must be skipped: .\\csv2list.ps1 -folder C:\\Users\\Max\\Desktop\\csv -username maximilian.melcher@melcher.it -password xxx -url https://melcherit.sharepoint.com -list csv -mapping Counter,Title,Datum,Uhrzeit1,Uhrzeit2,Uhrzeit3,Uhrzeit4,Anzahl -skipFirstRow .EXAMPLE CSV should be deleted afterwards .\\csv2list.ps1 -folder C:\\Users\\Max\\Desktop\\csv -username maximilian.melcher@melcher.it -password xxx -url https://melcherit.sharepoint.com -list csv -mapping Counter,Title,Datum,Uhrzeit1,Uhrzeit2,Uhrzeit3,Uhrzeit4,Anzahl -delete .NOTES Currently I only tried to upload plain text - if you want more sophisticated field types, that should be easily doable. .LINK https://melcher.it #\u0026amp;gt; Param( [Parameter(Mandatory=$True,HelpMessage=\u0026#34;Username to connect to SharePoint Online\u0026#34;)] [string]$username, [Parameter(Mandatory=$True,HelpMessage=\u0026#34;Password to connect to SharePoint Online\u0026#34;)] [string]$password, [Parameter(Mandatory=$True,HelpMessage=\u0026#34;The folder where the csv files are stored\u0026#34;)] [string]$folder, [Parameter(Mandatory=$True,HelpMessage=\u0026#34;The mapping of the csv to the SharePoint list - in PowerShell string array notation, e.g ColumnA, ColumnB\u0026#34;)] [String[]]$mapping, [Parameter(Mandatory=$True,HelpMessage=\u0026#34;The Url of the SharePoint site\u0026#34;)] [string]$url, [Parameter(Mandatory=$True,HelpMessage=\u0026#34;The List title\u0026#34;)] [string]$listtitle, [Parameter(HelpMessage=\u0026#34;Flag if the csv files should be uploaded after processing\u0026#34;)] [switch]$delete, [Parameter(HelpMessage=\u0026#34;Flag if the csv files have a header that should be skipped\u0026#34;)] [switch]$skipFirstRow ) #CSOM installation required! Add-Type -Path \u0026#34;C:\\Program Files\\Common Files\\microsoft shared\\Web Server Extensions\\15\\ISAPI\\Microsoft.SharePoint.Client.dll\u0026#34; Add-Type -Path \u0026#34;C:\\Program Files\\Common Files\\microsoft shared\\Web Server Extensions\\15\\ISAPI\\Microsoft.SharePoint.Client.Runtime.dll\u0026#34; #check if the folder exists if (![System.IO.Directory]::Exists($folder)) { write-host -ForegroundColor Red \u0026#34;Folder $folder does not exist\u0026#34; return } #check if there are files if ((Get-ChildItem $folder | Measure-Object).Count -eq 0) { write-host -ForegroundColor Red \u0026#34;No csv files in folder\u0026#34; return } #get the files $files = Get-ChildItem -File $folder #connect to sharepoint online $secure = ConvertTo-SecureString $password -AsPlainText -Force $context = New-Object Microsoft.SharePoint.Client.ClientContext($url) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $secure) $context.Credentials = $credentials $context.ExecuteQuery() Write-Host -ForegroundColor green \u0026#34;Connected to SPO\u0026#34; #get the list $list = $context.Web.Lists.GetByTitle($listtitle) $context.Load($list) $context.Load($list.Fields) $context.ExecuteQuery() Write-Host -ForegroundColor green \u0026#34;List loaded\u0026#34; #get the list fields $fields = $list.Fields | ? {!$_.Hidden} | select -ExpandProperty StaticName Write-Host -ForegroundColor Yellow \u0026#34;Fields: \u0026#34; $fields | foreach{ Write-Host \u0026#34;`t $_\u0026#34;} foreach ($h in $mapping) { if ($fields -notcontains $h) { Write-Host -ForegroundColor Red \u0026#34;Mapping incorrect - Field $h is not available in the SharePoint list\u0026#34; return } } #now iterate over the files foreach ($file in $files) { write-host -ForegroundColor Yellow \u0026#34;Reading file $file\u0026#34; -NoNewline #get the csv $lines = Import-Csv -LiteralPath $file.FullName -Header $mapping -Delimiter \u0026#34;;\u0026#34; write-host -ForegroundColor Yellow \u0026#34; ($(($lines | Measure-Object).count) lines):\u0026#34; $i = 0 #iterate over foreach ($line in $lines) { #skipping the header row if there is one if ($i -eq 0 -and $skipFirstRow) { write-host -ForegroundColor Yellow \u0026#34;skipping first row\u0026#34; $i++ continue } #preparing the item $create = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation $item = $List.AddItem($create) foreach ($col in ($line | Get-Member | ? {$_.MemberType -eq \u0026#34;NoteProperty\u0026#34;} | select Name)) { #using the header to specify the column name $item[$col.Name] = $line | Select -ExpandProperty $col.Name } $item.Update() $context.ExecuteQuery() $i++ if ($i%100 -eq 0) { write-host -ForegroundColor yellow \u0026#34;`t$i\u0026#34; } } write-host -ForegroundColor Green \u0026#34;file $file done\u0026#34; #deleting the item if specified if ($delete) { Remove-Item $file.FullName } } Feedback So is it working for you? If so, please leave a comment!\n",
    "tags": null,
    "categories": ["Powershell","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2017/03/how-about-building-a-magic-mirror/",
    "title": "How about building a magic mirror?!",
    "date_published": "2017-03-25T13:07:15Z",
    "description": "It was winter, dark and cold outside, maybe rainy - something must have been really odd - because I started to build something physically, my very first hardware project - a magic mirror. And having two left hands I am trying to avoid as much as I can to build things outside of Visual Studio if you know what I mean… and it was July.\nMagic Mirror - the idea “It’s called a ‘Magic Mirror’, but a more accurate name would be a ‘Smart Mirror’,” Bradley tells us.",
    "content": "It was winter, dark and cold outside, maybe rainy - something must have been really odd - because I started to build something physically, my very first hardware project - a magic mirror. And having two left hands I am trying to avoid as much as I can to build things outside of Visual Studio if you know what I mean… and it was July.\nMagic Mirror - the idea “It’s called a ‘Magic Mirror’, but a more accurate name would be a ‘Smart Mirror’,” Bradley tells us. “It’s a mirror that displays the information you need to know at a quick glance: the time, the date, the weather, and of course a compliment!” — https://www.raspberrypi.org/magpi/magic-mirror/\nAnd then I talked to Heino at a SharePoint conference who told me that he had one and how easy it was to build one, getting the mirror and all that - thanks Heino…!!! 🙂\nMy initial goal was to build a small mirror to show off at the office - show some personalized things like appointments, news, twitter feed, weather, nothing fancy, right?\nGetting started I never thought that getting the first thing to work was so easy. Actually it took me 1 hour to have the first mirror up and running:\nOrder a perfect starter kit [ref] at Amazon - with a RasberryPi3, a case, adapters, Plug it in and connect it to a monitor Boot up noobs and install raspbian Setup the magicmirror² software with one line of shell script: curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh | bash 4 easy steps and ~1 hour later - the result looked like this:\nA promising start with a calendar, some nice descriptive text about the viewer and a weather forecast (that did not work on the screenshot) - except no SharePoint, right?\nBut it doesn\u0026rsquo;t look like a mirror yet…\nBuilding the frame I was a little bit afraid of building something out of wood, putting a mirror in front of it - so I decided to make my life as easy as possible:\nStep 1: Get your old monitor out of the basement (for free!)\nStep 2: Remove everything from the mirror (the foot and everything that you do not need) to get the panel as flat as possible\nStep 3: Measure the width and height of the screen\nStep 4: Go to building supplies store and get the wood for the frame, some screws and mirror glue\nStep 5: Assemble the frame\nStep 6: Order a double-sided acrylic mirror with the exact size of your frame\nStep 7: Glue everything together\nFollowed by being super happy about the result:\nOK - that was a little abbreviated and sounded too easy - I followed this guide and got a lot of help from the building supplies store guys - and I am thankful for that 🙂\nBut the quality of the mirror combined with my 10-year-old monitor is really good - if I cover the backside so that it\u0026rsquo;s entirely dark inside, the monitor is not visible on the front and the display magically appears.\nThe software I tried to create some modules for a SharePoint integration - but at that time node.js and the module felt odd - so I took another road and installed Windows IoT core on my Pi - but that\u0026rsquo;s not done yet and I will follow-up with a blog post once I have something to show.\nFor just basic stuff the magic mirror software really looks mature, lots of modules and plugins ranging from webcams, Alexa integration, stock ticker - it\u0026rsquo;s all there and ready to use.\nIf the weather outside would be nice right now, I would happily accept what I get there for free - but I want to build something by myself - My version of a magic mirror 🙂\n",
    "tags": null,
    "categories": ["IoT"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2017/03/sharepoint-app-custom-domain-free-ssl-certificate/",
    "title": "SharePoint App, Custom Domain and free SSL certificate",
    "date_published": "2017-03-25T11:52:43Z",
    "description": "Recently I created lots of SharePoint provider hosted apps for several customers - most of them very simple apps to register a remote event receiver or send emails. But a few of them were complex business apps that used the integration options for SharePoint but stood almost separately as websites running on Azure. The first apps we created had the name .azurewebsites.net - and for some customers that looked so odd that they opened tickets and asked for confirmation if the apps are legit.",
    "content": "Recently I created lots of SharePoint provider hosted apps for several customers - most of them very simple apps to register a remote event receiver or send emails. But a few of them were complex business apps that used the integration options for SharePoint but stood almost separately as websites running on Azure. The first apps we created had the name .azurewebsites.net - and for some customers that looked so odd that they opened tickets and asked for confirmation if the apps are legit. And that makes perfect sense because everybody could create a website and call it superlegitcustomerapp.azurewebsite.net, right? So in this blog post I will show you how to run an app on a custom domain with a free SSL certificate.\nFor this article I assume that you have your SharePoint App up and running on Azure - and I assume that you have a domain to use.\nRegister the custom domain on Azure First things first - tell the azure website that it will have a new hostname to respond to. Therefore go to the azure portal, open your website and click on \u0026ldquo;custom domain\u0026rdquo;. Then add your domain or subdomain that should be the new entry point of your app. Once you have done that, you need to validate the websites by adding a txt record to your nameserver with the value * mapped to .azurewebsites.net - full guide is here.\nAfter validation was successfully it should look like that:\nFor the custom domain you need at least a shared instance tier for your azure website.\nNew name - new problems Ok, now we have setup the new hostname and we can open up the site with that - but that creates some problems:\nThe app registration (/_layouts/15/appregnew.aspx) needs to be updated The app manifest and the app points to the old site There is no SSL certificate for the new name 1 \u0026amp; 2 are easy solvable: Open the app in Visual Studio, change the app domain, upload it to the app store, trust it and re-add it to your sites. But if you open the new app - you will either redirect to http:// and have all you traffic sent over an encrypted connection - or you send it to https:// and will be greated by a security warning in your browser because there is no SSL certificate present for your new domain.\nFree SSL certificate In the past I heavily used free SSL certificates from StartCom because they were trusted in all browsers and were free for 1 year - but they lost trust in google chrome and firefox recently so that is no longer an option. Not using a ssl certificate is no option at all - business apps need security and trust - therefore I needed another option, preferably free so no long discussion with customers, CSRs and all that to request a certificate for your needs. I want easy.\nLet\u0026rsquo;s encrypt for the rescue There is a really great organization that provides free SSL certificates - Let\u0026rsquo;s Encrypt - and I use them for this blog with ease, too. So why not use them for my Azure websites? The let\u0026rsquo;s encrypt certificates only lasts 3 months and should be renewed automatically (way better than certificates that lasts 1 year and have to be renewed manually…) - so there should be some sort of integration right into the azure websites for that - and there is! Thanks to the awesome work of Simon J.K. Pedersen there is a Azure Website Extension for Let\u0026rsquo;s Encrypt.\nThe installation was really straightforward for me and is well documented here - I added the extension (choose the correct version for 32 or 64bit!), register a new service principal and give it contribute permissions - open the extension site https://.scm.azurewebsites.net/letsencrypt/ and enter all the required values:\nOnce you save it the magic happens - two webjobs will be registered that request a new certificate, register them and two weeks before expiry renew them automatically for you. Awesomesauce!\nFor the custom ssl certificate you need at least a basic app service plan.\nSummary So once you have done all that you will have a nice domain for your app - giving your users trust and easy to recall entry to your business application - and all that is free with zero maintenance. And all your browsers love it, too:\nSo if you create a new app - register the domain first, follow the guide above and you are good to go - the secure way: customer happy, developer happy, security guy happy! 🙂\n",
    "tags": null,
    "categories": ["Azure","Office 365","SharePoint 2013","SharePoint 2016","SharePoint Addins","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2017/03/my-notes-sharepoint-saturday-munich-2017-spsmuc/",
    "title": "My notes: SharePoint Saturday Munich 2017 #SPSMUC",
    "date_published": "2017-03-04T16:45:57Z",
    "description": "So this was my inaugural SharePoint Saturday in my hometown Munich - the last time I couldn\u0026rsquo;t attend - and now I am fully thrilled to be part of the greatest and latest SharePoint community event in Munich - and maybe even in Germany.\nHosted directly in the Microsoft headquarter in Munich (awesome office!) - with more than 400 attendees this will be fun!\nMy agenda and some brief notes are below - the full agenda and the list of awesome speakers is here.",
    "content": "So this was my inaugural SharePoint Saturday in my hometown Munich - the last time I couldn\u0026rsquo;t attend - and now I am fully thrilled to be part of the greatest and latest SharePoint community event in Munich - and maybe even in Germany.\nHosted directly in the Microsoft headquarter in Munich (awesome office!) - with more than 400 attendees this will be fun!\nMy agenda and some brief notes are below - the full agenda and the list of awesome speakers is here.\n#SPSMUC00: Keynote: SharePoint Futures – Field and Engineering Perspective – Aligned or Different? with Eric Shupps(@eshupps) and Veza Juvonen (@vesajuvonen)\nI was not in the same room as the two speakers because of room capacities - and I watched (better listened) to the keynote that has been broadcasted to two other rooms. It was a different experience for me because it was hard to follow some of the jokes without seeing what is going on the stage - but it was still fun 🙂\nIt almost felt like Veza and Eric did a good cop, bad cop theme what is good and bad about SharePoint and Office 365 as of now - there is lot to come, many internal changes of how things will be\n#SPSMUC01: The key to a successful Office 365 implementation is adoption by Jasper Osterveld(@jasoosterveld)\nAdoption is key! Jasper gave some really great tips that will definitely be considered in my company for my customers! The room was quite packed, more than 75 people in the room - awesome!\nLaunch card, launch video and launch party: Well, that\u0026rsquo;s a cool starting point to promote the new technology, the options and possibilities - what sounds easy for all of us, might not be for some others. So be honest about what the new tech can do for you and be integrative.\nWell, what could be worse of a great portal and nobody uses it, right? So I will keep lots of those tips and tricks in mind!\n#SPSMUC03: Pushing the Boundaries - A Deep-Dive into Real-World SharePoint Add-In by Eric Shupps(@eshupps)\nEric shared a lot of his experiences with apps - from expiring tokens, to expiring apps - and where can host your apps. All those options come with different possibilities (!!!) , but great overview to get started.\nYou don\u0026rsquo;t control the costs\nWell, that quote is perfectly describing the situation of many devs - I had a customer project that was stuck for months because nobody was able to create a Azure SQL database (4€/month!) because nobody was defined to provision and in the end pay for the database…\nEric showed a nice demo from Office PnP about throttling and REST - cool stuff, need to check it.\nAnother one: Think and play through the removal of your app - there are some missing pieces.\nIf you don\u0026rsquo;t wanna sleep at night - build your own provisioning engine!\nApparently there was no applause for that brilliant quote - but he is sooooooo right!\nCool stuff - great session - Eric can definitely talk faster than I can take notes 🙂\n#SPSMUC22: SharePoint Patching demystified by Stefan Goßner (@stefan_gossner)\nWhops, I missed that one because I talk too much - hopefully I find his slides online to get demystified, too!\n#SPSMUC13: Level up with PowerApps and Microsoft Flow by Mikael Svenson (@mikaelsvenson)\nPowerApps - I absolutely love what I am seeing. Responsive, fast, slick design - the future of business forms is bright. For Power Users it could be tricky tho build everything that Mikael showed us. Even tho Mikael made building cascading drop down look easy!\nAutocomplete for the control bindings, every InfoPath dev or PowerUser would love that - but lets focus on the future, right?\nRename all the controls!\nI see a lot of interesting projects that will use that in the future - SharePoint as business platform sounds familiar, right? Mikael\u0026rsquo;s slides are already available here.\nGood session, I had good fun!\n#SPSMUC17: Implementing SharePoint hybrid search, start to finish by Thomas Vochten (@ThomasVochten)\nSearch Search Search - I just cant get enough of it. I gave a similar talk in Brussels last year, but its of course totally interesting how Thomas presents that topic, whats important for him and then of course \u0026ldquo;steal\u0026rdquo; all the good parts 🙂\nThomas gave a very concise overview of the search architecture and the options - and then compared the functionality of the past with all we get by using hybrid search: unified index, ranking, refiners and unify everything from remote repositories to one index. Awesome! If you want to check all the tiny details, check this post.\neDiscovery and Compliance benefit of the hybrid search (cool) - and a big chapter about security especially security trimming.\nAnd a neat display template to visualize that the search result sits onPrem - awesome!\nAnd then there was a nice live demo of configuring hybrid search on stage - I crossed my fingers - and everything worked! Cool stuff.\nGood session by Thomas - thanks!\nSummary Top session, top speakers, super professional and awesome organization, free community event and full house - how could you top that? Even the weather was perfect! I enjoyed all the sessions, learned a bit here and there - and had many good chats with old friends, new friends and vendors!\nKudos to Matthias Einig (@mattein) , the team of Rencore and all the awesome sponsors for making this happening!\nAnd now, let\u0026rsquo;s SharePint!\n",
    "tags": null,
    "categories": ["Community","Conference","Flow","Hybrid","Office 365","PowerApps","SharePoint 2013","SharePoint 2016","SharePoint Online","SharePoint Saturday"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2017/02/efficiently-empty-a-large-sharepoint-online-list/",
    "title": "Efficiently empty a large SharePoint Online list",
    "date_published": "2017-02-08T15:47:59Z",
    "description": "Ages ago I created a PowerShell script that I used a couple of times by now: efficiently empty a large SharePoint list - but apparently that code does not work against a SharePoint Online list.\nSo here is an updated version of the script:\n.TERMS No terms - use on your own risk! .SYNOPSIS This script efficiently empties are large list and is approximately 30 times faster than deleting item by item.",
    "content": "Ages ago I created a PowerShell script that I used a couple of times by now: efficiently empty a large SharePoint list - but apparently that code does not work against a SharePoint Online list.\nSo here is an updated version of the script:\n.TERMS No terms - use on your own risk! .SYNOPSIS This script efficiently empties are large list and is approximately 30 times faster than deleting item by item. You need to have the SharePoint Online SDK (https://www.microsoft.com/en-us/download/details.aspx?id=42038) installed to run this script. .PARAMETER weburl SharePoint Online web URL, for example \u0026#39;https://contoso.sharepoint.com\u0026#39;. .PARAMETER listname Name of the list that should be emptied .Author Max Melcher (@maxmelcher) - more on my blog https://melcher.it #\u0026amp;gt; param([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$weburl,[Parameter(Mandatory=$true,ValueFromPipeline=$true)]$listname, $username, $password) function empty-list($weburl, $listname) { $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) $clientContext.Credentials = $credentials if (!$clientContext.ServerObjectIsNull.Value) { Write-Host \u0026#34;Connected to SharePoint Online web: \u0026#39;$webUrl\u0026#39;\u0026#34; -ForegroundColor Green } try { #global counter $counter=0 $spQuery = New-Object Microsoft.SharePoint.Client.CamlQuery #create a simple batch. I received the best results with 500 items per batch. #5000 is the maximum, but i received so many timeouts. $spQuery.ViewXml = \u0026#34;\u0026amp;lt;QueryOptions\u0026amp;gt;\u0026amp;lt;RowLimit\u0026amp;gt;500\u0026amp;lt;/RowLimit\u0026amp;gt;\u0026amp;lt;/QueryOptions\u0026amp;gt;\u0026#34; #track the performance $watch = [System.Diagnostics.Stopwatch]::StartNew() #get the list $list = $clientContext.Web.Lists.GetByTitle($listname); do { #get the current batch of items $items = $list.GetItems($spQuery); $clientContext.Load($items) #get a batch and delete the previous items in one go $clientContext.ExecuteQuery() $count = $items.Count Write-Host \u0026#34;...deleting $count items\u0026#34; -ForegroundColor Yellow while ($items.Count -gt 0) { $counter++ $items[0].DeleteObject() if ($counter%500 -eq 0) { Write-Progress -Activity \u0026#34;Empty List \u0026#39;$listname\u0026#39;\u0026#34; -status \u0026#34;Item $counter of $total marked for deletion\u0026#34; } } #iterate the collection $spQuery.ListItemCollectionPosition = $items.ListItemCollectionPosition } while ($spQuery.ListItemCollectionPosition -ne $null) #delete the last batch $clientContext.ExecuteQuery() #stats $seconds = ($watch.ElapsedMilliseconds/1000) $secondsf = \u0026#34;{0:N0}\u0026#34; -f $seconds $ips = $counter / $seconds write-host -ForegroundColor Green \u0026#34;Done! deleted $counter items in $secondsf seconds. $ips items per second\u0026#34; } catch { Write-Host -ForegroundColor Red $_.Exception.ToString() } } # change to the path of your CSOM dlls and add their types $csomPath = \u0026#34;c:\\Program Files\\Common Files\\microsoft shared\\Web Server Extensions\\16\\ISAPI\u0026#34; Add-Type -Path \u0026#34;$csomPath\\Microsoft.SharePoint.Client.dll\u0026#34; Add-Type -Path \u0026#34;$csomPath\\Microsoft.SharePoint.Client.Runtime.dll\u0026#34; if([String]::IsNullOrWhiteSpace($username)) { $username = Read-host \u0026#34;What\u0026#39;s your username?\u0026#34; } if([String]::IsNullOrWhiteSpace($password)) { $securePassword = Read-host \u0026#34;What\u0026#39;s your password?\u0026#34; -AsSecureString } else { $securePassword = ConvertTo-SecureString $password -AsPlainText -Force } Empty-List -weburl $weburl -listname $listname -user $username -password $securePassword Or download the script from here.\nYou can call the script with the following parameters:\n.\\empty-list.ps1 -weburl [WebUrl] -listname [Name of the list] -username [username] -password [password] I tried it several times on my tenant (and I even created a script to create thousands of items): Once I got rid of all the timeouts I got a delete performance of 11,84 items per second. Not great, but still faster than the Quick Edit View, right? 🙂\nDisclaimer There is no way back – if you start the script there is no \u0026ldquo;ARE YOU SURE?\u0026rdquo; – all data is gone in a very short time.\n",
    "tags": null,
    "categories": ["Office 365","Powershell","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/10/recap-sharepoint-saturday-belgium-2016/",
    "title": "Recap: SharePoint Saturday Belgium 2016",
    "date_published": "2016-10-16T14:00:18Z",
    "description": "300 attendees on a Saturday - all “SharePoint-crazy” - that\u0026rsquo;s what I said last year and it\u0026rsquo;s very true for this year, too!\nSPSBE Fun from the start at 9:00am until the official end of SPSBE (SharePoint Saturday Belgium) at around 19:30!\nI apparently had to optimize my session on this Saturday (50 minutes slots instead of 60!), tests my demos and pimp my slides - so I could only attend one full session (Deep Dive building solutions on the SharePoint Framework by Waldek Mastykarz @waldekm), but there was enough time for me to talk to friends, community members, BIWUG board members and other speakers - good times, good fun.",
    "content": "300 attendees on a Saturday - all “SharePoint-crazy” - that\u0026rsquo;s what I said last year and it\u0026rsquo;s very true for this year, too!\nSPSBE Fun from the start at 9:00am until the official end of SPSBE (SharePoint Saturday Belgium) at around 19:30!\nI apparently had to optimize my session on this Saturday (50 minutes slots instead of 60!), tests my demos and pimp my slides - so I could only attend one full session (Deep Dive building solutions on the SharePoint Framework by Waldek Mastykarz @waldekm), but there was enough time for me to talk to friends, community members, BIWUG board members and other speakers - good times, good fun.\nGreat venue, great speaker lineup - everything was great! I am leaving Belgium the second time - impressed!\nThanks again to all the sponsors who made the event possible!\nSpeakers \u0026amp; Sessions 300 attendees not only from Belgium. In general the conference covered all kind of different topics, but the main themes were Office 365 with topics like development, governance, adoption, best practices, workflows, search, apps and solutions. 24 sessions in 4 tracks - lots of stuff:\nDeveloper\nGet typing with TypeScript by David Opendries\nDeep Dive building solutions on the SharePoint Framework by Waldek Mastykarz\nExtend your Office 365 environment to cross-platform apps by Alexander Meijers\nIntroduction to SharePoint PnP by Bert Jansen\nPowerApps for developers by Adis Jugo\nAzure Active Directory for developers - from A to Z by Stéphane Eyskens\nIT Pro\nLong live On Premises, the reality of SharePoint in the Enterprise by Spencer Harbar\nPreparing to Migrate from SharePoint (On-Prem) to Office 365 by Andy Talbot\nMicrosoft BI demystified : should we go for SharePoint 2016 BI or for PowerBI v2? by Serge Luca \u0026amp; Isabelle Van Campenhoudt\nExploring identity management options for Office 365 by Paul Hunt\nThe State of the SharePoint PowerShell Nation 2016 by Spencer Harbar\nHybrid Search - Everything you need to know! by Max Melcher\nBusiness\nThe Secrets of Engaging Employees Through The Digital Workplace by Symon Garfield\nThe key to a successful Office 365 implementation: Adoption by Jasper Oosterveld\nThe challenges of implementing document management in Office 365 by Peter Baddeley\nMicrosoft Flow and Azure Logic Apps by Penny Coventry\nPower Users Guide to Office 365 by Chirag Patel\nOffice 365 Video - How and Why? by Maarten Eekels\nMix\nThe SharePoint Development Story by Karine Bosch\nLeverage the power of Groups! by Albert-Jan Schot\nExtending Office Add-ins with Azure Container Service by Rick Van Rousselt\nAnalyze Your ULS Logs in the Cloud with Azure HDInsight by Edin Kapic\nSet up your release pipeline for your Office/Office 365/SharePoint developments with Azure by Vincent Biret\nFrom Design to a modern Style Guide - Branding Strategies for SharePoint and Add-ins by Stefan Bauer\nImpressive schedule packed with insights and speakers from around the world.\nMy Session: Hybrid Search - Everything YOU need to know! I had a really good time presenting my content about hybrid Search - and the demo gods were with me, all planned demoes worked like a charm - I uploaded my slides, but the cool stuff is in the demos and I can\u0026rsquo;t make them available: SPSBE 2016: HybridSearch\nHybrid Search session has begun with hybrid voices #spsbe but it was really interesting #sharepoint pic.twitter.com/oX44fKbFny \u0026mdash; Christophe Raucq (@ChristopheRaucq) October 15, 2016 At the very beginning of my session we had some sound issues, another microphone was connected to my room - but well, we all had some fun!\nDuring and after the talk there were like 5 to 10 questions (Data Privacy and regulation, Encryption of the content, Bandwidth requirements, implementation strategy)- but only the first 4 got a free beer from me 🙂\nGood questions gives you good beer!\nAnd I closed my session right in time for the closing SharePint and raffle!\n@maxmelcher going to finish on time for the raffle #spsbe 🙂 pic.twitter.com/pFRe5CZXps \u0026mdash; Andy Van Steenbergen (@meligo) October 15, 2016 Summary I had a blast, once more! The SharePoint community in Belgium is really enlightening - thanks for a great weekend!\nSee you latest next year Belgium!\n",
    "tags": null,
    "categories": ["Community","Hybrid","ITPro","Office 365","SharePoint 2013","SharePoint 2016","SharePoint Saturday"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/10/ignite-2016-my-sharepoint-takeaways/",
    "title": "Ignite 2016 – My SharePoint takeaways!",
    "date_published": "2016-10-04T14:35:15Z",
    "description": "Ignite 2016 is over and we all were updated with tons of new features, announcements and insights in Atlanta - in this post I will try to give you a summary what I learned at Ignite 2016 SharePoint Conference it Atlanta.\nOffice 365 and SharePoint Online I took that one from the official source because it pretty sums up whats coming:\nThe next wave of innovations to achieve the SharePoint vision (simple and powerful file sharing, mobile and intelligent intranet, open and connected platform, commitment to security, privacy and compliance) contains the following highlights:",
    "content": "Ignite 2016 is over and we all were updated with tons of new features, announcements and insights in Atlanta - in this post I will try to give you a summary what I learned at Ignite 2016 SharePoint Conference it Atlanta.\nOffice 365 and SharePoint Online I took that one from the official source because it pretty sums up whats coming:\nThe next wave of innovations to achieve the SharePoint vision (simple and powerful file sharing, mobile and intelligent intranet, open and connected platform, commitment to security, privacy and compliance) contains the following highlights:\nA significant update to the OneDrive browser experience, so that you can find, access, share and collaborate on all your files in Office 365 OneDrive sync preview for SharePoint Online document libraries and folders shared with you Team news to keep your team up to date and informed of what matters People cards in SharePoint and OneDrive for Business that intelligently surface content and details from your colleagues’ profiles New integration with Microsoft Flow, PowerApps and Yammer Preview of the SharePoint mobile apps for Windows 10 Mobile and Android Enhancements for developers including new sites and lists APIs in Microsoft Graph New security controls including site classification and conditional access based on location and device Feature Pack 1 for SharePoint Server 2016 Expanded FastTrack services and tools to support hybrid configurations and migration And the Roadmap for Q4 2016 and H1 2017 - I really like the transparency:\nModern Pages / Modern Document Library / Refresh to Teamsites I really recommend you to watch the entire session - some pretty good stuff in it:\nIn the next month we will see lots of updates to the modern document library experience, modern pages and updates to our beloved teamsites (about time!).\nAnd \u0026ldquo;modern pages\u0026rdquo; looks awesome, too. The promise here is that they will render on desktop, mobile browser and in the mobile apps - more on the apps late in this post.\nPeople card What I really liked is the new people card - more user-centric experience are always great. \u0026ldquo;Who is that person? What is he doing in the organization and what is he working on?\u0026rdquo; - cool!\nSecurity \u0026amp; Compliance As part of the Office news the following new security and compliance capabilities in Office 365:\nImprovements to Office 365 Advanced Threat Protection Improvements to Office 365 Advanced Threat Protection Threat Intelligence Advanced Data Governance Updates to Advanced Security Management And more insights with lots of graphs:\nApp Launcher The new version of the Office 365 App Launcher gives you access to these new features:\nAdditional customization options search across all the services and applications A tabbed layout You can resize, pin and organize tiles Support for Office 365 themes And in a not so distant future it will list your recent Office documents:\nOneDrive for Business Major updates to OneDrive for Business - as mentioned in this post, OneDrive caused a lot of service requests in the past - but it will massively improve with the coming updates!\nAbility to sync SharePoint Online document libraries and OneDrive folders shared with you (preview available here). An activity center has been added to the OneDrive sync client to allow you to view synchronization nd file activity at a glance (preview). Notifications to your iOS or Android device when someone shares a OneDrive file with you. Access to SharePoint Online files in the OneDrive app on Android. Multi-page scan enhancements in the OneDrive app on Android. Ability to see over time how many people have discovered and viewed your files in OneDrive for iOS. Enhancements to integration with Office 2016 (First Release). Simple, flexible OneDrive user management in Office 365 (First Release). These new features are in the pipeline:\nRich thumbnails and previews for over 20 new file types (rolling out before the end of 2016). Ability to access and edit all your files in OneDrive and SharePoint Online from the OneDrive browser client (rolling out before the end of 2016). Capability to download multiple files as a .zip file (rolling out before the end of 2016). Dedicated OneDrive administration console in Office 365 (rolling out before the end of 2016). More of that in my \u0026ldquo;OneDrive for Business - key feature and roadmap\u0026rdquo; summary.\nPowerApps \u0026amp; Flow That\u0026rsquo;s what excited me the most - whats coming after InfoPath, lots of clients asked me about guidance here. And well, the answer could be PowerApps.\nI attended 2 sessions to see whats coming for PowerApps and Flow - and I will soon play with it because there is so much demand in forms and simple workflows. Having the same functionality even in a mobile app will be awesome (try that with InfoPath…).\nPowerApps works only if an internet connection is available Its currently in preview You can connect to data sources onPrem if you install a gateway service Flow on the other side looks like the implementation of if this then that / IFTTT - simple workflows are possible here e.g. approval and all that stuff. The power of that come into play when you connect different tools with that (Salesforce, Twitter, Slack, SQL, etc).\nGroups \u0026amp; Yammer Better integration of Yammer in Office 365 groups Uploading of files directly from SharePoint/OneDrive for Business sites, and edit them directly in the browser. Share content by mail with Yammer groups Manager Yammer within O365 admin center More on that in the announcement blog post.\nSharePoint Framework Apparently I could not make it to any SharePoint Framework (SPFx) session at all - the conference was packed with so many good sessions that I had to make compromises. But lots of the Framework was already announced at May, 4th event.\nMy Analytics Delve Analytics was renamed to MyAnalytics - the change of the name is already live in my tenant.\nPinning of important contacts so you can easily see if you are loosing touch with important peers Share metrics with peers to get a review or opinion about your work habits Adjust your priorities to get better results More on that here: Create better work habits with MyAnalytics (formerly Delve Analytics)\nSharePoint onPrem Feature Pack 1 was announced and will available in November - and not in Q1 2017\nLogging of administrative actions performed in Central Administration and with Windows PowerShell Enhancements to MinRole to support small environments (see my post here for more details) A new OneDrive for Business user experience Custom tiles in the SharePoint app launcher Unified auditing across site collections on-premises and in Office 365 Unified taxonomy across on-premises and Office 365 OneDrive API 2.0 Q4 2016:\nFeedback driven updates to doclibs, lists, pages, sites and apps Team news Intelligent People Cards SharePoint mobile app WW Release (Android, Windows) Next generation sync of team sites Simple, fast site creation SharePoint Framework WW Release First half of 2017:\nFeedback driven updates to doclibs, lists, pages, sites and apps More web parts Publishing Sites More Flow and PowerApps integration SharePoint Add-in improvements Modern team site extensibility Performance-focused CDN integration with publishing sites SharePoint Mobile Apps The mobile apps got a lot of love recently - and lots is on the roadmap for them. The \u0026ldquo;intranet in your pocket\u0026rdquo; with native apps on every platform is a great driver for user adoption.\nMore details in my summary post Explore whats new and whats coming with the SharePoint Apps\nSpirit SharePoint is alive! It was a blast to see how much attention (and love) SharePoint got at the Ignite 2016 - that hasn\u0026rsquo;t been always the case. The following PowerBI analyzed the hashtags on twitter during the Ignite - #SharePoint clearly ruled. I doubt that it\u0026rsquo;s because SharePoint people tweet more - the many announcements and huge amount of sessions must be the cause for that:\nMicrosoft Ignite 2016 delivered so many promising updates to current and planned developments nobody could doubt that SharePoint has a bright future! SharePoint ain\u0026rsquo;t dead!\nIf you want to see more about the general roadmap, visit https://fasttrack.microsoft.com/roadmap for more insights.\nIf you have questions about Ignite 2016, please let me know in the comments. If wrote about every session I attended at Ignite 2016, please see the archives if you want more details.\n",
    "tags": null,
    "categories": ["Azure","Delve","Development","Flow","Hybrid","Ignite 2016","Infopath","ITPro","Office 365","Office Graph","OneDrive","OneDrive for Business","PowerApps","Powershell","SharePoint 2013","SharePoint 2016","SharePoint Addins","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/learn-how-we-move-fast-without-breaking-things-by-managing-change-in-sharepoint-online-brk2297/",
    "title": "Learn how we move fast without breaking things by managing change in SharePoint Online #BRK2297",
    "date_published": "2016-09-30T17:36:02Z",
    "description": "Session with Zohar Raz (SharePoint Group Manager) and Lincoln DeMaris (Principal Program Manager) how to manage change in SharePoint Online.\nLearn how SharePoint is introducing change faster than ever before, while still being extra sensitive to customer readiness and customer feedback. We are heavily investing in our technology to enable organizations to control and prepare for the changes in the experience. Come learn your role in this cloud evolution and what resources we provide to make you successful.",
    "content": "Session with Zohar Raz (SharePoint Group Manager) and Lincoln DeMaris (Principal Program Manager) how to manage change in SharePoint Online.\nLearn how SharePoint is introducing change faster than ever before, while still being extra sensitive to customer readiness and customer feedback. We are heavily investing in our technology to enable organizations to control and prepare for the changes in the experience. Come learn your role in this cloud evolution and what resources we provide to make you successful.\nHere are my notes:\nChanges to SharePoint Online Massive updates and new feature have been rolled out to SharePoint Online this year, most changes to the product ever. The list since last ignite is really huge and they come in ripples instead of waves (as for onPrem).\nAnd once they make it out of the lab, it will be tested in multiple stages before it arrives at the first customer (first release ring):\nInteresting to see how they roll out updates and implemented “kill switches” – and all that with PowerShell.\nAnother thing is this slide -its from a PowerBI dashboard were Microsoft monitors service requests and can react to early feedback:\nIt looks like more than 40% of all service requests in the first releease ring are because of OneDrive for Business…!!!\nModern UI Philosophy Change fast and early. Lincoln explained that the goal of the modern UI is to optimize the experience for all customers with the new UI while still having the classic experience available.\nThe modern document library was rolled out and Microsoft learned a lot.\nWe got mixed feedback on this (Lincoln)\nOh yes, I can imagine…\nSince initial roll out (6th April) there have been rolled out there was a massive wave of feedback.\nThings that they wont do anymore:\nMassive change without upfront notification Roll out to all of the first release customers in one batch Putting a big banner to show everybody that there is a change Update awareness The following describes what we should do be up to date and be ahead of the frequent changes :\nProvide feedback Uservoice and the feedback options in the message center are the places to provide feedback.\nQuestions from the audience Q: How can we get notified once a feature arrives on my tenant? A: Currently not possible, investigation how to implement a kind of “tenant changelog” are running.\nQ: How will breaking changes be announced ahead and how much time will we have to adjust? A: The intention is to give you months if not years to adjust.\nSummary Interesting facts and insights in this very last Ignite 2016 session – keep the updates coming, embrace the change!\nGo watch the recording once its available!\n",
    "tags": null,
    "categories": ["Ignite 2016","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/build-business-apps-for-office-365-infopath-powerapps-flow-and-more-2051/",
    "title": "Build business apps for Office 365 – InfoPath, PowerApps, Flow and more #BRK2051",
    "date_published": "2016-09-29T20:29:14Z",
    "description": "Whats the story post Infopath and how to build business apps with PowerApps? – in this session Chris McNulty (@cmcnulty2000) and Kerem Yuceturk will tell us!\nNo-code and low-code applications have been essential tools in Microsoft SharePoint for a long time, but we’ve added many other new tools to your palette. We review the roadmap and best practices for InfoPath, SharePoint Designer, Access Web Apps, Flow, PowerApps and more.\nStart with a demo!",
    "content": "Whats the story post Infopath and how to build business apps with PowerApps? – in this session Chris McNulty (@cmcnulty2000) and Kerem Yuceturk will tell us!\nNo-code and low-code applications have been essential tools in Microsoft SharePoint for a long time, but we’ve added many other new tools to your palette. We review the roadmap and best practices for InfoPath, SharePoint Designer, Access Web Apps, Flow, PowerApps and more.\nStart with a demo! Always good to start with a demo – in this case Kerem started with a “vacation request” application that I have seen a couple of time in my career, too – but this time with PowerApps on a cell phone.\nSo we saw Corporate Design with a Logo and style, date pickers, text fields, a calculated field that shows the amount of days between the selected days – once submitted the status field (no visible from the edit form) was set and submitted to a SharePoint list. So that one triggered a Microsoft Flow to send out a simple approval mail to approve/reject the request.\nBasic stuff – but a very promising start of this session!\nMicrosoft Forms EDU only, no integration to SharePoint, no designer.\nPowerApps Connect to onPrem data via a bridge that relays your requests. In that way you can access and store data to SharePoint 2013/2016 onPrem.\nFlow Interact with tons of services from Twitter, SalesForce, SharePoint or simple stuff like sending emails. Dozens of templates are already available:\nPowerApps Designer The designer is a browser based (Chrome shown) to create forms.\nWhen the PowerApp designer is started, 3 views aka screens (Browse, Edit, Details) will be created with all the fields that are existing. As of now you cannot create new fields because the SharePoint list is the master. Drag and Drop of controls, realignment – everything is there.\nSearch Control: You can bind a complex expression to it similar to what is possible in Excel. Here a filter condition was shown to only return items of the current user. There is an autocomplete feature for the expressions.\nControls: We saw textboxes, calendars with binding to different datasources.\nExpressions \u0026amp; Binding: That looks powerful. You can even combine expressions like “open new form, then go to a view”.\nConditional formatting: Done with expressions\nExternal validation \u0026amp; logic: Currently Azure Functions or webservices are possible. NO CODE-BEHIND and thats AWESOME.\nFlow Designer After setting up the form, Kerem added a simple workflow.\nThere are auto completes available if the action needs inputs e.g. from the submitted list item.\nConnections: Interesting concept to link to onPrem environments through gateways. Need to fiddle with that.\nPricing \u0026amp; Licensing Roadmap More controls for images and attachments – multi-value fields\nFlow integration for OneDrive and Document libraries\nadhoc start for selected items\nEmbedding of PowerApps in new SharePoint pages\nGA date is not yet available:\nFurther notes Because I attended a theater session about that and crawled through the expo, I asked the experts addtional questions:\nMulti Language support: is on the roadmap, implementation details were not exposed but it sounded almost like resource files.\nRepeating fields: is on the roadmap. Apparently my question how the repeating data is stored in the list was not answered.\nSummary The expectations for the business applications on top of SharePoint are highest! The business productivity part of SharePoint is what made the platform so great and we need to see a modern solution for forms, requests and all the business needs.\nThis session was a great start that gave me confidence that PowerApps could be a great successor for Infopath – and luckily they do not try to seek feature parity with Infopath!\nCool stuff, watch the session once its online!\n",
    "tags": null,
    "categories": ["Flow","Ignite 2016","Infopath","PowerApps"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/deploy-and-provision-best-practices-with-microsoft-sharepoint-server-2016-brk3035/",
    "title": "Deploy and provision best practices with Microsoft SharePoint Server 2016 #BRK3035",
    "date_published": "2016-09-29T17:49:27Z",
    "description": "Microsoft SharePoint Server 2016 provides a new suite of IT capabilities to drive improvements in both scale and resiliency. Learn the best practices to deploying and provisioning SharePoint Server 2016 with these capabilities in mind.\nA session with Todd Klindt (@toddklindt) and Jason Himmelstein (@sharepointlhorn) – this will be super good!\nHere are my notes:\nMinRole MinRole rocks and its actually self-healing, can be installed on 1 server (plus sql).",
    "content": " Microsoft SharePoint Server 2016 provides a new suite of IT capabilities to drive improvements in both scale and resiliency. Learn the best practices to deploying and provisioning SharePoint Server 2016 with these capabilities in mind.\nA session with Todd Klindt (@toddklindt) and Jason Himmelstein (@sharepointlhorn) – this will be super good!\nHere are my notes:\nMinRole MinRole rocks and its actually self-healing, can be installed on 1 server (plus sql). Minimum MinRole multi-server farm requires 4, with high availability its 8. Thats a lot of (virtual) metal…\nHA and Distributed Cache: do a graceful shutdown, thats per-se no HA.\nThere is a big change in Feature Pack 1 to support smaller environments because that has been requested so many times – good stuff!\nSo once the feature pack is out you can combine services and do front-end and distributed cache on one server, and application and search.\nCloud SSA / hybrid search Indexing is the stuff when the monkey bangs the coconut on the ground to check whats inside (Todd Klindt)\nMan, I will steal that quote.\nOnce you use it, you dont have to have a bigger topology – index is in the cloud – and enables you to externalize onPrem data repositories.\nTest it on a test environment, setting up cloud search could have impact on provider hosted apps.\nSQL Server Performance Pre-Grow, Auto-Grow, Instant File Instantiation – all the stuff that speeds up your databases/sql – speeds up your SharePoint.\nLoad testing Measure before you scale!\nJason told a customer case, were they improved the wrong metrics (custom code, sql performance) to then later on identify that the bottleneck was the CPU. Now they rerun the performance test and compare them with the previous baseline. There is a recording how to setup loadtesting from SPC 2014.\nSummary High expectations, high quality session – Todd and Jason are always a great combo and do great infotainment!\nGo watch the session once its available!\n",
    "tags": null,
    "categories": ["Ignite 2016","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/learn-best-practices-for-managing-and-administering-sharepoint-online-and-onedrive-for-business/",
    "title": "Learn best practices for managing and administering #SharePoint Online and OneDrive for Business #BRK3028",
    "date_published": "2016-09-28T19:33:00Z",
    "description": "In this session, learn how to manage your Microsoft SharePoint Online (SPO) and Microsoft OneDrive for Business environments in the browser (the SharePoint Online Admin Center) and by using the SharePoint Online Management Shell (a.k.a., Microsoft PowerShell for SPO). We cover numerous scenarios and demos for both seasoned SharePoint admins and new SPO admins.\nBy Chris Bortlik (@cbortlik)\nHere are my session notes:\nSharePoint Online Admin 101 Site Collection Provisioning, Service Level Settings, hybrid, PowerShell will be discussed in this session.",
    "content": " In this session, learn how to manage your Microsoft SharePoint Online (SPO) and Microsoft OneDrive for Business environments in the browser (the SharePoint Online Admin Center) and by using the SharePoint Online Management Shell (a.k.a., Microsoft PowerShell for SPO). We cover numerous scenarios and demos for both seasoned SharePoint admins and new SPO admins.\nBy Chris Bortlik (@cbortlik)\nHere are my session notes:\nSharePoint Online Admin 101 Site Collection Provisioning, Service Level Settings, hybrid, PowerShell will be discussed in this session.\nControl external sharing Restrictive on service level, override on site level\nSo in other words, global SharePoint settings are do not allow sharing with externals, but allow it on specific sites only if you need it. For anonymous sharing, Chris suggests to let the links expire, otherwise its hard to track whats still shared.\nYou can even create alerts if someone shared content via anonymous links with email notification – or bcc an email account if someone shares something (Powershell):\nRestrict access There are new capabilities to restrict access to data sitting on the Microsoft platform, limit by network, domain join and more – some of them require Azure AD Premium. Need to fiddle with this, a client wanted to block specific clients from sync and access.\nPrevent data loss Multitude of different options here, from stop sync to Azure RMS / IRM – different requirements require different solutions.\nEmployee termination and retention As we heard yesterday, files in OneDrive can now be retained for up to 10 years, that does not require a license.\nAssign new permissions in the admin portal or forced sign-out (e.g. lost notebook or cell).\nReporting Audit events got a major update for SharePoint online and they can be queried with powershell. There are some usescases when this could be come handy for my clients (legal stuff \u0026amp; eDiscovery or people leaving the company).\nReferences There is a pretty cool workbook that guides you through core questions: https://blogs.office.com/2015/11/23/announcing-office-365-customer-security-considerations-preview/\nChris has a lot of stuff on his blog: https://blogs.technet.microsoft.com/cbortlik/\nSummary Lots of demos (could not catch everything here, go watch the recording!), lots of insights and tips \u0026amp; tricks – I need to dive deeper afterwards.\nThe shown powershell scripts are super handy, I totally liked the style of the session!\n",
    "tags": null,
    "categories": ["Ignite 2016","ITPro","OneDrive","Powershell","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/explore-whats-new-and-coming-with-the-sharepoint-apps-brk2037/",
    "title": "Explore what is new and coming with the SharePoint apps #BRK2037",
    "date_published": "2016-09-28T17:35:22Z",
    "description": "Ignite 2016 session about apps, mobile experiences and intelligent portals by Andy Haon (@andyhaon) and Nate Clinton (@nate_clinton).\nHere are my notes:\nSharePoint Home I was a little late to the session, so only a screenshot from the slides:\nMobile Apps Approach: look at the key workloads in regards to SharePoint and bring them to the mobile apps on all platforms.\nThings they learned: Sign-in issues (a lot), analysis of top requests and implementing them",
    "content": "Ignite 2016 session about apps, mobile experiences and intelligent portals by Andy Haon (@andyhaon) and Nate Clinton (@nate_clinton).\nHere are my notes:\nSharePoint Home I was a little late to the session, so only a screenshot from the slides:\nMobile Apps Approach: look at the key workloads in regards to SharePoint and bring them to the mobile apps on all platforms.\nThings they learned: Sign-in issues (a lot), analysis of top requests and implementing them\nAndroid: feature parity with iOS but with respect to the material design. PowerApps integration comes first to Android\nWindows 10 mobile: feature parity with iOS but with windows design. You have to be an Insider to get the app here: https://aka.ms/spappwindows\nTeam News Quickly author news with status updates or mention a document. News are available on mobile phones, too. Its planned to add mobile news authoring so you can craft news while on the go.\nWhats coming! Intranet in your pocket, the changes that are coming are promising for that:\nNotifications, News and list improvements will drive the adoption.\nSummary To be honest, I expected this session to discuss about SharePoint Apps – no, I mean Addins! – and not about the mobile apps. But on the plus side, it was really good session that showed me whats possible in the apps – I am more a browser guy, but I will give it a try!\nGood stuff.\n",
    "tags": null,
    "categories": ["Apps","Ignite 2016","SharePoint 2016","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/empower-discovery-in-sharepoint-20132016-with-hybrid-search-delve-and-the-office-graph-brk3034/",
    "title": "Empower discovery in SharePoint 2013/2016 with Hybrid Search, Delve and the Office Graph #BRK3034",
    "date_published": "2016-09-28T17:06:48Z",
    "description": "I’m reading Search, Search and Search in the description of the session by Neil Hodgkinson (@Nellymo) – so what could go wrong? 🙂\nWhy hybrid? Everything in one search index is a great solution for global spanning enterprises. No more spinning up VPNs to connect and search for company data is of great value.\nLine of Business (LOB) data can be indexed, too - and you dont have to migrate the entire application to make the data available.",
    "content": "I’m reading Search, Search and Search in the description of the session by Neil Hodgkinson (@Nellymo) – so what could go wrong? 🙂\nWhy hybrid? Everything in one search index is a great solution for global spanning enterprises. No more spinning up VPNs to connect and search for company data is of great value.\nLine of Business (LOB) data can be indexed, too - and you dont have to migrate the entire application to make the data available.\nChallenges Datatypes, Enable access, Compliance, Availabilty.\nFact is that data is created on a massive scale and the business have very high expectations (mobile!) while respecting corporate regulations. Demand for hardware in classic environments is very high, too.\nHybrid Search Unified search index is awesome. Access to all your onPrem data no matter where in the world it is stored (hidden) once indexed can save so much money and creates measurable values.\nThe next picture pretty much sums that up:\nRefiners work across onPrem and online results.\nYou can have multiple search service applications and mix cloud and classic search service applications depending on your requirements.\nIts distinguishable where the item is coming from by its url – actually I do not care where its stored – but you could change it with a simple display template and refiner or group them in verticals.\nHybrid Search, I can’t stress it enough, is a great way to start every hybrid engagement. If you want to read more, you might like my full article about hybrid search experiences here.\nFlow Neil created a simple flow to collect tweets from twitter and persist them in a sharepoint list onPrem. After that he started a crawl in the cloud search service application. One or two minutes later the tweets were searchable via the SharePoint Online Search Center and through Delve\nRoadmap Things that are planned and might come in regards to hybrid:\nSummary Solid show, good insights by Neil – room was almost full, so there is definitely a hugh interest about hybrid scenarios!\nSearch all the things!\n",
    "tags": null,
    "categories": ["Delve","Hybrid","Ignite 2016","ITPro","Office 365","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/learn-how-to-build-a-fast-responsive-sharepoint-portal-in-sharepoint-online/",
    "title": "Learn how to build a fast, responsive SharePoint portal in SharePoint Online",
    "date_published": "2016-09-28T03:09:29Z",
    "description": "Performance is key, who does not hate slow pages? In this session by Russ More and John Fan we will learn how to speed up SharePoint Online pages to build faster portals.\nHere are my notes:\nMeasure, Measure, Measure! You get what you measure!\nMicrosoft measures a lot of metrics internally and even compare them to competitors – they monitor their own dogfood service (fast ring) to see if there are regressions.",
    "content": "Performance is key, who does not hate slow pages? In this session by Russ More and John Fan we will learn how to speed up SharePoint Online pages to build faster portals.\nHere are my notes:\nMeasure, Measure, Measure! You get what you measure!\nMicrosoft measures a lot of metrics internally and even compare them to competitors – they monitor their own dogfood service (fast ring) to see if there are regressions.\nNice fact: Average page in SharePoint loads in 3 seconds. I expected it to be much higher actually.\nPersonal note: If you want super easy measuring, try Azure Application Insights - I used it in several projects now and it really gives you great insights what people are using and where you are facing problems that must be improved.\nImprove Entry point with a lot of tips is: http://aka.ms/tune\nMost of the performance issues are not server but client related - it just takes to long to deliver all content to the client so it can render the entire page. Lots of requests, large files, unminified js/css and usage of inline scripts and styles. The old http/1.1 protocol, or as John called it \u0026ldquo;waterfall requests\u0026rdquo; is part of the problem because the requests are not handled in parallel.\nLots of request? Minify and reduce, use CDNs – and use http/2 to bundle request. There is a nice test page to visualize the difference between http/1.1 and http/2: https://http2.golang.org/gophertiles\nUsing CDNs in an online scenario like SharePoint Online is of course much easier.\nSharePoint Framework SPFx SharePoint Framework kinda evolved out of those problems (or at least inspired the solution), client-side only rendering with performance in mind.\nI will definitely attend one or two deep dive sessions about this.\nSummary Phew, lots of input. Interesting facts and hints from John and Russ!\nNeed to fiddle with CDNs in one of my client projects with SharePoint Online where the pages are loading REALLY slow and see if the things can be improved/measured with the methods that haven been shown.\n",
    "tags": null,
    "categories": ["Ignite 2016","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/dive-into-microsoft-office-365-and-sharepoint-hybrid-scenarios/",
    "title": "Dive into Microsoft Office 365 and SharePoint Hybrid Scenarios",
    "date_published": "2016-09-27T19:28:27Z",
    "description": "Session with Bill Bear and Rick Taylor about all things hybrid.\nHere are my notes:\nHybrid Scenarios Bill started with hosting scenarios from traditional, private and public cloud options:\nIf you are in doubt check if there is a bigger company in your area that moved to the cloud\nBusiness Needs Different view to meet business needs is to look at the time to deliver:\nand your application needs: dynamic scale required?",
    "content": "Session with Bill Bear and Rick Taylor about all things hybrid.\nHere are my notes:\nHybrid Scenarios Bill started with hosting scenarios from traditional, private and public cloud options:\nIf you are in doubt check if there is a bigger company in your area that moved to the cloud\nBusiness Needs Different view to meet business needs is to look at the time to deliver:\nand your application needs: dynamic scale required? uptime sla?\nWhy hybrid? There are special scenarios where hybrid is a good idea e.g. limited bandwidth.\nMore hybrid functionality is coming Unified Managed Metadata (yeah!!!)\nUnified Auditing\nHybrid Workloads Search: Index onPrem data storages and unify them in the SharePoint Online Search Index. Business Connectivity Services: Complex to setup because of two-way authentication, only OData datasources OneDrive: redirect to the online service TeamSites: The site app shows tiles from both onPrem and SPO Social: basically Bill showed Yammer-embed here Auditing: Hybrid auditing unifies login, view of documents and more in a single place. Summary Room was packed full, Bill and Rick did a very solid session with tons of infos – good stuff!\nIf you start with hybrid, you might like my hybrid search post – hybrid search is a very good starting point and key for a sucessful hybrid strategy.\n",
    "tags": null,
    "categories": ["Hybrid","Ignite 2016","Office 365","SharePoint 2013","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/discover-whats-new-and-whats-coming-to-the-sharepoint-mobile-and-intelligent-intranet/",
    "title": "Discover what’s new and what’s coming to the SharePoint Mobile and Intelligent Intranet",
    "date_published": "2016-09-27T16:06:18Z",
    "description": "Session with Mark Kashmann (@mkashman) and Adam Harnetz (@adamharnetz) about whats coming for SharePoint intranets especially in regards to mobile.\nHere are my session notes:\nCustomer usecase: Delta Delta has 500 content creators; previously it was only posible to do that\n80.000 employees, entire user base is 260.000 with externals.\nMobile is increasing\nReplaced legacy technology\nDelta is now starting to move to O365 SharePoint Online, but starts with OneDrive",
    "content": "Session with Mark Kashmann (@mkashman) and Adam Harnetz (@adamharnetz) about whats coming for SharePoint intranets especially in regards to mobile.\nHere are my session notes:\nCustomer usecase: Delta Delta has 500 content creators; previously it was only posible to do that\n80.000 employees, entire user base is 260.000 with externals.\nMobile is increasing\nReplaced legacy technology\nDelta is now starting to move to O365 SharePoint Online, but starts with OneDrive\nMobile App Sites Tab is powered by Office Graph depending on your usage.\nOnce you open a site you see the new site experience in the app, starting with News, followed by Activity:\nPopular \u0026amp; active content will be surfaced there.\nAdam then showed end to end how to access SharePoint data from his iOS device, from list to user profiles.\nThe number one requested feature was “edit listitems” - and thats coming to the mobile apps. The iOS is updated every second week, awesome.\n“Intranet in your pocket” is the core idea of the apps – looks good.\n“News” tab is brand new and not yet available:\nIt will show you news around you, not just from one teamsite.\nPowerApps The PowerApps will be integrated into the apps, they can be launced directly.\nLinks Links are coming document libraries, you get a flyout to add links to any url or to files you used based on Office Graph (?).\nExtensibility Again DocuSign is shown in the new document library experience, based on the new SharePoint Framework SPFx. More to come on this.\nPeople Card / Profiles Every User field now will be rendered as hover item called people card. It shows documents that the person created/recent documents and switch the full user profile (new experience!).\nOutlook Integration You can click on “get link” in SharePoint and paste the link into Outlook Online. It will then get rendered as a small preview with a small slug, neat!\nImage Library Images are now rendered in a lightbox, with slider controls to go to next/prev images.\nTeamsite Sync with OneDrive Next Gen Sync Client Thats a highly anticipated feature and its coming.\nNew Page Experience The new editing experience is much better than the older – SharePoint, welcome to 2016! Its so much easier to customize a page, format text, add webparts. A big core component of SharePoint gets a major improvement. Awesome!\nPowerApps #2 Simple option to request input from others, data is persisted in a SharePoint list.\nFlow Automate processes. Here a simple twitter integration was shown, need to look at this closer.\nRoadmap Busy year for the SharePoint team, lots of stuff was already shipped. Q4 updates look promising!\nQ4 was about teamsites, 2017 will be about awesome publishing experience\n2017: Improvements to addins are coming, responsiveness was mentioned! PowerApps and Flow get more power.\nTeamsites works best when there is a hero in the organization\nSummary Great overview whats coming – mobile or not, it looks good and sounds promising! Go watch the recording once its available, I could not catch everything in this blog post and it’s definitely worth watching!\n",
    "tags": null,
    "categories": ["Ignite 2016","SharePoint 2016","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/explore-onedrive-for-business-key-features-and-roadmap/",
    "title": "Explore OneDrive for Business key features and roadmap",
    "date_published": "2016-09-27T15:41:15Z",
    "description": "My clients currently use OneDrive for Business quite a lot and there are still some rough edges – I hope in that session we get some insights what is coming soon. Here are my brief notes:\nRock Solid Sync The robustness of sync has greatly increased (I share that experience).\nMobile Experience The mobile experience has greatly increased, 4+ star rating in all app stores. Android and iOS app usage is high.",
    "content": "My clients currently use OneDrive for Business quite a lot and there are still some rough edges – I hope in that session we get some insights what is coming soon. Here are my brief notes:\nRock Solid Sync The robustness of sync has greatly increased (I share that experience).\nMobile Experience The mobile experience has greatly increased, 4+ star rating in all app stores. Android and iOS app usage is high.\nOffice Graph OneDrive highly uses (and contributes signals) to the Office Graph to enhance the user experience.\nSecurity, Control and compliance Security is key; IT can manage the OneDrive settings via the admin portal. More to come here, later.\nDevelopment \u0026amp; Extensions Never had the usecase to extend OneDrive, but its valuable to know that there are options:\nWork in Progress / Roadmap “Recent files” is global on all apps, in the Office integration and the browser.\n“Shared with me” is showing files that have been recently shared with you.\nSearch utilizes the Office Graph, same does “Discover”\nFile Preview PDF experience improved, annotations are stored back to OneDrive\nAdobe Photoshop, RAW files, Illustrator are rendered\nEmail (msg, eml) are previewed, too.\nVideo files: dynamically streamed now, the bitrate can be adjusted on the fly now\nFolder Sharing Folder sharing is now rolling out with a new experience. Sharing by link is now possible, previously only named users could access folders.\nCopy \u0026amp; Move to Selecting files give you the option to move or copy files to location where others already have access to. Once clicked there will be a hover that allows you to select teamsites where you can move the files to; the sites that are shown are generated by the office graph depending on your previous usage.\nSync \u0026amp; selective sync Selective sync is coming to SharePoint sites – the demo that is shown was running on MacOS!\nOffice Integration Sharing directly out of office in the top right\nImproved Skype for Business integration, you can see changes in real-time, and you can click on the user profiles to see where the person is currently editing.\nActivity feed: You get a button in the top right, eg. Word to see what has been changed and eventually rollback changes.\nNotifications OneDrive will soon have real-time notifications, eg. a folder or file has been shared with you.\nActive files The OneDrive mobile app shows now what happens with your files once they are shared with others. With stats on the right:\nInstant preview In the OneDrive apps you now get an instant preview without opening an office app for that; currently only office files.\nAdmin center / OneDrive console This is a big change! Admins can now give access to a users onedrive via the admin center on a per user basis. Additionally external sharing can be controlled.\nThere is a global OneDrive console to control external sharing globally, lots of settings that had to be done via powershell are now migrated to the new admin experience. Link expiry setting or a block list for domains is new to me, too.\nYou can now configure to retain data once a user leaves up to 10 years!\nRoadmap The roadmap screenshot was so packed, I barely could read it:\nI am most excited about the better SharePoint integration.\nThe “Scan” option that is coming to the mobile apps is handy, OCR integrated. Scanning business cards or receipts is a good usecase here.\nOh well, and of course OFFLINE FILES aka placeholders. I heard that yesterday in the SharePoint roadmap session and I am pretty excited about it:\n#OneDrive placeholders are back?! WOOOOT!!!!! This is awesome @jeffteper #MSIgnite pic.twitter.com/PDZ7agcK9n \u0026mdash; Maximilian Melcher (@maxmelcher) September 26, 2016 My questions after the session I asked two questions:\nWhen will the url length limit be increased? Answer: next year Why is selective sync slower than taking everything? Answer: open a support ticket, that should not be the case Summary Solid show! I really liked what I saw, OneDrive is really maturing. Reuben Krippner and Omar Shahine gave us great insights, thanks!\nThe answers to my questions were rock solid, I just added them here briefly so I dont forget them myself.\n",
    "tags": null,
    "categories": ["Ignite 2016","Office 365","OneDrive","OneDrive for Business"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/an-overview-of-the-microsoft-application-platform-for-developers/",
    "title": "An Overview of the Microsoft Application Platform for Developers",
    "date_published": "2016-09-27T02:17:44Z",
    "description": "Watch out, I am attending a developer session! Mainly because Scott Hanselman is the speaker and I totally love his style. Developers!\nThis session will give us a broad overview of all the new things for devs - so we start with the current options of Visual Studio:\n12.7 Mio downloads of Visual Studio\n2 Mio Visual Studio Code\n4 Mio users of Visual Studio Team Services\nDemo 1: Modernization Porting sounds boring, modernization is a cooler word for it.",
    "content": "Watch out, I am attending a developer session! Mainly because Scott Hanselman is the speaker and I totally love his style. Developers!\nThis session will give us a broad overview of all the new things for devs - so we start with the current options of Visual Studio:\n12.7 Mio downloads of Visual Studio\n2 Mio Visual Studio Code\n4 Mio users of Visual Studio Team Services\nDemo 1: Modernization Porting sounds boring, modernization is a cooler word for it.\nTransition from .NET Framework 2, 3, 4 to .NET Core - Visual Studio support all of them.\nFirst demo on a Mac, running the CLI to create projects, restore packages - awesome.\nDemo 2: Visual Studio 2015 and future improvements Run with multiple browser. Browser link now syncs scrolling and user inputs across browsers - that is cool.\nDemo 3: Containers Docker is confusing for most enterprises, but with the windows version it is much easier to run. Even integrated in Visual Studio into the \u0026ldquo;run with\u0026rdquo; dialog. The solution is then built and put into a docker image - even with debugging support.\nDemo 4: Azure Integration Staging slots - run copies of your website in parallel and switch them back and forth into production aka. hot swaps. Then he shows \u0026ldquo;testing in production\u0026rdquo; where you can load balance e.g. 25% of all the traffic will be directed to staging instead of production. You can even automate that with powershell, eg. send them to staging, check for errors and in that case send them back to production. What could go wrong?!\nBecause so many viewers accessed Scott\u0026rsquo;s public website, he did a live scale out with the push of a button. Awesome.\nDemo 5: Portable Code and native apps Scott shows another demo were 90% of his code is in a portable class library. The rest of the code is device specific and stored in separate projects for IOS, Androws, Windows Phone or UWP. Live debug run on an iPhone simulator running iOS 10.\nDemo 6: Xamarin Test Cloud Testing your app on multiple devices is effortless with Xamarin test cloud, you get memory consumption, error logs, videos of your tests - crazy stuff.\nDemo 7: SharePoint Online Scott show a document stored on SharePoint (!!!). Once the document is saved it will trigger an Azure Function app (server-less code) to notify clients that the document has changed. Automate the processes here is the main point.\nDemo 8: Azure Functions \u0026amp; Azure Cognitive Services Drop an image to Azure blog storage, it gets processed by the azure function, sent to Azure Cognitive Service and alter the image to detect emotions.\nDemo 9: Visual Studio Installer Goal is to create a new installing experience with reduced installation time.\nDemo 10: Desktop App Converter Brief introduction how to convert an existing application to a windows 10 store apps.\nSummary Scott presented so fast and friction-less, it is tough to capture 10% in this post. Developer\u0026rsquo;s life is so much more fun right now.\nThis session was super enlightening, go watch it once its online!\n",
    "tags": null,
    "categories": ["Apps","Azure","Conference","Ignite 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/microsoft-ignite-2016-innovation-keynote/",
    "title": "Microsoft Ignite 2016 – Innovation Keynote",
    "date_published": "2016-09-27T01:57:46Z",
    "description": "Satya Nadella on the stage again, this time talking about the current vision of Microsoft.\nDigital Transformation Satya starts to give an idea of AI in context of digital transformation. Create more personal computing, build the intelligent cloud, reinvent productivity \u0026amp; business processes!\nThe four core pillars for the \u0026ldquo;AI democratisation\u0026rdquo; for Sataya are: Agents, Applications, Services and Infrastructure.\nDemo: Intelligent Agent - Cortana Cortana will be more integrated, LinkedIn integration, reminders based on emails, health insights, integration into the action center of windows 10, add items to wunderlist, intelligent sticky notes.",
    "content": "Satya Nadella on the stage again, this time talking about the current vision of Microsoft.\nDigital Transformation Satya starts to give an idea of AI in context of digital transformation. Create more personal computing, build the intelligent cloud, reinvent productivity \u0026amp; business processes!\nThe four core pillars for the \u0026ldquo;AI democratisation\u0026rdquo; for Sataya are: Agents, Applications, Services and Infrastructure.\nDemo: Intelligent Agent - Cortana Cortana will be more integrated, LinkedIn integration, reminders based on emails, health insights, integration into the action center of windows 10, add items to wunderlist, intelligent sticky notes.\nSwiftkey Swiftkey saves humanity a years of lifetime entering keystrokes - now it uses neural networks to predict your next words across all devices.\nA keyboard is no longer attached to a device - its attached to YOU\nOffice 365 AI will come to Office 365 in a multitude of ways. Focused inbox - the system will learn from your emails to provide greater value for you. Skype Translator: 8 languages are now supported, neural networks are behind the translation to not only translate but understand the language. Delve Analytics will be renamed to \u0026ldquo;MyAnalytics\u0026rdquo; (?!) and will analyse your activities in your workplace, meeting times, email times etc. Same improvements come to Dynamics CRM - everything graph based. Support based on a bot is already available behind Microsoft support services, always with the option to escalate to a real human.\nServices - Cortana Applications Satya starts with the Bot Framework. Parsing and understanding natural language is provided as framework to be used everywhere. Small demo with fantasy football (i am lost here) were the bot tells how to change the team and gives arguments why player x is better than player y.\nCognative Services API: World record for speech recognition and image/object recognition. UBER uses the image recognition to detect the drivers - they literally have to take a selfie before the drive is being tracked - and to increase driver and passenger security. VOLVO uses cognitive services to detect distractions while using their cars eg. a cell phone.\nHoloLens Finally we see the HoloLens on stage - LOWE\u0026rsquo;S is the customer showcase here to improve customer experience. Here a couple customized a kitchen live on stage, colors of the blends, adding cupboards, adjusting sizes - shopping on a totally new level. A was too excited to take a good picture…\nInfrastructure - Azure Global, trusted, intelligent, from silicon to cloud. CPU and GPU farms with a multitude of frameworks to build AIs and scale.\nNext is a demonstration of the worlds first AI supercomputer - first demo was image recognition, with FPGAs it was 40x faster. Text translation was next, 8x faster. With hyper-scaling Microsoft could translate the entire Wikipedia in just a glimpse.\nThe speaker did not mention Skynet… 🙂\nSummary Very impressive keynote at Ignite 2016, some really interesting ideas that will change our lives in the not too distant future - cool stuff is possible and coming!\n",
    "tags": null,
    "categories": ["Ignite 2016","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/learn-how-sharepoint-is-reinventing-content-collaboration-vision-and-roadmap-updates/",
    "title": "Learn how #SharePoint is reinventing content collaboration: vision and roadmap updates",
    "date_published": "2016-09-27T01:36:44Z",
    "description": "The session by Jeff Teper will show us whats coming for SharePoint! Expectations are always highest. Here we go, Jeff enters the stage:\nSharePoint ecosystem is healthy - we saw that slide already at May, 4th event: And now a very good overview slide of SharePoint and whats it good for:\nSession Scope In this sessions 4 major areas will be covered:\nSimple and powerful file sharing Mobile and intelligent Intranet Open \u0026amp; Connected Platform Security, privacy and compliance Let\u0026rsquo;s start: OneDrive New sync options Access all files Mobile app improvements Better file preview Deeper Office integration OneDrive file activity The last point is Jeff\u0026rsquo;s favorite - who changed what file recently is really helpful!",
    "content": "The session by Jeff Teper will show us whats coming for SharePoint! Expectations are always highest. Here we go, Jeff enters the stage:\nSharePoint ecosystem is healthy - we saw that slide already at May, 4th event: And now a very good overview slide of SharePoint and whats it good for:\nSession Scope In this sessions 4 major areas will be covered:\nSimple and powerful file sharing Mobile and intelligent Intranet Open \u0026amp; Connected Platform Security, privacy and compliance Let\u0026rsquo;s start: OneDrive New sync options Access all files Mobile app improvements Better file preview Deeper Office integration OneDrive file activity The last point is Jeff\u0026rsquo;s favorite - who changed what file recently is really helpful!\nDemo: File preview RAW files, Streaming Videos, Adobe files incl. Photoshop files and Illustrator files - no more downloading required. Rich preview for email files (eml, msg) - in total 20 more files will be prerendered soon.\nDemo: Mobile Improvements The iOS OneDrive app has been shown, major improvements to file handling and navigation - looks neat!\nDemo: Office Integration There is a new integration option in the office backstage \u0026ldquo;open\u0026rdquo; menu. \u0026ldquo;Shared with me\u0026rdquo; shows all files that has been recently shared with you - awesome! That a great improvement for me, too. Additinally in the top right you can see the\nDemo: One more thing - Placeholders will be back!!!!!!!!!!!!! I almost dropped my notebook, Placeholders for OneDrive are coming back. They added a neat little icon to visualize that the file is not synced yet (the little cloud) and once you click on it you it downloads and opens. This will make lots of users VERY HAPPY and 72.000 votes will be returned on user voice. This makes me happy, too! SharePoint Dan Holme on stage to show what is coming for SharePoint.\nBetter Office Graph integration to feed the SharePoint landing page (the SharePoint tile).\nImprovements to Teamsites Teamsites get a big refresh. Lading page now contains a news section, activity and looks much cleaner now. Wow, that was really necessary for such an core component. The same layout will be available in the mobile apps. Cool stuff!\nModern SharePoint Pages render better on mobile phones, faster, beautiful\nThe new page experience is much more convenient compared to the old one. Adding webparts looks much easier, lots of content creators will love those improvements. Adding pictures is now simpler, too. Apparently i was so flashed about the OneDrive announcement that I forget to take a picture.\nFiles The new document library experience is out a while now, there are new improvements coming for this. Dropping a link to the library was one of the first examples.\nDrag and drop to change status based on a grouping:\nNew Document experience will also support 3rd party extensions - we briefly saw a DocuSign integration.\nLists Richer context information directly from the list view called \u0026ldquo;people card\u0026rdquo;. This shows more details about a person who modified the file. Jump to profiles.\nUser Profiles The new user profiles will be overhauled, too. You can see a mini schedule on the profile page, what groups the user is in and more. The update experience of your profile page is more streamlined - awesome!\nMicrosoft Flow Very brief showcase how to integrate Power Apps and Flow into SharePoint lists - super fast demo, more this week I think.\nThere was a joke with Jeff\u0026rsquo;s shoes - somehow I could not follow.\nPlanner, Yammer and integrations Integration in Outlook, integration into Yammer - last but not least a new teamsite will have a new group, too.\nTeamsites #2 Fast teamsite creation is coming to O365 - Dan created a new teamsite in less than 5 seconds. Neat!\nOpen and connected platform Easier start with open standards. SharePoint and lists will come to Office graph soon.\nSharePoint Framework SPFx Switch to client-side development, lightweb and super fast- with mobile phone support. Teamsite and library extensions are coming.\nSecurity New options to limit access, printing, downloading and synching of documents if the computer accessing it is not a domain joined computer. Conditional access even by network location (IP range). The moment they leave the network (e.g. work)\nDemo: Conditional access The demo was simple. The presenter just switch to a different network - bam! No more access to the SharePoint library. Good stuff, many of my clients want that.\nCustom teamsite creation tags / site classification When you create teamsites you can add tags to it and then add rules to it. In this case the confidentiality.\nUser Activities In the new reports you can see activity and aggregated infos per user. Audit Log Unified logging for both on-prem and online. Neat!\nCentralized sign-out Its now possible to log out users via the admin centers - on all devices.\nSummary Wow, what a fully loaded session - SharePoint\u0026rsquo;s future is bright! Really good stuff.\nI highly recommend you to watch the session once its available online to get more insights about the SharePoint roadmap that I can transport in this post.\n",
    "tags": null,
    "categories": ["Ignite 2016","ITPro","Office 365","Office Graph","SharePoint 2016","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/microsoft-ignite-2016-keynote/",
    "title": "Microsoft Ignite 2016 – Keynote",
    "date_published": "2016-09-26T18:21:27Z",
    "description": "Microsoft Ignite 2016 - Atlanta, Georgia - Philips Arena, 09:00 AM PDC\nWelcome to my almost live coverage of the Ignite 2016 in Atlanta, Georgia. Two years ago I attended the very last SharePoint Conference in Las Vegas and crafted 30 blog posts - and got good feedback afterwards. So well, this year I aim at 20 posts - lets see how it goes. Please excuse typos, I do fast releases!",
    "content": "Microsoft Ignite 2016 - Atlanta, Georgia - Philips Arena, 09:00 AM PDC\nWelcome to my almost live coverage of the Ignite 2016 in Atlanta, Georgia. Two years ago I attended the very last SharePoint Conference in Las Vegas and crafted 30 blog posts - and got good feedback afterwards. So well, this year I aim at 20 posts - lets see how it goes. Please excuse typos, I do fast releases!\nThe arena is packed - so is the atmosphere!\nI landed in Atlanta yesterday, started with a party at our Nintex friends - I am a little tired.\nMy Expectations I wanna see new and innovative solutions about productivity.\nI want to play with the HoloLens\nI wanna see further investments in Azure and everything cloud related.\nSharePoint, SharePoint, SharePoint, Search and Delve!\nConnecting with friends, peers, partners and people around my areas of interests.\nHaving fun!\nHere we go! Julia White on stage - last Ignite was 18 months ago and a lot has changed since then.\nJulia mentioned a lot of things that have changed like SQL Server on Linux, Microsoft\u0026rsquo;s investments in security, Open Source, Surface Book, Office on iPad - well, basically everything.\nI tried to post live, but the wifi was super slow (I expected that).\nScott Guthrie and Cloud Scott Guthrie is next on stage.\nScott show how digital transformation changes the workplace - next up he teases two showcases and the first one is BMW\u0026rsquo;s use of Azure do connect to it\u0026rsquo;s customers.\nNext up is Facebook for Office workloads, Rolls Royce with Cortana Intelligence for predictive maintenance. Adobe is using Azure, too - well Cloud Cloud Cloud!\nCustomer showcase: Adobe loves Azure Next up is Microsoft CEO Satya Nadella and Adobe CEO Shantanu Narayen.\nAdobe \u0026lt;3 Azure\nShantanu explains how they use Azure to connect to clients, transfer the workload to the cloud to drive innovation. He mentioned very high numbers of transactions that could not be realized without a scalable cloud solution. The wording they are using is \u0026ldquo;intelligent cloud\u0026rdquo;.\nIT Transformation Scott Guthrie is back with more showcases how to transform IT workloads. Motivation here is create time to innovate and create instead of maintaining servers. 34 data centers across the world, twice as much as AWS. Cloud is about trust, Microsoft Azure has more certifications than any other cloud provider with unique options in China and Germany.\nHybrid all the things, too.\nAzure Monitor Donovan Brown shows a new monitoring solution running on Azure that continuously provide metrics (CPU, RAM, Storage, etc.) of servers no matter where they run. That looks like a broader Application Insights - cool stuff.\nLog Search with performant queries. Use case that is shown \u0026ldquo;locate SQL servers that might have resource problems\u0026rdquo;. Integration of Microsoft Operation Management Server (OMS). Updates: A nice dashboard where you can see what windows or linux updates needs to be installed.\nSecurity dashboard is next - I like the direction of that, one place to monitor our workloads.\nCustomer showcase: Tyco Digital Transformation changed a lot for Tyco, 50% of their engineers are now software engineers.\nWork like a start-up\nOne of the things Tyco is working on is IoT - but it creates a lot of data. 50.000.000.000 events per year. They are using SQL Server 2016 on Azure to analyze the data efficiently in the cloud, with only a little refactoring.\nWindows Server 2016 / System Center 2016 Azure inspired, containers, virtualization density - the cloud had great impact on the newest windows server release. Both Windows Server 2016 and System Center 2016 are now generally available.\nThe announcement was a little brief.\nApp modernization + DevOps Visual Studio family grown to 3 members - classic Visual Studio, multi platform Visual Studio Code and Visual Studio Team Services. Latest acquisition was Xamarin which is fully integrated into Visual Studio, with it its possible to create native apps on all mobile platforms. Xamarin test cloud: Pinterest uses it for testing their mobile apps on 2000 real devices. Slack too.\nDonovan Brown is back on stage. Now he demos Team Services with\nidea, code, source code management, build, test, release and deploy - the whole story in one tool.\nAwesome stuff not only for Devs. Demo on a Mac with Visual Studio Code, Git - same workflow, just a different platform. Any platform, any language - friction free - is the goal here.\nPersonal Computing Windows 10: 150% faster releases than with windows 7. 400 Millions monthly active users.\nOffice 365: 70 Millions monthly active subscribers\nEMS: 1 Billion logins per month\nWindows 10 Ink Workspace Yusuf Mehdi on stage. With just one click on your pen he opened the new experience to quickly craft stick notes with cortana intelligence in the background. He demoed it with $MSFT and the ink turned blue and added context infos. Here the stock price of Microsoft.\nYusuf shows how to add math formulas in OneNote - and solve for X. Not only kids will love that feature.\nDelve Analytics Who reads your mails? How is your bosses response time. Manage your time because time is precious. How much time do you spend in meetings? Delve Analytics tracks that in the background, Yusuf calls its \u0026ldquo;Fitbit for your workplace\u0026rdquo;.\nSurface Hub The average meeting needs 11 minutes to start.\nStormboard application: Planning application with embedded documents and sketches runs perfectly on Surface Hub - right in a video call. Make meetings more productive.\nSecurity Video: Average detection for security breaches is 200 days.\n1 billion devices updated. 200 billion emails analyzed for spam and threads. Largest virus scanner in the world. The numbers are awesome.\nAnnouncement: Microsoft Defender Application Guard (MDAG)\nThis MDAG is a hardware based solution to run the Microsoft Edge browser in a sandbox. Demo shows minikatz to dump passwords on a windows 7 maschine with just one command line. With windows 10 the passwords are transparently protected.\nDemo: A website that disables all security settings on your computer - without a single notification to the user. Second run was with MDAG - no change on the local computer.\nShort demo about O365 Security \u0026amp; Compliance Center \u0026amp; Microsoft Advanced Thread Analytics.\nDigital Transformation #2 Scott Guthrie is back on stage, this time with Accenture CIO. They got more than 100.000 users on Windows 10, SharePoint and Skype on O365.\nWe cannot give the users yesterdays services!\nSummary Cloud Cloud Cloud, flexibility, security and productivity at Ignite 2016 - but nothing surprisingly big and fancy here. Let\u0026rsquo;s see what insights the following vision keynotes gives us. Stay tuned!\n",
    "tags": null,
    "categories": ["Azure","Conference","Ignite 2016","ITPro","Office 365"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/09/azure-website-debugging-network-connection-azurewebsites-net4020-lost-debugging-will-aborted/",
    "title": "Azure Website Debugging: The network connection to *.azurewebsites.net:4020 has been lost. Debugging will be aborted.",
    "date_published": "2016-09-08T08:30:53Z",
    "description": "Recently my colleagues and I created a lot of SharePoint provider-hosted addins - in our case that is just a MVC Website hosted on Azure that talks balk to SharePoint. And I have to say it is good fun because we could actually debug a production site/business application in case something unforeseeable happens (aka. bugs). And the integration in Visual Studio via the Cloud Explorer could not be simpler. Right click on the website, attach debugger and see the problem.",
    "content": "Recently my colleagues and I created a lot of SharePoint provider-hosted addins - in our case that is just a MVC Website hosted on Azure that talks balk to SharePoint. And I have to say it is good fun because we could actually debug a production site/business application in case something unforeseeable happens (aka. bugs). And the integration in Visual Studio via the Cloud Explorer could not be simpler. Right click on the website, attach debugger and see the problem.\nThat worked a long time perfectly for us - but something changed and Visual Studio 2015 dropped the connection once a breakpoint is hit (sometimes even earlier). Strangely debugging still worked with Visual Studio 2013.\nSymptoms Attaching with a Visual Studio 2015 Debugger either from Cloud Explorer, Server Explorer or directly via \u0026ldquo;attach to process\u0026rdquo; attaches the debugger briefly (if at all) and then results in two errors:\nThe web browser shows: 502 - Web server received an invalid response while acting as a gateway or proxy In Visual Studio 2015 an error box shows: The network connection to \u0026lt;hostname\u0026gt;.azurewebsite.net:4020 has been lost. Debugging will be aborted. Fix The fix is rather simple. In Visual Studio open Debug menu from the top and click on Options: Then click on Debugging \u0026gt; General and find the option \u0026ldquo;Enable UI Debugging Tools for XAML\u0026rdquo; and uncheck it. After that, debugging worked like a charm again.\nThank you! I did not find that one out myself - the awesome Microsoft Support (I am looking at you Akash Khandelwal!) spent hours troubleshooting my problem. He early noticed that there is a something with WPF in the logs but we initially ruled that one out. After a while his team suggested to disable this option - and it worked!\nDuring the debugging session I learned a lot about Azure Website troubleshooting - great stuff!\n",
    "tags": null,
    "categories": ["Apps","Azure","Development","SharePoint Addins"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/06/enterprise-productivity-search-june-2016/",
    "title": "Enterprise Productivity \u0026 Search – June 2016",
    "date_published": "2016-06-23T10:35:49Z",
    "description": "On June, 6th 2016 we have met at Alegri in Munich to have our very own Enterprise Productivity \u0026amp; Search meetup. This time David Hollembaek talked about Usage Analytics and how to easily gain insights by using Azure Application Insights.\nWe had ~10 attendees, great questions and lots of fun.\nUsage Analytics Dave told us how easily it is to setup App Insights and add it to a page to track events.",
    "content": "On June, 6th 2016 we have met at Alegri in Munich to have our very own Enterprise Productivity \u0026amp; Search meetup. This time David Hollembaek talked about Usage Analytics and how to easily gain insights by using Azure Application Insights.\nWe had ~10 attendees, great questions and lots of fun.\nUsage Analytics Dave told us how easily it is to setup App Insights and add it to a page to track events. We had a short discussion \u0026ldquo;what to track\u0026rdquo; and whether there is a too much (my opinion: grab as much as you can and filter later). He has two blog posts about this matter (\u0026quot;Make better decisions with Usage Analytics in O365 and SharePoint\u0026quot;, \u0026ldquo;Make Better Decisions with Usage Analytics Part 2\u0026rdquo;) - but best of all, here shared his slides here. Identify use cases, start measuring, analyze the results, optimize - and repeat! You need some reasons to prioritize features?\nPictures! Are you in Munich? Join us! München Enterprise Productivity \u0026 Search \u0026lt;p style=\u0026quot;margin:0 0 10px;font-size:12px;line-height:16px;\u0026quot;\u0026gt; München, DE \u0026lt;br /\u0026gt; \u0026lt;span style=\u0026quot;font-size:14px;font-weight:bold;\u0026quot;\u0026gt;40\u0026lt;/span\u0026gt; \u0026lt;em\u0026gt;Enterprise Productivity Enhancer\u0026lt;/em\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p style=\u0026quot;line-height:16px\u0026quot;\u0026gt; This informal gathering is about networking, knowledge sharing, troubleshooting, and getting to know all about enterprise productivity solutions - emphasis on Search. We previ\u0026amp;#8230; \u0026lt;/p\u0026gt; \u0026lt;p style=\u0026quot;font-size:16px;margin:10px 0 5px;line-height:18px;\u0026quot;\u0026gt; Next Meetup \u0026lt;/p\u0026gt; \u0026lt;p style=\u0026quot;margin-bottom:2px;line-height:16px;font-size:14px;\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;http://www.meetup.com/Munchen-Enterprise-Productivity-and-Search/events/232102457/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Enterprise Productivity \u0026amp; Search\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p style=\u0026quot;line-height:18px;\u0026quot;\u0026gt; Monday, Oct 10, 2016, 7:00 PM\u0026lt;br /\u0026gt;\u0026lt;span style=\u0026quot;color:#4F8A10;\u0026quot;\u0026gt;3 Attending\u0026lt;/span\u0026gt; \u0026lt;/p\u0026gt;\u0026lt;/p\u0026gt; Check out this Meetup Group \u0026rarr; So if you are in Munich I would be happy to see you at our next meetup!\n",
    "tags": null,
    "categories": ["Enterprise Productivity \u0026 Search"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/06/user-group-munich-hybrid-sp2016/",
    "title": "User Group Munich: SharePoint 2016 Hybrid with Samuel Zuercher",
    "date_published": "2016-06-20T11:30:52Z",
    "description": "Some quick notes (more a braindump) about the last SharePoint User Group in Munich (6/14/2016) with Samuel Zuercher. Samuel was apparently a little sick, but still presented remotely! That was one of the funniest User Group in a while, I had good fun and Samuel delivered some solid info about SharePoint 2016 hybrid story. Hybrid Overview by Samuel Zuercher Start with OneDrive Shared with me does not work with mixed content.",
    "content": " Some quick notes (more a braindump) about the last SharePoint User Group in Munich (6/14/2016) with Samuel Zuercher. Samuel was apparently a little sick, but still presented remotely! That was one of the funniest User Group in a while, I had good fun and Samuel delivered some solid info about SharePoint 2016 hybrid story. Hybrid Overview by Samuel Zuercher Start with OneDrive Shared with me does not work with mixed content. Hybrid sites - no provisioning support No hybrid for Managed Metadata - woot? App Launcher does not show full experience. Results are separated by environment - hopefully fixed soon, this will be a problem for lots of users. Confuses me, too! No migration of sites - a scenario picker with support options would be great here. SharePoint is like iceberg, management and end users only see the tip of it - Samuel Zuercher\nScenario Picker OneDrive Hybrid Sites More scenarios will follow Social story Out of the box newsfeed not recommended. 100% same functionality as for SP2013, maybe even the exact same code. Site Provisioning Provisioning: App Model und Remote Provisioning (officepnp) Teamsite template is the only good template - Samuel Zuercher Provision site templates with site deletion policy to implement governance. Hybrid Search Configuration is complex, script-based solution is available makes your life easier! Summary Solid session, free beer (thanks AvePoint!) and many like-minded! Good stuff!\n",
    "tags": null,
    "categories": ["Hybrid","SharePoint 2016","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/03/tfs-upgrade-update-1-failed-vs402388-tf401147/",
    "title": "TFS 2015 Upgrade to Update 1 failed (VS402388 / TF401147)",
    "date_published": "2016-03-08T14:25:50Z",
    "description": "Recently I tried to upgrade a TFS 2015 installation for a client to Update 1. Because I did not find a solution in the internet (even with the error code TF401147), it\u0026rsquo;s time to blog about a solution.\nInstallation of Update 1 - VS402388 / TF401147 The installation of update 1 worked perfectly: In the first place I installed it because we wanted to move TFS to a more performant server and I installed the new server with TFS 2015 Update 1.",
    "content": "Recently I tried to upgrade a TFS 2015 installation for a client to Update 1. Because I did not find a solution in the internet (even with the error code TF401147), it\u0026rsquo;s time to blog about a solution.\nInstallation of Update 1 - VS402388 / TF401147 The installation of update 1 worked perfectly: In the first place I installed it because we wanted to move TFS to a more performant server and I installed the new server with TFS 2015 Update 1. Once I tried to connect the new server with the configuration database it told me that the database is old and I need to update it. Well, let\u0026rsquo;s just update the old server I said to myself (lessons learned here, trust me!) - installed, rebooted server during lunch time and run the upgrade wizard. It stopped because it could not create the IIS site hosting TFS:\n[Info @14:16:31.724] Microsoft.Web.Administration is installed: True [Info @14:16:31.725] finding if 8080 is available [Info @14:16:31.725] Iis7Manager.FindFirstFreePortBetween is called. Begin: 8080, End: 8080 [Info @14:16:31.725] IisManagerImplementation.IsInstalled is called [Info @14:16:31.725] Microsoft.Web.Administration is installed: True [Info @14:16:31.725] scanning 1 ports [Info @14:16:31.745] availPort: 8080 [Warning@14:16:31.745] Storename MY of binding cannot be parsed. Use default store. [Warning@14:16:31.747] VS402388: The previously configured binding on port 8080 cannot be re-created because the certificate with thumbprint (D6E81B40AE72B3BFE75CE6E16B6F2CE959C1994E) could not be found in the certificate store (MY). If you continue, you will need to manually re-create the binding. [Info @14:16:31.747] available: False [Info @14:16:31.747] Node returned: Error [Error @14:16:31.747] TF401147: The previously configured ports for the Application Tier Web Service site are currently in use. See the log for additional details. [Info @14:16:31.747] Completed SiteAvailability: Error I checked IIS and the site was not there anymore. IISReset and deleting all app pools - same result. Removing the IIS role from the server - same result. Then I focused on the server certificate, it was in the cert store but expired on 12.01.2016 - mhh… changed the system clock back to 11.01.2016 - same result. So i was stuck.\nAlways have a ‘Plan B\u0026rsquo; - and backups! Luckily, as mentioned, the final goal was to move TFS to a new server. So I did the upgrade of the configuration database on the new server and installed the application tier there - changed the URL and at least the web interface was back and people could continue working. Did I mention that I was super happy that I created backups before?\nGetting help! Once an error occurs within the TFS installation or upgrade you are requested to send the zipped logs to tfcare@microsoft.com - and I did so.\nI was really surprised to get a reply within 20 minutes - not an automated one as I expected, Vladimir Khvostov replied instantly. After explaining my problems and verifying that the IIS is really empty, Vladimir told me to delete C:\\ProgramData\\Microsoft\\Team Foundation\\Configuration\\SavedSettings\\ApplicationTier and try again: And that worked, thanks again Vladimir!\nIf that happens again with Update 2 (I am really awaiting that one!), I won\u0026rsquo;t even hesitate to send a line to those awesome guys!\n",
    "tags": null,
    "categories": ["TFS"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/03/bootstrap-sharepoint-online-avoid-css-ricochet/",
    "title": "Bootstrap and SharePoint Online – how to avoid css ricochet",
    "date_published": "2016-03-04T00:31:54Z",
    "description": "In my current project I had the challenge to improve the user experience for some pages without messing too much with the MasterPage (because you shouldn\u0026rsquo;t, right?). The client explicitly requested components like accordions, responsive tables and more control of the page alignments. So what would be easier to use a mobile first, responsive made by the @twitter guys? Apparently SharePoint Online does not like bootstrap too much - one you add the css files, you will see notable changes.",
    "content": "In my current project I had the challenge to improve the user experience for some pages without messing too much with the MasterPage (because you shouldn\u0026rsquo;t, right?). The client explicitly requested components like accordions, responsive tables and more control of the page alignments. So what would be easier to use a mobile first, responsive made by the @twitter guys? Apparently SharePoint Online does not like bootstrap too much - one you add the css files, you will see notable changes.\nIn this post I show you how to fix that.\nBootstrap and SharePoint Online Bootstrap (currently 3.3.6 and shortly 4.0) brings a lot of nice components that can be embedded within a standard SharePoint Page. Its not end-user friendly, an editor needs a least basic html skills to use it - but if you can use it, its fairly easy to improve the user experience. And because the twitter guys are really smart (and their css skills are way better than mine) it even works decently on mobile devices.\nYou can simply (that was my first attempt) add the css tag to a page:\n\u0026lt;!-- Latest compiled and minified CSS --\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; href=\u0026#34;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\u0026#34; integrity=\u0026#34;sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u\u0026#34; crossorigin=\u0026#34;anonymous\u0026#34;\u0026gt; On the basic team site landing page I found at least 5 changes:\nthe heading has an increased font size and the position has changed the title of a webpart has an increased font size the paginator icon is displaced the search icon of a doclib is displaced. the full screen icon is gone Restrain/scope At first I thought its rather easy, just change a couple of lines within bootstrap and you should be good to go. Right, that took actually longer than the good solution - I stopped and googled. I found a solution on stackoverflow from 2012 - and guess what - it still works. In order to to that you need to do the following:\nInstall nodejs Download the twitter bootstrap source code and unzip it Open the nodejs command prompt Install grunt-cli with the following command npm install grunt-cli -g Switch to the twitter bootstrap directory Open the bootstrap.less file in the less folder and wrap every @import with: .bootstrap { } 6. Now switch back to the node command prompt. Change to the bootstrap directory. 7. Run npm install to install missing packages 8. Run grunt dist to compile your new css 9. grunt dist 10. Et voila - then you have your perfectly scoped css in the folder dist/css: Now you only have to upload this file to SharePoint Online (e.g. a style library) and either reference it within a Script Editor Webpart (your add it to your MasterPage if you are brave enough!). If you want to use it, you have to add the class \u0026ldquo;bootstrap\u0026rdquo; before: And the you can use twitter bootstrap without jeopardizing your SharePoint Online look and feel: The SASS way If you want to do the same thing with the current version of bootstrap (and bootstrap 4 once its out), then you can simple download the SASS version: Then open the _bootstrap.scss file with your favorite editor and wrap the imports with a class: Compile the sass and check the css: The sass approach took me like 5 minutes with VS Code - awesome.\nIf you have read so far If you want my pre-compiled version, please take it from here (version 3.3.6, use on your own risk!). And then leave a comment 🙂\n",
    "tags": null,
    "categories": ["Customization","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/02/search-stammtisch-in-munich/",
    "title": "Enterprise Productivity \u0026 Search in Munich",
    "date_published": "2016-02-03T14:45:54Z",
    "description": "Yesterday we met at our monthly \u0026ldquo;Search Stammtisch / Meetup\u0026rdquo; in Munich in one of the most charming locations. Like every month, the scope of discussion was broad and this led also to a short discussion of Brand. As a result we are rebranding the meeting and giving it a proper and more precise name: Enterprise Productivity \u0026amp; Search\nWhy the name? Because it sounds cool - and because we do not only talk about (SharePoint) search, but we also touch so many topics that boost and affect productivity within an enterprise.",
    "content": "Yesterday we met at our monthly \u0026ldquo;Search Stammtisch / Meetup\u0026rdquo; in Munich in one of the most charming locations. Like every month, the scope of discussion was broad and this led also to a short discussion of Brand. As a result we are rebranding the meeting and giving it a proper and more precise name: Enterprise Productivity \u0026amp; Search\nWhy the name? Because it sounds cool - and because we do not only talk about (SharePoint) search, but we also touch so many topics that boost and affect productivity within an enterprise. Much, of course, includes search. To make the diversity clear I want to briefly summarize topics that we talked about yesterday and some topics from previous meetings. I am sure this is far from complete!:\nSocial Enterprise and Yammer, challenges, benefits and drawbacks. How to have an impact and boost productivity? Where to start? Common scenarios for enterprise search. Special scenarios, hybrid options. Custom \u0026amp; 3rd party connectors. What are good arguments against \u0026ldquo;we always do it like that\u0026rdquo; aka. \u0026ldquo;my grandmother\u0026rsquo;s mother did it that way…\u0026rdquo; Hybrid options and SharePoint 2016 Azure? How to increase productivity with it. Chances of the cloud, cloud first and all that. Azure Search, Elastic, Lucene IASA and IT Architecture Driving adoption and how to measure it. How to properly measure and do analytics? We had really good drinks - my favorite is \u0026ldquo;Painkiller\u0026rdquo;. Discussing in a pleasant environment is really helping. Go try it! 🙂 Major events \u0026amp; conferences this year (e.g. Microsoft Ignite in Atlanta) IaaS, Saas, Paas and all the new options available in a \u0026ldquo;cloud first, mobile first\u0026rdquo; world. The list could go on and on because we are a really diverse group of IT professionals, IT vendors, partners and customers - and the mix makes the fun!\nJoin us! So if you are lucky enough to live close by Munich or travel to Munich - we meet every first Monday and organize the meetings via meetup. Go join the group!\n",
    "tags": null,
    "categories": ["Enterprise Productivity \u0026 Search"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/02/for-security-reasons-dtd-is-prohibited-in-this-xml-document/",
    "title": "Quick fix: For security reasons DTD is prohibited in this XML document",
    "date_published": "2016-02-02T08:30:11Z",
    "description": "Another day, another quick fix - I hope it helps!\nSituation Working from home is very productive they said - not in my case, the wonderful script to reindex SharePoint Online UserProfiles from Mikael Svenson worked at work - but throws errors at home.\nThe error \u0026ldquo;For security reasons DTD is prohibited in this XML document\u0026rdquo; does not help much…\nQuick fix Google suggested me to change my DNS entries to 8.",
    "content": "Another day, another quick fix - I hope it helps!\nSituation Working from home is very productive they said - not in my case, the wonderful script to reindex SharePoint Online UserProfiles from Mikael Svenson worked at work - but throws errors at home.\nThe error \u0026ldquo;For security reasons DTD is prohibited in this XML document\u0026rdquo; does not help much…\nQuick fix Google suggested me to change my DNS entries to 8.8.8.8 or 8.8.4.4 - in my case that had no impact at all. Still, my assumption was (Occam\u0026rsquo;s razor, actually), that it has something to do with DNS - to many blog posts I read said something with DNS.\nEasiest way to verify? Fiddler, right!\nSo in my case it was a combination of my ISP and IPv6 - I changed my DNS on my PC and disabled IPv6 - and everything is back to green!\nReferences That post pushed me in the right direction: Office 365 – DTD is prohibited in this document issue - thanks a bunch!\n",
    "tags": null,
    "categories": ["Office 365","Quick Fix","SharePoint Online"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2016/01/the-king-is-dead-long-live-the-king-2015-recap/",
    "title": "2015 Recap: The king is dead – long live the king!",
    "date_published": "2016-01-02T08:32:19Z",
    "description": "3 times and you have a pattern, right? This is not the first time I write a recap for the past year, (2014, 2013) - and it is always good fun to reflect the last one and plan the next one.\nThe Past aka 2015 2015 was a super busy year for me - both work, community and private life was packed and very intense.\nEvents I attended so many events this year, without my outlook calendar a reflection would not be possible anymore.",
    "content": "3 times and you have a pattern, right? This is not the first time I write a recap for the past year, (2014, 2013) - and it is always good fun to reflect the last one and plan the next one.\nThe Past aka 2015 2015 was a super busy year for me - both work, community and private life was packed and very intense.\nEvents I attended so many events this year, without my outlook calendar a reflection would not be possible anymore. Lets start with my favorites:\nSharePoint Saturday Belgium / Antwerp That was my first SharePoint Saturday ever - and it was epic. The spirit of the Belgium SharePoint Community is awesome, speaking there was really rewarding for me! Maybe I cant attend in 2016, but if I have the chance I probably will.\nShareCamp 2015 ShareCamp is totally unique, I totally love the open style of the conference - everybody can speak there, beginner, experts, customers, everybody. I totally like the mix, especially when there are topics that are outside of the \u0026ldquo;SharePoint box\u0026rdquo;, I learned a lot there and for me that is perfect infotainment.\nSearch Stammtisch Munich We are only few, but dynamite comes in small packages 🙂 Every first Monday we meet in my favorite cocktail bar. It is the best place to talk about SharePoint Search and everything around it, from 3rd party to hybrid, to Azure Search - we covered everything. I hope to see more people this year, but well, Search is a niche and won\u0026rsquo;t attract hundreds.\nSharePoint User Group Munich I think I attended very SharePoint User Group Meeting in Munich (that should be 5-6) and organized one. Always good fun!\nConferences I had the chance to speak at 2 commercial conferences about SharePoint Search this year: SharePoint Days and ShareConf - for 2016 I will try to speak more, maybe I try a different conference, too. Let\u0026rsquo;s see how it goes.\nMy blog From a content producing side, 2015 wasn\u0026rsquo;t my best. I only crafted 16 posts, but well some of them took really a lot of time. Cloud Hybrid was one of them - and as a premiere I blogged about my new hobby: Paragliding. As one of my new year resolution is \u0026ldquo;fly more!\u0026rdquo; the chances are high that I will blog about it again.\nFacts and figures I like figures and statistics and all that - 89.000 page views is not that bad for my tiny blog, isn\u0026rsquo;t it? I have nothing to compare too, but I am quite happy with it. +12% from last year!\nMy most visited blog posts are apparently from 2014 - luckily two are about search and that makes me happy:\nInstalling SharePoint 2013 SP1 with SQL Server 2014 on Windows Server 2012 R2 – Picture Love Story (~14.000 views) #SharePoint 2013 – Create a Search Service Application and Search Topology with Powershell (~10.200 views) \u0026lt;/p\u0026gt; Install Office Web Apps 2013 for SharePoint 2013 – with PDF Preview (9.700 views) \u0026lt;/p\u0026gt; Contributions On the contributions part, I tried to commit some time to my favorite tool - SharePoint Search Query Tool - and it is totally worth it. I use that tool so often, so why not improve it to make it even better?\nAdditionally I started my own tool - Azure Search Tool - I have to admit that I haven\u0026rsquo;t put any time into it recently, but it\u0026rsquo;s still fully functionally. I will block some time soon to give some more love because its a cool and useful util.\nThe Future aka 2016 2015 was a shift year - I saw a lot of clients migrating to SharePoint Online and I think even more will do in 2016. With that move I learned a lot about migration to the cloud, SharePoint Apps and Azure - and I think that will be my business focus for 2016. Maybe we launch a SharePoint App as a product - that would be fun!\nLots of work a head, many challenges to be solved - there is a good year ahead of us! And we will see SharePoint 2016 RTM very soon. I am not as excited as I was for SharePoint 2013 - but the platform matures with every release and I hope to see many many Search challenges and projects. Even more as with 2013 because SharePoint Search is business critical, right?\nMain goals for next year: SharePoint Search, Apps, Azure, Community, SharePoint Search, Hybrid, Azure Search, Paragliding. I am a simple man 🙂\nWith that said, I wish you all the best for 2016, health, prosperity, lots of excitement and fun!\n",
    "tags": null,
    "categories": ["Apps","Azure","Azure Search","AzureSearchTool","Community","Conference","Development","Hybrid","Office 365","Search","SharePoint 2013","SharePoint 2016","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/11/cloud-hybrid-search-service-first-experiences/",
    "title": "Cloud Hybrid Search Service – first experiences!",
    "date_published": "2015-11-25T12:26:29Z",
    "description": "Currently I am preparing a session for the next SharePoint Days \u0026ldquo;Hybrid Worlds\u0026rdquo; here in Munich. My first presentation topic is \u0026ldquo;Hybrid Search - everything you need to know!\u0026rdquo; with focus on the new Cloud Hybrid Search Service Application and here are some of the ideas I will present.\nHybrid Options Currently I am aware of 6 feasible hybrid options:\nOne-way Inbound Hybrid You combine SharePoint Online with SharePoint on-premises - when a user queries in the SharePoint Online Search Center, SPO connects to SharePoint on-premises and executes the same or a similar query there to get results.",
    "content": "Currently I am preparing a session for the next SharePoint Days \u0026ldquo;Hybrid Worlds\u0026rdquo; here in Munich. My first presentation topic is \u0026ldquo;Hybrid Search - everything you need to know!\u0026rdquo; with focus on the new Cloud Hybrid Search Service Application and here are some of the ideas I will present.\nHybrid Options Currently I am aware of 6 feasible hybrid options:\nOne-way Inbound Hybrid You combine SharePoint Online with SharePoint on-premises - when a user queries in the SharePoint Online Search Center, SPO connects to SharePoint on-premises and executes the same or a similar query there to get results. Both results can then be shown in the SharePoint Search Center.\nChallenge The setup in this case is the most challenging here, at least from the requirements side. To establish a trust, you need to have valid public certificate and an internet connected SharePoint farm - most of my clients could not do that because of that. In order to do security trimming the user needs a cloud and on-premises identity - in other words you need to sync your Active Directory to Azure AD (e.g. with dirsync) to get results back.\nUser Experience The user experience is a little cumbersome in my eyes, because you don\u0026rsquo;t have a single, combined result set. Sorting and refining both works, but having two different rankings - or in other words: the two search systems shows the user the two best results - but there should be only one right?\nOne-way Outbound Hybrid That is the inverse setup of the inbound hybrid. Here the search center is on-premises and the search query will be additionally sent to SharePoint Online.\nChallenge The setup is almost the same as with the inbound hybrid - but you don\u0026rsquo;t need a reverse connection from SharePoint Online back to SharePoint On-Premises because each request is coming from SharePoint On-Premises.\nUser Experience As already mentioned, this is the inverse setup, so everything from inbound hybrid applies here too.\nTwo-Way (inbound+outbound) Hybrid You cant decide where to put your Search Center? Well then you should configure inbound and outbound hybrid search - so both Search Centers can show the results from both on-premises and SharePoint online.\nChallenge The challenge here is the setup efforts - but there are pretty good PowerShell scripts out there, please see the good reads section down below.\nUser Experience The experience is the same as for inbound or outbound depending in what Search Center you are in.\nCloud Hybrid Search Service Application Starting September 7th there is a new preview option available for hybrid search - the Cloud Hybrid Search Service Application - and that is my option a really big driver for hybrid scenarios! Once you configured the setup, basically you establish trust and configure a PushTenantManager you can delete your on-premises search index. Once you crawl, everything will be processed and sent to the cloud index and SharePoint Online takes care of the rest.\nIn the following screenshot you can see my on-premises Cloud Search Service Application up and running - from a UI perspective there is no directly visible indication that this is a cloud hybrid search service - except the name that I provided of course.\nWhat I really like here is the option to connect on-premises Content with SharePoint Online - you can even index SharePoint 2007 or SharePoint 2010 and bring it to your users. Fileshares - yes, that works too. Or imagine you have multiple farms in multiple countries - maybe even with weak network connections between them. Ever tried to remotely crawl a farm from Europe to Asia? Not the best experience, I can tell! But with the new cloud hybrid search service you can combine the index in the cloud - and get rid of some on-premises servers (less SharePoint Server licenses, less patching \u0026amp; maintenance, less hardware). Of course you need SharePoint Online licenses for your users tho - my went for E1 to get going.\nChallenge To set everything up, you need SharePoint 2013 with at least August 2015 Cumulative Update or SharePoint 2016. Then its basically the same step as configuring outbound hybrid, you setup the trust between on-premises SharePoint and SharePoint Online - and connect the PushTenantManager. Sounds complicated, but there is a Configure Hybrid Cloud Search Service Application that covers all that - the documentation is really good, best I have seen so far for a Preview.\nCurrently it\u0026rsquo;s not recommended to configure it on a production environment - on my DEV box it worked on the first try.\nAs of now there are some limitations for the new cloud hybrid search service, the following is not supported:\nEntity Extraction does not work No Content Enrichment / External Web Callout Index more than 2 million items - you might get throttled or blocked. That will change once the cloud search service is out of preview. Index at a high right - you might get throttled. Custom Security Trimming Remove search results by url If you don\u0026rsquo;t use those features yet and not legally bound to stick on-premises it might be an option for you.\nUser Experience The user experience is by far the best for this setup. The key point for me is that the user most of the time do not care if this content is from on-premises or SharePoint Online (or hidden in whatever information silo) - most of the times they even do not know it. Most importantly they get the most relevant result from all the available systems presented in the nice and customizable Search Center:\nNo UI clutter with a single result block - perfect for many many users. I like it, too.\nIf you want to give the user the option to show only on-premises content you could easily add a new search vertical and bind a result source to it. The query for that source is IsExternalContent:1 to show SharePoint Online external results.\nAnother good thing here is that the search results appear very fast once they are index on-premises. For me it was instant, I was really surprised here.\nDelve and the Office Graph Currently the results are not visualized in Delve as content cards - but that will hopefully change in the near future. For me that really increases the value of Delve because currently our own intranet is on-premises and hidden from Delve. The more data the search engine gets, the better Delve gets, right?\nCloud Hybrid Search Service Application + One-way outbound Hybrid At first I thought about labeling this option as \u0026ldquo;the perfect migration hybrid\u0026rdquo; - but perfect really depends on your requirements, right?\nSo as a benefit of establishing the trust between SharePoint Online and SharePoint on-premises during the setup of the cloud hybrid search service application you additionally set for outbound hybrid search. In other words: You can change the result source to SharePoint Online results and you will additionally get the cloud results on-premise, too. You have OneDrive for Business content in the cloud? You want the results searchable on premises? With that you can migrate and test the new cloud index - does it meet your requirements? - before shutting down your on-premises infrastructure without affecting the users. That is a nice quick win in my eyes here. I think we will try that very soon with our own intranet, once its production-ready.\nThe On-Premises Hybrid Last but not least and for the sake of completeness - there are 3rd party connectors available to crawl SharePoint Online and make the results available on-premises.\nBenefits of all this The hybrid options give you a great opportunity to solve search challenges - from information silos, license costs to network latency. To get away from all technical stuff - the important point is that its easy for the end-user to find the relevant information, no matter where it\u0026rsquo;s stored. It must be simple and clutter-less, provide you with the latest and best results. Hybrid could be a great step forward.\nRead more You read so far and wand more? The following links helped me get started!\nWhy Hybrid Crawl in SharePoint is a cold hot potato (Mikael Svenson´s view regarding hybrid crawling) The Five C’s of Enterprise Search (Agnes Molnar about Enterprise Search challenges, some points can be solved with a hybrid setup) Configure the hybrid infrastructure (Technet starting point for inbound and outbound) The all new Cloud Search service application coming to SharePoint 2013 and SharePoint 2016 (Ignite Introduction with video about the hybrid cloud search service application) Office 365: SharePoint Hybrid Configuration Wizard - SharePoint Escalation Services Team Blog (You want a wizard to configure hybrid? Good stuff!) Cloud Hybrid Search Service Application - SharePoint Escalation Services Team Blog (The most complete introduction I found so far, PowerShell scripts and all nicely documented - really good!) ",
    "tags": null,
    "categories": ["Hybrid","Office 365","Search","SharePoint 2007","SharePoint 2010","SharePoint 2013","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/11/custom-people-properties-are-not-searchable/",
    "title": "Custom People Properties are not searchable",
    "date_published": "2015-11-21T12:50:57Z",
    "description": "This will be just a short one - maybe it saves somebody some time and grey hairs.\nSituation I created a new result source that boosts some properties of people profiles in search results. During staging I forgot to check the very important radio button that the result source is of type \u0026ldquo;People\u0026rdquo;.\n1\nAt first I did not notice that I forgot to check it - Search worked perfectly and returned people hits.",
    "content": "This will be just a short one - maybe it saves somebody some time and grey hairs.\nSituation I created a new result source that boosts some properties of people profiles in search results. During staging I forgot to check the very important radio button that the result source is of type \u0026ldquo;People\u0026rdquo;.\n1\nAt first I did not notice that I forgot to check it - Search worked perfectly and returned people hits. But when you search for specific people profiles like office location or custom properties like e.g. costcenter - you get zero results or at least not those you would expect.\nMoral of the story: read the tiny description texts 🙂\n",
    "tags": null,
    "categories": ["Search","SharePoint 2007","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/10/off-topic-paragliding-performance-training-in-oludeniz-turkey-mount-babadag/",
    "title": "Off Topic: Paragliding – Performance Training in Ölüdeniz, Turkey (Mount Babadag)",
    "date_published": "2015-10-19T07:38:33Z",
    "description": "This post will be totally SharePoint unrelated but it was so amazing that I will briefly tell you about me last week in Ölüdeniz, Turkey - with lots of pictures! So please read on if you are not afraid of great heights.\nParagliding 1.5 years ago I started to learn how to use a Paraglider - and I enjoyed every minute in the air since then! It is an awesome, thrilling but still very relaxing sport - and not as dangerous as you might think. But it requires a lot of practicing and lots of technical gimmicks - an ideal sport for me. In order to improve my technique (I am still a beginner) I booked a paragliding tour with my flight school - a so called performance training - with my buddy Sebastian and traveled to Turkey (2.5 hours flight from Munich) - and we had a blast from 10/10/15 to 10/17/15.\n",
    "content": "This post will be totally SharePoint unrelated but it was so amazing that I will briefly tell you about me last week in Ölüdeniz, Turkey - with lots of pictures! So please read on if you are not afraid of great heights.\nParagliding 1.5 years ago I started to learn how to use a Paraglider - and I enjoyed every minute in the air since then! It is an awesome, thrilling but still very relaxing sport - and not as dangerous as you might think. But it requires a lot of practicing and lots of technical gimmicks - an ideal sport for me. In order to improve my technique (I am still a beginner) I booked a paragliding tour with my flight school - a so called performance training - with my buddy Sebastian and traveled to Turkey (2.5 hours flight from Munich) - and we had a blast from 10/10/15 to 10/17/15.\nBabadag, 1700 meters above sea level - close to heaven! I must say, I am totally impressed of the city Ölüdeniz - it almosted seems like the whole city is built for paragliders, but i am most likely not objective! Every day you can see paragliders flying closely above the city - and we landed next to the beach on the pavement. The \u0026ldquo;normal\u0026rdquo; tourists are warned with signs like this one:\nI could not imagine that in Germany - here you need a certified launch and landing site to prevent accidents. In Ölüdeniz it more looked like an airport for paragliders:\nA typical launch looks like this - here is a tandem (2 persons) start:\n/wp-content/uploads/WP_20151011_10_02_07_Pro.mp4 Performance Training So what do paragliders learn in a performance training? From start to landing I got advise from my flight school - and we practiced extreme maneuvers to better handle a glider in extreme situations like a collapse - it is totally amazing to me that you can still fly with 50 percent of your glider and it was fun to destroy the glider mid-flight (and above water) to simulate this behavior. Or a so called B-Stall - where you pull down some lines to decrease the glider surface - and loose height. In my case I went down with notable 8m/s. Good fun! The most exciting and thrilling exercise tho was the spiral - during this you pull one break until the glider spirals down with extreme speed and g-force - that pressure and sound was totally new for me and at first scared the sh** out of me to be honest 🙂 Peter did it amazingly fast and recorded it with two cams - one attached below the glider and one on his helmet:\n/wp-content/uploads/Arvaw-U1_7XeaxKRE-Hbot0uSGNlOrg4_fR_dn233qEH-Copy.mp4 /wp-content/uploads/Aoa7FKlscWVebgUoGFf7Vh_VUZ3rz-gg83n8oUYJ8ip9-Copy.mp4 The sound still gives me heebie-jeebies 🙂\nRelaxing above the sea Pictures tell more than thousand words - here we go:\nClosing Okay thats it - I learned a lot, had lots of fun, met new paragliding friends and had 9 happy landings that sums up to more than 15.000 height meters - and I am very thankful to my always patient flight trainers Wolf and Markus from Bayrische Drachen + Gleitschirmschule.\nMy friend Sebastian created a nice video that sums up all the experience in just 3 minutes - awesome!\n/wp-content/uploads/Babadag.mp4 You have questions? Drop a comment and I am happy to help!\n",
    "tags": null,
    "categories": ["Paragliding"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/09/sharepoint-csom-and-netscaler/",
    "title": "SharePoint CSOM and NetScaler",
    "date_published": "2015-09-24T07:30:08Z",
    "description": "I am currently preparing a test dataset for a SharePoint WebPart to see how it scales on a customer SharePoint 2010 environment. The problem I faced here was that the environment is protected by Citrix Netscaler and every CSOM call was ended with a lovely exception.\nProblem 1: SSL The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.\nThe client uses https/SSL to secure the channel (good!",
    "content": "I am currently preparing a test dataset for a SharePoint WebPart to see how it scales on a customer SharePoint 2010 environment. The problem I faced here was that the environment is protected by Citrix Netscaler and every CSOM call was ended with a lovely exception.\nProblem 1: SSL The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.\nThe client uses https/SSL to secure the channel (good!), but the netscaler load balancer does not provide the correct certificate (I think that could be configured, but that\u0026rsquo;s not my job here…) and does a redirect to a different domain (**netscaler.**yourdomain.com) for authentication:\nSo CSOM correctly stops - oldy but goldy, right?\nSolution 1 The following snipped accepts all certificates, valid or not. Dont use it in production code, for single use CSOM as in my case it is perfectly acceptable, right? 🙂\n//Trust all certificates System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) =\u0026gt; true); Problem 2: NetScaler Authentication Once the SSL challenge is accepted, we have to take care of the authentication part. I have done something similar for ADFS were you emulate the authentication (basically you grab the cookie once the authentication happened and reuse it for the SharePoint CSOM).\nFiddler quickly confirmed my assumption - after login via the citrix interface, every call uses cookies for authentication:\nOn the left you can see the 302 redirect to a different domain. Once I provided the login credentials it sets 4 cookies.\nSolution 2 Now lets try to convince the CSOM to use cookies for each request:\nClientContext context = new ClientContext(\"https://intranet.yourdomain.com\"); //open a new context context.ExecutingWebRequest += context_ExecutingWebRequest; //attach to the event Once we have the event, we need to set the cookies (maybe you need different ones depending on the configuration):\nprivate static void context_ExecutingWebRequest(object sender, WebRequestEventArgs e) { HttpWebRequest webReq = e.WebRequestExecutor.WebRequest; if (webReq.CookieContainer == null) //no cookies means we are not yet authenticated { webReq.CookieContainer = new CookieContainer(); //I copied that calls from fiddler: //Set-Cookie: NSC_TMAA=ed2b1d8a3dafae7e50e200230cb8c781;Path=/;Domain=yourdomain.com //Set-Cookie: NSC_TMAS=ed2b1d8a3dafae7e50e200230cb8c781;Secure;Path=/;Domain=yourdomain.com //Set-Cookie: NSC_CERT=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT //Set-Cookie: NSC_TASS=xyz;Path=/;expires=Wednesday, 09-Nov-1999 23:12:40 GMT //Host: 123.yourdomain.com - the (sub-)domain must match or the cookies will not be sent! webReq.CookieContainer.Add(new Cookie(\"NSC_TMAA\", \"ed2b1d8a3dafae7e50e200230cb8c781\", \"/\", \"123.yourdomain.com\")); webReq.CookieContainer.Add(new Cookie(\"NSC_TMAS\", \"ed2b1d8a3dafae7e50e200230cb8c781\", \"/\", \"123.yourdomain.com\")); webReq.CookieContainer.Add(new Cookie(\"NSC_CERT\", \"xyz\", \"/\", \"123.yourdomain.com\")); webReq.CookieContainer.Add(new Cookie(\"NSC_TASS\", \"xyz\", \"/\", \"123.yourdomain.com\")); } } This code is then executed when \u0026ldquo;ExecuteQuery\u0026rdquo; is called - and the cookies are set once. With fiddler you can verify the cookies are used then.\nThe approach above of course only works for a session lifetime - after expiration of the cookies, CSOM can\u0026rsquo;t connect. The code could be expanded to grab the cookies with the first call or after expiration - but for my test data single purpose code that\u0026rsquo;s apparently out of scope.\nSummary At first I thought - \u0026ldquo;well that takes me 10 Minutes to provision 1000 datasets\u0026rdquo; - took me longer 🙂\nHopefully this post saves somebody some time!\n",
    "tags": null,
    "categories": ["Development","SharePoint 2007","SharePoint 2010","SharePoint 2013","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/07/azuresearchtool-suggestions-please/",
    "title": "AzureSearchTool: Suggestions, please!",
    "date_published": "2015-07-06T13:30:12Z",
    "description": "Suggestions are a killer feature for search - same applies to Azure Search!\nPerformance for the lookup of the possible options in combination with a large index is a key here - scale scale scale!\nI released 0.7.0.0 version of the AzureSearchTool today.\nSuggestion I added all of the possible suggestion options - it\u0026rsquo;s a different search type so it needed a while to add it to my current implementation. But as the version number indicates, I am close to catching up with the main features.",
    "content": "Suggestions are a killer feature for search - same applies to Azure Search!\nPerformance for the lookup of the possible options in combination with a large index is a key here - scale scale scale!\nI released 0.7.0.0 version of the AzureSearchTool today.\nSuggestion I added all of the possible suggestion options - it\u0026rsquo;s a different search type so it needed a while to add it to my current implementation. But as the version number indicates, I am close to catching up with the main features. Did I mention that I added search as you type? And it generates this super verbose REST Url for you, too.\nAs of now all of the 12 query options for suggestions are implemented:\nMaybe I will change the layout for suggestions soon - most of the times this feature will be used as type ahead - see this codeplex code as example:\nVideo - Suggestions in Action Watch it in action, first without fuzzy then with it:\nNext version - \u0026ldquo;facet all the things\u0026rdquo; Before I release version 1.0 I will add facets support, that\u0026rsquo;s for sure! Maybe I will change the UX to support the facets visually - I will figure that one out while I implement it. Maybe I tackle the “Test Data” tab, too.\nDo you have suggestions? If so, please leave a comment or open an issue at the AzureSearchTool github page.\n",
    "tags": null,
    "categories": ["Azure Search","AzureSearchTool"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/06/azuresearchtool-more-options-more-fun/",
    "title": "AzureSearchTool – More Options, More Fun",
    "date_published": "2015-06-08T08:30:07Z",
    "description": "Today I released the next version of the AzureSearchTool (v.0.3.0.0).\nIf you have not read about the tool at all, please see the introduction here.\nIn the very first version the tool was quite simple and most of the search parameters were not handled. That has changed now:\nIndex I implemented the schema overview (actually that was not that much but looks great):\nSo now you can see what fields of what type you have - and how those fields are specified.",
    "content": "Today I released the next version of the AzureSearchTool (v.0.3.0.0).\nIf you have not read about the tool at all, please see the introduction here.\nIn the very first version the tool was quite simple and most of the search parameters were not handled. That has changed now:\nIndex I implemented the schema overview (actually that was not that much but looks great):\nSo now you can see what fields of what type you have - and how those fields are specified.\nBelow of the Schema you get the two available statistics - the count of documents you have indexed and how many storage you currently consume. Not that much to show here.\nQuery The query side was more work, but it is definitely worth it. Currently there are 16 query parameters available (see specification) and the AzureSearchTool now assists you entering them. Some of the fields should be Url-Encoded so I handled that one, too.\nThe picture shows a rather basic query for the token \u0026ldquo;dsds\u0026rdquo;:\nAll query options are handled now That query results in a nice REST url that you can copy to your application:\nhttps://MaxMelcher.search.windows.net/indexes/twittersearch/docs?api-version=2015-02-28-Preview\u0026search=dsds\u0026$top=7\u0026$skip=1\u0026$filter=Score%20gt%200.5\u0026searchMode=any\u0026searchFields=Text\u0026$count=true\u0026$orderby=Created\u0026$select=Text,Mention\u0026highlight=Text\u0026highlightPreTag=%3Cli%3E\u0026highlightPostTag=%3C%2Fli%3E Create that by hand or with Postman? Rather not.\nIf you managed to enter invalid values in the search query parameters, the AzureSearchTool now shows the error that is returned by Azure Search:\nOverall I think the feature set almost doubled in this release. Next on I will work on Facets \u0026amp; Suggestions.\n",
    "tags": null,
    "categories": ["Azure","Azure Search","AzureSearchTool"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/06/azuresearchtool-the-very-first-release/",
    "title": "AzureSearchTool – the easiest option to query Azure Search!",
    "date_published": "2015-06-04T07:30:46Z",
    "description": "Today I released my first Open Source tool to support the development, testing, debugging of **Azure Search **- the AzureSearchTool.\nAzureSearchTool - v.0.1.5.0 The tool lets you connect to different indexes and assists you crafting search queries.\nAs a byproduct it generates a REST URL for you to use in your application or website.\nWith this it should be easier to develop against the Azure Search REST API - and should speed up the testing time enormously.",
    "content": "Today I released my first Open Source tool to support the development, testing, debugging of **Azure Search **- the AzureSearchTool.\nAzureSearchTool - v.0.1.5.0 The tool lets you connect to different indexes and assists you crafting search queries.\nAs a byproduct it generates a REST URL for you to use in your application or website.\nWith this it should be easier to develop against the Azure Search REST API - and should speed up the testing time enormously. When I started fiddling with the Azure Search API I was not aware what query options I have and how they play together (even tho the documentation is quite good!).\nDownload is free of charge: here\nFeatures In this very early release the tool covers the following areas:\nSecurity / Access Provide your Azure Search Service and your API Key (currently only Admin or Secondary) work. After connecting the tool will resolve all available indexes.\nThe tool from now then takes care of the api-key header.\nIndex As of now, the tool will show you all available indexes. The schema / fields and types will be visible soon in the \u0026ldquo;Index\u0026rdquo; tab. If you want to change the index after you selected one, click in the menu on \u0026ldquo;Connection\u0026rdquo; and then on \u0026ldquo;Index\u0026rdquo;.\nSearch In the Search section of the tool you have the option to craft queries and test them against the selected index. The tool supports you to create a query that uses the important options with an easy interface (try that with Postman - not as convenient, right?).\n5\nBy now $top, $skip, $filter and api-version are implemented - the rest of the options will follow soon. Maybe I add validation and some examples, too.\nOnce you have changed the parameters, the URL in the top will be changed so that you can use it in your application.\nRaw You need the raw JSON data that is returned by Azure Search? You want it pretty? Click on \u0026ldquo;Raw\u0026rdquo; to get the results as it is returned by Azure Search.\nFuture As you can see not all options are implemented - I released it early to get early feedback. In the near future I will implement the Search view and all the nice options you have there. Then I will add Suggestions and Facets - because they rock.\nLastly I will develop a nice view where you can upload test data according to the schema of the selected index. Maybe, but right now I doubt it, I will add support of Index operations to create and update an index - but the Azure Portal does that pretty well and the code operations are not too complex - but well, lets see.\nScoring Profiles? Index Statistics - they are on the list, too.\nFeedback? So you read until down here? If so, I would be happy to get some feedback from you. Something does not work? Something missing?\n",
    "tags": null,
    "categories": ["Azure","Azure Search","AzureSearchTool","Search"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/06/sharecamp-2015-recap/",
    "title": "ShareCamp 2015 – Recap",
    "date_published": "2015-06-01T07:30:51Z",
    "description": "Germany\u0026rsquo;s latest and greatest SharePoint community event was last weekend (30.05.2015 \u0026amp; 31.05.2015 at Microsoft in Munich) - and it was awesome, once again!\nShareCamp \u0026amp; Community What is so special about ShareCamp? Easy question, it is entirely community-driven. On both days, Saturday and Sunday, there is a session vote before the \u0026ldquo;conference\u0026rdquo; starts. So the attendees prepare presentations and do a short intro during the vote - if more than 3 people raise their hand there will be a session and there were lots of em.",
    "content": "Germany\u0026rsquo;s latest and greatest SharePoint community event was last weekend (30.05.2015 \u0026amp; 31.05.2015 at Microsoft in Munich) - and it was awesome, once again!\nShareCamp \u0026amp; Community What is so special about ShareCamp? Easy question, it is entirely community-driven. On both days, Saturday and Sunday, there is a session vote before the \u0026ldquo;conference\u0026rdquo; starts. So the attendees prepare presentations and do a short intro during the vote - if more than 3 people raise their hand there will be a session and there were lots of em. 6 tracks in parallel if I recall it right. And the concept works for many years now, more than 200 attendees had a good time this year! Not to mention the SharePint party. The good thing here? No only experienced and known speakers get the chance to present their ideas. And not only the mainstream sessions get voted - there were a lot of close to or far way from SharePoint sessions. And I met a lot of old SharePoint friends that are spread over the country - good to see ya! 🙂\nSessions \u0026amp; Discussions So what sessions did we have this year? A lot of them. Here is a list of the sessions I attended or prepared.\n1. Azure Search vs SharePoint Search (2x) On Saturday I held a presentation about Azure Search. The title was on purpose a little bit baiting, you can\u0026rsquo;t compare the incomparable here and that\u0026rsquo;s good. But I started with a brief overview what SharePoint Search is, how it evolved and talked about its strength and weaknesses. Then I switched over to the brand new Azure Search I evaluated for a client project. And showed a demo app that is (Sourcecode) available here. Basically I showed the entire Azure Search workflow from service \u0026amp; index creation, pushing documents via SharePoint to Azure Search - and the options you have to get items back out of it. I had good fun. So much, that I presented the session again on Sunday 🙂 Here I showed a second demo (available here) that indexed a local folder and pushed the filenames and paths to Azure Search. Does that sound familiar? I tried to cover some of the typical SharePoint content sources: SharePoint Content and Fileshares. It\u0026rsquo;s not even close what I showed but similar.\nI received some good questions during the talk (out of my head in my words):\nWhere is the content? The content will be stored in Azure Search / Cloud. Can you index Office Documents? Yes, but you need to extract the content of the files. How about item security? If you want them, you have to build them. Azure Search has a different focus than SharePoint Search - keep that in mind. Different product, not a replacement! Can you push items to the cloud? YES!!! How you get the items back? You get them via the REST interface and they are transported as JSON. Can you combine SharePoint Search and Azure Search? Not out of the box - you would need to create an opensearch provider that translates the JSON to opensearch compliant XML. Is it ready yet? Yes, definitely. But I have the feeling Azure Search will improve rapidly in the near future. My slides (German most of it) are available here - but as usual they are not as good without the demo.\nExpect some blog posts here, I really like Azure Search!\n2. Governance \u0026amp; JavaScript Solutions - how does that fit together? My second session on Saturday with my colleagues Marco Schmucker and Matthias Edom - we talked about the blessings and curses of JavaScript solutions - what you can do and what it will cost you/your clients. The entire session was based on the scenario that you upgrade you SharePoint to a next version and should estimate how much effort you have to put into it - and what could essentially break. And we discussed with the audience, we gather a lot of different aspects and experiences. Good fun!\nSlides will be available once I get the link.\n3. Provider-hosted App Framework I am slightly interested into SharePoint Provider-hosted apps and all areas around it. Maybe because I recently started to learn MVC. Maybe because I like the idea of having all the great stuff outside of SharePoint. But in this session Christian Groß (Solutions2Share) showed what framework they use to create their apps. I was really surprised to hear what they experienced over the last year and what it means to build a product - and how important logging, supporting and ticketing is. Good stuff, I hope they will release it as open source sometime in the future…\n4. SharePoint Toolbox The ShareCamp evergreen, I think it\u0026rsquo;s the 4th time that we had this session at a ShareCamp. I am into tools and this session is about tools - so what could go wrong?! My friend Henning Eiben moderated a really entertaining session with lots of idea sharing and tool discussions. I think we gathered and introduced about 50 tools - commercial or Open Source that every SharePoint developer or IT-PRO should know. ULSViewer, SPDockit, CamlDesigner, SPServices, CKSDev, SearchQueryTool, LogParser, AutoSPInstaller family, SharePoint Patch Service - just to name a bunch!\nDont be a fool - use a tool!\nHenning collected a lot of the tools in a delicious feed - go take a look!\n6. Provider Hosted Apps Hackathon I prepared nothing for it - and expected a lot of this session - fun most importantly. We only had one hour to \u0026ldquo;create\u0026rdquo; something that looks like an SharePoint app. So what did we do? We decided do a simple app that shows two buttons and asks the key question: \u0026ldquo;How was your day today?\u0026rdquo; So we had two buttons with good and bad. The strech goal here was to ship a minimal viable product that simply stored the value in a SharePoint list - in one hour impossible? Damn right. But during the hour we talked and discuss a lot about the problems we face with Provider-hosted apps, whats good and bad - and what challenges \u0026amp; opportunities we see. We almost got it working tho, very close to storing the results - soooo close! 🙂\n6. Azure Workshop I only attended the very last 15 minutes. Too bad, it must have been awesome. At least I heard that many of the attendees said it was their highlight. Okay Patrick Heyde (Microsoft) had some advantages: Firstly he had 3 hours to show how to provision a SharePoint environment on Azure and the experiences he collected over the past 4 years in his role - and he \u0026ldquo;bribed\u0026rdquo; the attendees with 75€ Azure vouchers to play with it. Too bad there were so many sessions in parallel - there will hopefully be a next time!\nIn general I think there should be more sessions that have more time - I would love to talk about SharePoint/Azure Search for a day… or two 🙂\nSummary The weekend was packed and I learned a lot - I totally enjoyed it. I am really looking forward for next year!\nThanks again to all sponsors, organizers and speakers - Germany\u0026rsquo;s SharePoint community would not work without you!\n",
    "tags": null,
    "categories": ["Apps","Azure","Azure Search","Community","Conference","Search","SharePoint 2013","SharePoint 2016","SharePoint Toolbox","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/05/ignite-2015-recap-with-sharepoint-search-in-mind/",
    "title": "Ignite 2015 Recap – with SharePoint Search in Mind!",
    "date_published": "2015-05-11T07:30:34Z",
    "description": "So Ignite is over - and I am pretty impressed how fast the content is available! I followed the first conference (we even had a community hangout during the first keynote) of this style closely via twitter - and the feedback there was quite interesting! Most importantly for me as a SharePoint guy, was of course the announcements of SharePoint 2016. And well, you can be of different opinion of the rescheduled release - but lets focus on the positive side: It’s the first time that we publicly hear what is coming and what will be changed: over a year ahead!",
    "content": "So Ignite is over - and I am pretty impressed how fast the content is available! I followed the first conference (we even had a community hangout during the first keynote) of this style closely via twitter - and the feedback there was quite interesting! Most importantly for me as a SharePoint guy, was of course the announcements of SharePoint 2016. And well, you can be of different opinion of the rescheduled release - but lets focus on the positive side: It’s the first time that we publicly hear what is coming and what will be changed: over a year ahead! I like the new, innovative and open Microsoft - big change!\nThis post will be about the changes I see in regards to SharePoint Search - and some topics around it - you could call it my Ignite Homework if you want to. I have some long train trips ahead - that helps a lot catching up.\nSharePoint 2016 and Search The next version of SharePoint will be a release that supports and enables the transition to the cloud - others would say hybrid is the cool kid now.\nSo with that in mind, I filtered the Ignite Video Page and filtered on SharePoint, Search, Development, Delve, Office Graph - and from the 586 session (phew, what a number!) I downloaded ~25 sessions to watch them when my time allows it. And I am somewhat obsessed with level 400 sessions……\nAnd some of them here as link list, I will update them once I am trough (not chronologically). My comments and thoughts are below.\n[The Evolution of SharePoint: Overview and Roadmap ![The Evolution of SharePoint: Overview and Roadmap][5]][6] What\u0026rsquo;s New for IT Professionals in SharePoint Server 2016 ![What's New for IT Professionals in SharePoint Server 2016][8]\u0026lt;/p\u0026gt; 1. A must see by Bill Bear, very informative what is coming and what we can expect of the new release. He mentions hybrid a lot. MVP Panel: Sample Apps and Intelligent Solutions Showcasing Office Graph and Delve Extensibility ![MVP Panel: Sample Apps and Intelligent Solutions Showcasing Office Graph and Delve Extensibility][10]\u0026lt;/p\u0026gt; 1. That was the most entertaining session so far with 4.5 smart guys ([Bill Baer][11], [Alexandre Cipriani][12], [Chris Givens][13], [Waldek Mastykarz][14], [Mikael Svenson][15]) crafting solutions around Office Graph - even tho I knew that Mikael Svenson would win the challenge \u0026lt;img class=\u0026quot;wlEmoticon wlEmoticon-smile\u0026quot; style=\u0026quot;border-style: none;\u0026quot; src=\u0026quot;https://melcher.it/wp-content/uploads/wlEmoticon-smile5.png\u0026quot; alt=\u0026quot;Smile\u0026quot; /\u0026gt;. \u0026lt;blockquote class=\u0026quot;twitter-tweet\u0026quot; data-width=\u0026quot;500\u0026quot;\u0026gt; \u0026lt;p lang=\u0026quot;en\u0026quot; dir=\u0026quot;ltr\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/mikaelsvenson\u0026quot;\u0026gt;@mikaelsvenson\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/givenscj\u0026quot;\u0026gt;@givenscj\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/waldekm\u0026quot;\u0026gt;@waldekm\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/alcip\u0026quot;\u0026gt;@alcip\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/williambaer\u0026quot;\u0026gt;@williambaer\u0026lt;/a\u0026gt; I think \u0026lt;a href=\u0026quot;https://twitter.com/mikaelsvenson\u0026quot;\u0026gt;@mikaelsvenson\u0026lt;/a\u0026gt; will win 🙂 \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026amp;mdash; Maximilian Melcher (@maxmelcher) \u0026lt;a href=\u0026quot;https://twitter.com/maxmelcher/status/590888090434150401\u0026quot;\u0026gt;April 22, 2015\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;/blockquote\u0026gt; All 4 contestants came up with really creative solutions, I like that style of session, must have been good fun!\u0026lt;/li\u0026gt; \u0026lt;/ol\u0026gt; \u0026lt;/li\u0026gt; * [Transforming Your SharePoint Full Trust Code to the Office App Model ![Transforming Your SharePoint Full Trust Code to the Office App Model][16]][17] * [Setting Up Your On-Premises SharePoint Environment for Custom App Development ![Setting Up Your On-Premises SharePoint Environment for Custom App Development][18]][19] * [Properly Scale and Deploy Enterprise Search | Microsoft Ignite 2015 | Channel 9][20] ![Properly Scale and Deploy Enterprise Search][21] * [Effective Search Deployment and Operations in SharePoint Server 2013 | Microsoft Ignite 2015 | Channel 9][22] ![Effective Search Deployment and Operations in SharePoint Server 2013][23]\u0026lt;/p\u0026gt; 1. I watched that session last year at SharePoint Conference - this session evolved in one year, very nice! 2. There are some pretty handy PowerShell scripts in there. * [Big Bang: The New Universe of Findability and Discoverability | Microsoft Ignite 2015 | Channel 9 ![Big Bang: The New Universe of Findability and Discoverability][24]][25] * [Properly Scale and Deploy Enterprise Search | Microsoft Ignite 2015 | Channel 9 ![Properly Scale and Deploy Enterprise Search][21]][20] * [Adding Search Capabilities to Your Business Applications Using Microsoft Azure Search | Microsoft Ignite 2015 | Channel 9][26] ![Adding Search Capabilities to Your Business Applications Using Microsoft Azure Search][27]\u0026lt;/p\u0026gt; 1. That’s an interesting one. For my next talk at this years [ShareCamp][28] I will prepare a session with the working title: “SharePoint Search vs. Azure Search” - that ignite session really gave me quick start. Good stuff! * [Advanced Analytics: Navigating Your Way There | Microsoft Ignite 2015 | Channel 9][29] ![Advanced Analytics: Navigating Your Way There][30] * [Information Management Strategy with Microsoft Office 365 in Mind | Microsoft Ignite 2015 | Channel 9 ![Information Management Strategy with Microsoft Office 365 in Mind][31]][32] * [Building Business Apps Like They Do in the Valley with AngularJS, Node.js, and More | Microsoft Ignite 2015 | Channel 9 ![Building Business Apps Like They Do in the Valley with AngularJS, Node.js, and More][33]][34] * [Behind the Scenes: Engineering NextGen Portals | Microsoft Ignite 2015 | Channel 9][35] ![Behind the Scenes: Engineering NextGen Portals][36] * [Office Delve and Office Graph Vision and Roadmap | Microsoft Ignite 2015 | Channel 9 ![Office Delve and Office Graph Vision and Roadmap][37]][38] * [Intelligent, Ready-to-Go NextGen Portals in Office 365 | Microsoft Ignite 2015 | Channel 9 ![Intelligent, Ready-to-Go NextGen Portals in Office 365][39]][40] * [Troubleshooting Hybrid Configurations and Workloads with SharePoint 2013 and Office 365 (video not yet available)][41] * [Microsoft SharePoint Server with SQL Server: Now Better Than Ever (video not yet available) ![Microsoft SharePoint Server with SQL Server: Now Better Than Ever][21]][42] * [Designing and Applying Information Architecture for Microsoft SharePoint and Office 365][43] ![Designing and Applying Information Architecture for Microsoft SharePoint and Office 365][44] * [Future-Proofing Your On-Premises SharePoint Development ]45 * [Implementing Next Generation SharePoint Hybrid Search with the Cloud Search Service Application\n![Implementing Next Generation SharePoint Hybrid Search with the Cloud Search Service Application][47]][48] * [Best Practices for Design and Performance in SharePoint Online ![Best Practices for Design and Performance in SharePoint Online][49]][50] * [Search Extensibility in SharePoint 2013 ![Search Extensibility in SharePoint 2013][51]][52] * [Troubleshooting Hybrid Configurations and Workloads with SharePoint 2013 and Office 365][41] * [SharePoint UNPLUGGED! Questions Answered on Anything You Heard This Week][53] * [The New Knowledge Management Portal in Office 365 ]54 ## Early Takeaway Over 25 hours of awesome stuff - that’s awesome! And it really helps me compensating that I couldn't meet a lot of friends at this years Ignite. The parts where search is covered is quite extensive, so much that I couldn't have covered them at the conference. One pain point that I miss from last years conference: The questions after the sessions are not in the recording - and I really learned a lot last year by listening to the questions/answers afterwards. Well, a reason to attend next year, right? I really like where Office Graph is heading - from Org View, Discovery, Relevancy, Context - the product is so versatile that I really want to see more of it. The potential of it goes through the roof! And with the Cloud Search Service Application and extensibility it can totally rock. Looking forward for future projects here! Last sentence: Search is everywhere! ## What are your favorites? I am always open to new stuff - maybe I missed an awesome session - if so, please leave a comment! ",
    "tags": null,
    "categories": ["Conference","Delve","Office 365","Office Graph","Search","SharePoint 2016"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/04/cant-make-it-to-microsoft-ignite-watch-the-keynote-with-us/",
    "title": "Can’t make it to Microsoft Ignite? Watch the keynote with us!",
    "date_published": "2015-04-28T07:30:39Z",
    "description": "Microsoft Ignite is next week (see countdown below), and apparently it is in Chicago so many of us can\u0026rsquo;t make it. So lets make the best out of it and watch the keynote together! That is 100% more fun than watching it alone, right? Guaranteed!\n2\n\u0026lt;div id=\u0026quot;9030-dashboard\u0026quot; class=\u0026quot;jedi-dashboard\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-weeks_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; weeks \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -13 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-days_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; days \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -6 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-hours_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; hours \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -1 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-minutes_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; minutes \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -4 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-seconds_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; seconds \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -1 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;9030-bothtml\u0026quot; class=\u0026quot;jedi-bothtml\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; Microsoft Ignite 2015 Hangout If you want to watch us talking and discussing the keynote you can watch the stream here: https://melcher.",
    "content": "Microsoft Ignite is next week (see countdown below), and apparently it is in Chicago so many of us can\u0026rsquo;t make it. So lets make the best out of it and watch the keynote together! That is 100% more fun than watching it alone, right? Guaranteed!\n2\n\u0026lt;div id=\u0026quot;9030-dashboard\u0026quot; class=\u0026quot;jedi-dashboard\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-weeks_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; weeks \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -13 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-days_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; days \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -6 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-hours_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; hours \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -1 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-minutes_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; minutes \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -4 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash jedi-seconds_dash\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jedi-dash_title\u0026quot;\u0026gt; seconds \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -1 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jedi-digit\u0026quot;\u0026gt; -2 \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;9030-bothtml\u0026quot; class=\u0026quot;jedi-bothtml\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; Microsoft Ignite 2015 Hangout If you want to watch us talking and discussing the keynote you can watch the stream here: https://melcher.it/s/4B\nIf you want to participate - and that would be much more fun - you can be part of it: http://melcher.it/s/4A (prepare your headset and webcam)\nYou can add the event to your calendar: Ignite 2015 Hangout.\nSee \u0026amp; hear you next week! ",
    "tags": null,
    "categories": ["Community"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/04/recap-sharepoint-saturday-2015-in-antwerp-belgium/",
    "title": "Recap: SharePoint Saturday 2015 in Antwerp, Belgium",
    "date_published": "2015-04-20T07:30:38Z",
    "description": "300 attendees on a Saturday - all “SharePoint-crazy”. Its my first visit to Belgium and I must say: I am impressed of the community and the spirit here. In the following I recap SharePoint Saturday 2015 in Antwerp.\nSPSBE From the start at 9:00am until the official end of SPSBE (SharePoint Saturday Belgium) at around 17:30 I had good fun. I apparently had to prepare my session on this Saturday, tests my demos and optimize my slides - so I could only attend one full session (see my summary here), but there was enough time for me to talk to community members, board members and other speakers - good times, good fun.",
    "content": "300 attendees on a Saturday - all “SharePoint-crazy”. Its my first visit to Belgium and I must say: I am impressed of the community and the spirit here. In the following I recap SharePoint Saturday 2015 in Antwerp.\nSPSBE From the start at 9:00am until the official end of SPSBE (SharePoint Saturday Belgium) at around 17:30 I had good fun. I apparently had to prepare my session on this Saturday, tests my demos and optimize my slides - so I could only attend one full session (see my summary here), but there was enough time for me to talk to community members, board members and other speakers - good times, good fun.\nSome of the attendees stayed for the BBQ after the event - it was nice to share some ideas, get feedback - and well, the food was nice, too!\nFood time after a great #SPSBE #BBQ pic.twitter.com/TioLwBDwoQ \u0026mdash; Elio Struyf (@eliostruyf) April 18, 2015 I must say, for a free event organized by a community, this was perfectly done - there is nothing I could rant about (and that’s almost impossible, because its free, right?). Good job @BIWUG (Belgian Information Worker User Group) - I am leaving Belgium impressed.\nThanks again to all the sponsors who made the event possible!\nSpeakers \u0026amp; Sessions 20 sessions and as many speakers from around the world attracted 300 attendees - not only from Belgium. In general the conferenced covered all kind of different topics, but the main themes were Office 365 with topics like development, governance, adoption, best practices, workflows, search, apps and solutions. Good stuff!\nThanks to all speakers at #spsbe! pic.twitter.com/Am9HuFeV6x \u0026mdash; Thomas Vochten (@ThomasVochten) April 18, 2015 My Session: Search-Driven Applications with SharePoint 2013 I had a really good time presenting my content regarding Search-Driven Applications with SharePoint 2013 - I uploaded my slides, but the cool stuff is in the demos and I can\u0026rsquo;t make them available:\n@maxmelcher taking the stand.. And talking search \u0026#8230; #spsbe #biwug pic.twitter.com/YPHGQMSIUi \u0026mdash; Andy Van Steenbergen (@meligo) April 18, 2015 Max Melcher @maxmelcher explaining Search Query Tool at #spsbe pic.twitter.com/0HEi2msJ2i \u0026mdash; Edin Kapić (@ekapic) April 18, 2015 After the talk there were like 10 to 15 questions - some of them I would love to show you here:\nQ: Do Query Variables work for Office 365 / SharePoint Online? Yes, Query Variables are awesome and do work for SharePoint Online - see a reference here.\nQ: How can I recrawl SharePoint Online User Profiles? Once you changed the mapping of the managed properties, you need to tell SharePoint Online to recrawl the profiles. There is a PowerShell for that, see Mikael\u0026rsquo;s post.\nQ: How to estimate and test load patterns for SharePoint search scenarios (e.g. in a publishing scenario)? Estimation is tough, you need a lot of experience for that. And you need to know a lot upfront about the environment, the use cases, the users, … - if you don\u0026rsquo;t know that, you need to scale, test and adjust. One possible solution to test load patterns upfront is to use Visual Studio Test Manager and use the REST url to query for results. Then you can increase the load and see what could break and how to optimize.\n**Q: Some Chinese documents are not index properly, at least they are not presented to certain users. Why? ** I could only guess - multi-language is a complex topic. They guys tried a lot with forced language property, but without seeing and environment, well - good luck!\nQ: Why didn\u0026rsquo;t you cover Display Templates in your session Display Templates are awesome. Search is awesome. Apparently I only had 1 hour so I could not cover that much without loosing somewhere else. Of course they are an important part of a search-driven application that presents results within SharePoint. If you want to read more about Display Templates, go read Elio\u0026rsquo;s blog or Mikael\u0026rsquo;s blog - they have pretty good articles about them. Or look at my basic example here.\nSummary I totally enjoyed it - still I am a little tired because my friend Andy (@meligo) insisted to tour me around Antwerp! Thanks for having me! To sum it all up: That was my first international SharePoint Saturday - and it won\u0026rsquo;t be my last!\nSee you latest next year Belgium!\n",
    "tags": null,
    "categories": ["Community","Conference","Development","Office 365","Presentation","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/04/improving-sharepoint-search-experience-spsbe07/",
    "title": "Improving SharePoint Search Experience – #SPSBE07",
    "date_published": "2015-04-18T11:05:46Z",
    "description": "I think its my first time that I attended a search session for business users/decision makers - interesting times here at SharePoint Saturday in Belgium. Here follows a summary for \u0026ldquo;Improve SharePoint Search Experience\u0026rdquo; in my words.\nSpeaker was Elio Struyf (@eliostruyf) - he has some nice blog posts about search, go read them!\nElio on stage Improve for everybody, don’t forget the novice users There are different types of users in every enterprise, some of them are more mature with SharePoint, some do a search query with just one keyword - well, one of Elio’s key messages was that you should optimize the experience not only for the “educated” users.",
    "content": "I think its my first time that I attended a search session for business users/decision makers - interesting times here at SharePoint Saturday in Belgium. Here follows a summary for \u0026ldquo;Improve SharePoint Search Experience\u0026rdquo; in my words.\nSpeaker was Elio Struyf (@eliostruyf) - he has some nice blog posts about search, go read them!\nElio on stage Improve for everybody, don’t forget the novice users There are different types of users in every enterprise, some of them are more mature with SharePoint, some do a search query with just one keyword - well, one of Elio’s key messages was that you should optimize the experience not only for the “educated” users.\nKey tips During his presentation Elio showed some nice tricks to improve the experience. Starting by enabling suggestions, optimize verticals, add and change refiners or improve the keyword search are really important parts of an optimized Search Center - default means not optimized for your requirements, right?\nneat keyword search solution Expert users For expert users there are plenty of options to drive adoption and create results that are important for the users - and help them tackle the information overload.\nOne good optimization is to enable search as you type (note: your IT admin will love you for that!) or to enrich the results with meaningful, additional metadata. For enriching you have multiple options, Elio explained Entity Extraction and Content Enrichment - both are very powerful concepts to provide better results.\nLastly Elio introduced Delve/Office Graph - the audience indicated that they know about it, but most of them don’t/can’t use them. As closing demo he showed that you can integrate Office Graph results into SharePoint results - good one, I need to keep that one in mind!\nSummary Solid session by Elio - good value for me. Its important to not forget the novice users, they can be important for your SharePoint adoption and are the “tomorrows” users of your platform. Thanks!\n",
    "tags": null,
    "categories": ["Community","Customization","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/04/retrieve-managed-account-passwords-for-sharepoint-2010-sharepoint-2013/",
    "title": "Retrieve Managed Account Passwords for SharePoint 2010 / SharePoint 2013",
    "date_published": "2015-04-09T08:15:14Z",
    "description": "In this post I show you a simple PowerShell script to retrieve Managed Account Passwords for SharePoint 2010 / SharePoint 2013.\nThis is actually a repost and I do not want to claim any credits for this post - see the original here by Jason Himmelstein (\u0026lt;= thank you!!!). Why do I repost? I never find the PowerShell when I need it, even tho I have it in my almighty OneNote!",
    "content": "In this post I show you a simple PowerShell script to retrieve Managed Account Passwords for SharePoint 2010 / SharePoint 2013.\nThis is actually a repost and I do not want to claim any credits for this post - see the original here by Jason Himmelstein (\u0026lt;= thank you!!!). Why do I repost? I never find the PowerShell when I need it, even tho I have it in my almighty OneNote!\nChallenge Imagine the following: The Search Crawler is not able to index certain items in a SharePoint site. The ULS is full of access denied errors, the Crawl Log tells you:\nThe sharepoint item being crawled returned an error when attempting to download the item\nBasically nothing. So the first thing would be to access the site as Content Access account - but - nobody knows the password anymore. Maybe it was changed automatically, maybe the \u0026ldquo;one\u0026rdquo; guy left the company and there is no documentation - I have been in this situation countless times…!\nThe solution: the password recovery script Just copy the following script and paste it into an elevated/admin SharePoint PowerShell:\nfunction Bindings() { return [System.Reflection.BindingFlags]::CreateInstance -bor [System.Reflection.BindingFlags]::GetField -bor [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::NonPublic } function GetFieldValue([object]$o, [string]$fieldName) { $bindings = Bindings return $o.GetType().GetField($fieldName, $bindings).GetValue($o); } function ConvertTo-UnsecureString([System.Security.SecureString]$string) { $intptr = [System.IntPtr]::Zero $unmanagedString = [System.Runtime.InteropServices.Marshal]::SecureStringToGlobalAllocUnicode($string) $unsecureString = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($unmanagedString) [System.Runtime.InteropServices.Marshal]::ZeroFreeGlobalAllocUnicode($unmanagedString) return $unsecureString } Get-SPManagedAccount | select UserName, @{Name=\"Password\"; Expression={ConvertTo-UnsecureString (GetFieldValue $_ \"m_Password\").SecureStringValue}} See:\nThe output is a nice table with all passwords in plain text - unexpected but nice, isn\u0026rsquo;t it?\n",
    "tags": null,
    "categories": ["ITPro","Powershell","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/03/powershell-script-to-efficiently-locate-large-files-in-sharepoint-20102013/",
    "title": "Powershell Script to Efficiently Locate Large Files in SharePoint 2010/2013",
    "date_published": "2015-03-23T08:15:32Z",
    "description": "Recently I had the request to locate all files that are bigger than 40 MB - and they were located in the entire farm across multiple Site Collections. Easy you might say? Just use search and query for\nsize\u0026gt;41943040\nWell, I said efficiently and thats the most efficient way - you are right! They key constraint here is that those files were excluded from search - so lets go for the PowerShell way.",
    "content": "Recently I had the request to locate all files that are bigger than 40 MB - and they were located in the entire farm across multiple Site Collections. Easy you might say? Just use search and query for\nsize\u0026gt;41943040\nWell, I said efficiently and thats the most efficient way - you are right! They key constraint here is that those files were excluded from search - so lets go for the PowerShell way.\nThe Script Here comes the script that uses PowerShell to iterate over each Site Collection, every Web and every List - then uses CAML to query each list for items larger than the specified size. It works for SharePoint 2013 and should definitely work for 2010, too.\nEnough words, here we go:\nAdd-PSSnapin microsoft.sharepoint.powershell -ea 0 #Configure the size in byte here, here its 4 MB. $size = 400*1024*1024 function GetLargeFiles ($list) { $result = @() #query for large files $query = New-Object Microsoft.SharePoint.SPQuery; $query.Query = \"$size\"; $query.ViewFieldsOnly = $true $query.ViewFields = \"\"; #page them in the case there are more than 5000 files $query.RowLimit = 5000; $query.ViewAttributes = \"Scope='RecursiveAll'\"; do { $items = $list.GetItems($query); if ($items.Count -gt 0) { foreach ($item in $items) { if ($item.File) { if ($item.File.Length -gt $size) { $t = @{} $t.Size = $item.File.Length $t.Url = $list.ParentWeb.Url + \"/\" + $item.File.Url $t2 = New-Object PSObject –Property $t $result += $t2 } } } } #set the pagination $query.ListItemCollectionPosition = $items.ListItemCollectionPosition } while ($query.ListItemCollectionPosition) return $result } #query all sites $sites = Get-SPSite -Limit All $result = @() foreach ($site in $sites) { Write-Host $site.Url #query all webs $webs = get-spweb -Site $site -Limit All foreach ($web in $webs) { #query all lists foreach ($list in $web.Lists) { $result += GetLargeFiles $list } #cleanup the web $web.Dispose() } #cleanup the site $site.Dispose() } #output the results $result Result The result looks like this:\nYou can easily export that to a csv file with:\n$result | export-csv result.csv\nI ran it again a quite large SharePoint 2013 environment (~1 TB, 1075 Site Collections) and it came back in ~5 minutes.\nFeedback! You see room for improvement for my PowerShell script to efficiently locate large files? If so, please tell me!\n",
    "tags": null,
    "categories": ["ITPro","Powershell"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/01/2014-review/",
    "title": "Its over! (My 2014 Review)",
    "date_published": "2015-01-04T15:20:59Z",
    "description": "Traditions are traditions - at least when you repeat at least once, right? So last year I started to review my year with SharePoint - lets do it again.\nConferences \u0026amp; Social 2013 started great - after several attempts I convinced my company to send me to the very last SharePoint Conference in Las Vegas - and it was epic. Not only that I covered 30 SharePoint sessions, I met friends and new friends - I knew some of them via Twitter for a long time, but meeting in person is a totally different story, of course!",
    "content": "Traditions are traditions - at least when you repeat at least once, right? So last year I started to review my year with SharePoint - lets do it again.\nConferences \u0026amp; Social 2013 started great - after several attempts I convinced my company to send me to the very last SharePoint Conference in Las Vegas - and it was epic. Not only that I covered 30 SharePoint sessions, I met friends and new friends - I knew some of them via Twitter for a long time, but meeting in person is a totally different story, of course! If you wanna relieve my experience including my summary you can read my posts here.\nOn the speaking side, I submitted 10-15 sessions this year, some where accepted, some rejected. I was accepted in Zürich, Switzerland at Collaboration Days (international speaker, yay!) and in Duesseldorf at ShareConf, Germany - I had good fun and received good feedback. The most challenging speaking engagement was SP24 - even tho my session was pre-recorded. My inner devil forced me to record my session (50 Minutes) multiple times - in the end I did not need a script, even for the jokes 😉\nAdditionally I visted the User Group in Munich several times - of course I had a search talk there. Will continue that in 2015, for sure.\nWith Dave Hollembaek, we started an \u0026ldquo;informal gathering\u0026rdquo; / Stammtisch about Enterprise Search (we are not limited to SharePoint, but focused) in Munich - if you wanna join, please feel free!\nMore conferences are on my roadmap for 2015! Blogs \u0026amp; Comments I spent some time with my little blog this year - new theme with mobile support and 31 blog posts - on the statistics side (I love analytics!) I had 78,783 views on my blog (82% more than 2013) and 133 comments (29% more than 2013) with 103 blog posts in total.\nMy most viewed posts:\n1. \u0026lt;td\u0026gt; \u0026lt;a title=\u0026quot;#SharePoint 2013 – Create a Search Service Application and Search Topology with Powershell\u0026quot; href=\u0026quot;http://melcher.it/2012/07/sharepoint-2013-create-a-search-service-application-and-topology-with-powershell/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;#SharePoint 2013 - Create a Search Service Application and Search Topology with Powershell\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 53 comments \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 14,409 views \u0026lt;/td\u0026gt; 2. \u0026lt;td\u0026gt; \u0026lt;a title=\u0026quot;Install Office Web Apps 2013 for SharePoint 2013 – with PDF Preview\u0026quot; href=\u0026quot;http://melcher.it/2013/05/install-office-web-apps-2013-for-sharepoint-2013-with-pdf-preview/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Install Office Web Apps 2013 for SharePoint 2013 - with PDF Preview\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 53 comments \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 12,536 views \u0026lt;/td\u0026gt; 3. \u0026lt;td\u0026gt; \u0026lt;a title=\u0026quot;Cache cluster is down, restart the cache cluster and Retry\u0026quot; href=\u0026quot;http://melcher.it/2013/02/cache-cluster-is-down-restart-the-cache-cluster-and-retry/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Cache cluster is down, restart the cache cluster and Retry\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 11 comments \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 6,665 views \u0026lt;/td\u0026gt; 4. \u0026lt;td\u0026gt; \u0026lt;a title=\u0026quot;Installing SharePoint 2013 SP1 with SQL Server 2014 on Windows Server 2012 R2 – Picture Love Story\u0026quot; href=\u0026quot;http://melcher.it/2014/05/installing-sharepoint-2013-sp1-sql-server-2014-windows-server-2012-r2-picture-love-story/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Installing SharePoint 2013 SP1 with SQL Server 2014 on Windows Server 2012 R2 - Picture Love Story\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 6 comments \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 6,465 views \u0026lt;/td\u0026gt; 5. \u0026lt;td\u0026gt; \u0026lt;a title=\u0026quot;Powershell: List all IIS WebApplications (.net version, state, identity)\u0026quot; href=\u0026quot;http://melcher.it/2013/03/powershell-list-all-iis-webapplications-net-version-state-identity/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Powershell: List all IIS WebApplications (.net version, state, identity)\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 19 comments \u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; 5,797 views \u0026lt;/td\u0026gt; was published in 2014 - the others are older posts. Where do all the visitors come from? United States \u0026lt;td\u0026gt; 22,490 views \u0026lt;/td\u0026gt; Germany \u0026lt;td\u0026gt; 6,237 views \u0026lt;/td\u0026gt; India \u0026lt;td\u0026gt; 5,177 views \u0026lt;/td\u0026gt; United Kingdom \u0026lt;td\u0026gt; 4,789 views \u0026lt;/td\u0026gt; Canada \u0026lt;td\u0026gt; 3,342 views \u0026lt;/td\u0026gt; In total my blog was visited from 176 countries.\nSearch Projects When I look at my projects of 2014 most of them were somehow SharePoint Search-related. My clients are obviously the best - so they gave my some pretty nice challenges, mostly integration of SAP or third party systems - or indexing huge volumns (90,000,000 items in 2 weeks). Thanks for the continued trust!\nSharePoint Certifications I only managed to pass two Certifications last year - but a new years resolution is to finish both my MCSE (only 70-332 missing!!!) and MCSD for SharePoint 2013. I tried to register for a training, but I was greated with:\nAfter December 31st, 2014 if you wish to take a Microsoft certification exam, please visit the Microsoft Learning web site for further information.\nSo I tried to scheduled an online proctored exam - but Germany is not on the list… so I scheduled a on-site exam beginning of January. Yay!\nPredictions 2015 will be the year of search! Again. For 2014 I predicted that the Service Pack 1 for SharePoint 2013 will bring some major search enhancements - some under the hood features were added, but I am still waiting for the long \"announced\" push API. I hope to see Delve for on-prem installations, too - but I think that will stay a wish. On the other side, that will hopefully push some to the cloud - or hybrid at least. Hosting on Azure for Dev/Test will even more accelerate – even in Germany. I said the same almost last year. But I saw some changes, some new clients moved directly to Office 365 - some at least looked at it. Cloud is still not very popular in Germany, in 2015 I hopefully see some more traction.\nHappy New Year! I wish you all a healthy and wealthy Happy New Year. Hope to see you soon! ",
    "tags": null,
    "categories": ["Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2015/01/sharepoint-search-managed-properties-items-search-query-tool-v2-2-missing-manual/",
    "title": "SharePoint Search: What Managed Properties do my Items have? (Or: Search Query Tool v2.2. – the missing manual)",
    "date_published": "2015-01-01T23:25:25Z",
    "description": "Creating Search Driven Applications is very easy with SharePoint 2013 - sometimes.\nFor a really simple example you need 6 steps for SharePoint content (read detailed article here)\nAdd some columns with values to a list Full crawl Create a Managed Property with the corresponding mapping Full Crawl Drop a Search WebPart (Search Result WebPart, Content By Search or one of the other options) Create a query that fits your needs Bam!",
    "content": "Creating Search Driven Applications is very easy with SharePoint 2013 - sometimes.\nFor a really simple example you need 6 steps for SharePoint content (read detailed article here)\nAdd some columns with values to a list Full crawl Create a Managed Property with the corresponding mapping Full Crawl Drop a Search WebPart (Search Result WebPart, Content By Search or one of the other options) Create a query that fits your needs Bam! Easy, performant solution* and almost maintenance free (*depends on your query).\nSo? Where is/are the Problem(s)? Most of the time its a challenge to create the search query (read this: Search Queries explained, 12 parts!) - for the most queries you need to understand what properties you have and can use to answer the business needs. For that you always have the same challenges:\nAre the items in the index already? Can you see it / who can see it? What properties are available for those items? Are the properties available on all items? How often do the items change? Ranking? Why is that item higher ranked? What should be visualized and how? Does my query work (at all)? And of course many more.\nSo how to tackle some/all of the problems? Search Query Tool to the rescue! First of all, there is one tool that gives you a head start: Search Query Tool for SharePoint 2013 (free, codeplex). It is so nice, I had to contribute some time and love, too.\nIn the following I will show some of the main features of it that help me almost daily:\nREST URL with all selected parameters - awesome to create JavaScript apps or apps outside of SharePoint Query Options - so many and really interesting options. You don\u0026rsquo;t want Phonetic Queries? There are plenty of different options here, almost all have a descriptive tooltip. Some of the fields have a tiny box right to a textbox, click on it for some useful default values. Quite handy if you don\u0026rsquo;t know how to put values in. Result Tabs - you get all the results here: Status: How many results (with and without duplicates) where delivered in what time.\nRaw: Unformatted JSON results (ugly, most of the time I skip that tab) - response headers are sometimes interesting in the case of an error.\nPrimary Results: 99% of the time I am in this tab. Refinement Results: What refiners do you get with the current query. You have to use the Refiners box in the Query Options (2) to see some results. Secondary Results: Skipping that most of the times, kinda useless IMHO.\nSuggestion Results: You have to use a suggestion query for that. Debug - I cover that in a future blog post. All connection options. Very useful to test search with different accounts. You can save the connection information via the menu File \u0026raquo; Save Connection Properties.\nThe advanced options. I always enable the experimental features!\nThey enable a preview in the tool for supported files (office and web pages) And most importantly it adds the button that I use most of the time: View all Properties The dialog shows all Managed Properties of the selected it. For that it needs the Property Workid, so make sure its in the Select Properties field (otherwise the tool will yell at you!).\nThere are differences for SharePoint Online - maybe they will patch it so on-prem faces the same challenge. But once again Mikael Svenson has a solution for that. Final words Quite a lot of features for a FREE tool - but for Search challenges it\u0026rsquo;s really essential. Did I notice it has a freshness boost generator? Or did I mention that it supports the Office Graph Language (GQL), too?\nCan you solve all problems with it? I hope so - if not, please drop me a comment or directly on the discussion page.\n",
    "tags": null,
    "categories": ["Development","ITPro","Search","SharePoint 2013","SharePoint Toolbox","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/12/z-create-display-template-sharepoint-2013-search-visualize-property-itemdocument/",
    "title": "A to Z: Create a Display Template for SharePoint 2013 Search to visualize a property of an item/document",
    "date_published": "2014-12-31T00:03:44Z",
    "description": "This is an english translation of my article for SharePoint Advent \u0026ldquo;VON A BIS Z: ERSTELLUNG EINES DISPLAY TEMPLATES FÜR DIE SHAREPOINT SUCHE UM DIE EIGENSCHAFTEN EINES DOKUMENTS SICHTBAR ZU MACHEN\u0026rdquo;.\nDisplay Templates can be used in Web Parts to individualize search results (see also Introduction to Display Templates on MSDN).\nIn this article I will show you how a Display Template for SharePoint 2013 Search is structured, why you need them and how to customize/extend them.",
    "content": "This is an english translation of my article for SharePoint Advent \u0026ldquo;VON A BIS Z: ERSTELLUNG EINES DISPLAY TEMPLATES FÜR DIE SHAREPOINT SUCHE UM DIE EIGENSCHAFTEN EINES DOKUMENTS SICHTBAR ZU MACHEN\u0026rdquo;.\nDisplay Templates can be used in Web Parts to individualize search results (see also Introduction to Display Templates on MSDN).\nIn this article I will show you how a Display Template for SharePoint 2013 Search is structured, why you need them and how to customize/extend them.\nWhy YOU need Display Templates? Not every search hit is equal - even a small icon helps the user to identify content more quickly than if only a monotonous mass of blue links is represented. And now that more and more content is stored in SharePoint, this is even more relevant. And integration solutions that can display many content of external system can be realized, too.\nThe rapid acquisition of information also plays a major role in user acceptance - if it additionally looks good and the system helps me to recognize information faster - well, search can rock - I use it daily in our own Intranet! In addition, the important content should be categorized and tagged in SharePoint - such additional work should also be visible in search results, so that the effort is also worth even more.\nHow is a Display Template structured? Each display template consists of two files: a HTML version of the Display Template that you can edit in a HTML editor, and a JS file that SharePoint uses (dont touch that one!). The HTML file is structured always with the same pattern, in it is defined what property/metadata of the search hit will be shown. The HTML file can also contain JavaScript to dynamically display content or even implement business logic.\nThe following screenshot shows a typical SharePoint 2013 Search Center, with the 3 components that can be easily adapted: Item Display Template, Item Hover display template and the action bar.\n(1) Item Display Template for a PowerPoint hit\n(2) The corresponding Hover Template for PowerPoint\n(3) Search Actions that can be directly started from within the search result\nHow can you change a Display Template? In the following 5 steps I will show you how to customize the Display Template for PowerPoint so that an additional document property is displayed.\nStep 1: Prepare List or Library To view an additional document property, it must be available on at least one document / list item. For this simple example, I created a text column \u0026ldquo;technologie\u0026rdquo; and filled it with values:\nCreation of the column is not enough, it must also be filled with at least one value\nStep 2: Creating a Managed Property and full crawl How can this additional value be used in SharePoint Search now? Automatically? Nope, unless its a site colum that you added to the list (see here). Otherwise a so-called Managed Property must be created now. To do this, go to Site Collection Administration - in SharePoint 2010 you had to go to Central Admin and had to be a farm administrator so this is a big step forward - and there then click on Search Schema. In the tab Managed Properties create a new property:\nIn the dialog create a property with a name, here its \u0026ldquo;Technologie\u0026rdquo;. Select retrievable and add at the very end of the page a mapping. The crawled property is called ows_technologie, just add it to the mapping:\nThe name of the crawled property for SharePoint content is always prefixed with \u0026ldquo;ows_\u0026rdquo;\nIf no value is displayed, the SharePoint search has not found the new column during a crawl. If you want to speed things up (its not like you have lots of choices here), go to Central Administration and start the crawl there. Once the crawled property is displayed, add it, and save the Managed Property with OK. After this the summary page for technology should look like this:\nThe Managed Property will be filled during the next full crawl - if you do not wanna wait, run a full crawl (again) in Central Administration.\nStep 3: Customized the Display Template Now to the actual customization of the Display Templates - the technology property is not automatically displayed. To modify a Display Template, download the display template from Master Page Gallery. For this change to the Site Collection Settings, open Master Page Gallery and then change to the folder \u0026ldquo;Display Templates\u0026rdquo; and then \u0026ldquo;Search\u0026rdquo;. This folder contains all display templates that can be used for the SharePoint search - as already described, an HTML file for editing and a JavaScript file that SharePoint generates every time the html file changes. For this example we will download the PowerPoint design template (item_PowerPoint.html) and open it with a text editor (eg. Notepad++). The content is a mixture of normal HTML format and Javascript - plus a placeholder language that can be used to display values from the search index.\nIn our case, just a few modifications are necessary. First adjust the title in the title tag so that we will find the display template later: SPAdvent PowerPoint item.\nThen add to the html tag mso:ManagedPropertyMapping: ,’Technologie\u0026rsquo;:’Technologie’ - the coma at the beginning should not be missed. With this we tell SharePoint search that we need for this template display the value of technology and this is to be loaded with the search results.\nAs last step create a new line after line 38 and insert the following text:\nTechnologie: _#=ctx.CurrentItem.Technologie=#_ The file should look like this now:\nWith this new HTML tag, a new row is displayed in the display template - the ctx.CurrentItem.Technologie will be replaced with the value from the search index, in this example our technology value.\nNow save the file under a new name (don\u0026rsquo;t modify the existing ones!) and upload it back to the design templates library - in the same folder from which we have downloaded it. Simply close the dialog with OK after uploading.\nStep 4: Creating the Result Type In order to tell SharePoint search that it should use our new Display Template for PowerPoint now, we need a new search result type. Go to the site settings and there to search result types. There we add a new one with the name SPAdvent PPT. The only condition we add is that we restrict it to type Microsoft PowerPoint. Finally, we choose the action - the result shall be represented by the SPAdvent PowerPoint display template:\nSave it and then the search results type should look like this:\nStep 5: Look at the result So that\u0026rsquo;s it - the new Display Template is ready and will be used on the search page:\nAlthough there are relatively many steps, still no \u0026ldquo;real\u0026rdquo; development or any special development languages are needed. Changes can be made quickly and easily implemented.\nThis simple example shows how powerful display templates can be and how quickly they can bring added value to the end user.\nFurther readings: Custom actions in a hover panel Search Query Tool (the one tool for all search queries!) Blog Series: Search Queries Collection of Display Templates ",
    "tags": null,
    "categories": ["Customization","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/10/hes-dead-jim-sharepoint-2013-search-troubleshooting/",
    "title": "He’s dead, Jim: SharePoint 2013 Search Troubleshooting",
    "date_published": "2014-10-13T09:03:32Z",
    "description": "Recently we had some strange search issues in our very own intranet and its time to blog about some SharePoint 2013 Search Troubleshooting.\nAt first I noticed that our Search results were quite old, usually that is not the case because we enabled continuous crawling and I was surprised that it worked that well. How I noticed? I have tiny app that utilized search and supports our core business process: billing.",
    "content": "Recently we had some strange search issues in our very own intranet and its time to blog about some SharePoint 2013 Search Troubleshooting.\nAt first I noticed that our Search results were quite old, usually that is not the case because we enabled continuous crawling and I was surprised that it worked that well. How I noticed? I have tiny app that utilized search and supports our core business process: billing. But it suddenly stopped finding new items.\nIssue 1: Broken web.config on our search server As mentioned above I noticed that new items in our SharePoint Environment did not show up - you can quickly confirm that when you go to your search center and search for *****. Then check the Last Modified Refiner and as you can see below: we had a problem.\nLast Modified refiner - with zero results for today But once you identified the problem you can tackle it. In this case I told our internal IT that there is something wrong, we checked the crawl log: ~560.000 errors.\nThat this was not monitored is a different story - but the error I saw that was quite familiar: “Search error: crawler could not connect to the repository”. That means either the SharePoint is not running, there is a firewall in between - or as in our case it returned HTTP 500 errors for every request. I could easily confirm that by opening a browser on the SharePoint crawler itself and open the target site. I looked at our IT admin: “Did you change something?” - he: “We deployed a feature and that did not work out that well…” - me: “Did you remove it everywhere except the search crawler?” - he nodded. The in this case broken web.config was quickly restored - started a full crawl to get rid of the many errors and we should be fine, right? Right?!!\nIssue 2: Cannot plan query for index system Because full crawls tend to take quite a while - even with like 100 dp/s - I checked the search results the next morning:\nThat did not work - every search query resulted in that error. The important part is the correlation ID Ouch - what happened? I right away called our admin: “What did you do?” - he said “I just changed the password of the farm account via central admin like I did several times” - mhh, that should work, nothing to blame here. So I asked him to send me the uls logs and some screens of the SharePoint Search Service Application:\nFull crawl seems to work - a bit slower than it should tho Crawl logs do not look too suspiciously.\nEvent log #1 Huston - we have a problem! Event log - useful as ever to identify that you have a problem but sometimes it does not help you identify what problem you have… so I was keen to see the ULS entry for the correlation ID I saw during the search - so I got it:\nSearchServiceApplication::Execute-Exception: Microsoft.SharePoint.SPException: Tried IMS endpoints for operation Execute: Cannot plan query for index system SP2f28f6df0f54. Index fragment ‘1\u0026rsquo; has no available cells. Cell statuses: [Cell I.0.1 on node IndexComponent3: Cell status is set to ‘not available\u0026rsquo; (cell out of sync or seeding)] at Microsoft.Office.Server.Search.Query.Ims.LoadBalancer.RoundRobinLoadBalancerContext.NextEndpoint(String operationName, String failMessage) at Microsoft.Office.Server.Search.Administration.SearchServiceApplication._ImsQueryInternalType.DoSpLoadBalancedImsOp[T](ImsBackedOperation`1 imsCall, Int32 timeoutInMilliseconds, Int32 wcfTimeoutInMilliseconds, String operationName) at Microsoft.Office.Server.Search.Administration.SearchServiceApplication…. fe0fc09c-8c99-b017-25c9-d3feac78a369\nThat sounds not that healthy, especially the Cell status is set to ‘not available\u0026rsquo; (cell out of sync or seeding). The index is made out of cells - if they are not there, Search is very unhappy. I can only conclude that changing the password during a full crawl is a bad idea.\nSo we first tried to restart the SharePoint Search Service - no result.\nWe restarted the entire box - no result.\nSo we heavy-heartedly did an index reset and the search results immediately came back - empty but working again. But trust me, resetting the index during a workday, with many search-driven applications around is not the greatest experience you can have - and you shouldn’t. There is room for improvement in our intranet, do you agree?\n",
    "tags": null,
    "categories": ["Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/07/create-sharepoint-20102013-search-content-sources-one-script-rule/",
    "title": "Create SharePoint 2010/2013 Search Content Sources – one script to rule them all",
    "date_published": "2014-07-14T18:23:20Z",
    "description": "In this article I will show you how to create SharePoint 2010/2013 Search Content Sources with a handy powershell script and why you should care.\nThis is my 100th blog post and therefore it has to be something with SharePoint Search - something good. I had the idea for the script on my mind for quite a while now, but there was no project and no time to create it - until now.",
    "content": "In this article I will show you how to create SharePoint 2010/2013 Search Content Sources with a handy powershell script and why you should care.\nThis is my 100th blog post and therefore it has to be something with SharePoint Search - something good. I had the idea for the script on my mind for quite a while now, but there was no project and no time to create it - until now.\nThe Problem During my consultant work I see quite a lot of different SharePoint environments and 90% of the Search Service Applications look like this before I start working there:\nWhat is the problem you may ask? I see quite a few. Most intranets I see are rather big and have different sections/departments/regions within their portal - with different requirements of course. Some aggregate their content via Search (aka Search driven applications) and some don’t - some upload documents, some only use SharePoint as archive - as flexible as you can use SharePoint and as different as the requirements can be you should adjust your Search Content Sources accordingly - because everything you configure there will be in the Search Index - everything else wont.\nEverything you configure in the SharePoint Content Sources will be in the search index - everything else won\u0026rsquo;t!\nSo what is the problem with one content source? You are not flexible - no different crawl schedules, no priorities - just one setup to cover everything. How about different settings for DEV / QA systems ? How about different crawl schedules for people search? LOB / BCS, external systems? Or people complain that some results appear too late in the search or that they are not there at all? Read on!\nThe Solution You can create content sources with PowerShell - that’s a good thing and enables us to automate it. So the easiest way to create a Content Source would be (except creating them by hand in the central admin) with this one-liner:\nNew-SPEnterpriseSearchCrawlContentSource -Type SharePoint -name \"Content Source 1\" -StartAddresses \"http://sharepoint\" -SharePointCrawlBehavior CrawlVirtualServers You will be asked for the name of the Search Service Application and then it creates the Content Source for you - good, simple and works. But apparently no crawl schedule. And imagine creating that for 16 different content sources with different crawl schedules and what not. And maintainable and readable it should be, too. So we need a more sophisticated script for that with reproducible results - in other words we need a xml config file and a powershell with the logic.\nMy script consists out of two files - one is the actual powershell with all the logic and the second is a xml config file with all the parameters - lets have a look inside the xml file.\nXML Config File The config file contains every to be created/updated content source In the 3rd line you have to specify the Search Service Application in my case this is “Search Service Application”.\nIn line 13, 46 and 81 I configure three different content sources - if you want to create more, then you only have to copy one block and maybe for the ease of use the comments surrounding the block starting with and ending with .\nEvery block has a unique name, a type (currently tested is SharePoint and File) and a crawl behavior (CrawlSites = crawl the site collection; CrawlVirtualServers = crawl the entire host/web app)\nIn every you can define the start addresses of the content source within the element. If you have multiple addresses, separate them with a new line or return.\nThen every can have up two crawl schedules. The comments above and the three provided examples should give you a good understanding how to configure the crawl schedules.\nThe script You don’t have to read the script or customize it - everything is configured in the xml config - the script just reads the xml file that must be in the same directory. The script has no parameter but must be run in an elevated PowerShell on a SharePoint Server.\n.\\CreateContentSource.ps1 Run the script in an admin powershell Running the script with the provided xml would give you the following output:\nSearch Service Application: Search Service Application\u0026nbsp; - exists SharePoint 2010 (QA) Content Source: SharePoint 2010 (QA)\u0026nbsp; already exist. Url: http://sharepoint2013 Schedules: ScheduleType:\u0026nbsp; Full Schedule: Weekly Days:\u0026nbsp; Saturday Startdate:\u0026nbsp; 06:00 ScheduleType:\u0026nbsp; Incremental Schedule: Daily Run every:\u0026nbsp; 1\u0026nbsp; day(s) Repeat Interval:\u0026nbsp; 30\u0026nbsp; minutes Repeat Interval:\u0026nbsp; 1440\u0026nbsp; minutes SharePoint 2007 (productive) Content Source: SharePoint 2007 (productive)\u0026nbsp; already exist. Url: http://sharepoint2007/sites/test1 Url: http://sharepoint2007/sites/test2 Url: http://sharepoint2007/sites/test3 Schedules: ScheduleType:\u0026nbsp; Full Schedule: Weekly Days:\u0026nbsp; Saturday Startdate:\u0026nbsp; 10:00 ScheduleType:\u0026nbsp; Incremental Schedule: Daily Run every:\u0026nbsp; 1\u0026nbsp; day(s) Repeat Interval:\u0026nbsp; 30\u0026nbsp; minutes Repeat Interval:\u0026nbsp; 1440\u0026nbsp; minutes Fileshare Url: \\\\filer\\folder Name\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Id\u0026nbsp;\u0026nbsp; Type\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; CrawlState\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; CrawlCompleted ----\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; --\u0026nbsp;\u0026nbsp; ----\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; ----------\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; -------------- Fileshare\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; 19\u0026nbsp;\u0026nbsp; File\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Idle Schedules: ScheduleType:\u0026nbsp; Full Schedule: Weekly Days:\u0026nbsp; Saturday Startdate:\u0026nbsp; 10:00 ScheduleType:\u0026nbsp; Incremental Schedule: Daily Run every:\u0026nbsp; 1\u0026nbsp; day(s) Repeat Interval:\u0026nbsp; 30\u0026nbsp; minutes Repeat Interval:\u0026nbsp; 1440\u0026nbsp; minutes done. \u0026#8230; and the same as screenshot! This will result in the following configuration in the central admin:\n3 new content sources one example with the urls set \u0026#8230; and the crawl schedules! Important: This script does not remove or rename content sources (it simple can\u0026rsquo;t detect those changes)! If you want to rename an existing content source you can either delete the content source in the central admin or rename it there and in the xml file.\nImportant: Please keep in mind that deleting a content source or changes source addresses within a content source deletes items within your index! There will be an automatic cleanup of the index once you remove urls from a content source and you have to recrawl the items if you still need them!\nIf you change the parameters in the script, e.g. the crawl schedule and run the script again - the script will update the content source for you. So if you have a different environment with the same configuration, just copy both files - if they are different, you have to adjust the config file accordingly.\nHow to get the script I released the script based on the MIT license in this GitHub repository:\nhttps://github.com/MaxMelcher/SPContentSource\nFeedback / next steps Some parts of the script are in a very rough state - I will update the script very soon because I need it in a project. Some of the next steps are:\nHandle priorities Support continuous crawl (SP2013 only) Implement BCS and other types Add some more logging Add some error handling Add crawl rules If you encounter any bug or problem please drop me a line or open an issue here. Contributions and pull requests or any other feedback is much appreciated.\n",
    "tags": null,
    "categories": ["Customization","Powershell","Search","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/06/happened-ulsviewer-still-get/",
    "title": "What happened to ‘the’ ULSViewer and how to still get it?",
    "date_published": "2014-06-04T08:55:23Z",
    "description": "MSDN Archive has been retired this week - I do not know why they retired it before there is an adequate replacement for the majority of the tools, but it has a huge impact on my work. One of my favorite tool, the famous ULSViewer is was hosted there.\nYou will be greeted with this beautiful page when you try to download the ULSViewer - no alternative download location so far!",
    "content": "MSDN Archive has been retired this week - I do not know why they retired it before there is an adequate replacement for the majority of the tools, but it has a huge impact on my work. One of my favorite tool, the famous ULSViewer is was hosted there.\nYou will be greeted with this beautiful page when you try to download the ULSViewer - no alternative download location so far! ULSViewer - why would you miss it? Why I love the tool?\nits tiny - with just 487kb you can grab it, copy it over the slowest RDP connection and start working in less than a minute. its super fast - even with the biggest ULS Logs you can still filter and search for correlations, full text and what not. its just one file - no installation, plain .exe file, it can not be simpler. the filtering and coloring is superb - reading the uls can be very challenging (sometimes you need true SharePoint Ninja Skills), but the filtering and coloring really helps me a lot. it has real-time support - watching what happens right when it happens - I hate wait times. it supports all versions - support for SharePoint 2007 - 2013 is just great! its free - I used it for roughly 30 clients - no licensing costs helps quite a lot. Additionally, just yesterday I solved an issue with the ULSViewer where the coloring and the real-time functionally was a major part of the issue identification.\nBringBackULSViewer.com Trevor Seward (@NaupliusTrevor) launched a page to express that we want the ULSViewer back - most favorably released with an Open Source license hosted on Github or Codeplex.\nIf you did not participate in the survey - please do so now! Collecting our voices helps!\nHow to still get it? There are three options:\n1. You downloaded it already Easy one - just don’t loose the file. OneDrive it and you cant loose it, right ?\n2. You can download it from Todd Klindt If Tood uses ULSViewer, it has to be good, right? Todd mirrors the ULSViewer on his blog - download it here.\n3. Coolest solution: Download it with PowerShell Install chocolatey (takes 30 seconds) and use the following command\ncinst ulsviewer This downloads the ulsviewer and creates a shortcut on your desktop - in less than a minute in total - quite handy and super fast!\nMore chocolatey? Install SharePoint Designer with Chocolatey Updated Chocolatey with more tools Little helpers for \u0026ldquo;lazy\u0026rdquo; developers Install ULSViewer with Powershell ",
    "tags": null,
    "categories": ["Community","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/05/installing-sharepoint-2013-sp1-sql-server-2014-windows-server-2012-r2-picture-love-story/",
    "title": "Installing SharePoint 2013 SP1 with SQL Server 2014 on Windows Server 2012 R2 – Picture Love Story",
    "date_published": "2014-05-30T15:38:53Z",
    "description": "I am trying something new for me: This will be a huge picture post.\nToday we have a bridge day in Germany and that means most of my colleagues and clients are taking the day off. Ideal time for me to replace my SharePoint installation and bring it to a new level. Why did I upgrade? Well, lets say I have a fable to try everything new out before customers asks me some questions about it – and I kinda like shiney new stuff.",
    "content": "I am trying something new for me: This will be a huge picture post.\nToday we have a bridge day in Germany and that means most of my colleagues and clients are taking the day off. Ideal time for me to replace my SharePoint installation and bring it to a new level. Why did I upgrade? Well, lets say I have a fable to try everything new out before customers asks me some questions about it – and I kinda like shiney new stuff. Hands on, here we go.\nRequirements In this post I show you how to install a small SharePoint 2013 Development Environment in 49 pictures - and a picture is worth a thousand words, right?\nYou need\na virtualization environment with a preconfigured Active Directory (Azure, Hyper-V, VMWare - I show it with Hyper-V on Windows 8.1 Update 1) the installation images, I got mine from my activeMSDN subscription: Windows Server 2012 R2 with Update (en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso) SQL Server 2014 (en_sql_server_2014_enterprise_edition_x64_dvd_3932700.iso) SharePoint 2013 SP1 (en_sharepoint_server_2013_with_sp1_x64_dvd_3823428) Visual Studio 2013 with Update 2 (en_visual_studio_premium_2013_with_update_2_x86_dvd_4238022) AutoSPInstaller (version 3.96) coffee \u0026amp; internet or some work during the installation. How to \u0026ldquo;read\u0026rdquo; this post? In this post I intentionally leave a lot out - most of this the \u0026ldquo;next next next\u0026rdquo; dialogs during setups or what I consider basic stuff. Sometimes I do not show how to get to a specific dialog - if you are stuck, please drop me a comment.\nWhen you open one picture, you can jump to the next one if you just click on the image. - the description is above it.\nLet’ start: Windows Server 2012 R2 1. Create a new VM - give it a cryptic name so only you understand whats in the box 🙂 2. Generation 2 has way shorter boot times and is more performant 3. Give it as much RAM as you can - I will change it later once I shut down my work VM. 4. You need some network to install those precious windows updates and tools later on 5. Storage: 127GB is good enough, you could extend later on. 6. Pre-mount the Windows Server 2012 R2 image 7. Ready, steady, go! Start the machine. 8. Thats new with Generation 2 VMs - Full Screen, copy \u0026 paste transfer and much more. 9. Select your language options - I always install English with German keyboard layout so I dont need to break my fingers when I type @ or \\ 10. Time for the first coffee 11. I always use pass@word1 as password - don't tell anyone! 12. Network settings - I disable IPv6 because it complicates things for me. 13. With this IP my Internet Connection Sharing does always work - DNS is my Active Directory Server. 14. Time for the domain join and a decent name. Lets call the server sp2013-2. 16. Lets try to join my domain \"demo.com\" 17. A prompt is always a good sign here. Enter Domain Admin credentials. 18. Yes! It worked. 19. Important: Configure Windows Udpates. Because I frequently present, I dont want the updates to be downloaded or installed when I dont want it. Cell usage is quite costly, please ask dear windows! Install SQL Server 2014 20: Time for SQL Server 2014 21: Select what you need - for me only 3 checks. Database Engine is obvious. 22: Management Studio is important, too. 23. Lets install - next next next, oh dear! 24. Open server manager, top right go to \"Add Roles and Features\" 25. Add .NET 3.5 and hit next 26. I always add a named instance, lets call it SharePoint. 27. Add some users with admin privileges. 28. Press next and wait until this screen appears. Coffee? Installing SharePoint 2013 SP1 Please note: you need bundled SP1 to install on Windows Server 2012 R2.\n29. Finally - the base is set, lets install SharePoint 2013 SP1. 30. I install the PreReqs manually with the GUI - am I old school or what? 31. Then I configure my AutoSPInstaller File with everything I need: From Search to BCS - with a single WebApp that contains everything (Best Practice) You can grab my config file here: AutoSPInstallerInput.xml (just rename the extension and drop it to the AutoSPInstaller SP Folder)\n32. Copy the binaries to the SharePoint 2013 folder inside the AutoSPInstaller dir 33. The farm user needs some rights - my user is called spfarm 34. Give it DB Creator and Security Admin rights. 35. Hit play or better start the magic AutoSPInstallerLaunch.bat 36. Green lines are good lines 37. At least no red lines, right? 38. A familiar window 39. Some progress - coffee? 40. Green green green. 41. Creating web apps, service applications, site collections, configuration - this tool is soooo impressive. 42. Voila - Central Admin opens, no red health issue thingy. Install Visual Studio 2013 with Update 2 43. Installing Visual Studio is so easy, I skip the screenshots. Hit next next next. 44. There we go. Install the tools 45. Installing 10 SharePoint must have tools - chocolatey is the answer! Go to http://chocolatey.org to get the package manager to install other tools. Read this post for more info. Then open a new PowerShell and copy this into it:\ncinst 7zip cksdev11 dotPeek gitextensions GoogleChrome notepadplusplus SearchQueryTool SharePoint.HiveShortcut.Desktop SharePoint.HiveShortcut.Explorer SharePointManager2013 SPCAF SPSF ulsviewer cksdev2012\n46: Chocolatey - sweet! 47: Go go go! 48: Green lines indicate new SharePoint Tools installed. 49: Voila, tools installed - actual work can start now! Closing thoughts Well, writing and preparing this blog post took longer than the actual installation - AutoSPInstaller did a decent job, installing my “baseline” SharePoint Toolbox with chocolatey is easy - welcome brave new world! If I could focus on this 100% full time, I think I can install everything in roughly 2 hours, not bad, right?\nTo be honest, not everything worked like a charm during this setup - how could it? I did not prepare a thing: I had to run autospinstaller like 10 times to install SharePoint - but everytime I forgot a value and the tool was so nice to tell me what was missing - but you can always restart the tool and it continues, awesome! Additionally some of the chocolatey packages failed during install - I will try to fix some of them (you cant complain cause the tools are free, right?). There is room for improvement here.\nBut to close this post, installing everything from scratch was good fun!\nDo you like the style of the picture post? If so, please leave a comment!\n",
    "tags": null,
    "categories": ["Customization","Development","ITPro","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/05/sharecamp-2014-sharepoint-weekend-long/",
    "title": "ShareCamp 2014 Recap – SharePoint all weekend long!",
    "date_published": "2014-05-30T15:12:26Z",
    "description": "ShareCamp 2014 was last weekend (05/23/2014 - 05/25/2014) hosted by Microsoft in Munich and it was the best community event I attended this year – and I repeat that now for 3 years in a row. So why is it that great? The answer is simple but unexpected: Its organized by and depends on active participation of the community: Each attendee can present their topics and questions in a session – if the other attendees wanna hear their stuff.",
    "content": "ShareCamp 2014 was last weekend (05/23/2014 - 05/25/2014) hosted by Microsoft in Munich and it was the best community event I attended this year – and I repeat that now for 3 years in a row. So why is it that great? The answer is simple but unexpected: Its organized by and depends on active participation of the community: Each attendee can present their topics and questions in a session – if the other attendees wanna hear their stuff. Great concept (see barcamp or unconference for more background), I like it. Why? Because its not the 100% well prepared, clinical presentations – its from guys like you and me, you can have fun during the session, interrupt the speaker with questions and more. Just great and very entertaining, the hours passed so fast.\n\u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; Session board with high-quality sessions and innovative topics \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt; \u0026lt;p\u0026gt; \u0026lt;div style=\u0026quot;width: 194px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;img title=\u0026quot;20140525_083126000_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140525_083126000_iOS_thumb.jpg\u0026quot; alt=\u0026quot;20140525_083126000_iOS\u0026quot; width=\u0026quot;184\u0026quot; height=\u0026quot;244\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; 6 sessions in parallel - normally you would have to pay for that. \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;h2\u0026gt; So how does it work? \u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; Every morning all attendees gather and do the session voting. So if you want to present or discuss something, you tell us your session title and a brief abstract – then the attendees vote and if you are lucky (its easy to get votes imho) you get a slot and a room to have some fun. \u0026lt;/p\u0026gt; \u0026lt;h2\u0026gt; Sessions I attended \u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; I was a little late on Saturday (and apparently on Sunday, too) so I did not attend the session votings at all this time – but I attended 6 or 7 sessions, some of them I will describe below: \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; First session was by \u0026lt;a href=\u0026quot;http://hupseb.net/\u0026quot;\u0026gt;Sebastians\u0026lt;/a\u0026gt; (\u0026lt;a href=\u0026quot;https://twitter.com/hupseb\u0026quot;\u0026gt;@hupseb\u0026lt;/a\u0026gt;) session about \u0026lt;strong\u0026gt;Dev Environments hosted on Azure\u0026lt;/strong\u0026gt; – solid talk, even though that the demo did not work because of poor wifi. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Slides: \u0026lt;a title=\u0026quot;http://melcher.it/s/2D\u0026quot; href=\u0026quot;http://melcher.it/s/2D\u0026quot;\u0026gt;http://melcher.it/s/2D\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/20140524_120422582_iOS.jpg\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;20140524_120422582_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140524_120422582_iOS_thumb.jpg\u0026quot; alt=\u0026quot;20140524_120422582_iOS\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;184\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;strong\u0026gt;Search-driven Intranet\u0026lt;/strong\u0026gt; by Sascha Henning (\u0026lt;a href=\u0026quot;https://twitter.com/sascha_henning\u0026quot;\u0026gt;@sascha_henning\u0026lt;/a\u0026gt;) was very interesting, too. Whole Intranet was powered by search – and as you know, I \u0026lt;3 Search. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Some ideas I will \u0026lt;span style=\u0026quot;text-decoration: line-through;\u0026quot;\u0026gt;steal\u0026lt;/span\u0026gt; copy, I totally liked the “daily menu app” aka Word Document rendered with Office Web Apps. \u0026lt;/p\u0026gt; \u0026lt;div style=\u0026quot;width: 780px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/h_ulbricht/status/470127161446125568/photo/1\u0026quot;\u0026gt;\u0026lt;img src=\u0026quot;https://pbs.twimg.com/media/BoY6KYuCQAA1_-K.jpg:large\u0026quot; alt=\u0026quot;\u0026quot; width=\u0026quot;770\u0026quot; height=\u0026quot;433\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; Picture by @h_ulbricht \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p\u0026gt; \u0026lt;strong\u0026gt;Office 365 Development Experience Exchange \u0026lt;/strong\u0026gt;by Christian Gross was very entertaining. The attendees did not have that many experiences with O365 dev, but Christian told us how much trouble his company had to migrate their on-prem tool to the cloud. We discussed what problems we see with the rather unstable API of O365 and the problems with the 2-weekly releases. Good stuff to keep in mind. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;strong\u0026gt;Easy site provisioning with \u0026lt;a href=\u0026quot;http://melcher.it/s/2G\u0026quot;\u0026gt;Collaboration Manager\u0026lt;/a\u0026gt; \u0026lt;/strong\u0026gt;again by Christian Gross – this was a product session and good to see how powerful this 3rd party tool is. You can create team site templates within SharePoint. Then you can provision them based on this template. The most impressive part was to see the synchronization when the template changed – you ever tried to update sites after the site definition/template changed? There is a tool for that. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;strong\u0026gt;Location/Context-aware apps by \u0026lt;/strong\u0026gt;\u0026lt;a href=\u0026quot;https://twitter.com/c_heindel\u0026quot;\u0026gt;\u0026lt;strong\u0026gt;Christian Heindel\u0026lt;/strong\u0026gt;\u0026lt;/a\u0026gt;: Some good ideas about context/location aware apps in this session. How about promoting the time tracking apps \u0026lt;strong\u0026gt;on Friday \u0026lt;/strong\u0026gt;when people track their hours? \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026amp;nbsp; \u0026lt;/p\u0026gt; \u0026lt;h2\u0026gt; Sessions I presented \u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; My plan was to present a session about \u0026lt;strong\u0026gt;Search-driven apps with SharePoint 2013\u0026lt;/strong\u0026gt; – but because I was in the hospital in the morning (long story!) I could not present my session during the session vote. But luckily \u0026lt;a href=\u0026quot;https://twitter.com/NickiBorell\u0026quot;\u0026gt;Nicki Borell\u0026lt;/a\u0026gt; (SharePoint “Search” MVP) had an “open” search session and asked me to co-present. So we both faced around 30 people with a multitude of SharePoint questions from Managed Properties, Search Architecture, Search Tools (I presented the \u0026lt;a href=\u0026quot;https://sp2013searchtool.codeplex.com/\u0026quot;\u0026gt;Search Query Tool v2\u0026lt;/a\u0026gt;) , BCS search connectors and future improvements of search – in just one hour! I hope the attendees had as much fun as we had. \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; So here are my slides (I did not present all of them): \u0026lt;a title=\u0026quot;http://melcher.it/s/2E\u0026quot; href=\u0026quot;http://melcher.it/s/2E\u0026quot;\u0026gt;http://melcher.it/s/2E\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; The second session is an evergreen – I think I presented this one the 3rd or 4th time with updated slides of course: \u0026lt;strong\u0026gt;SharePoint Best Tools\u0026lt;/strong\u0026gt; or \u0026lt;strong\u0026gt;SharePoint Toolbox\u0026lt;/strong\u0026gt;. I am always astonished how many people develop or administer SharePoint systems without proper tools – and there are soooooo many tools around to make our lives easier. To name some: CKSDEV, SharePoint Manager, AutoSPInstaller, SharePoint Search Query Tool (\u0026lt;= my favorite), ULSViewer, Feature Admin, SharePoint Manager, Balsamiq, SPCAF, … \u0026lt;/p\u0026gt; \u0026lt;div style=\u0026quot;width: 1034px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;https://twitter.com/h_ulbricht/status/470544716153372672/photo/1\u0026quot;\u0026gt;\u0026lt;img src=\u0026quot;https://pbs.twimg.com/media/Boe17Q1CYAArVk1.jpg:large\u0026quot; alt=\u0026quot;\u0026quot; width=\u0026quot;1024\u0026quot; height=\u0026quot;576\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; SharePoint Tools - here I show the awesome chocolatey \u0026quot;meta\u0026quot; tool. Picture by @h_ulbricht. \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p\u0026gt; More in my slides: \u0026lt;a title=\u0026quot;http://melcher.it/s/2F\u0026quot; href=\u0026quot;http://melcher.it/s/2F\u0026quot;\u0026gt;http://melcher.it/s/2F\u0026lt;/a\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;h2\u0026gt; More Pictures \u0026lt;/h2\u0026gt; \u0026lt;div style=\u0026quot;width: 254px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/20140525_112827069_iOS.jpg\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;20140525_112827069_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140525_112827069_iOS_thumb.jpg\u0026quot; alt=\u0026quot;\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;184\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; Whats up next? \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;width: 254px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/20140525_134734314_iOS.jpg\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;20140525_134734314_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140525_134734314_iOS_thumb.jpg\u0026quot; alt=\u0026quot;\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;184\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; A conference needs a raffle, right? \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;width: 254px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/20140524_115629578_iOS.jpg\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;20140524_115629578_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140524_115629578_iOS_thumb.jpg\u0026quot; alt=\u0026quot;\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;184\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; 200 attendees group picture directey by Michael Greth (@mysharepoint) \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;width: 254px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/20140525_112844430_iOS.jpg\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;20140525_112844430_iOS\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/20140525_112844430_iOS_thumb.jpg\u0026quot; alt=\u0026quot;20140525_112844430_iOS\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;184\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; Exhibit hall \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;width: 254px\u0026quot; class=\u0026quot;wp-caption alignnone\u0026quot;\u0026gt; \u0026lt;a class=\u0026quot;thickbox\u0026quot; href=\u0026quot;http://melcher.it/wp-content/uploads/ShareCamp-born2share._2014-05-30_16-26-52.png\u0026quot;\u0026gt;\u0026lt;img style=\u0026quot;background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\u0026quot; title=\u0026quot;ShareCamp - born2share._2014-05-30_16-26-52\u0026quot; src=\u0026quot;http://melcher.it/wp-content/uploads/ShareCamp-born2share._2014-05-30_16-26-52_thumb.png\u0026quot; alt=\u0026quot;ShareCamp - born2share._2014-05-30_16-26-52\u0026quot; width=\u0026quot;244\u0026quot; height=\u0026quot;87\u0026quot; border=\u0026quot;0\u0026quot; /\u0026gt;\u0026lt;/a\u0026gt; \u0026lt;p class=\u0026quot;wp-caption-text\u0026quot;\u0026gt; Sponsored by those great companies - thanks! \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;h2\u0026gt; Closing thoughts \u0026lt;/h2\u0026gt; \u0026lt;p\u0026gt; Well, there was one thing that I totally did not like this year. ShareCamp is now so successful that its hard to get a ticket. There are around 200 available tickets and they were gone in roughly 4 hours!!! So if you forget to register just one day – you were most likely out of luck and on the waiting list. This leaves the taste of an “insider event” but it should be for the community – and as it seems there is a huge demand in Germany. \u0026lt;strong\u0026gt;So why not scale up next year\u0026lt;/strong\u0026gt;? \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Additionally I would love to have \u0026lt;strong\u0026gt;2 hour sessions slots\u0026lt;/strong\u0026gt; – some well chosen topics (voting upfront like the SP24 conference did it) for special topics (search? app development? Just something with a broader range and 1 hour is just not enough). \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; That’s it for this year –\u0026lt;strong\u0026gt; thanks again to all organizers, MVPs, sponsors and Microsoft for this great event! I had a blast\u0026lt;/strong\u0026gt;. \u0026lt;/p\u0026gt; ",
    "tags": null,
    "categories": ["Community","Conference"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/04/late-attend-sp24-free-24h-worldwide-sharepoint-conference/",
    "title": "It’s not too late! Attend SP24 – The free 24h worldwide SharePoint conference!",
    "date_published": "2014-04-16T07:07:49Z",
    "description": "This is a last minute call for SP24 - The free 24h worldwide SharePoint conference – the free 24h worldwide SharePoint conference starts today/tomorrow and I am presenting!\nSTARTING TODAY Register for FREE now (it is not too late) and skip lunch, breakfast – or what every you are doing and be part of the great community event! 1 month ago you had to pay at least $1,500.00 to see some of the speakers – again SP24 is free!",
    "content": "This is a last minute call for SP24 - The free 24h worldwide SharePoint conference – the free 24h worldwide SharePoint conference starts today/tomorrow and I am presenting!\nSTARTING TODAY Register for FREE now (it is not too late) and skip lunch, breakfast – or what every you are doing and be part of the great community event! 1 month ago you had to pay at least $1,500.00 to see some of the speakers – again SP24 is free!\nFACTS FACTS FACTS! SP24 lasts for 24 hours and will follow the sun from New Zealand to Hawaii. It will begin on April, 16th 2014 at 10 pm GMT and will end 24 hours later. SP24 will feature speakers that are voted for by the community (Note: some slots are already reserved for experienced speakers and world-renowned SharePoint experts) – you can see the agenda here. SP24 sessions will be hosted live and you will have the possibility to interact with the speaker and other attendees through integrated chat. SP24 has 2 tracks, one to appeal to Business Users and one for Technical Users such as developers and administrators. SP24 is going to be held entirely on-line. SP24 is completely FREE! My Session: Search-First Migration for SharePoint 2013 – Benefits / Disadvantages I was lucky enough to grab a session – you can watch the teaser here for it:\nOfficial Start:\n**GMT time: 17.04.2014 11:00 AM GMT\nGerman time: 17.04.2014 01:00 PM CEST**\nI will be in the chat during my session and answer question!\nSo, who stays up the whole time? ",
    "tags": null,
    "categories": ["Conference","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-download-session-slides-simple-solution/",
    "title": "Download all SPC14 session slides (simple solution)",
    "date_published": "2014-03-12T09:51:22Z",
    "description": "Attended SPC14 in Las Vegas and want to download all slides? Here we go with a really simple solution – it only takes some times and roughly 100 clicks. Kudos to Sahil Malik for the script.\n6 easy steps to download all SPC14 session slides Open SPC14 Yammer: https://www.yammer.com/sharepointconference/groups/company/uploaded_files\nFilter on Documents:\nFilter on Documents to remove unwanted files Scroll down and click on “More” until all elements are visible: Scroll down and click on more - repeat until all files are visible.",
    "content": "Attended SPC14 in Las Vegas and want to download all slides? Here we go with a really simple solution – it only takes some times and roughly 100 clicks. Kudos to Sahil Malik for the script.\n6 easy steps to download all SPC14 session slides Open SPC14 Yammer: https://www.yammer.com/sharepointconference/groups/company/uploaded_files\nFilter on Documents:\nFilter on Documents to remove unwanted files Scroll down and click on “More” until all elements are visible: Scroll down and click on more - repeat until all files are visible. Open Developer Tools (F12)\nPaste in this script and execute:\njQuery.each(jQuery('[href^=\"https://www.yammer.com/sharepointconference/uploaded_files/\"]'), function (index, elem) { window.open(elem.href.replace('sharepointconference', '/api/v1') + '/download'); }); If there is a popup warning allow them always and rerun the script.\nClick on save until all files are downloaded. Other options I tried to create a console application to authenticate and download files – but that was so much pain that I went for the not so comfortable JavaScript variant. If you have improvements to this - leave a comment!\n",
    "tags": null,
    "categories": ["Conference"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-summary/",
    "title": "SPC14: My Summary",
    "date_published": "2014-03-09T07:53:41Z",
    "description": "Here is my summary of the SharePoint Conference 2014 in Las Vegas (3/3/2014 to 3/6/2014) – if you don’t want to ready everything: It was really good!\nHighlights The Main Keynote was perfectly delivered – I did not notice a single glitch. Even the talk of President Bill Clinton was quite good, even though that he did not mention SharePoint with a single word.\nThe introduction of Project OSLO – for me as a Search guy was a really pleasant surprise – in my opinion the end users will like it because of its simplicity and you will get the relevant documents, not just everything.",
    "content": "Here is my summary of the SharePoint Conference 2014 in Las Vegas (3/3/2014 to 3/6/2014) – if you don’t want to ready everything: It was really good!\nHighlights The Main Keynote was perfectly delivered – I did not notice a single glitch. Even the talk of President Bill Clinton was quite good, even though that he did not mention SharePoint with a single word.\nThe introduction of Project OSLO – for me as a Search guy was a really pleasant surprise – in my opinion the end users will like it because of its simplicity and you will get the relevant documents, not just everything.\nMy “wow” moment was when the presenter showed the OSLO app and then switched back to the SharePoint document library containing a couple hundred of documents and folders – you don’t want everything, right?\nSessions I always try to take notes and summarize every session for me on my blog – sometimes it’s a “fast publish” and contains not that much information, but I hope the gist is understandable. If not, feel free to comment or wait 30 days until the recordings are published on Channel 9.\nI did not miss one single session – but the schedule was so full, sometime I had 5 sessions in parallel and had to choose just one of them. That’s the problem when you are interested in very broad area (ITPRO; DEV; Search). Additionally there was not that much room for me to explore the exhibit hall – but that’s not something I really miss.\nIn the case you want to read it – I created 19 posts for the conference:\nMigrating traditional SharePoint Solutions to App Model (PreConference Part 1) Refactoring Business Solutions into Apps for Office (PreConference Part 2) Keynote (Main Keynote with President Bill Clinton) What’s new for Office and SharePoint Developers (Developer Keynote) Introducing Codename Oslo and the Office Graph (read this – good stuff!) SharePoint 2013 hybrid end-to-end (Hybrid architecture is the new thing!) Real-world SharePoint architecture decisions (Wictor Wilén – that’s a must) Complex Problem Solving with the new HTML5 APIs (once my clients have new browsers I will profit from this session) Search-driven publishing for Intranet Portals in SharePoint Online (new Search Features in O365) Developing future-focused, on-premises solutions (Develop outside SharePoint than you are set for SP2013 / SP vNext / O365) Best practices for Hybrid Search deployments (Hybrid for Search in all details) Designing and applying information architecture for SharePoint and Office 365 (one of my not so technical sessions – liked it!) Build your own REST service with WebAPI 2 (nice and simple – will use it in my next App) Best practices for Information Architecture and Enterprise Search (Agnes again – good advice in this session) Futuristic Search applications using Kinect and Yammer! (that was a fun one – you have to watch the recoding once its live) Search architecture and sizing in SharePoint 2013 (that session was too short – I wanted this one to be for like 4 hours – high value for me) Effective Search deployment and operations in SharePoint 2013 (neat little tricks and some insights in this session) Managing Search Relevance in SharePoint 2013 and O365 (new Search Query Tool was announced in there – go get it!) Additionally to the sessions, the concluding Q\u0026amp;A part was really worth to follow – the questions that were raised there were sometimes really challenging – and the responses of the speaker were good to know.\nAsk the Experts was a great opportunity to meet the experts and members of the SharePoint product team – I asked some special questions and received some free advice – good stuff! I have never seen so many SharePoint Experts in one place - impressive!\nCommunity That was the part that was amazing for me – I met so many people I know only via Twitter, from SharePoint StackOverflow or from contributing to Open Source projects like SharePoint 2013 Search Query Tool. Connecting with others, facing the same problems challenges was really worth to attend – lets keep in touch!\nBut – there were too many of them – even on the last day I met “new” attendees, I could have promised that they were not at the conference at all.\nThe Venetian Is the Venetian a hotel? That place was huge! The session rooms were great, friendly staff to help you where to find the rooms – and coffee, drinks, snacks the whole time – really a perfect managed event.\nPre-Conference room\nFloor in the Venetian\nLas Vegas Pictures are worth a hundred words - Las Vegas was really special:\nWater show in front of the Bellagio\nMetalogix “Best of Breed” Party – that was a good one.\nFake daylight – this really affects your mood.\nLas Vegas View\nWish List for SPC2015 There is not much to change for SPC2015 – basically it boils down to three things:\nMore options to charge my batteries – I really had problems creating my session notes after 4 hours because the session were so dense that there was not enough time to recharge my notebook. The Level 300/400 sessions most of the time started with basic stuff – I wanted it to go deeper, but for this you need time. Spending 15-30 min on basics is not the way to go. Maybe an increased “deep dive” sessions with 2 hours would be something. I want attend again – maybe as speaker, lets see how the next year goes. Closing notes I really liked the event – from crazy Las Vegas to sessions – it was the best SharePoint event I ever attended. That’s something!\n",
    "tags": null,
    "categories": ["Conference"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-managing-search-relevance-sharepoint-2013-o365/",
    "title": "SPC14: Managing Search Relevance in SharePoint 2013 and O365",
    "date_published": "2014-03-06T20:20:18Z",
    "description": "Improve the value of search results by managing Relevance. SharePoint 2013 and O365 provide a comprehensive set of tools to manage Search Relevance. SharePoint 2013 and O365 combine and improve upon the best tools available for Fast Search and SharePoint 2010, and introduce the notion of Query Rules that allow administrators to influence relevance for a single query or sets of queries using a straightforward user interface. In this talk, we will explain how ranking works under the hood, and give hands on demonstrations of how to use query rules, result sources, XRANK, federation to external search providers, and use the rank tuning tool to improve relevance and the value of your search solutions.",
    "content": " Improve the value of search results by managing Relevance. SharePoint 2013 and O365 provide a comprehensive set of tools to manage Search Relevance. SharePoint 2013 and O365 combine and improve upon the best tools available for Fast Search and SharePoint 2010, and introduce the notion of Query Rules that allow administrators to influence relevance for a single query or sets of queries using a straightforward user interface. In this talk, we will explain how ranking works under the hood, and give hands on demonstrations of how to use query rules, result sources, XRANK, federation to external search providers, and use the rank tuning tool to improve relevance and the value of your search solutions. We will explain the Relevance Lifecycle, the iterative process of finding problem queries and fixing them that is essential to optimizing relevance, and discuss which tools are most appropriate for various situations.\nMy notes for “Managing Search Relevance in SharePoint 2013 and O365” by David Louis Hollembaek and Mikael Svenson.at SharePoint Conference 2014 in Las Vegas.\n15 years of search experience on stage\nThe Problem Standard search results lack personal relevancy and the result presentation is not that good – this can be done better.\nThe Plan What can you adjust? Query? Content? Ranking? User Interface? You can adjust everything.\nGoals? What do you want to achieve? Set targets.\nGolden set: Create a reference set that is optimized and show that to end users. This motivates users to increase the quality – this was also part of the IA Best Practices session.\nRelevancy cycle Establish a relevancy cycle to adjust the ranking and gather feedback how that worked. Then plan what to adjust, gather feedback and improve.\nNew Tools Query Rules: reformate/transform query\nDynamic Ranking Rules: reorder the result ranking\nRank Model Tuning App: a new tool by Mikael\nCustom Rank Model: not covered in this session – there is some Technet articles out there.\nCapturing Intent: done with Query Rules.\nDemo 1: add a result block\nDemo 2: add user context / segments to query rule\nSearch Query Tool v2 New functionalities where added in v2: XRANK freshness generator (new documents are ranked higher than older documents):\nExplain Rank feature (why is this result ranked like this)\nand much more. I contributed to the project – there was much more added, go try it and provide feedback!\nIt is a very essential tool when you do something search related – for ITPRO and DEVS.\nDownload is free – go grab it here.\nRanking App for O365 Mikael showed us the ranking app for O365 that was released in January – wow, good stuff. To modify the ranking in O365 you add the app to your tenant, then you need to add 11 search query and manually rank the results – than the magic happens. It autotunes the ranking set based on your feedback and this could result in a better relevancy for your users. It is O365 only so far – but there will be an on-prem version “later”. Really an interesting approach – I would love to see that in the general search results – you don’t like your results, please down/up-vote them – that would cool.\nSummary Search was my expectation – Search was delivered. Solid presentation, good slides – I am happy with that. Roughly 400 people attended in the very last session, there is a demand for that. Very good message they transported - very good one!\n",
    "tags": null,
    "categories": ["Conference","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-effective-search-deployment-operations-sharepoint-2013/",
    "title": "SPC14: Effective Search deployment and operations in SharePoint 2013",
    "date_published": "2014-03-06T18:42:56Z",
    "description": "SharePoint 2013 introduces a new and highly flexible search topology. This gives more flexibility on how to scale a system, and allows search to tackle demanding requirements for query and indexing performance. In this session we will take you through the deployment of a multi-node search installation, provide best practices for common operational procedures, and give you tips and tricks on how to keep your search system healthy.\nMy session notes for “Effective Search deployment and operations in SharePoint 2013” by Kristopher Loranger and Mert Sangar at SharePoint Conference 2014 in Las Vegas:",
    "content": " SharePoint 2013 introduces a new and highly flexible search topology. This gives more flexibility on how to scale a system, and allows search to tackle demanding requirements for query and indexing performance. In this session we will take you through the deployment of a multi-node search installation, provide best practices for common operational procedures, and give you tips and tricks on how to keep your search system healthy.\nMy session notes for “Effective Search deployment and operations in SharePoint 2013” by Kristopher Loranger and Mert Sangar at SharePoint Conference 2014 in Las Vegas:\nSearch Architecture Mert showed a comparison how the architecture of search changed from SharePoint 2010 and FAST Search for SharePoint to SharePoint 2013 – good overview.\nBug: October CU 2013 has an issue that when you have a very long Search Service Application name – things break.\nHigh Availability Search is FAST Search now – they implemented the high availability concept of FAST.\nSet up your initial search topology Best to do it in PowerShell – I have a sample script here, there is a better one on MSDN by Brian Pendergrass.\nIts not supported that you change the index location after provisioning,\nI need to clarify that quote – I thought it is supported when you migrate to a new topology where the index is in the new location.\nDuring a repartitioning the search query application is paused, no search results during that time – and I experienced it can take very long!\nRecommendation: symmetric index layout.\nDemo: Setup up multi-node deployment Kristopher showed the script in action – nice\nDeployment Options for Large Enterprise Central Search Farm: better relevancy, lower maintaining costs, better end-user experience Distributed: Search index on each farm, federated results as result blocks Hybrid: On-prem and O365 – federation, stepwise migration of the cloud Keep your Search Topology Healthy Search Diagnostics are available through the UI or with PowerShell (Get-SPEnterpriseSearchStatus) – there is a helper script that renders the results nicely.\nSearch Reports: Performance, Zero-Result queries, etc.\nMonitoring: SCOM and ULS\nThe yellow state in the UI means its degraded and (might) recover, red means hardware or configuration problems. Use powershell cmdlet to get more information.\nKristopher showed some nice tricks how to get insights out of the many search reports – need to rewatch the video afterwards to internalized this for me.\nDaily/Weekly tasks Admins: check search topology, monitor performance, health, # documents per partition\nBusiness users: create best bets and query rules, check zero results and abandoned query.\nPatch and updates Its recommended to install March PU and at least October 2013 CU. Many changes that regarding to scale.\nHigh Availability Kristopher showed the concepts behind search high availability (great stuff) and how to replace a failed node in a search installation. Apparently the demo failed, but they prepared a video so all was good.\nSummary Most of the stuff I knew already – but the devil is in the detail, right? Kristopher and Mert did a nice presentation, very valuable presentation to me! Q\u0026amp;A afterwards was great, too.\n",
    "tags": null,
    "categories": ["Conference","ITPro","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-search-architecture-sizing-sharepoint-2013/",
    "title": "SPC14: Search architecture and sizing in SharePoint 2013",
    "date_published": "2014-03-06T04:55:17Z",
    "description": "In this session we will dig into the new architecture for Search in SharePoint 2013. We will cover all architectural components, plus discuss the differences between the 2013 release versus FAST Search and search in SharePoint 2010. Microsoft has updated topology models for different sized deployments. This will be presented along with sizing and scaling data for both physical and virtual machines - actionable data you can use to assess and use during your planning phase.",
    "content": " In this session we will dig into the new architecture for Search in SharePoint 2013. We will cover all architectural components, plus discuss the differences between the 2013 release versus FAST Search and search in SharePoint 2010. Microsoft has updated topology models for different sized deployments. This will be presented along with sizing and scaling data for both physical and virtual machines - actionable data you can use to assess and use during your planning phase. We will also cover planning for high availability, backup/restore, and migration.\nHere are my session notes for “Search architecture and sizing in SharePoint 2013” by Barry Waldbaum and Thomas Molbach.\nSearch Architecture Thomas briefly explained the Search Architecture – nothing new here for me, its very well documented on Technet.\nScaling SharePoint 2013 Search scales pretty well –. I tried it in a project and it works.\n.\nWeb Front-End Display Template, Query Rules – quite a lot happens on the web frontend.\nAnalytics With the analytics service you can do very great things because it provides the insights behind the “Trends” in SharePoint. It even provides a view counter.\nSearch Query Tool Thomas showed some nice tricks with the awesome Search Query Tool. There is a property called recommendedfor that accepts a url and shows what other items are recommended for the given url. Then he filtered on ViewsRecent to show the elements that were recently clicked on.\nMore about the tool will be announced tomorrow by Mikael Svenson (blog).\nSizing Benchmark the VMs to verify that you get the performance they IT department promised you\nScaling from small 10M to 40M:\nAverage document size is 250KB\nI use that as a rule of thumb, too - but it has constraints.\nSharePoint 2010 had Single Point of Failures – SharePoint 2013 does not have this anymore\nLarge Topology: 100M Enterprise\n24 Servers – phew.\nOctober 2013 Cumulative Update\nHigh Density Indexing: 4 Index Partitions per Node – this cut the amount of server requirements in half (less licenses!) but you have to scale up your hardware.\nQ: Why only 10M items in one index?\nA: Higher amount: Backup takes longer, Response time gets worse\nAnalytics: Scale-up, otherwise it eats more network.\nThat was incredible - I had to stop taking notes, really dense information delivery 🙂\nBackup and Restore Robust backup, no Query Downtime during backup – it is even supported to restore QA backup on PROD (same topology).\nMigration Re-Implement Create everything from scratch.\nSearch First Migration Publish Search Service Application – done that, works great.\nMigrate from SharePoint 2010 Attach the Search Service Application Database\nMigrate from Fast Search For SharePoint 2010 Backup/Restore Database – PowerShell script to to some work.\nSummary Apparently 50% of the session was not in the description – I expected more Sizing and Architecture and was close to leave the audience. Then the good part with the sizing started and provided really good value to me. WOW – had a blast! The changes that happened in October 2013 CU/SP1 for search are really incredible. Additionally, I waited in the queue because there were so many questions – and learned even more. Great stuff. Did I say it was great yet?\n",
    "tags": null,
    "categories": ["Conference","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-futuristic-search-applications-using-kinect-yammer/",
    "title": "SPC14: Futuristic Search applications using Kinect and Yammer!",
    "date_published": "2014-03-05T23:47:37Z",
    "description": "Use your body and voice to search SharePoint and Yammer. Learn how you can utilize SharePoint 2013 Search to index your Enterprise Yammer content on-premises in addition to your regular SharePoint content, then use futuristic UI design and Natural User Interface (NUI) features of the latest Kinect SDK and Kinect Sensors for Windows to build rich NUI and voice controlled search applications. It\u0026rsquo;s possible. It\u0026rsquo;s cool and a little crazy - much to be learned.",
    "content": " Use your body and voice to search SharePoint and Yammer. Learn how you can utilize SharePoint 2013 Search to index your Enterprise Yammer content on-premises in addition to your regular SharePoint content, then use futuristic UI design and Natural User Interface (NUI) features of the latest Kinect SDK and Kinect Sensors for Windows to build rich NUI and voice controlled search applications. It\u0026rsquo;s possible. It\u0026rsquo;s cool and a little crazy - much to be learned. And not a keystroke will be wasted.\nMy notes for the session: “Futuristic Search applications using Kinect and Yammer!” by Chris Givens and and Ben Lower at SPC 2014 In Las Vegas.\nYammer Search Yammer offers a search rest endpoint but its not used for this – you need Enterprise Yammer to export data, that’s how Chris did it.\nOn-Premise Integration To integrate the extracted data you need a BCS connector to get the data into the search index.\nConnector (reading the data) Result Types / Content Source (connect it to the search service application) Display Templates (make it look nice) Dang – this demo took a while to create – and we only saw 50% so far.\nKinect Basics Ben explained the basics of Kinect – wow, impressive. Natural User Interface, User Engagement – its crazy what is possible with the little box. Relate this to SharePoint and you would need 7 servers Kinect can detect when your cat jumps on the couch and can yell “hell no!” in the owners voice!\nSDK is available for free – grab it and do amazing stuff.\nKinect can listen and speaking – and so much more. Ben showed a demo application – simply impressive.\nMinority Report Demo Creating this demo took him 5 weeks - applause for that!\nNatural language searching\nGrabbing and moving stuff with your hand\nI don’t have a good photo, but Chris said “Search Chris” and his app connected to SharePoint search and read out the yammer search results – very slick one!\nSummary I am a search guy, so this session was a must for me: Fun, search and new technology – very good mix, I like it a lot. Especially that you connect technologies that are not related and get something out of it is really cool. Minority Report Technology for Consumers connected to SharePoint, epic.\nAsking a question got me this book – thanks for that, I had a blast.\n",
    "tags": null,
    "categories": ["Development","Search","SharePoint 2013","Yammer"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-best-practices-information-architecture-enterprise-search/",
    "title": "SPC14: Best practices for Information Architecture and Enterprise Search",
    "date_published": "2014-03-05T22:48:25Z",
    "description": "Information Architecture (IA) for a large organization is often as complex as a twisting labyrinth. In this session, we will explain, and demonstrate, why a good IA design is important for search and also provide best practices on how to plan, maintain and govern. We will also demonstrate how search provides the building blocks (entity extraction, metadata processing, etc..) for improving knowledge management and discovery scenarios for people and content.",
    "content": " Information Architecture (IA) for a large organization is often as complex as a twisting labyrinth. In this session, we will explain, and demonstrate, why a good IA design is important for search and also provide best practices on how to plan, maintain and govern. We will also demonstrate how search provides the building blocks (entity extraction, metadata processing, etc..) for improving knowledge management and discovery scenarios for people and content.\nSession “Best practices for Information Architecture and Enterprise Search” by Agnes Molnar at SharePoint Conference 2014 in Las Vegas.\nAnother session by Agnes – really looked forward to this session, here are my notes.\nInformation Overload Getting information off the Internet is like taking a drink from a fire hydrant – Mitchell Kapor\nEverything is connected – we get much more information than we can process, example 63000 words on average we read today – in relation an average size of an amazon book is ~64000 words, so we read a book a day.\nAnd “social” does not make this any better – it gets “worse” because you get more information.\nSearch You have SharePoint – you have Search!\nSearch is not only a technology problem – the challenge is to have a good search, where users can find the right information. Project Oslo helps tackle that, increase findability, discover relevant information around me.\nUsers Analyze what your users want and do – profile them. Then\nContent Analyze what you have (Inventory), review the content (Audit), gather what Metadata and Taxonomy you have and analyze the structure. Do this with a “golden set” – a well defined small set of your data.\nTargeting / Semantic Search With SharePoint OOTB (out of the box) you can interpret the query and correlate it to the current users profile – with this you can control what the user will get, even with the same search query. Sales Manager search for “presentation” and will get sales presentation. Consultant search for “presentation and get consulting presentations – very powerful tool in SharePoint.\nMetadata and Properties Map inconsistent fields from lists and sites to consistent, recallable properties. You can increase the quality of your metadata with auto-tagging. Take in mind that changing Properties require a full crawl – this can take time and consume resources.\nSummary More of this, please! Good stuff – very good structure of the presentation, I could totally follow it. If you don’t follow Agnes blog – she shares very good information there – follow her!\n",
    "tags": null,
    "categories": ["Apps","Conference","Information Architecture","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-build-rest-service-webapi-2/",
    "title": "SPC14: Build your own REST service with WebAPI 2",
    "date_published": "2014-03-05T20:03:36Z",
    "description": "REST and OData are the foundation of data access in a cloud-based world. Office and SharePoint developers are well aware of the new RESTful endpoints available in SharePoint 2013 and may have already consumed some publically-available RESTful endpoints from the Internet. Many apps, however, will require their own RESTful service for accessing custom app data. In this session, we\u0026rsquo;ll cover the fundamentals of creating custom RESTful services with WebAPI 2 and consuming those services in Office and SharePoint apps.",
    "content": " REST and OData are the foundation of data access in a cloud-based world. Office and SharePoint developers are well aware of the new RESTful endpoints available in SharePoint 2013 and may have already consumed some publically-available RESTful endpoints from the Internet. Many apps, however, will require their own RESTful service for accessing custom app data. In this session, we\u0026rsquo;ll cover the fundamentals of creating custom RESTful services with WebAPI 2 and consuming those services in Office and SharePoint apps. Additionally, the session will present approaches for securing your custom services and accessing them across domains. Attendees will exit the session ready to build custom RESTful services for their Office and SharePoint apps.\nSession “Build your own REST service with WebAPI 2” by Scot Hillier – here are my notes.\nLevel 400 – yes!\nREST Client pulls data – stateless, cache indication, accessible through a url.\nWebAPI Framework to create Restful, oData, custom http based services. Part of ASP.net MVC Stand-alone or as part of an app Controllers Basic methods are mapped to http verbs, you can control this through routing:\n/api/{controller}/{id}\nContent Negotiation WebAPI services return what you request – xml or json.\nDemo Scot always show many demos, like it – he showed how to create the service,\nOData A Protocol to query data in a standardized, restful way.\nSecurity Use SSL Validate calling domain in CORS scenario (there is a nuget package for that). Summary Scot Hillier. Solid. Will try this soon, I have a project that is perfect for that.\n",
    "tags": null,
    "categories": ["Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-designing-applying-information-architecture-sharepoint-office-365/",
    "title": "SPC14: Designing and applying information architecture for SharePoint and Office 365",
    "date_published": "2014-03-05T18:36:33Z",
    "description": "This session will demonstrate a proven process for defining, designing, implementing and governing your information architecture (IA). IA is more than just columns and metadata. You will learn how the different components available in SharePoint and Office 365 can be leveraged to their fullest potential and your users\u0026rsquo; ultimate benefit to content organization and discovery.\nSession \u0026ldquo;Designing and applying information architecture for SharePoint and Office 365\u0026rdquo; by Agnes Molnar and Israel Vega Jr.",
    "content": " This session will demonstrate a proven process for defining, designing, implementing and governing your information architecture (IA). IA is more than just columns and metadata. You will learn how the different components available in SharePoint and Office 365 can be leveraged to their fullest potential and your users\u0026rsquo; ultimate benefit to content organization and discovery.\nSession \u0026ldquo;Designing and applying information architecture for SharePoint and Office 365\u0026rdquo; by Agnes Molnar and Israel Vega Jr.\nHere are my notes.\nInformation Architecture (IA) IA: The art and science of organizing and labeling content\nThree points to think about when designing an Information Architecture.\nTry to determine your cost when user do not find documents vs. the cost of finding Cost of development Value of learning Governance You need (to establish) a convention how to name documents and define a structure where to put them – keep your SharePoint clean.\nIA Components Search has the problem that it needs to find things that humans created.\nDon’t rename adjust the Document Content Type – instead inherit from it and create at least a “My Document” (my = company).\nIt is always very sad when a SharePoint Farm dies – I cry (Israel Vega)\nMinimal Components are: Content Types, Navigation, Taxonomy, Site Structure, Site Types.\nPlan Plan Plan! Plan Migration (Inventory what you have, Cloud?) Plan Structure (Sites, Host Headers, Cloud Strategy) Plan Information Lifecycle Make Search Better Key message: SharePoint Search is really good, User need to take care of the document/metadata quality otherwise Search has no chance.\nSearch is the key - I totally agree.\nSummary Very very solid session - totally liked what Agnes and Israel presented. Their experience in this area is outstanding, I follow Agnes on twitter and she shares so many good articles how to layout a good Architecture – for me as a technical person she highlights how to focus on the not so technical problems. Seeing her on stage in combination with Israel was good fun!\nThe presentation style was – WOW – supporting slides, nice pictures – that was my most valuable session so far (so good, I could not write everything down, notes are not complete).\n",
    "tags": null,
    "categories": ["Conference","Information Architecture","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-best-practices-hybrid-search-deployments/",
    "title": "SPC14: Best practices for Hybrid Search deployments",
    "date_published": "2014-03-05T01:33:04Z",
    "description": "SharePoint Conference 2014 Session \u0026ldquo;Best practices for Hybrid Search deployments\u0026rdquo; by Brent Groom and Norm Lambert.\nAre your customers interested in trying out Office365, but still keeping most of their collaboration assets and data on-premises? Are they asking you to provide a single way to find content regardless of where it lives? This session will arm you with the information necessary to help your customers plan Hybrid deployments – connecting SharePoint 2013 on-premises with Office365 – and enabling a comprehensive Search experience that spans the two.",
    "content": "SharePoint Conference 2014 Session \u0026ldquo;Best practices for Hybrid Search deployments\u0026rdquo; by Brent Groom and Norm Lambert.\nAre your customers interested in trying out Office365, but still keeping most of their collaboration assets and data on-premises? Are they asking you to provide a single way to find content regardless of where it lives? This session will arm you with the information necessary to help your customers plan Hybrid deployments – connecting SharePoint 2013 on-premises with Office365 – and enabling a comprehensive Search experience that spans the two. You’ll learn about Search in SharePoint 2013 capabilities in O365, as well as new out-of-box hybrid capabilities that make this scenario much easier to enable then before.\nHere are my notes:\nReason for Hybrid Cheaper, more reliable infrastructure Use of new O365 features On-Prem because of regulatory requirements Privacy/Legal reasons to store content in the originating country. Challenges Contents distributed on-prem, cloud or both Different user interfaces Different domains – where is my content? Multiple search center How can hybrid help? One Enterprise Search Center that shows the results of content sitting on O365 in a result container.\nOptions You can configure hybrid search with three different setups. One-way inbound (O365 can fetch search results from on-prem, but requires reverse proxy server) or One-way outbound (on-prem fetches search results from O365)– or the best but most complex option two-way binding.\nSearch verticals You can add verticals that present search results and make it look like the results are fetched from the local search service – that’s the current Microsoft implementation.\nMicrosoft Search Center Interesting to see what they implemented – I saw a feedback option for on-prem but not on the O365 version. The refiners where adjusted for some results, but I saw no custom Display Templates. Refiner Count was enabled for on-prem but not O365. The on-prem has a glossary search, too. For a “cloud-first” strategy they had pretty few features for their cloud search center, just saying.\nPerformance Best Practices Latency, DB Server, 1:*, Security.\nRule of thumb: Redirect your users to the place where the content is. Content in the cloud –\u0026gt; Search Center in the cloud.\nBest Bets are queried from the Database – if you have many it can impact your DB Performance.\n1:* means that when you do a query, a query rule can trigger other search queries for result containers – instead of doing one query you do multiple queries and that needs performance.\nInfrastructure Best Practice Reverse Proxy: F5, Citrix, Juniper provide options. Microsoft offers Server 2012 R2 with Web Application Proxy (recommended). TMG would be second option but no longer actively developed.\nSecurity Best Practices STS; Dir Sync + password syn, SSL, Login options, VPN or Direct Access\nContent Best Practices Future of Search This slide lists all pain-points – the last bullet is the most important thing – but as usual no ETA when we can use it.\nSummary The session was informative – but honestly I am not happy with the options they presented. Hybrid means for me that the user is not aware where the content is and maybe does not notice that something is on-prem or in the cloud. OWA Preview anyone? Following documents?\nIt was really nice to see how Microsoft adjusted their on-prem search Center – good insight!\n",
    "tags": null,
    "categories": ["Conference","Hybrid","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-developing-future-focused-premises-solutions/",
    "title": "SPC14: Developing future-focused, on-premises solutions",
    "date_published": "2014-03-05T00:26:32Z",
    "description": "SharePoint Conference 2014 session “Developing future-focused, on-premises solutions” by Bob German.\nThis session will focus on how to develop on-premises solutions based on architecture patterns that will support migration to Office 365 in the future. These solutions are based on a shift to client-side development to allow repackaging rather than rewriting to enable the new App model. The result is code that is safer and easier to deploy, whether on-premises or in the cloud.",
    "content": "SharePoint Conference 2014 session “Developing future-focused, on-premises solutions” by Bob German.\nThis session will focus on how to develop on-premises solutions based on architecture patterns that will support migration to Office 365 in the future. These solutions are based on a shift to client-side development to allow repackaging rather than rewriting to enable the new App model. The result is code that is safer and easier to deploy, whether on-premises or in the cloud.\nThis is an interesting session for me – we currently invest a lot in creating Apps.\nSharePoint development today is like MS-DOS\ndevelopment was in 1981\nComparing the Models Traditional: Runs on SharePoint, maybe even full trust code. Runs as user or omnipotent.\nModern: Designed for the cloud, runs outside SharePoint, run with granular App permissions.\nSwitch from traditional, server-side solutions to client-side solutions will take some time – but we cant continue to create server-side solutions like nothing has changed. Bob asked the audience how many are still on SP2010 or work with it – roughly 90% raised the hand.\nReal World Scenario Visual tracking of issues across large department\nDeployment approval takes 6 months No sandbox solution Bob showed a pretty cool demo that renders a ticket system based on (knockout, highcharts and jQuery) – that originally was created in a content editor webpart. Then they converted it to an App with 95% code reuse – pretty nice!!!\nFeature Request: Auto-hosted for on-prem – make the provisioning simple\nI would sign that.\nWorkflows Bob showed in simple steps how to create a workflow that provision a site. In his staged workflow he had an App Step (basically run with elevated permission) that created a subsite.\nEverything is an App – even Workflow runs as an App\nSummary That was a good one – simple but effective, with some good advice how to create solutions - “develop outside of SharePoint” - so that you don’t have to recreate entirely when you migrate. Bob showed some really nice demos, I even forgot to take notes!\n",
    "tags": null,
    "categories": ["Apps","Conference","Development","ITPro","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-search-driven-publishing-intranet-portals-sharepoint-online/",
    "title": "SPC14: Search-driven publishing for Intranet Portals in SharePoint Online",
    "date_published": "2014-03-04T21:51:05Z",
    "description": "Session \u0026ldquo;Search-driven publishing for Intranet Portals in SharePoint Online\u0026rdquo; by Alex Pope (Microsoft) and Helge Grenager Solheim (Microsoft).\nSearch-driven publishing is alive in SharePoint Online! This includes the Content Search Web Part (CSWP) and Cross-Site Collection Publishing - both enhance the number and quality of search-driven solutions you can build into your sites and portals within Office 365. This session will provide an overview of these new building blocks, provide best practices and focus on how to optimize page load times with queries and take advantage of a new caching mechanism in the CSWP.",
    "content": "Session \u0026ldquo;Search-driven publishing for Intranet Portals in SharePoint Online\u0026rdquo; by Alex Pope (Microsoft) and Helge Grenager Solheim (Microsoft).\nSearch-driven publishing is alive in SharePoint Online! This includes the Content Search Web Part (CSWP) and Cross-Site Collection Publishing - both enhance the number and quality of search-driven solutions you can build into your sites and portals within Office 365. This session will provide an overview of these new building blocks, provide best practices and focus on how to optimize page load times with queries and take advantage of a new caching mechanism in the CSWP. Your sites will come alive, be dynamic and change the way you provide ‘fresh\u0026rsquo; content to your users.\nHere are my notes.\nBenefits Benefit is that you can create dynamic pages and get independent authoring and publishing. With query builder you can decide what should be presented and with Display Templates you can adjust the presentation.\nSearch scales!\nMissing features In SPO you don’t have some webparts, e.g Taxonomy Refinement - this is because they do not scale for multi-tenant environment.\nAutomatic property creation Site column: crawled + managed property\nList column: crawled property only\nSearch Schema Multiple schema but with limitations.\nCant change refinable, sortable properties - but you can use RefineableText00 properties to add the refiners.\nDemo Helge showed how to adjust a content search webpart to display as a slider - and one that shows the most frequently used documents with give file types - slick and simple!\nFeature “Roadmap” Group Caching for CSWP Finite Query capacity (Microsoft scaled out - over 2000 servers run the search behind SharePoint Online)\nQuery is slow - solve it with a cache!\nSpeeds up search driven intranet pages Makes complex queries fast Decreases page load time Its a property in the settings page - you can target a group or everyone. Be aware that when you use everyone, the everyone group needs permission.\nThe cache expiry is 15 minutes!\nDisplay Template Best Practices Good stuff – I am glad I recommended the same rules to my clients.\nContent by Search or Content by Query That’s a good question – but for me as a Search guy this was crystal clear before: Search is the way to go.\nSummary Very decent session – I am not into SharePoint Online that much, but Helge and “the Pope” Alex did a good show, summarized what is possible and if not they explained why. In the end it was very interesting for me – the caching possibilities is an indicator what will be available on-prem “later”, but is additional transparency for me. The Best Practices for Search was even greater – there are to few guides out there yet.\n",
    "tags": null,
    "categories": ["Conference","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-complex-problem-solving-new-html5-apis/",
    "title": "SPC14: Complex Problem Solving with the new HTML5 APIs",
    "date_published": "2014-03-04T21:46:33Z",
    "description": "HTML5 and CSS3 are now a standard part of the Office and SharePoint developer\u0026rsquo;s skillset. While much of the buzz around HTML5 and CSS3 focuses on creating a responsive and satisfying end-user experience, a whole new set of JavaScript APIs was also introduced. These APIs provide powerful capabilities that either didn\u0026rsquo;t exist before, or were only available in 3rd-party libraries. In this session, we\u0026rsquo;ll focus on these new APIs and use them to solve real-world problems such as maintaining context in a SharePoint-hosted app, caching app data, and communicating between app parts.",
    "content": " HTML5 and CSS3 are now a standard part of the Office and SharePoint developer\u0026rsquo;s skillset. While much of the buzz around HTML5 and CSS3 focuses on creating a responsive and satisfying end-user experience, a whole new set of JavaScript APIs was also introduced. These APIs provide powerful capabilities that either didn\u0026rsquo;t exist before, or were only available in 3rd-party libraries. In this session, we\u0026rsquo;ll focus on these new APIs and use them to solve real-world problems such as maintaining context in a SharePoint-hosted app, caching app data, and communicating between app parts. Attendees will exit the session with a host of new ideas for using the HTML5 APIs to solve real-world problems.\nSession \u0026ldquo;Complex Problem Solving with the new HTML5 APIs\u0026rdquo; by Scot Hillier – here are my notes.\nFrom Bricks to Houses SP2010: WebParts, Workflows, Libraries, Pages\nSP2013: Provider Hosted Apps, SharePoint Hosted Apps, App Parts\nGood analogy – SharePoint developer will be transformed to Web Developer – we are responsible for greater parts now.\nResponsive App Parts / iFrames SharePoint controls the size of the App Part / iFrame.\nMedia Queries with window.matchMedia – mobile first, look great on any device.\nRequest larger iFrame with postMessage. This method allows to send text message between windows, works across domains.\nDemo: Scot showed a Corporate Calendar App that is based on search and aggregates calendar entries farm wide.\nSPA / Ajax Navigation Single Page Applications (SPA) are trending because of no postbacks that gives a great user experience. This renders the browser navigation useless.\nSolution for this can be done with the history object. Scot recommends to use a framework for SPA, example here was Angular.js\nApp Part Communication Server-Sent Events (SSE) – one way communication over an established channel to the client\nServer-Sent Events are wicked cool stuff\nWeb API supports SSE to push streams to clients.\nFor HTML5 Apps you need to know what your browser supports – modernizer.js is your friend.\nIE does not support SSE (I would recommend SignalR here, that handles everything for you).\nDemo: Scot showed how to connect webparts with Server Side Events – pretty cool demo, I will grab his source code afterwards and check how he did it.\nWeb Sockets Web Sockets allow you to create two-way communications (e.g. chat applications).\nScot uses Alchemy WebSocket Server for his demo – with this you get websockets up and running in minutes.\nDemo: Scot generated a Ticket Generator that generates ticket on one page, and a consumer on another page – with his pattern you can create cross page communication.\nPerformance JavaScript is single threaded – you can use Web Workers so spawn new threads and unblock the main thread.\nDedicated (one caller) and Shared Workers (multiple callers) can communicate with postMessage but cannot access the DOM directly.\nDemo: Type ahead scenario where you search and during the search the cursor freezes because the main thread is blocked. The conclusion is that Web Workers are not for higher performance but for better responsiveness.\nMaintain SharePoint Context Challenge is to maintain the SharePoint context across pages. Solution can be to use Web Storage – you can even enrich them with Geolocation data.\nWeb Storage is key-value pair storage, can be persistent or session based storage.\nSummary Scot Hillier delivers what he promised, definitely will try some of the stuff he showed on stage – very good session. Apparently I did not receive one of the “Working on it” T-Shirts he gave away during his session – but his many demos made this session very valuable for me.\n",
    "tags": null,
    "categories": ["Apps","Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-real-world-sharepoint-architecture-decisions/",
    "title": "SPC14: Real-world SharePoint architecture decisions",
    "date_published": "2014-03-04T21:37:23Z",
    "description": "Being a SharePoint architect can be challenging - you need to deal with everything from hardware, resources, requirements, business continuity management, a budget and of course customers. You, the architect, have to manage all this and in the end deliver a good architecture that satisfies all the needs of your customer. Along the line you have to make decisions based on experience, facts and sometimes the gut feeling. In this session we will cover some of the architectural changes in the SharePoint 2013 architecture, some of the new guidance from Microsoft and provide insight into a number of successful real-world scenarios.",
    "content": " Being a SharePoint architect can be challenging - you need to deal with everything from hardware, resources, requirements, business continuity management, a budget and of course customers. You, the architect, have to manage all this and in the end deliver a good architecture that satisfies all the needs of your customer. Along the line you have to make decisions based on experience, facts and sometimes the gut feeling. In this session we will cover some of the architectural changes in the SharePoint 2013 architecture, some of the new guidance from Microsoft and provide insight into a number of successful real-world scenarios. You will see what decisions were made while designing and implementing these projects with emphasis on why they were made.\nSession \u0026ldquo;Real-world SharePoint architecture decisions\u0026rdquo; by Wictor Wilén, here are my notes:\nChanges Distributed Cache Service: Patches will be separately delivered. Wictor recommends to use the latest CU.\nRequest Management: Rule-based, software load balancing. Missconfigured rules can take down your farm.\nSearch: Rearchitectured and rewritten with using features from both FAST and SharePoint Search are implemented. Same engine is used for Exchange.\nOffice Web Apps (WAC): Wictor’s favorite service – separate application, separate server, separate patches.\nWorkflow: separate product – can be shared with multiple farms (not recommended)\nClaims Based Authentication: the new default.\nOAuth: Used for Authentication. A basic understanding really helps.\nS2S Auth: Apps, Workflow use server to server authentication.\nSizing There is no perfect architecture you can download and apply.\nOr as I would say: It depends.\n3 is the new 2 – and 7 is the new 5\nMeans you need more servers – but think about the fault domain, if you virtualize you need redundant VM servers, if you do load balancing you need redundancy there. Always ask yourself how to patch this?\nTopology Routing, caching and database must be fast – every request go through there, if they are slow your farm will be slow.\nSearch Layer should have \u0026lt;500 msec latency. Many components are based on Search – make it fast!\nSearch requires different planning in 203 – cross site publishing, analytics, recommendations need to be taken care of. October 2013 CU contains huge improvements.\nWorkflow Server: You can install it on 1 or 3 servers – no other options.\nOffice Web Apps: Separate servers – no other option.\nApp Server: On prem, co-locate with SP server, Azure or other hosting options (LAMP) to offload the workload.\nCertifcates: You should use certificates for about everything – when someone steals your oauth token they could access sensible data. Apps, WAC - and more.\nFirewall: Firewall team should be involved early. Wictor will provide a firewall cheat sheet, because Technet lacks a good one.\nUser Profile: ADI, built-in FIM, External FIM are the options. He suggest to use external FIM but you need to license it.\nMySites, Social, Yammer: MySite is a must. DirSync is a must for Yammer (to make it fault tolerant you need 4 additional servers, 2 ADFS, 2 Web Proxies)\nHybrid: Search is the key to hybrid, Mysites can be deployed on-prem or on O365.\nLook and Feel: If you want to customize deploy the MySite on-prem.\nSocial. Yammer is the way forward.\nSingle Web Application approach One WebApp to listen to all host headers, and is recommended. AppCatalog has to be in the same WebApp – if you use two, you need two AppCatalogs.\nMemory footprint reduced.\nMost often requires Host Named Site Collections.\nFor Host Named Site Collections he recommends a custom site creation provider.\nRoot Site Collection is required.\nCaveats You need a load balancer for the custom http header.\nDemo Wictor showed us how to create a Host Named Site Collection (HNSC) with PowerShell. Very straight forward, worked like a charm and is another good reason to use PowerShell.\nThen Wictor showed some pretty extensive samples – can not write them down, was too complex to summarize, but was very useful to see complex scenarios – would love to see them in Technet as reference.\nForgotten stuff List of things people often forget in SharePoint architectures:\nHigh Availability and Desaster recovery 20% of the farms Wictor sees have 99.9% uptime 10% had 100% uptime requirements (impossible). Affects the cost Workflow Provider Hosted Apps Access Services 2013 Things to avoid / consider Multi-tenancy, often done for the wrong reasons. For large-scale hosting consider O365.\nStreched Farms – read http://askwictor.com/spstreched\nService Farms and Service Application federation: Makes solution more complex, understand limitations upfront. Managed Metadata Service is a good service to federate.\nSummary So many good sessions in parallel – Future of Infopath or the session by Spencer Harbar about Identity Federation (homework) – I am still glad that I attended Wictor’s session, good stuff, I learned quite a lot and “refreshed” many topics I tend to forget. The room was packed, there is obviously a huge demand!\nWictor delivered so many stuff in a short time (my notes are therefore not complete!) – he is really fast paced ",
    "tags": null,
    "categories": ["Conference","ITPro","Office Web Apps 2013","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-sharepoint-2013-hybrid-end-end/",
    "title": "SPC14: SharePoint 2013 hybrid end-to-end",
    "date_published": "2014-03-04T01:07:12Z",
    "description": "My notes about the session \u0026ldquo;SharePoint 2013 hybrid end-to-end\u0026rdquo; by Sam Hassani.\nA Hybrid environment combining SharePoint Server 2013 and SharePoint Online can fuse together the very best elements of both systems and offer a seamless experience to end-users when implemented correctly - in addition to providing you with cost savings. Attend this session to understand the solutions SharePoint hybrid environments support. We\u0026rsquo;ll walk through the end-to-end configuration process covering infrastructure, identity management and SharePoint integration points.",
    "content": "My notes about the session \u0026ldquo;SharePoint 2013 hybrid end-to-end\u0026rdquo; by Sam Hassani.\nA Hybrid environment combining SharePoint Server 2013 and SharePoint Online can fuse together the very best elements of both systems and offer a seamless experience to end-users when implemented correctly - in addition to providing you with cost savings. Attend this session to understand the solutions SharePoint hybrid environments support. We\u0026rsquo;ll walk through the end-to-end configuration process covering infrastructure, identity management and SharePoint integration points. We\u0026rsquo;ll use Search as a real-world example. Hybrid is a real way to begin to take advantage of cloud economics, achieve user-productive scenario benefits and the deployment approach is entirely supported by Microsoft.\nHere are my session notes.\nWhy Hybrid? O365 + Azure/On-premises = hybrid. This gives you somewhat more flexibility – at higher pace.\nHybrid Options Search: Federated Search is possible for both directions.\nBusiness Connectivity Services (BCS): Add oData sources sitting on-prem.\nDuet Enterprise Online: Read \u0026amp; write against on-prem SAP systems\nIdentity Management: Single sign on and single identity for end users.\nEnhanced capabilities will be announced for search – single, merged result set would be very nice – I asked Sam after the session if he knows when this will be, probably not at this SPC.\nIdentity Management Recommendation is that when you implement DirSync that you take it one step further and implement ADFS for the best user experience – single sign on.\nDirSync is limited to 50.000 – you can add filters based on OU, Domain or User Attributes – by default every 3 hours.\nAzure Ad is a requirement for hybrid scenarios – including search. If you don’t have the current users account in the cloud security trimming wont work and you wont get search results.\nYou need to add a domain to O365, verify it and then you can activate DirSync.\nConfigure SSO: Server 2003 R2 and UPN are set if the domain on prem is different. Deploy ADFS 2.0. Install Microsoft Online Services Sin in Assistant and Windows Azure AD PowerShell Modules, setup a trust between ADFS and Windows Azure AD. DirSync is based on FIM.\nSearch Sam showed us how to implement a federated search, Query Rules and floating result containers. I knew that already and I skip this for brevity.\nSocial Social was another broad topic – where is your User Profile is a key question. Is it on-prem, O365 or even on Yammer. Synchronize them?\nSummary That was quite a good session – very thorough information from a to z what challenges you face. Good stuff!\n",
    "tags": null,
    "categories": ["ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-introducing-codename-oslo-office-graph/",
    "title": "SPC14: Introducing Codename Oslo and the Office Graph",
    "date_published": "2014-03-04T00:48:41Z",
    "description": "My notes about the session \u0026ldquo;Introducing Codename Oslo and the Office Graph\u0026rdquo;.\nCome see how we reimagined search and discovery across Office with Codename Oslo, powered by the Office Graph. Oslo enables you to work like a network, by proactively surfacing the best and relevant information across Office, tailored just for you. Learn how Office Graph transforms Office, with suite wide insights and machine learning.\nSession by Cem Aykan and Ashok Kuppusamy.",
    "content": "My notes about the session \u0026ldquo;Introducing Codename Oslo and the Office Graph\u0026rdquo;.\nCome see how we reimagined search and discovery across Office with Codename Oslo, powered by the Office Graph. Oslo enables you to work like a network, by proactively surfacing the best and relevant information across Office, tailored just for you. Learn how Office Graph transforms Office, with suite wide insights and machine learning.\nSession by Cem Aykan and Ashok Kuppusamy.\nHere are my notes:\nProject Oslo Personalized feed of elements - source is Yammer, SharePoint, Exchange and Lync.\nThe relevant information comes to you.\nOslo is not only for information discovery: Work as a network, Proactive and Tailored to me.\nOslo has a \u0026ldquo;presented to me\u0026rdquo; function to find presentations that were shown to me - its not clear to me how they will discover this, but it would be a cool function.\nOffice Graph Content and “signals”/events across O365 auto-populating the Office Graph for teams.\nOslo will be integrated into O365, has a search as you type functionality with nice refiners.\nYou don’t have to change your behavior - it just works.\nPeople view It shows your co-workers, peers and managers - nicely presented, good insight who someone is working with.\nRoadmap Office Graph is extensible, personally a twitter relevancy filter would be great.\nOslo will be integrated into OneDrive, too. 1st are Office365, Yammer, Lync, Exchange. It will be available 2nd half of 2014.\nExtensibility LOB, External Content, External Services - examples are CRM, Ticket System, Reviews, Product Catalog. You can integrate external services and data – but no details yet, its too early.\nSummary This sounds great and very promising. Fighting the information overload, presenting data in an attractive way - who does not want that? Good session, looking forward to try Oslo out and hoping that \u0026ldquo;the relevant information comes to me\u0026rdquo;. The presentation was very entertaining and interactive, totally likes the style!\n",
    "tags": null,
    "categories": ["Conference","ITPro","Office 365","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-sharepoint-conference-2014-keynote/",
    "title": "SPC14: SharePoint Conference 2014 Keynote",
    "date_published": "2014-03-03T20:47:49Z",
    "description": "Here are my notes about the SharePoint Conference 2014 Keynote “live” from Las Vegas.\nFigures Opened by Jared Spataro.\n10.000 people from 80 countries are attending this years SPC.\nSharePoint has an incredible 500% user growth, double digit revenue growth – and growing.\nOffice 365: $1.5 billion, 60% of Fortune 500 companies are using it.\nThe Cloud is on fire!\nPresident Bill Clinton When I became President there were 50 sites on the internet – in total.",
    "content": "Here are my notes about the SharePoint Conference 2014 Keynote “live” from Las Vegas.\nFigures Opened by Jared Spataro.\n10.000 people from 80 countries are attending this years SPC.\nSharePoint has an incredible 500% user growth, double digit revenue growth – and growing.\nOffice 365: $1.5 billion, 60% of Fortune 500 companies are using it.\nThe Cloud is on fire!\nPresident Bill Clinton When I became President there were 50 sites on the internet – in total.\nKey message is that technology is changing our world – faster adoption of technology, cheaper and more reliable.\nTransforming Work 4 trends: Cloud, Social, Mobile, Big Data.\nJeff Teper, VP now on stage.\nThe Cloud is the key\nRapid innovation: many new features are delivered, we can focus on our core business.\nWork Like A Network\nSocial Workplace 2. Personal Insights 3. Next-gen portals Office Graph: biggest idea we had since SharePoint.\nNew Project with code name OSLO.\nO365 New video service hosted on O365, azure media service and yammer based on SharePoint – comes out later this year.\nJulia White now shows Office Graph.\nYammer integrated into Outlook hosted on O365.\nPreview of Documents on OWA is now with Yammer integration – you can now discuss documents\nOslo Oslo App: Information that is relevant to me comes to me. I don’t have to look for it. Was it viewed by me, liked by me? What is trending around me.\nOslo has a great custom search integration with preset search filters “presented to me”, “trending around me”, “viewed by me” and more”.\nOslo has a natural language search. Office Graphs shows who you are working with the most – you can see that from co-workers, too. A personal dashboard.\nOffice 365 Video Portal based on Azure Media Service.\nOneDrive for Business Julia shows OneDrive for Business with native experience on an iPad – shows the app and then opened it in Safari. Great experience everywhere.\nPowerBI Julia shows a Q\u0026amp;A Site with a natural language search query – she searches for “average annual income per person vs population” – then the graph updates – awesome stuff.\nBuild AMAZING Solutions 1/3 of the audience are developers -\nWe love Developers around SharePoint\nSDK for Android published on GitHub.\nNo code applications are available based on Access on O365.\nAccess is the simplest way to build cloud apps.\nArpin Shah, Senior Director shows a custom SharePoint list. Now he shows how to integrate this list into outlook, called composed Apps.\nThe app shows data sitting in SharePoint and enriches it with context data – one of the approvers was out of office and it was visualized in the app. Simple.\nManage with Confidence Security. Privacy. Compliance\nMore Certifiations for the Cloud – encrypted Storage for Azure – 1TB Site Collections.\nMichal Gideoni, Director on stage now.\nCompliance: New Compliance Center aggregates sensible data based on a query and let you see who access it.\nMulti Factor Authentication: You can add additional security for all or selected users. This also works for federated authentication.\nCloud onramp: More hybrid features.\nOneDrive for Business as a standalone option. 25GB per user, Office and more.\nSummary They covered so many topics in this keynote - I hardly can summarize this and I am sure I did not catch everything. But wow, good stuff!\n",
    "tags": null,
    "categories": ["Conference","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-whats-new-office-sharepoint-developers/",
    "title": "SPC14: What’s new for Office and SharePoint Developers",
    "date_published": "2014-03-03T19:46:43Z",
    "description": "Sub-Keynote for Developers \u0026ldquo;What\u0026rsquo;s new for Office and SharePoint Developers\u0026rdquo; by Brian Jones and Rob Lefferts.\nThis session will show what’s new in Office and SharePoint development and unveil new features and capabilities that demonstrate how the development model has evolved.\nFigures 3.4 Million SharePoint Developers\n1 Billion Office Users\nThey activly monitor social sites like StackOverflow and UserVoice to get feedback. They want more insight.\nContext Apps They said is several times now – context is the new thing.",
    "content": "Sub-Keynote for Developers \u0026ldquo;What\u0026rsquo;s new for Office and SharePoint Developers\u0026rdquo; by Brian Jones and Rob Lefferts.\nThis session will show what’s new in Office and SharePoint development and unveil new features and capabilities that demonstrate how the development model has evolved.\nFigures 3.4 Million SharePoint Developers\n1 Billion Office Users\nThey activly monitor social sites like StackOverflow and UserVoice to get feedback. They want more insight.\nContext Apps They said is several times now – context is the new thing.\nNew Controls for Apps Microsoft released a new experimental package over nuget that adds html controls to apps – they showed a listview and a people picker. Good stuff.\nApps and Documents Register a app for a file extension –.so you click on a file and it opens the specified application.\nPoll Everywhere App – get live feedback via sms and represent it in a PowerPoint graph. They said they needed 3 weeks to publish the app to the market.\nRobust Office 365 APIs More public API to access data sitting in SharePoint, OneDrive, Exchange and more – all based on oData – cool. New possibilities for Apps – and integration options.\nSummary Actually this keynote was pretty bad. So many demo fails – incredible. I am disappointed about this.\n",
    "tags": null,
    "categories": ["Conference","Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-refactoring-business-solutions-apps-office/",
    "title": "SPC14: Refactoring Business Solutions into Apps for Office",
    "date_published": "2014-03-02T22:03:24Z",
    "description": "This session will focus in deep detail on one top 10 business scenario and showcase how it can be enabled with apps for Office. We will review the business scenario, the architectural considerations to enable this scenario in Windows Azure and apps for Office, as well as delving into the code behind the solution. Expect to see a lot and have experts available to you to answer any of your questions and concerns.",
    "content": " This session will focus in deep detail on one top 10 business scenario and showcase how it can be enabled with apps for Office. We will review the business scenario, the architectural considerations to enable this scenario in Windows Azure and apps for Office, as well as delving into the code behind the solution. Expect to see a lot and have experts available to you to answer any of your questions and concerns.\nAnother pre-conf session \u0026ldquo;Refactoring Business Solutions into Apps for Office\u0026rdquo; by Richard diZerega, Kirk Evans and Sonya Koptyev.\nHere are my notes:\nOverview Richard showed the options you have to deploy apps in a corporate environment – from cloud to corporate marketplace - and showed the different types of Office Apps – from Word to Excel.\nWhen you use copy \u0026amp; paste something to Outlook – it’s a good candidate for a Mail App.\nDemo Richard created a Word App that triggers on a selection and can replace the selection with a link.\nHe showed that in order to publish an Office App Project you basically need to publish twice. One time for the service (e.g. hosted on azure) and the second time for the App Manifest (xml file) where you tell Office how to reach the service and what type of office app it is.\nBinding So that was a new thing to me – you can create bindings (subscriptions) to lets say a table – then if a condition changes my table gets updated automatically. Read more here.\nMail App Kirk showed a Mail App and plenty of options how to get known entities out of emails – discovery of element inside an email (addresses, phone numbers and more) – good stuff.\nCall to Action Kirk said there is more to come and more to announced during this SPC.\nSummary Excel App \u0026amp; Mail App – would love to try that at a client but most of them are still on Office 2010. This session gave me a very good understanding what is possible and what not. Really liked the session, when Richard \u0026amp; Kirk present it always looks so easy ",
    "tags": null,
    "categories": ["Apps","Conference","Deep Dive","Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/03/spc14-migrating-traditional-sharepoint-solutions-app-model/",
    "title": "SPC14: Migrating Traditional SharePoint Solutions to the App Model",
    "date_published": "2014-03-02T19:05:14Z",
    "description": "There are many business scenarios and solutions that have been built on the SharePoint 2010 platform that are critical to customers. As companies, partners, and solution providers look to move to the SharePoint 2013 platform, these solutions should be reimagined to leverage the new cloud app model and apps for SharePoint. This session will deep dive into the key scenarios and techniques of migrating the most common customization patterns from SharePoint 2010 solutions to apps for SharePoint.",
    "content": " There are many business scenarios and solutions that have been built on the SharePoint 2010 platform that are critical to customers. As companies, partners, and solution providers look to move to the SharePoint 2013 platform, these solutions should be reimagined to leverage the new cloud app model and apps for SharePoint. This session will deep dive into the key scenarios and techniques of migrating the most common customization patterns from SharePoint 2010 solutions to apps for SharePoint.\nVery first session at SPC 2014 \u0026ldquo;Migrating Traditional SharePoint Solutions to the App Model\u0026rdquo; – by Steve Walker, Suman Chakrabarti , Kirk Evans and Richard diZerega – nice setting.\nWho is carrying a gigantic, neck breaking laptop? This session is changing your life!\nRichard diZerega sets some nice expectations.\nThe slides will be available afterwards but if you are willing to spend some time, please continue reading my notes.\nOverview What does deprecated mean?\nDeprecated means “we are going to turn it off” – creating Apps now means you are settled to create applications that work in the future.\nFull trust –\u0026gt; Sandbox –\u0026gt; Apps This is the standard approach, 50% of the audience started to dev with the App Model – and on of the reason behind is that there are not enough SharePoint Devs (try to hire one…)\nVision: Create higher developer adaption because of usage of web standards. App Model: Past, Present and Future Reference to read: http://www.andrewconnell.com/blog/sharepoint-hosted-apps-in-sp-2013-as-single-page-apps\nMigrations There is no magic migration button that migrates your code to an App.\nApparently, because this is utterly complex – there is no automatic migration.\nQuestion: We are on SP2010 – is there guidance how to continue development so that you are ready for Apps?\nThere is not. Suggestion was to abstract not supported calls (like User Profile Service calls) so that you later can switch.\nI am on-prem – do I need to leave?\nGreat question! It points out that many of us are still on SP2010 and there is a lack of guidance how to create maintainable solutions that will work without rewriting the whole stuff again (some good examples: Custom Field Types, Custom Service Applications, Webhandlers, … ) – don’t do this.\nHosting options App Model App lifecycle with focus on authentication Code As a start, Kirk showed how to get properties of webs and lists over oData – calling the _api stuff (that is known to me already, that’s why I skip this here).\nTokenHelper You tried to use app authorization or ADFS –. then you know this guy and I skip this for brevity.\nTimerjob as App That’s a new one for me – App and Timerjob? How that is working out? Kirk shows the code. Honestly this was so fast I did not catch it, I just a saw Thread.Sleep – need to check this one afterwards (damn you Twitter!). During the session Kirk posted this as my homework.\nSSL Certificate vs Azure ACL During creation of a SharePoint App Project you can now choose to use MVC – that’s is cool. More challenging will be the discussion with the IT department to provide a ssl certificate for an app. I really looking forward to explain the IT guys what they should do, that it does not hurt and much more. Description of setting up things is here.\nPermissions Effective Permissions: Apps + User or App only\nKirk explained that permissions are a tough area – you need a lot time to figure out how things are connected and what permissions you need. And the “App-only permission” flag is making things more interesting. Read more on Kirk’s blog post about that.\nFeature Stapling with an App Richard showed a quick demo where he added an app part on a page that brands his mysite to show that you can use this concept to apply branding.\nClient Web Part – or as I say “glorified iFrame”\nQuite simple to implement, need to keep that in mind.\nSite Provisioning Richard showed a way to override the “Create new subsite” link to redirect to an app page that renders a form. On that form you can then specify metadata about the subweb (e.g. business impact or create yammer group) – good stuff, many clients requests that. There are different approaches – you can grab the code here or here.\nWorkflows There are several activities to get values from a web service. In this example Suman showed how to use the _api endpoint to fetches values and then set values on a list item.\nQuotes \"I can show you code or PowerPoint - with the same exact experience. The PowerPoint shows the code\u0026#8230;\" by @kaevans #spapps #SPC14 \u0026mdash; Maximilian Melcher (@maxmelcher) March 2, 2014 \"I am on-prem - do I need to leave\" - good one :)\u0026#10;#spapps #spc14 \u0026mdash; Maximilian Melcher (@maxmelcher) March 2, 2014 Make Apps not war #spc14 #sharepoint \u0026mdash; Dan Barker (@barkingd) March 2, 2014 Summary So this was a good, fun and informative start for my first SPC. Saw some code, but nothing spectacular (key concepts were promised and I spotted them). The debates were great, too.\n",
    "tags": null,
    "categories": ["Apps","Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/02/sharepoint-2013-search-navigate-first-page/",
    "title": "SharePoint 2013 Search: Navigate to first Page",
    "date_published": "2014-02-24T17:25:35Z",
    "description": "Sometimes clients come up with crazy requests “I can not go back to first page, this pagination is not good enough” – but this one was reasonable and SharePoint 2013 search is so easy customizable, lets take it as an exercise!\nEverything is a Display Template As the caption says, you can change almost every design aspect in SharePoint 2013 Search by changing a html file (or a .js file if you are on Foundation) – this includes the general rendering of the search results and with it the pagination.",
    "content": "Sometimes clients come up with crazy requests “I can not go back to first page, this pagination is not good enough” – but this one was reasonable and SharePoint 2013 search is so easy customizable, lets take it as an exercise!\nEverything is a Display Template As the caption says, you can change almost every design aspect in SharePoint 2013 Search by changing a html file (or a .js file if you are on Foundation) – this includes the general rendering of the search results and with it the pagination.\nSo let\u0026rsquo;s try to change it to the desired behavior - of course I know that you can remove the #s or click on the search loop again.\nControl_SearchResults.html I change a system file here – do that only if you know what you are doing and document your changes! Open the file (MasterPage gallery \u0026gt; Display Templates \u0026gt; Search) and go to line 248. Then paste the following in – or download the whole template: Control_SearchResults.\nif (pagingInfo.length == 8 \u0026\u0026 pagingInfo[0].startItem \u003e 31) { _#--\u003e 1 ",
    "tags": null,
    "categories": ["Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/02/sharepoint-2013-cu-august-2013-internet-information-services-installed/",
    "title": "SharePoint 2013 CU August 2013 – “Internet Information Services not installed”",
    "date_published": "2014-02-24T10:21:38Z",
    "description": "Today it was time to update my SharePoint 2013 installation from March PU 2013 to August 2013 CU - mostly because the Search Schema changed under the hood and I wanted to try something out for the awesome Search Query Tool.\nDownload Wow, 1.8GB patch – that is huge! Compared to the RTM version of SharePoint 2013 with 2.4GB they rewrote 75% - or the patching strategy is not that optimal.",
    "content": "Today it was time to update my SharePoint 2013 installation from March PU 2013 to August 2013 CU - mostly because the Search Schema changed under the hood and I wanted to try something out for the awesome Search Query Tool.\nDownload Wow, 1.8GB patch – that is huge! Compared to the RTM version of SharePoint 2013 with 2.4GB they rewrote 75% - or the patching strategy is not that optimal.\nIts time for a new baseline so patches can be smaller again. Lets see what happens after the SPC.\nYou can grab the SharePoint 2013 CU August 2013 patch here: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2817616\u0026amp;kbln=en-us\nKB Details here: http://support.microsoft.com/kb/2817616\nPatch notes of Todd Klindt (my inofficial SharePoint patch guru) are here (and no regression reported): http://www.toddklindt.com/blog/Regressions/SP2013Aug13.aspx\nPatching For the patching part I always take the script from the article\n“Why SharePoint 2013 Cumulative Update takes 5 hours to install?” – if you have not read it, go for it. This time something went bad, maybe because I started the script from ISE or something like that – it could not start the patch process so I did it myself. Took around 30 Minutes on my DEV VM – reboot and we should be ready, right?\n“Internet Information Service not installed” After the patching you have to start the Config Wizard. I was a little surprised as it responds with a nice error – I even tried the PowerShell command in case there is a difference, but no:\nWhat? IIS not installed anymore? Something must be broken with the Patch – let’s blame Todd for it:\nI patch my SharePoint 2013 to August CU - if that does not work I blame @ToddKlindt 🙂 \u0026mdash; Maximilian Melcher (@maxmelcher) February 21, 2014 But then I tried to reproduce my steps – of course it must be an user error. After reading the patch script (reading things sometimes helps), I noticed that the script disables the IIS Admin service…\nSharePoint does not like that – set it back to Automatic start and start the service.\nStarting the site is a good idea, too:\nAnd then start the config wizard again:\nAnd wait until every database is updated:\nSearch \u0026ldquo;Paused for:External request\u0026rdquo; Then I tried do do a Search – without a success. I went to the Search Service Application page and saw the status: “Paused for:External request” – that means something paused the Service Application (maybe, just maybe someone tried to patch):\nand we should resume it – 3 lines of PowerShell:\nAdd-PSSnapin Microsoft.SharePoint.PowerShell $ssa = Get-SPEnterpriseSearchServiceApplication $ssa | Resume-SPEnterpriseSearchServiceApplication Lessons learned Patching can be tough – but when you protocol what you do or can at least reproduce what you have done its pretty much straight forward. I do not blame the patch script here, I obviously did something wrong – but the error message is really misleading isn’t it?\n",
    "tags": null,
    "categories": ["ITPro","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/01/recap-sharepoint-user-group-munich-01212014/",
    "title": "Recap: SharePoint User Group Munich – 01/21/2014",
    "date_published": "2014-01-21T20:36:48Z",
    "description": "First User Group in Munich - with live streaming to google hangout - pretty cool stuff!\nSession 1: Migrations and their pitfalls First session by Dennis Hobmaier (@DHobmaier) about SharePoint migrations.\nKey take-aways: templates, custom-code, permissions, workflows are the main causes of trouble - thats new 😉\nSession 2: Offerings for the SharePoint Community in Germany - or how to create a podcast Michael Greth (@mysharepoint) showed us the various offerings for the large SharePoint Community in Germany (there are around 30 User Groups):",
    "content": "First User Group in Munich - with live streaming to google hangout - pretty cool stuff!\nSession 1: Migrations and their pitfalls First session by Dennis Hobmaier (@DHobmaier) about SharePoint migrations.\nKey take-aways: templates, custom-code, permissions, workflows are the main causes of trouble - thats new 😉\nSession 2: Offerings for the SharePoint Community in Germany - or how to create a podcast Michael Greth (@mysharepoint) showed us the various offerings for the large SharePoint Community in Germany (there are around 30 User Groups):\nSharePoint Forums\nSharePoint Special Deals\nSharePoint Community Calendar\nSharePoint Toolbox\nSharePoint Podcasts (appears biweekly in German)\nIn the second part Michael showed us his audio equipment and how simple it is to record a podcast - impressive!\nThat session was good fun, very entertaining!\nSession 3: Sharepoint with Sql Server 2012 Always On Last but not least a session by Mario Spies (AvePoint) about SQL high availability.\nAlways On Failover Cluster: One (idle) failover cluster with shared storage - if your storage dies, your SharePoint is very sad…\nAlways On Availability Groups: Basically a mirror, up to 1:4 mirroring.\nThen Mario showed a live demo with failover - nice one! Learned a lot, thanks!\n",
    "tags": null,
    "categories": ["Conference"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2014/01/install-sharepointlogviewer-powershell/",
    "title": "Install SharePointLogViewer with PowerShell",
    "date_published": "2014-01-13T12:45:54Z",
    "description": "Another essential SharePoint tool found its way to the chocolatey gallery – this time it’s the awesome and feature-rich SharePointLogViewer.\nKey Features:\nView multiple SharePoint log files at once Search by any field Filter the log by any field File drag \u0026amp; drop support Live monitoring for entire farm Export filtered log entries Bookmark log entries Get popup notification of SharePoint log events from system tray Receive email notifications on errors Redirect log entries to event log Supports SharePoint 2007, 2010 and 2013 Installation After installing chocolatey you can install SharePointLogViewer with one line of Powershell:",
    "content": "Another essential SharePoint tool found its way to the chocolatey gallery – this time it’s the awesome and feature-rich SharePointLogViewer.\nKey Features:\nView multiple SharePoint log files at once Search by any field Filter the log by any field File drag \u0026amp; drop support Live monitoring for entire farm Export filtered log entries Bookmark log entries Get popup notification of SharePoint log events from system tray Receive email notifications on errors Redirect log entries to event log Supports SharePoint 2007, 2010 and 2013 Installation After installing chocolatey you can install SharePointLogViewer with one line of Powershell:\ncinst SharePointLogViewer as you can see in this screenshot:\nThe result is a nice shortcut on your desktop - everything ready to go.\nChocolatey? Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with Windows in mind.\nIn other words: You can install tools/software with this tool.\nI wrote several blog posts about this:\nInstall SharePoint Designer with Chocolatey Chocolatey and SharePoint SharePoint Search Query Tool Install all the great SharePoint Tools with one line of PowerShell and even created a video:\nDo you miss a tool? If you miss a tool, I would be happy to add it. Please leave a comment.\n",
    "tags": null,
    "categories": ["Powershell","SharePoint 2007","SharePoint 2010","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/12/bye-bye-2013-year-sharepoint/",
    "title": "Bye bye 2013 – My Year With SharePoint",
    "date_published": "2013-12-29T22:32:04Z",
    "description": "Inspired by Wictor Wilén yearly blog series I try to summarize my year – last year I wanted to write one but I did not gather enough stuff to fill a page – lets try it again:\nWow, 2013 was an interesting year and the time has come for my annual blog post to sum up the year that soon has passed us and looking a bit into the crystal ball for the next one.",
    "content": "Inspired by Wictor Wilén yearly blog series I try to summarize my year – last year I wanted to write one but I did not gather enough stuff to fill a page – lets try it again:\nWow, 2013 was an interesting year and the time has come for my annual blog post to sum up the year that soon has passed us and looking a bit into the crystal ball for the next one.\nhttp://www.wictorwilen.se/summing-up-the-year-of-2013-and-embracing-2014\nI truly was an interesting year – I totally enjoyed it. Professionally and personally.\nStackexchange / #SPHELP I started actively to share my experiences and knowledge arround SharePoint and especially about SharePoint Search – I watched the tag #shelp on twitter and started to participate on sharepoint.stackexchange.com – I even got some badges and over 1.000 points:\nBlog Blogging is a lot of work for me – English is not my first language, but I reached a stage where I can now enjoy writing and sharing my thoughts – even when I know its not perfect – maybe in 2014 I find some time to improve my writing skills, otherwise please apologize my errors. What I actually wanted to say: I invested a lot of time in this blog, answered each and every comment (roughly 100), wrote 44 blog posts and received roughly 50.000 views this year – wow, this is fun! Compared to last year this is 10x more – thanks for reading and following my stuff, motivates me a lot! Here is a list of my most viewed posts in 2013:\nInstall Office Web Apps 2013 for SharePoint 2013 – with PDF Preview SharePoint 2013 – Create a Search Service Application and Search Topology with Powershell Cache cluster is down, restart the cache cluster and Retry SharePoint 2013 Design Manager: Map network drive on Windows Server 2012 SignalR in SharePoint 2013 – the real-time web is coming! 1, 2, and 5 are my personal favorites – it was great discovering how to build these solutions – I even used them for several client projects. But the most fun I had was writing this one: SharePoint 2013 Search Preview for Documents hosted in SharePoint 2010. The help and feedback I received from the SharePoint Community for this one was amazing! I even got contacted by Microsoft why and how I built it…\nSharePoint certifications I am one of the guys who thinks that certifications really help – so I try to do plenty of them (it’s a good motivation for my team, too). This year I only did 3 certifications (070-417, 071-488, 071-489), next year resolution (one of them) is to finish all SharePoint 2013 certs.\nContributions I contributed to several Open Source SharePoint Solutions – and I even started my own ones:\nSPSignalR – a solution to create real-time updates in SharePoint WebParts (see it here in action: http://www.youtube.com/watch?v=0QgzJ0HkDs8) SharePoint Chocolatey: I created several packages to install SharePoint tools with PowerShell Giving back solutions \u0026amp; knowledge and receiving questions about solutions I share is really worth some nights and weekends –. sounds crazy, but try for yourself! I would not be where I am right now without the professional solutions and shared knowledge floating around in the SharePoint Community.\nToolbox I spent countlessly hours creating webcasts – rerecording them – deleting them – in both English and German (the German SharePoint community needs some love, too). I want to do more of them, even do a recording of paid tools (Avepoint, SPCAF, SPDockit, … ) – it takes time, it’s a good practice for me – and its FUN! More to come in 2014.\nConferences / Speaking Conferences are great – meeting twitter friends personally is great, I even had the honor to chat with THE one Todd Klindt at TechEd in Madrid (that is always super fun!!!) – good stuff. I want more of it – hopefully I can convince my boss to send me to SPC14… the new year will tell! Additionally I went to two or three SharePoint User Groups in Munich – next year I will speak at least at one in February/March. Two “conference” highlights in 2013 were the two ShareCamps. One in Munich and the second (and first one ever) in Vienna, Austria. In Munich I gave two presentations, one about Search and the other one about SharePoint Tools – see the recap here. I even try to speak at some international conferences – the biggest one will be the free SP24 conference – I could need some votes here: http://list.ly/i/419694\nSharePoint It was a great SharePoint year – I had very exciting new projects, a migration and two SharePoint from scratch projects – one very challenging. SharePoint 2013 gains more and more traction in Germany – 2014 there will be more of it. Hopefully I get rid of all SharePoint 2007 projects – this old stuff… not good for me, not good for my clients (I am not saying its always the tool!).\nTwitter The one and only “tool” is twitter – I received so much help and feedback, meet new and old friends (I am looking at you: @meligo @mysharepoint @zimmergren @ToddKlindt @stacyDraper @HughAJWood @jimmywim @MLCarter1976 @hupseb @michl86 – in no particular order!)\nAre you on twitter? Why not follow me? 🙂\nPredictions As Wictor did it – I try my own 3 predictions:\n2014 will be the year of search I have more booked search training for 2014 than I had in 2013 this time – and with the enhanced SharePoint 2013 search there will be many challenges! And I hope that SP1 for SharePoint 2013 brings more of it – maybe a push api for Search Indexing?\nHosting on Azure for Dev/Test will accelerate – even in Germany. Hosting on azure is pricey – but its worth it. You only pay what you use, perfectly for dev/test in the cloud.\nApps Apps Apps I did not see that many SharePoint Apps – but I will write my own and hopefully my clients will jump on the apps train!\nHappy New Year! Phew – more than I thought, what a year! But now its time to say thanks for reading so far – next year will be exciting, too!\nI wish you all a Happy New Year – may it be even better than the last and with lots of fun! See you around!\n",
    "tags": null,
    "categories": ["Conference","Search","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/12/sharepoint-toolbox-color-palette-tool-sharepoint-2013/",
    "title": "SharePoint Toolbox: Color Palette Tool for Sharepoint 2013",
    "date_published": "2013-12-16T09:01:16Z",
    "description": "Another episode of the toolbox – who thought this would happen again?\nTeaser In this episode I show how to use the Color Palette Tool for SharePoint 2013 and show how easy it is to create Themes for SharePoint 2013 with it.\nVideo: English / German\nSlides: slideshare.net/melchermaximilian/toolbox-color-palette-tool\nDownload: http://www.microsoft.com/en-us/download/details.aspx?id=38182\nSide Note I bought a new microphone – a SAMSON Go Mic – and I am really happy with it. Do you like the sound quality?",
    "content": "Another episode of the toolbox – who thought this would happen again?\nTeaser In this episode I show how to use the Color Palette Tool for SharePoint 2013 and show how easy it is to create Themes for SharePoint 2013 with it.\nVideo: English / German\nSlides: slideshare.net/melchermaximilian/toolbox-color-palette-tool\nDownload: http://www.microsoft.com/en-us/download/details.aspx?id=38182\nSide Note I bought a new microphone – a SAMSON Go Mic – and I am really happy with it. Do you like the sound quality?\n",
    "tags": null,
    "categories": ["SharePoint 2013","SharePoint Toolbox"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/11/sharepoint-2013-search-preview-documents-hosted-sharepoint-2010/",
    "title": "SharePoint 2013 Search Preview for Documents hosted in SharePoint 2010",
    "date_published": "2013-11-22T23:59:32Z",
    "description": "Recently I talked to some clients because of a \u0026ldquo;Search-First\u0026rdquo; SharePoint 2013 migration (more about this topic will follow). During a training this week I got aware of a serious issue with the \u0026ldquo;Search-first\u0026rdquo; approach, especially with the really nice Office Web Apps 2013 Search Previews you get for free (read only!).\nProblem Some clients want to start their migration with setting up a new SharePoint 2013 farm. This new farm then crawls the old SharePoint 2010 farm.",
    "content": "Recently I talked to some clients because of a \u0026ldquo;Search-First\u0026rdquo; SharePoint 2013 migration (more about this topic will follow). During a training this week I got aware of a serious issue with the \u0026ldquo;Search-first\u0026rdquo; approach, especially with the really nice Office Web Apps 2013 Search Previews you get for free (read only!).\nProblem Some clients want to start their migration with setting up a new SharePoint 2013 farm. This new farm then crawls the old SharePoint 2010 farm. After successfully crawling it, the SharePoint 2013 farm then publishes its Search Service to the SharePoint 2010 farm. So far so good. But what happens with all the new shiny features in the Search UI? Nothing. Until now everything works as it should - you now get better search results in your existing SharePoint 2010 environment.\nNow let\u0026rsquo;s take it a step further. Replace the SharePoint 2010 Search Center with a Search Center hosted in SharePoint 2013 - replacing is actually wrong, you have to do a redirect from the SharePoint 2010 environment to the Search Center in SharePoint 2013 - with the Search Preview, Display Templates and all the good stuff. Pretty great, I totally love the new features and the business value you can create with it:\nBut here is the Problem: You crawled the SharePoint 2010 environment - by default you wont get a Preview for documents in the old environment:\nThere is a great article by Murad Sæter how you could substitute the Preview with Office Web Apps 2010 (the service application in SharePoint 2010 that needs expensive Office 2010 licenses!). Many of my clients don\u0026rsquo;t have the Office 2010 licenses - many of them still use Office 2007 - so a show stopper. PDF Preview with old Office Web Apps - nope. This additionally applies to documents hosted on a fileshare - that does not work either.\nReason So we have Security Trimming in SharePoint Search - you only see what you are allowed to see. Why is there now Preview?\nThats because of oAuth - or better the inability of SharePoint 2010 to understand and accept oAuth (great explanation here by Kirk Ewans).\nBehind the scenes The following happens when you hover over search result that is suitable for a Preview - let\u0026rsquo;s name the searching user Max:\nThe search crawler created a link to render a document in the browser. This link is stored in the property ServerRedirectedURL or ServerRedirectedEmbedURL. This link points to a SharePoint Page called WopiFrame (e.g. http://sharepoint2013/_layouts/15/WopiFrame.aspx?sourcedoc=/Documents/OSP218.pptx\u0026amp;action=default\u0026amp;DefaultItemOpen=1) This WopiFrame page knows the url to the bound Office Web Apps Server and redirects the request to it. With three parameters: The sourcedoc of the document to render, an oAuth access token and an oAuth time to live token. The Office Web Apps server, in order to render the document and deliver it back, needs the document to render - of course. Because we left the original server where Max was authenticated - we don\u0026rsquo;t have this client context anymore - the request from the Office Web Apps back to the SharePoint 2013 server to get the document is anonymously. But why does the SharePoint delivers our precious document? Thats because of the oAuth access token - SharePoint 2013 can validate it and accepts the request like one Max would actually do. After some computing and drawing time, the Office Web Apps server delivers the preview back to Max. Because SharePoint 2010 does not understand and accept anonymously requests (most of the time) - and does not understand oAuth tokens - Office Web Apps 2013 do not render Documents hosted on SharePoint 2010.\nSolution: SharePoint 2013 Search Preview for Documents hosted in SharePoint 2010 Figuring out a solution cost me 4 days \u0026ldquo;brain time\u0026rdquo; - thinking about the problem - understand the root cause - analyzing options. And chatting with some really nice guys - more about this later.\nIn the following picture I show you the flow how the requests go from one server to another:\nIn order to make this all happen, I created a SharePoint Farm Solution (full trust) that needs to be deployed on the SharePoint 2013 side. This provides two handlers that do the following.\nSP2010Redirect.ashx: Accepts the initial user request and generates a url that contains the document that should be rendered (full url), the requesting user (domain login) and a simple hash (prevents tampering with the data - no real security!) - that guy is for step (1) in the flow.\nSP2010Preview.ashx: Accepts the request back from the Office Web Apps server with the full url of the document, the user login and the hash. With those three values it can check the integrity of the parameters, download the document of the SharePoint 2010 (or what system you like) and returns it to the Office Web Apps server. This page handles step (3) to step (6).\nPictures / Video or it did not happen! Flaws of the current implementation / Room for improvement The code I am going to share is no production ready code - there are magic, hard-coded values in it. I only demonstrate how I did it. No warranties for what so ever.\nSo why don\u0026rsquo;t I use oAuth and the WOPIFrame for all the security stuff? Thats because of wonderful internal classes. Dear Microsoft - please open up so I can implement a secure approach. If I miss a thing and can actually use oAuth directly - please let me know!\nAgain in other words: If you can create the hash that is passed along for anti-tampering, the SP2010Preview.ashx will download you every document of the SP2010 (this is serious!!) - in my code I did not implement the security check for the given user anyways 🙂 Neither did I add the display template - but its so easy to change it, you will figure it out.\nGrab the demo code here.\nThanks! I really love the SharePoint community - there are a lot of helpful and awesome guys out there. To quote a few that really helped me figuring out this solution:\n@maxmelcher If you use SP2013 search center w/SP2010 doc previews, you need this: http://t.co/Ef1v8fiY8t \u0026mdash; Bob German (@Bob1German) November 22, 2013 @maxmelcher @jimmywim @HughAJWood if that's the case, you can't highjack another app's token. Can create custom WOPI? \u0026mdash; Kirk Evans (@kaevans) November 21, 2013 @maxmelcher @HughAJWood OR you will need a handler, like your idea, which asks a web service hosted in 2013 if the token is good \u0026mdash; James Love (@jimmywim) November 20, 2013 @maxmelcher Steve Fox's book may have the answer. I put in the information from it for you. http://t.co/TdXZYyXlP4 \u0026mdash; Hugh Wood (@HughAJWood) November 20, 2013 @jimmywim @HughAJWood \"premature optimization is the root of all evil\" 😀 \u0026mdash; Maximilian Melcher (@maxmelcher) November 20, 2013 ",
    "tags": null,
    "categories": ["Deep Dive","Development","Office Web Apps 2013","Search","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/11/converting-hyper-v-vhd-vhdx-shrink/",
    "title": "Converting a Hyper-V VHD to VHDX – and shrink it",
    "date_published": "2013-11-12T09:00:36Z",
    "description": "Yesterday I thought its time to convert my SharePoint 2010 development environment Hyper-V vhd to a new vhdx.\nWhy bother? I used my environment hosted on my lovely Lenovo W520 to develop a migration tool to convert a SP2007 environment to a SP2010 environment. Therefore I needed ~300GB free space – easy with Hyper-V. Just extend your virtual drive and you are good to go. Afterwards you can easily shrink the disk back again – at least I thought so.",
    "content": "Yesterday I thought its time to convert my SharePoint 2010 development environment Hyper-V vhd to a new vhdx.\nWhy bother? I used my environment hosted on my lovely Lenovo W520 to develop a migration tool to convert a SP2007 environment to a SP2010 environment. Therefore I needed ~300GB free space – easy with Hyper-V. Just extend your virtual drive and you are good to go. Afterwards you can easily shrink the disk back again – at least I thought so. But, no - the Hyper-V wizard could not shrink my virtual disk after project finish. There were unmovable files – bummer. So I thought lets delay this for until… yesterday.\nWhy now? The week before I read about the new Hyper-V Generation 2 VMs – pretty good stuff. No emulated drivers – direct access to the Hosts disk drives, sounds like a SharePoint would love it. And I migrated my work PC to Windows 8.1 – this is a requirement.\nHow I finally made it? To convert a vhd to a vhdx just open the Hyper-V Manager – open the properties of a VM, go to disk settings and click on convert. Then choose vhdx and on the very last page a location with sufficient space.\nOpen the disk settings Select convert select vhdx My location was on a usb 2.0 drive – apparently I had no 300GB space left on my SSD. So the whole converting took me roughly 3 hours. Then I tried to boot the converted VM – worked. Deleted the old vhd file and copied the new vhdx back. Another 3 hours.\nNow the shrinking part, right? Okay I thought – Windows Server 2008 R2 should be capable of this – theoretically yes. But there were unmovable files detected – defrag could not move them. I tried everything. Inside and outside of the VM, nothing worked. The explorer showed me 100GB used, 200GB free space – but still 300GB on my host’s ssd.\nSSD space is expensive! So after some research I found a nice tool called Paragon Partition Manager 2013 (apparently I do not get money from them – I am not related!). With the free edition I could resize my mounted vmdx – took like 10 minutes. Love it.\nReclaimed 180GB precious space on my ssd Whats next? Tomorrow I will convert my SP2013 hosted in a Windows Server 2012 into a generation 2 VM - then I will truly see the new performance. Generation 2 is only supported with Windows Server 2012 (\u0026amp; R2) and Windows 8 + 8.1.\n",
    "tags": null,
    "categories": ["ITPro"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-sharecamp/",
    "title": "After the ShareCamp is BEFORE the ShareCamp",
    "date_published": "2013-09-08T09:00:10Z",
    "description": "A ShareCamp.at Retrospective My colleague Sebastian and I arrived at ShareCamp in Vienna (Austria) at Friday evening. And it started well – we meet a lot of people very known in the German – and now Austrian Community. To name a bunch: Toni Pohl, Martina Grom, Christian Glessner, Thorsten Hans, Hans Brender, Heike Ritter - not a complete list. We had a, lets call it pre-conference party. A great start of a ShareCamp.",
    "content": "A ShareCamp.at Retrospective My colleague Sebastian and I arrived at ShareCamp in Vienna (Austria) at Friday evening. And it started well – we meet a lot of people very known in the German – and now Austrian Community. To name a bunch: Toni Pohl, Martina Grom, Christian Glessner, Thorsten Hans, Hans Brender, Heike Ritter - not a complete list. We had a, lets call it pre-conference party. A great start of a ShareCamp.\nSo what is a ShareCamp? The idea behind a ShareCamp is as easy as fun: It’s a community conference with no pre-aligned agenda about sessions. Every attendee can present – and they should. Did I mention that it is all about SharePoint? I assume that its best comparable to a SharePoint Saturday.\nIn Germany there is one ShareCamp in Munich – usually around April – now this year there was the first one in Austria. A good way to bring the community together and for partners to show their products. Around 70 people attended at Microsoft Austria – they have a great office in Vienna. Not that many attendees you think? Right, but we had were small groups and that enabled very detailed discussions – with the whole audience. That was great and very intense.\nSebastian playing with the Microsoft Gadget - a huge touch monitor with Windows 8 Sessions I attended 6 Sessions at this ShareCamp from the 4 parallel tracks – as usually I blogged about them:\nApps or Farm Solutions? Typescript Extending Visual Studio SharePoint Tools Windows Azure Mobile Services App Dev For a free conference very impressive.\nAfter-Party After the conference – about 6pm we went to a restaurant and continued with discussions, beer and food sponsored by K2 – perfect way to connect with friends and like-minded community members.\nClosing notes I had a blast – this ShareCamp (my 4th now) was pretty amazing. Meeting friends with similar interests and same level of passion about SharePoint is not that easy – this community event made it possible, again. The insight I got during the sessions about new technologies, tips and tricks – entertaining as well.\nClosing Note - shortly before the raffle Everyone wants to get the Surface RT Lastly – there was a closing note with Martina Grom and a raffle.\nI won a book “SharePoint 2013 for End-Users” – that’s a sign. I think I make client happy and give it to them. But thanks – made my day! Who needs a Surface RT anyways… I am a winner! Thanks for all organizers and sponsors for making this possible. Count me in for next year.\n",
    "tags": null,
    "categories": ["Apps","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-app-dev/",
    "title": "ShareCamp.at: App Dev",
    "date_published": "2013-09-08T03:41:32Z",
    "description": "Thorsten Hans (@ThorstenHans) and Christian Glessner (@cglessner) showed us how to develop SharePoint Apps (SharePoint hosted, Provider hosted).\nLive coding Thorsten recommended to use the REST calls instead the JS client object model – they are faster and “more” future-proof.\nTheir experience was that autohosted is a little odd, the price conditions are not very clear. So there is provider hosted (Azure) or SharePoint hosted remaining.\nKey takeaway I really like their sessions – zero slides sessions – good content.",
    "content": "Thorsten Hans (@ThorstenHans) and Christian Glessner (@cglessner) showed us how to develop SharePoint Apps (SharePoint hosted, Provider hosted).\nLive coding Thorsten recommended to use the REST calls instead the JS client object model – they are faster and “more” future-proof.\nTheir experience was that autohosted is a little odd, the price conditions are not very clear. So there is provider hosted (Azure) or SharePoint hosted remaining.\nKey takeaway I really like their sessions – zero slides sessions – good content.\n",
    "tags": null,
    "categories": ["Apps","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-windows-azure-mobile-services/",
    "title": "ShareCamp.at: Windows Azure Mobile Services",
    "date_published": "2013-09-07T13:58:18Z",
    "description": "Thorsten Hans (@ThorstenHans) showed a lot of examples how to send notifications via Windows Azure Mobile Services.\nThe story was “Build a contact form” with push notifications\nAs a Windows 8 App As a SharePoint App Key takeaway Easy, fast – good stuff. Wondering if the push based messages are based on SignalR.\nThe session was good fun, thanks Thorsten!",
    "content": "Thorsten Hans (@ThorstenHans) showed a lot of examples how to send notifications via Windows Azure Mobile Services.\nThe story was “Build a contact form” with push notifications\nAs a Windows 8 App As a SharePoint App Key takeaway Easy, fast – good stuff. Wondering if the push based messages are based on SignalR.\nThe session was good fun, thanks Thorsten!\n",
    "tags": null,
    "categories": ["Development"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-typescript/",
    "title": "ShareCamp.at: TypeScript",
    "date_published": "2013-09-07T12:34:37Z",
    "description": "Session about TypeScript and SharePoint by Martin Groblschegg\nShort introduction about TypeScript\nTypeScript is a free and open source programming language developed by Microsoft. It is a strict superset of JavaScript, and essentially adds optional static typing and class-based object oriented programming to the language. Anders Hejlsberg, lead architect of C#, has worked on development of TypeScript.\nTypeScript extends JavaScript syntax, so any existing JavaScript programs work with TypeScript without any changes.",
    "content": "Session about TypeScript and SharePoint by Martin Groblschegg\nShort introduction about TypeScript\nTypeScript is a free and open source programming language developed by Microsoft. It is a strict superset of JavaScript, and essentially adds optional static typing and class-based object oriented programming to the language. Anders Hejlsberg, lead architect of C#, has worked on development of TypeScript.\nTypeScript extends JavaScript syntax, so any existing JavaScript programs work with TypeScript without any changes. TypeScript is designed for development of large applications and when compiled it produces JavaScript to ensure compatibility. [1]9\nOr in my words: It let you write manageable, typed JavaScript. Awesome.\nTooling Visual Studio Plugin and you get almost real-time conversation from TypeScript to JavaScript.\nIn order to get compiler/intellisense support for SharePoint JSOM you need the definition files for it. They are available here.\nVery cool is that you can debug the TypeScript code in Visual Studio – no need to understand the generated code (imho: it helps a lot). To get that you have to enable the map file generation in the plugins settings.\nKey takeaway Compiler safety and intellisense is a great benefit for bigger projects – I think I will invest some…\n",
    "tags": null,
    "categories": ["Development"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-apps-farm-solutions/",
    "title": "ShareCamp.at: Apps or Farm Solutions?",
    "date_published": "2013-09-07T11:37:35Z",
    "description": "Controversial discussion about the new App Model and very nice experience sharing.\nHere are my key questions and thoughts about the session by Christian Groß.\nDeployment? What are the limits and advantages Security – when you trust you can choose what rights the app has. Technology independent (Coose what every technology you want, e.g. .NET version) Life cycle – when you update you app you have to update the app on each subscriber web.",
    "content": "Controversial discussion about the new App Model and very nice experience sharing.\nHere are my key questions and thoughts about the session by Christian Groß.\nDeployment? What are the limits and advantages Security – when you trust you can choose what rights the app has. Technology independent (Coose what every technology you want, e.g. .NET version) Life cycle – when you update you app you have to update the app on each subscriber web. Ouch. Nobody knew whether you could automate that. When is the right time to switch to the App Model? That was a nice discussion with no final decision – but 10 out of 11 attendees agreed that the app model is too promising to ignore.\nKey takeaway Not a classical session - but we had fun during the discussion.\n",
    "tags": null,
    "categories": ["Apps","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/09/sharecamp-extending-visual-studio-sharepoint-tools/",
    "title": "ShareCamp.at: Extending Visual Studio SharePoint Tools",
    "date_published": "2013-09-07T11:35:31Z",
    "description": "Peter Holpar showed us how to extend the Visual Studio Tools for SharePoint.\nImplementation The creation of a Visual Studio Extension is basically a custom class that implements some interfaces. The biggest problem is that the documentation is not that good – Peter told us that it needs a lot of debugging to get things working.\nPreReqs Get the Visual Studio 2012/2013 SDK and you need, of course, an installed SharePoint because of the assemblies.",
    "content": "Peter Holpar showed us how to extend the Visual Studio Tools for SharePoint.\nImplementation The creation of a Visual Studio Extension is basically a custom class that implements some interfaces. The biggest problem is that the documentation is not that good – Peter told us that it needs a lot of debugging to get things working.\nPreReqs Get the Visual Studio 2012/2013 SDK and you need, of course, an installed SharePoint because of the assemblies.\nUse Cases Providing Templates for SharePoint Items (Project Templates, Feature Templates – you name it) Creating custom deployment steps Key takeaway Okay, this is a lot of work – you need a very good reason to develop a custom extension. Looking at the awesome CKSDEV extension – I really value this extension more now.\n",
    "tags": null,
    "categories": ["Development"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-best-practices-in-virtualizing-and-managing-microsoft-sharepoint-with-microsoft-system-center-and-windows-server/",
    "title": "TechEd 2013: Best Practices in Virtualizing and Managing Microsoft SharePoint with Microsoft System Center and Windows Server",
    "date_published": "2013-06-28T13:49:37Z",
    "description": "Session by Simon Skinner (@CymonSkinner)\nSharePoint is now a company standard, but what is supported, sensible, or even practicable? How do we go about monitoring and managing SharePoint? In this session, we discuss the virtualization path and best practices using Hyper-V for high availability and why virtualization makes sense. […]\nHere are my notes:\n",
    "content": "Session by Simon Skinner (@CymonSkinner)\nSharePoint is now a company standard, but what is supported, sensible, or even practicable? How do we go about monitoring and managing SharePoint? In this session, we discuss the virtualization path and best practices using Hyper-V for high availability and why virtualization makes sense. […]\nHere are my notes:\nPlanning Virtualization There is now support to virtualize the largest SQL Server installations – this is good news. From the slides:\nA SharePoint 2013 infrastructure deployed within 5 Hyper-V VMs (3 WFE, 1 App, 1 SQL), running on a single physical server, backed by SSD-based, mirrored Storage Spaces, supported the demand of over 1.3 million heavy users (60 requests per hour), with 1% concurrency, running a lightweight, non-blocking workload), with measurably low response times throughout.\nImpressive numbers, I will read the full report soon.\nDeployment There are a couple of tools to deploy a SharePoint Farm – some of them are new to me. Simon showed us how to automate the deployment with Virtual Machine Manager 2012 – the templates look quite impressive! Then he mentioned, this apparently a bit too short, System Center.\nMonitoring Monitoring can be done with SharePoint Management Pack for System Center Operations Manager. Important: The installation experience is not that smooth, check the slides for instructions.\nOther options are ULS and SharePoint Health Analyzer. The good things about the Health Analyzer is that they are visible in SCOM – so for a bigger installation its maybe worth to create custom health rules so you can quickly detect problems – and react in time and proactively.\nWhat is really cool is that you can add a log monitor on the ULS logs – for multiple web frontends this is awesome – and so you get a centralized log. Neat!\nI call it Intellectual Laziness\nNice quote – Lazy people tend to automate tasks so I fully agree on that. If you add some brain to it you have more time for important stuff.\nProtection Last chapter is about protection of your farm – so its about Data Protection Manager 2012 – you can even backup to Azure now. Thats a tool thats was totally off my radar - good stuff.\nSession Slides and Recording As usual you can get the slides and the recording from the TechEd site. Because Bill interacted with the audience, go watch the recording.\nMy evaluation Automation and Best Practices – this was a rock solid session. Many new stuff for me, very valuable. Simon’s presentation was very good – highly recommend it!\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-authentication-and-authorization-infrastructure-in-microsoft-sharepoint-2013/",
    "title": "TechEd 2013: Authentication and Authorization Infrastructure in Microsoft SharePoint 2013",
    "date_published": "2013-06-28T11:12:11Z",
    "description": "Session by Paolo Pialorsi (@PaoloPia)\nIn this session, you learn how authentication and authorization work in SharePoint 2013, either when handling direct users’ requests, or running requests for SharePoint apps. In particular, see how to federate with an external Identity Provider like Windows Azure ACS to authenticate users and then authorize them in SharePoint, leveraging claims.\nThere is one Level 400 session (highest) – guess what\u0026rsquo;s it about? Right, Authentication.\nHere are my session notes.\n",
    "content": "Session by Paolo Pialorsi (@PaoloPia)\nIn this session, you learn how authentication and authorization work in SharePoint 2013, either when handling direct users’ requests, or running requests for SharePoint apps. In particular, see how to federate with an external Identity Provider like Windows Azure ACS to authenticate users and then authorize them in SharePoint, leveraging claims.\nThere is one Level 400 session (highest) – guess what\u0026rsquo;s it about? Right, Authentication.\nHere are my session notes.\nAuthentication Classic Authentication is deprecated in SharePoint 2013. So its all about Claims now. The though thing is to map the incoming tokens from the authentication provider to the ones SharePoint use.\nIdentity Provider Paolo showed an example how to utilize Facebook to log into SharePoint via Azure ACS. As said, he had to map the incoming claims token to SharePoint properties – trust the certificate on the SharePoint site and that’s it basically.\nYou can create a custom Identity Provider, there is a every well documented example by Steve Peschka.\nApps After the theory Paolo showed us how to utilize this knowledge in combination with apps. This is my favorite diagram about this:\nThis is crazy stuff – but very powerful.\nSession Slides and Recording The presentation and the recording will be available at the Chanel 9 site. I recommend you to watch the recording, the demos are not visible in the slides at all.\nMy evaluation Authentication/Security is tough stuff: I did something similar with ADFS for a client, I wish I had this information earlier – it helped me understand what’s happening under the hood. Too bad that there are not that many advanced sessions, I wish there were more. Thanks Paolo for my better understanding about this topic!\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-microsoft-sharepoint-2013-administration/",
    "title": "TechEd 2013: Microsoft SharePoint 2013 Administration",
    "date_published": "2013-06-27T16:11:22Z",
    "description": "Corey Burke (@cburke007) and Todd Klindt (@toddklindt)– Entertaining SharePoint Administration\nIn this session, we cover what\u0026rsquo;s new in SharePoint 2013. First, we cover installing SharePoint 2013 and configuring your new farm. This session provides what to need to start planning your new SharePoint 2013 farm and dovetails nicely into Part 2, which covers changes in SharePoint 2013 the SharePoint administrator should know about. We cover changes to how you’ll plan your farm topology. We also cover the changes to the Search service application and how that impacts scale. Finally, we spend some time talking about everyone’s favorite part of SharePoint Server, the User Profile Service.\nThat’s quite a lot for one session – but Todd is a fast speaker. The session also includes cheap jokes about SharePoint Developers, guaranteed!\nSo here are my session notes:\n",
    "content": "Corey Burke (@cburke007) and Todd Klindt (@toddklindt)– Entertaining SharePoint Administration\nIn this session, we cover what\u0026rsquo;s new in SharePoint 2013. First, we cover installing SharePoint 2013 and configuring your new farm. This session provides what to need to start planning your new SharePoint 2013 farm and dovetails nicely into Part 2, which covers changes in SharePoint 2013 the SharePoint administrator should know about. We cover changes to how you’ll plan your farm topology. We also cover the changes to the Search service application and how that impacts scale. Finally, we spend some time talking about everyone’s favorite part of SharePoint Server, the User Profile Service.\nThat’s quite a lot for one session – but Todd is a fast speaker. The session also includes cheap jokes about SharePoint Developers, guaranteed!\nSo here are my session notes:\nPerformance – Performance – Performance! Performance come from SQL server, so implement the best practices. Don’t be cheap on hardware!\nI love to quote this one:\nThe cost of overinvestment in hardware is almost always far less than the cumulative expenses related to troubleshooting problems caused by under sizing.\nVirtualization is more common nowadays, but its tough to virtualize SQL Server / SharePoint – the good thing, there is a webcast about how to set things up correctly. Note: I will attend to that session tomorrow.\nAccess Service creates a lot of databases, Todd’s recommendation is to provision this service to a different SQL Server instance. I think that’s a good one.\nUser Profile Service has not changed that much in SharePoint 2013 – is it FIM RC under the hood again? If there is a question concerning User Profiles, I always check Spence Harbar’s blog – if someone figured it out, its him.\nArchitecture Web Frontend, Application Server, Database Server – the first two tiers are flexible enabled/disabled via the Web Role.\nSearch: There is a gang on the box stealing all the resources\nNice one, so true. Search loves RAM.\nThen the two IT-Pros showed us how to scale SharePoint from two servers to three servers – and then it got bigger and bigger. Finally a session about big installations. By the way, where is the level 400 session for scaling SharePoint?\nSearch is a killer: Don’t underestimate the hardware requirements for bigger installations.\nPatches 4 times patches killed SharePoint 2010 and they were pulled right afterwards. Todd has two lists, he is my reference for the current recommended version (SharePoint 2010 and SharePoint 2013). Too bad there is no “If I were you, I would install this patch flag” on the page. Important: There is no uninstall – install the patches on a TEST environment and to quote Dan Holme:\nYou always have a TEST environment – without it you don’t have a PROD environment\nSlides \u0026amp; 60 Minutes Entertainment You can grab the slides and the recording from the TechEd site – I ‘d recommend you to watch it, because the show is really good!\nMy evaluation Laughing and learning – that’s why I love Todd’s sessions for years now. I even bought his book at TechEd, but he took it from me to shamelessly promote it in the session:\nThe Todd and Corey combo worked very well, I (and I assume the 100 attendees) had a very good time! Thanks!\n",
    "tags": null,
    "categories": ["ITPro","TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-optimizing-microsoft-sql-server-2012-for-sharepoint-2013/",
    "title": "TechEd 2013: Optimizing Microsoft SQL Server 2012 for SharePoint 2013",
    "date_published": "2013-06-27T11:09:27Z",
    "description": "If SQL Server does not perform, SharePoint can not show its full potential – to quote the session description:\nMore than 90% of the content accessed via SharePoint is stored in SQL Server and without the correct configuration of SQL Server it can have a detrimental impact on the performance of SharePoint. Regardless of whether you have a dedicated DBA or the SharePoint administrator is also the DBA there are critical SQL Server configurations that can be made that will optimize SharePoint […]\nHere are my session about the session by Brian Alderman (@brianalderman)\n",
    "content": "If SQL Server does not perform, SharePoint can not show its full potential – to quote the session description:\nMore than 90% of the content accessed via SharePoint is stored in SQL Server and without the correct configuration of SQL Server it can have a detrimental impact on the performance of SharePoint. Regardless of whether you have a dedicated DBA or the SharePoint administrator is also the DBA there are critical SQL Server configurations that can be made that will optimize SharePoint […]\nHere are my session about the session by Brian Alderman (@brianalderman)\nDatabase Overview and Recommendations Database limit was increased, still 200GB is recommended. Separate instance for SharePoint is Best Practice.\nInstance defaults:\nDuring installation set the default Collation to Latin1_CI_AS_KS_WS Set the default location to something different than c: drive Set the default grow sizes to per MB instead of percent growth rate. If your database grows instantly by 20GB it’s a performance degradation for a while. Set it to a reasonable amount.\nSplit the content db and the log file if possible – different drives, more performance.\nPlan Site Collections Important: If you want to stay below the 200GB limit you have to calculate the site collection bin size into amount. Good reminder. Additionally set quota templates.\nMemory SQL Server is memory hungry – set a reasonable minimum and maximum memory. Example: 25GB minimum and 30GB maximum. In the rare cases that SQL Server releases the memory you don’t drop below 25GB. But that does not mean it claims the 25GB upfront.\nSlides Grab the slides (once they are available), definitely worth reading!\nEvaluation I like the topic, its very important for good performance. The hints from Brian covered so many areas, great! I wish he had a PowerShell repository how to set many of them automatically. Still, a very valuable session!\nBrian in action! ",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-step-by-step-search-development-in-microsoft-sharepoint-2013/",
    "title": "TechEd 2013: Step by Step: Search Development in Microsoft SharePoint 2013",
    "date_published": "2013-06-27T09:18:16Z",
    "description": "Another search session – good times!\n",
    "content": "Another search session – good times!\nSession by Jan Inge Bergseth (MSFT, Search Center of Excellence)\nContent Enrichment Content Enrichment is a great feature to enrich your data during crawl – actually it’s the only way to enrich at all. When the crawler index an item and if the metadata of the current item matches some criteria, the metadata are sent to a customizable web service. Important: Metadata aliases do not work! Additionally you cannot change the body field and the security descriptors – wow, the last one is bad. But you can reject documents during crawl, crawl blacklists come to my mind. This is also great for calculations based on the provided metadata (days since published \u0026gt; 10, as example).\nContent Ingestion Several options to integrate data from external systems:\nNo code OData SQL Code .NET Assembly WCF Important: If you develop a custom connector you should implement the methods for incremental crawling otherwise there will be slow full crawls only.\nDisplay Templates Important: If you don’t use the enterprise search center you do not get the html files to edit them – only the unreadable js files. Wow, tough one.\nDemo Jan showed one demo from the content enrichment, BDC to the final display templates – easy to follow, nothing to complex. The result looked like this:\nI assume, the audience get the idea how powerful that new design is – or as Jan said:\nThe Sky is the limit\nLoading scripts There are several ways to load external javascript files:\n",
    "tags": null,
    "categories": ["Search","TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-windows-is-the-future/",
    "title": "TechEd 2013: Windows is the Future",
    "date_published": "2013-06-27T08:48:26Z",
    "description": "This keynote is, as the title indicates, all about Windows 8.1.\nMy takeaways and impressions after the jump.\n",
    "content": "This keynote is, as the title indicates, all about Windows 8.1.\nMy takeaways and impressions after the jump.\nWindows 8.1 Enhancements It seems like there are hundred of little enhancements in Windows 8.1. Here are some of my favorites!\nBoot to Desktop – easy to set up in the start menu Properties Charms bar - aligned to the position where you triggered the bar Win+x menu – has now shutdown, great Start Menu – pressing windows triggers the start screen only on the current screen and its less intrusive Start Menu – can be locked down so people in your organization can not change it. Kiosk mode- lock down to single apps. App alignment: there are multiple columns now in Windows 8.1, great to align them as you want. Devices Okay, there are some new fancy form factors. I liked the variety of them:\nWeb Things and other stuff Web DASH – hopefully I got the right name for this: It’s a better support for video streaming over http WebGL – integrated in the platform 3D Printing – there is a new standard for 3D printing built into Windows 8.1. The print menu is the same as for printing 2D documents – smart move. Outlook 2013 RT – available on every RT device Workplace join \u0026amp; work folders – this is interesting, clients can join a domain by themselves, after that they have access to their work folders. Security Touch based finger print scanners – No more swiping, you touch the finger print scanners. Store – touch to give your consent to buy stuff in the windows store, no passwords. First time setup – login, skydrive pro gets all your data, much more integrated approach. Same applies for apps, with on demand download if you need them earlier. Pictures My iPhone apparently do not like the light settings, but here are some impressions.\nMy evaluation Actually, the keynote was pretty weak. They showed some minor features, nothing new with a “wow” effect. This is maybe because of the parallel BUILD, who knows.\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-continuous-deployment-with-team-foundation-service-and-team-foundation-server-2012/",
    "title": "TechEd 2013: Continuous Deployment with Team Foundation Service and Team Foundation Server 2012",
    "date_published": "2013-06-26T16:20:18Z",
    "description": "Session by Brian Randell (@brianrandell)\nIt started with music – and then Brian started a great session. Here are my notes!\n",
    "content": "Session by Brian Randell (@brianrandell)\nIt started with music – and then Brian started a great session. Here are my notes!\nMore demos or more PowerPoint presentations?\nGreat question to start a session – I will copy that one!\nModern Deployment for Modern Applications Role-back was yesterday, the new thing is role-forward! When you can deliver a feature every day, the consumer will happily install an update every day. This includes “no downtime” as a requirement.\nDemo During the session Brian showed us how to adjust the build and publish profile with Team Foundation Server 2012.\nSpecial Bonus Points Brian showed how to adjust the publishing so that a SharePoint App is deployed on Sharepoint.com.\nMy evaluation Good session –. too bad I got distracted by sooo many mails and phone calls. I will watch the session again once the video is available.\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-microsoft-sharepoint-2013-and-office-365-upgrade-and-migration-strategy-and-tactics/",
    "title": "TechEd 2013: Microsoft SharePoint 2013 and Office 365 Upgrade and Migration: Strategy and Tactics",
    "date_published": "2013-06-26T15:02:15Z",
    "description": "Session by Dan Holme (@danholme)\nThis is one of my most anticipated sessions at this years TechEd. Part of my job is it to consult my clients why, when and how they can migrate to SharePoint 2013, so this is a perfect session for me. Here are my notes from Dan’s Session – with many quotes because they rock and have totally influenced my decisions in the past!\n",
    "content": "Session by Dan Holme (@danholme)\nThis is one of my most anticipated sessions at this years TechEd. Part of my job is it to consult my clients why, when and how they can migrate to SharePoint 2013, so this is a perfect session for me. Here are my notes from Dan’s Session – with many quotes because they rock and have totally influenced my decisions in the past!\nSharePoint 2010 or SharePoint 2013 SharePoint 2010 was designed 2006 – at least the specification:\nSo the answer should be SharePoint 2013.\nUpgrade projects have delivered little to no value\nA simple upgrade does not deliver value – no adoption of the new function and alignment of the new features to business needs: no value.\nWe wait for Service Pack 1\nThat’s ancient, new versions are tested with Million customers in the cloud / Office 365.\nShould I skip SharePoint 2010 starting from SharePoint 2007? Picture tells more than 1000 words – I like the decision tree because of its simplicity:\nUpgrade is dead – migrate and move forward\nUpgrade Experience The goal should be to provide a smooth upgrade experience with upfront information – similar to the information you got from Office 365 upgrading from SP2010 to SP2013.\nAll it takes is good planning and automation\nGreat one! I love automation.\nOn Prem Replace the word on premises and build a private cloud. This enables a smoother upgrade experience to Office 365 – and to scale depending on the business needs.\nApps Apps are the new self-service solution – you want and need this. The end users are used to “there is an app for that” - we should deliver this.\nTrue stories! No data goes to the cloud!\nTrue story: New Zealand prohibited to utilize the cloud. Then there was an earthquake and they lost a lot of data. Now cloud is cool.\nHow can I prevent my organization to migrate to the cloud?\nThat was a question Dan was asked – the motivation behind the question was: afraid of job loss. Jobs are being transformed not lost. \u0026lt;= Agreeing with that.\nMy evaluation When ever there is a session by Dan Holme I try to attend – I like the style of the presentation and they “payload”. Dan covered so many aspects why and how you should migrate/move forward and even gave reasons why not. Definitely worth watching the recording – I am 100% certain that I will reference the slides in the future.\n",
    "tags": null,
    "categories": ["SharePoint 2007","SharePoint 2010","SharePoint 2013","TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-iaas-hosting-a-microsoft-sharepoint-2013-farm-on-windows-azure/",
    "title": "TechEd 2013: IaaS: Hosting a Microsoft SharePoint 2013 Farm on Windows Azure",
    "date_published": "2013-06-26T11:05:21Z",
    "description": "Session by Michael Washam (@MWashamMS) how to provision SharePoint 2013 in Windows Azure Virtual Machines.\nSession notes after the jump.\n",
    "content": "Session by Michael Washam (@MWashamMS) how to provision SharePoint 2013 in Windows Azure Virtual Machines.\nSession notes after the jump.\nProvisioning SharePoint with PowerShell in the Cloud – sounds awesome, is awesome. Michael showed us how to provision and configure Azure virtual machines to host high available SharePoint farms – load balanced and what not. For the load balancer part, there has to be an anonymous site so that the load balancer can determine the state of the web app, he\u0026rsquo;s coming in with no credentials.\nSmall Farm Architecture Tips Scale out - not up!\nI totally agree – that’s good for Search Architecture, too.\nMSDN Subscription Changes There are free hours when you have a MSDN subscription – this applies to my subscription, too. This is great, I literally see my new VM already….\nAutomation, Automation, Automation The message is: Automation saves money and reduces error (I add: It creates leisure time!). There is a github repository with collection of scripts how to provision SharePoint 2013 on Azure – very useful!\nMy Evaluation Interesting to know, hopefully I can host a project with this in the future. I will try it at least with my free hours.\n",
    "tags": null,
    "categories": ["SharePoint 2013","TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-the-inside-man-surviving-the-ultimate-cyber-threat/",
    "title": "TechEd 2013: The Inside Man: Surviving the Ultimate Cyber Threat",
    "date_published": "2013-06-26T10:08:39Z",
    "description": "Okay, this is a session out of my usual scope. The title of the session caught me and as it seems it was totally worth it.\nHere are my session takeaways.\n",
    "content": "Okay, this is a session out of my usual scope. The title of the session caught me and as it seems it was totally worth it.\nHere are my session takeaways.\nSession by Andy Malone (@andymalone) – MVP Enterprise Security.\nWhy would someone steal data from you? Andy listed a lot of reasons and motivations why people steal data from companies. Potential threats are always the guys quitting a job (or the ones who quitted mentally already). Often espionage is not easy to detect, there are very advanced technical gimmicks (pen cam, tie cam, microphones).\nI like this one:\nInteresting question for the audience:\nWho is a network administrator?\nCouple of hands went up.\nWho is responsible for security ?\nAlmost the same amount of hands are up – oooops, not good.\nTools Andy showed a bunch of tools how to gather information. It started with a simple websearch and then he expanded it to “one click” tools downloading and analyzing available documents. Running Windows 2000 – harvesting all email accounts in a company. Wow, amazing how easy it is. All tools are listed in his slides.\nMy evaluation Entertaining and it still makes you thinking! Great, great session, totally enjoyed it. Its one of the session you should watch the recording once its available here.\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-search-architecture-sizing-and-migration-in-microsoft-sharepoint-2013/",
    "title": "TechEd 2013: Search Architecture, Sizing, and Migration in Microsoft SharePoint 2013",
    "date_published": "2013-06-26T08:25:30Z",
    "description": "From the session description:\nSuccessful SharePoint deployments have one thing in common: great search!\nSo, true – here are my session notes from the Search Architecture, Sizing, and Migration in Microsoft SharePoint 2013 session.\n",
    "content": "From the session description:\nSuccessful SharePoint deployments have one thing in common: great search!\nSo, true – here are my session notes from the Search Architecture, Sizing, and Migration in Microsoft SharePoint 2013 session.\nSession by Jan Inge Bergseth (MSFT, Search Center of Excellence). Slides + Video of the NA TechEd here, but with a different speaker.\nArchitecture I know a quite a lot about this topic, it was a pretty short overview about the architectural changes. The slides are based on the SPC slides (SPC202) – and that’s a good thing.\nDemo Jan showed how easy it is to add Metadata and visualize them as a pie chart refiner in the search results page.\nAnalytics Service I should invest more time with this beauty – there is some hidden potential when you ask for “Suggested sites to follow” or “Are you looking for these again?”.\nMigration Scenarios Okay, there is new information here. I had in mind that there is now migration story from FAST Search Server to SharePoint 2013 – but it seems there is one:\nMaybe its supported, but the custom PowerShell line could be a “It depends!”. Jan said “undocumented”.\nBackup and Restore Everything but the index is in the database.\nMy questions after the session: Is there a rule of thumb for index size?\nNot an official one.\nWill there be Search Performance Evaluation with the same level of detail as there was for FAST Search Server For SharePoint 2010?\nSome started it – but it\u0026rsquo;s either not finished or not yet published. Too bad, I read the one for FAST several times.\nIs there an out of the box solution to this question?\nNot ad-hoc. Follow up mail with questions is on the way.\nMy evaluation Search – could talk and listen to this topic forever! The session is great by design. Okay, back to reality: Detailed session but I wish there would be a deeper session (Level 400, anyone?) for this. I learned the most after the sessions because the questions of the attendees covered the edge cases and tough situations. Still, enjoyed the session!\n",
    "tags": null,
    "categories": ["Search","SharePoint 2013","TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-entity-framework-6/",
    "title": "TechEd 2013: Entity Framework 6",
    "date_published": "2013-06-25T14:20:41Z",
    "description": "Session by Glenn Condron\nOkay, this room is packed – there is some serious interest in this topic.\nHere are my notes from the session.\n",
    "content": "Session by Glenn Condron\nOkay, this room is packed – there is some serious interest in this topic.\nHere are my notes from the session.\nGlenn started with question how many used Entity Framework by now – almost everyone in the audience. Code first? A lot. Migrations? Fewer. Nuget – 50%. Most of the time he hears this question:\nWhat is this nugget thing?\nIf you don’t get the joke – follow this link:\nNow back to the session: Entity Framework is Open Source and accepts contributions. Open Source is still an obstacle for certain enterprises – even though the code review process is the same as for internal changes. And: you get the same support and quality.\nThere are 3 workflows for Developers: Model First (you create the database based on a model, Database First (the database exists upfront), Code First (create database or map to existing database with code).\nWhat’s new? Async for query and save: Don’t need the result right now? Do it async.\nConnection resiliency – in other words: reconnect\nCode-based configuration\nDatabase command interception/logging – I missed the logging option in EF5.\nPerformance – always good.\nOkay, then Glenn increased his pace – there are many more improvements in the new version. Check the website.\nMigrations Migrations for Code First creates a class file with instructions how to handle migration/upgrade scenarios. You can even export the migration script to SQL. The migration even works for different versions so you can update to the latest version in one jump.\nStored Procedure Stored procedures have been added to EF6 – some people are very happy in the audience. Glenn created a quite extensive demo in a very short time – I got the idea and why its useful.\nAsync If used appropriately it can improve your performance and salability – or kill your servers. Important: You cant use two async on the same context at the same time! If you think about it, it makes sense. If you want to use them look out for the “Async” methods.\nMy evaluation Glenn knows what he is talking about – great overview about the changes and some cool demos – and he’s even entertaining. I like the presentation style!\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-microsoft-sql-server-2014-in-memory-oltp-overview/",
    "title": "Teched 2013: Microsoft SQL Server 2014 In-Memory OLTP: Overview",
    "date_published": "2013-06-25T12:21:31Z",
    "description": "In-Memory is the big new thing - here are my notes from the session!\n",
    "content": "In-Memory is the big new thing - here are my notes from the session!\nSession by Jos de Bruijn, get the slides here: http://melcher.it/s/O\nMyth: In Memory OLTP is like DBCC PINTABLE\nWrong, new design from the ground up.\nHot tables have to fit into Memory – I guess we SharePoint Guys need even more RAM now. This will greatly improve the performance.\nMyth: In-Memory Databases are a separate product.\nWrong, fully integrated into SQL Server 2014.\nMyth: You can use In-Memory without any changes.\nWrong, if you want the full potential, you have to adjust, e.g. the schema.\nMyth: Since data is in memory – I will loose it after a server crash.\nWrong, data is persisted.\nInteresting Question Will SharePoint 2013 profits from In-Memory technology, yet?\nAnswer from Jos: I don\u0026rsquo;t know, yet.\nMy Evaluation Techy session – Jos showed a lot of low-level stuff, I like that. More information does not hurt and maybe helps. Fixing the myths with the In-Memory stuff is appreciated, too – one client told me a myth, I can clarify this now!\nIt’s definitive worth following this new technology. I will download the bits and do some tests with SharePoint 2013, thats for sure!\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-microsoft-office-sharepoint-2013-development-introduction-to-the-new-cloud-app-model/",
    "title": "TechEd 2013: Microsoft Office \u0026 SharePoint 2013 Development: Introduction to the New Cloud App Model",
    "date_published": "2013-06-25T12:17:16Z",
    "description": "Session by Rolando Jimenez\nBuild a new class of apps that extend and personalize the way we create and consume information right from within Office…\n",
    "content": "Session by Rolando Jimenez\nBuild a new class of apps that extend and personalize the way we create and consume information right from within Office…\nMore than 700.000 SharePoint Developers. Cloud is the focus (surprise) Demos! Demo in Excel: Apps for Office right from the ribbon. Rolando showed a funny app “Bubbles” where you can visualize data in bubbles. He used existing JavaScript Frameworks, so it was easy to create.\n2nd demo in Excel: Again visualization, this time it’s a country visualization. Additionally he pulled data from WolframAlpha into excel, the last one is very cool for natural queries. He added the population of a given country from one column into another column – good stuff!\n3rd demo: Rolando showed AvePoint Meetings – apparently the first time it did not work – but generally the idea behind it is simple and very cool.\nHistory SharePoint 2007 = Full trust solutions (powerful but potentially dangerous)\nSharePoint 2010 = Sandboxed solutions (too limited, restricted) and client side applications\nSharePoint 2013 = Apps, Apps, Apps\nMore demos! Next demos where in Visual Studio – Rolando showed how to create data in lists and libraries, create Tasks and the usual stuff. Then he showed how to create a Windows Phone App to connect to SharePoint.\nOutook App: The integration is very cool. Outlook recognized that there is related content in SharePoint and showed the corresponding Task from.\nMy Evaluation So many demos and impressions – I definitely see potential here. Memo to myself: Spent more time with it.\n",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-keynote-cloud-os-its-time/",
    "title": "TechEd 2013: Keynote: Cloud OS – It’s time",
    "date_published": "2013-06-25T11:55:13Z",
    "description": "First keynote here with Brad Anderson (Vice President at Microsoft) and others.\nLots of impressions, he covered most of the new stuff.\n",
    "content": "First keynote here with Brad Anderson (Vice President at Microsoft) and others.\nLots of impressions, he covered most of the new stuff.\nMy takeaways Workspace Sync – Is that a “new” SkyDrive? Appears after you join your device to a company network. Needs Server 2012 R2. Azure VM: Charge per Minute/ no charge when shut down Visual Studio: Faster pace; updates are distributed faster. Code Link: Integration in VS to see who is working on a code block, calling references and user working on this code. VS2013 Preview download available tomorrow (6/24/2013) SQL Server 2014 Hekaton: Requests/Sec went up from 15k to 250k on same hardware.I will test this one with SharePoint! It\u0026rsquo;s of course the best database system they ever built. Geoflow: Visualize data on a globe, that was amazing. So easy that the guy did it on a touchscreen with Excel 2013. Windows Server 2012 R2: Remote File Storage with Tiering; IO went up from 7k to 125k IO/s. Deduped Storage; Vms on deduped storage boot faster because common blobs are cached. Hyper V: Live Migration of a VM in less than 8 seconds - hopefully we see some of that features in Client Hyper V on Windows 8.1 My Evaluation They take it seriously when they say: “Cloud first”. Many improvements are cloud-driven. This will be great.\nPictures ",
    "tags": null,
    "categories": ["TechEd"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/teched-2013-my-schedule-with-a-touch-of-sharepoint/",
    "title": "TechEd 2013 – My Schedule with a touch of SharePoint",
    "date_published": "2013-06-23T12:53:02Z",
    "description": "I roughly finished my Schedule for Teched 2013 (#Tee13) in Madrid – I will blog summaries about the sessions I attend.\n",
    "content": "I roughly finished my Schedule for Teched 2013 (#Tee13) in Madrid – I will blog summaries about the sessions I attend.\n\u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_0\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Deploying Site Mailboxes\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 8 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; Sun, Jun 23 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 1:00 PM – 2:00 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_1\u0026quot;\u0026gt;\u0026lt;b\u0026gt;The Cloud OS: It’s Time!\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 6 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; Tue, Jun 25 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 9:00 AM – 10:30 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_2\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Microsoft Office \u0026amp; SharePoint 2013 Development: Introduction to the New Cloud App Model\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 4.3 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 11:00 AM – 12:00 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_3\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Microsoft SQL Server 2014 In-Memory OLTP: Overview\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N104 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 1:30 PM – 2:45 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_4\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Brownfield Development: Taming Legacy Code with Better Unit Testing and Microsoft Fakes\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N104 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 3:15 PM – 4:30 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_5\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Advanced Debugging of ASP.NET Applications with Visual Studio 2012\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 7.1 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 5:00 PM – 6:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_6\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Search Architecture, Sizing, and Migration in Microsoft SharePoint 2013\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N109 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 5:00 PM – 6:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_7\u0026quot;\u0026gt;\u0026lt;b\u0026gt;IaaS: Hosting a Microsoft SharePoint 2013 Farm on Windows Azure\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 7.3 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; Wed, Jun 26 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 12:00 PM – 1:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_8\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Continuous Integration with Team Foundation Services and Windows Azure Websites\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N102 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 3:15 PM – 4:30 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_9\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Microsoft SharePoint 2013 and Office 365 Upgrade and Migration: Strategy and Tactics\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N105 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 3:15 PM – 4:30 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_10\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Microsoft SQL Server 2014 In-Memory OLTP: DB Developer Deep Dive\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N104 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 3:15 PM – 4:30 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_11\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Continuous Deployment with Team Foundation Service and Team Foundation Server 2012\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N108 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 5:00 PM – 6:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_12\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Windows is the Future\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 6 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; Thu, Jun 27 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 8:30 AM – 9:45 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_13\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Team Collaboration with Site Mailboxes\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N101 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 10:15 AM – 11:30 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_14\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Developing Apps for Microsoft SharePoint 2013 with Microsoft Visual Studio 2012\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N108 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 12:00 PM – 1:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_15\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Optimizing Microsoft SQL Server 2012 for SharePoint 2013\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 4.6 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 12:00 PM – 1:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_16\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Tips You Need to Know for Creating Apps for Microsoft Office and SharePoint 2013\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 7.5 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 3:15 PM – 4:30 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_17\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Microsoft SharePoint 2013 Administration\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 7.2 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 5:00 PM – 6:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_18\u0026quot;\u0026gt;\u0026lt;b\u0026gt;ASP.NET Web API: Web Services for Websites, Modern Apps, and Mobile Apps\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N109 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; Fri, Jun 28 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 8:30 AM – 9:45 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_19\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Advanced Patterns in Cloud-Hosted Apps for Microsoft SharePoint\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N109 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 10:15 AM – 11:30 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_20\u0026quot;\u0026gt;\u0026lt;b\u0026gt;License to Kill: Malware Hunting with the Sysinternals Tools\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 4.1 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 10:15 AM – 11:30 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_21\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Web Deployment Done Right\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N108 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 10:15 AM – 11:30 AM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_22\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Authentication and Authorization Infrastructure in Microsoft SharePoint 2013\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N108 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 12:00 PM – 1:15 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_23\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Best Practices in Virtualizing and Managing Microsoft SharePoint with Microsoft System Center and Windows Server\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; Hall 7.3 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 2:45 PM – 4:00 PM \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;#appt3A003830_24\u0026quot;\u0026gt;\u0026lt;b\u0026gt;Deploying Microsoft SharePoint on Windows Azure VMs\u0026lt;/b\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;br /\u0026gt; N105 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot;\u0026gt; 4:30 PM – 5:45 PM \u0026lt;/td\u0026gt; ",
    "tags": null,
    "categories": ["Conference","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/sharepoint-2013-term-store-management-tool-and-targetframework-4-5-plus-signalr/",
    "title": "SharePoint 2013: Term Store Management Tool and TargetFramework 4.5 plus SignalR",
    "date_published": "2013-06-17T21:10:25Z",
    "description": "In certain situation you want to allow that your SharePoint can utilize the new .NET 4.5 functions – this includes WebSockets for instance. In order to get his running, you have to change the web.config of the corresponding Web Application.\nDisclaimer: Use this on your own risk and try it in a TEST or DEV environment first – the change can take down your SharePoint Farm or break core functions! Manual approach This is a step by step manual how to set the values that your SharePoint targets .",
    "content": "In certain situation you want to allow that your SharePoint can utilize the new .NET 4.5 functions – this includes WebSockets for instance. In order to get his running, you have to change the web.config of the corresponding Web Application.\nDisclaimer: Use this on your own risk and try it in a TEST or DEV environment first – the change can take down your SharePoint Farm or break core functions! Manual approach This is a step by step manual how to set the values that your SharePoint targets .NET 4.5 framework.\nOpen the web.config with a text editor of your choice. Navigate to the element with the path /configuration/system.web/httpRuntime Add the attribute: TargetFramework=”4.5” to the httpRuntime element Save and don’t close the web.config yet. After saving, your app pool reloads – everything should be fine by now.\nThen try to open the Term Store Management on a site – AND BAM! Broken. At least the Term Store Management is a place I found that this change breaks – there could be others.\nDid I mention that this manual approach is totally unsupported? An automated approach with the SPWebConfigModification class would be much better. But this is an example for the readers who made it this far (please leave a comment with your solution, thanks!)\nA fix for the Term Store Management Tool In order to get the not so unimportant Term Store Management Tool up and running, open the web.config again:\nLocate the element with the path: /configuration/appSettings Add this tag: UnobtrusiveValidationMode\u0026quot; value=\u0026ldquo;None\u0026rdquo; /\u0026gt; Save and close the web.config What happens is that the .NET 4.5 Framework introduces some handy ways to tell ASP that it should use unobtrusive validation – in other words html5 validation on input fields – and not validation with a postback/javascript.\nHow did I notice this? Actually this was a coincidence. I tried to enable WebSockets for SharePoint 2013 and IIS 8 – and read that I had to change the TargetFramework to 4.5. Luckily I had the Term Store Management Tool open and coincidently refreshed the page – so the error had something to do with my previous change. In addition there is a quite useful error in the event log, so I found the fix rather easily.\nWhy bother? So why do I write this? I think I will face this issue again in the future and someone has to write it down, right? And most importantly WebSockets in combination are pretty cool with SignalR – but that’s another story (or blog post for that matter!).\nWebSockets, SharePoint 2013 and Signalr - happy coexistence! Issues with this? Feedback or problems occurred after this change? Scroll down until you see the neat, little comment box!\nUpdate 1: 6/19/2013: Apparently Target Framework 4.5 breaks Office Web Apps - currently I have no fix for this.\n",
    "tags": null,
    "categories": ["SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/install-sharepoint-designer-with-powershell-chocolatey-sharepoint/",
    "title": "Install SharePoint Designer with PowerShell – Chocolatey SharePoint",
    "date_published": "2013-06-16T15:20:49Z",
    "description": "Almost weekly there is a new tool that you can install with the very awesome chocolatey. In the case you have not heard about chocolatey, its a package manager for Windows similar to apt-get for linux - in other words: You can install tools/software with 1 line of Powershell.\n",
    "content": "Almost weekly there is a new tool that you can install with the very awesome chocolatey. In the case you have not heard about chocolatey, its a package manager for Windows similar to apt-get for linux - in other words: You can install tools/software with 1 line of Powershell.\nThis week @\navishnyakov created 4 packages to install SharePoint Designer. You can choose to install it for SharePoint 2010 or SharePoint 2013. Its recommended to install SharePoint Designer in the same bitness as you have installed Office (in the case you have) - so you can pick the 32bit or 64bit version.\nHow? Installing software with chocolatey is quite simple - just open a CMD and copy this line in:\n@powershell -NoProfile -ExecutionPolicy unrestricted -Command \"iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))\" \u0026\u0026 SET PATH=%PATH%;%systemdrive%\\chocolatey\\bin Thats it - you now can install packages with Powershell. Pretty easy! Currently there are over 1000 packages available - I automated my whole environment with it. For the SharePoint Tooling its a little different, but at least 19 tools are available, yet.\nSharePoint Packages You can install:\nMicrosoft Sharepoint 2010 Software Development Kit SharePoint Hive Short Cut (Desktop) SharePoint Manager 2013 SharePoint Hive Short Cut (Explorer) SharePoint Manager 2010 ULSViewer SharePoint Manager 2007 CKS Dev Server SharePoint Code Quality Tools (Online) SharePoint Software Factory (SPSF) SearchQueryTool SharePoint 2013 Prerequisites Downloader (Online) CKS Dev CAML Designer CAML Designer 2013 SharePoint Designer 2010 32bit SharePoint Designer 2010 64bit SharePoint Designer 2013 32bit SharePoint Designer 2013 64bit 19 SharePoint Packages are installable with 1 line of Powershell This list gets bigger and bigger!\nAfter running the command from above, open a new PowerShell and type\ncinst SharePointDesigner2013x64 and SharePoint Designer is installed for you:\nSomething missing? Is your favorite tool missing? If so, please leave a comment!\n",
    "tags": null,
    "categories": ["Powershell","SharePoint 2010","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/06/updated-chocolatey-with-more-tools/",
    "title": "Updated chocolatey with more tools",
    "date_published": "2013-06-02T12:12:34Z",
    "description": "A good day for automation lovers! @avishnyakov (http://spdevlab.com/) contributed 5 SharePoint packages to my ChocolateySharePointPackages repository. See his blog post here.\nAdded packages! Today I pushed them to the chocolatey gallery and you can install them with 1 line of PowerShell.\ncinst PowerGUIVSX Installs the PowerGui Visual Studio Extension cint SP2013PreReqs Installs all SharePoint 2013 PreRequisites cinst SPSF Installs the SharePoint Software Factory cinst SPCAF Installs the SharePoint Code Analysis Framework Want more?",
    "content": "A good day for automation lovers! @avishnyakov (http://spdevlab.com/) contributed 5 SharePoint packages to my ChocolateySharePointPackages repository. See his blog post here.\nAdded packages! Today I pushed them to the chocolatey gallery and you can install them with 1 line of PowerShell.\ncinst PowerGUIVSX Installs the PowerGui Visual Studio Extension cint SP2013PreReqs Installs all SharePoint 2013 PreRequisites cinst SPSF Installs the SharePoint Software Factory cinst SPCAF Installs the SharePoint Code Analysis Framework Want more? You can install all packages for SharePoint 2013 with 1 line - the installation takes roughly 20-30 Minutes and then you have a great Developer Box:\ncinst all -source https://www.myget.org/F/sharepointdev or for VS2012/SP2013:\ncinst all -source https://www.myget.org/F/sharepoint2013dev Are you missing something? Would love to hear your feedback - or if you have wishes, go for it in the comments!\n",
    "tags": null,
    "categories": ["Development","Powershell","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/05/sharepoint-for-your-ears/",
    "title": "SharePoint for your ears!",
    "date_published": "2013-05-26T17:02:14Z",
    "description": "SharePoint is such a great product that there is always something I have not heard yet (or already forgot) and my day has only 24 hours. I try to read a lot on SharePoint Stack Exchange / Twitter / Technet– but that’s only possible if I am close to a PC. Because of that and because cleaning up the house or washing dishes without SharePoint is boring I listen to quite a lot podcasts.",
    "content": "SharePoint is such a great product that there is always something I have not heard yet (or already forgot) and my day has only 24 hours. I try to read a lot on SharePoint Stack Exchange / Twitter / Technet– but that’s only possible if I am close to a PC. Because of that and because cleaning up the house or washing dishes without SharePoint is boring I listen to quite a lot podcasts. Or in the car. Or when I can not sleep. You get the idea. The following lists contains my favorite SharePoint Podcasts.\nHere is my list http://www.toddklindt.com/netcast/default.aspx \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;306\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;http://www.toddklindt.com/netcast/default.aspx\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Todd Klindt’s Netcast\u0026lt;/a\u0026gt;: Funny and informative – I like the show! Not only that I think he is one of the best SharePoint Admins out there, no he even has nice hair! Listen to it, I learned a lot, I wouldn’t patch a SharePoint farm without knowing that Todd approved the patch.\u0026lt;br /\u0026gt; Airs Monday every week. \u0026lt;/td\u0026gt; http://sharepointpodcast.de/ \u0026lt;td style=\u0026quot;vertical-align: top;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;232\u0026quot;\u0026gt; \u0026amp;nbsp;\u0026lt;a href=\u0026quot;http://sharepointpodcast.de/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;SharePoint Podcast by Michael Greth\u0026lt;/a\u0026gt;: This Podcast is very informative – most of the time its for IT PROs/Admins – but there are also topics for Devs. I really like the professional style, the time that Michael invests for his podcasts (not only) is really amazing!The podcast is most of the time in German – but there are really good episodes in English, too. Listen to his “English Week”\u0026lt;br /\u0026gt; Weekly updates. \u0026lt;/td\u0026gt; http://www.sharepointpodshow.com/ \u0026lt;td style=\u0026quot;vertical-align: top;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;222\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;http://www.sharepointpodshow.com/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Rob, Nick and Brett in the SharePoint Podshow\u0026lt;/a\u0026gt;– awesome combo. I totally like the mixture of the topics – many guest speakers and lots of MVPs, good stuff!\u0026lt;br /\u0026gt; Most of the time there is one show a month. \u0026lt;/td\u0026gt; http://www.themossshow.com/ \u0026lt;td style=\u0026quot;vertical-align: top;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;217\u0026quot;\u0026gt; Bi-weekly SharePoint talks – very nice speakers with \u0026lt;a href=\u0026quot;http://www.themossshow.com/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Hilton Giesenow\u0026lt;/a\u0026gt;. I like the show, in my opinion he has the coolest intro/outro of all the podcast, really cool song. \u0026lt;/td\u0026gt; http://hanselminutes.com/ \u0026lt;td style=\u0026quot;vertical-align: top;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;215\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;http://hanselminutes.com/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;The Hanselminutes Podcast by Scott Hanselmann\u0026lt;/a\u0026gt; – this is totally not about SharePoint you think? Scott is not even the greatest SharePoint fan as it seems. But: He covers a lot of topics, sometimes not even technology related. I totally love that mix – and some of the topics are bleeding edge and will hit SharePoint land (several years later). \u0026lt;/td\u0026gt; http://seriouslyopen.com/ \u0026lt;td style=\u0026quot;vertical-align: top;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;214\u0026quot;\u0026gt; Freshly started podcast about .NET Open Source projects -\u0026amp;nbsp; \u0026lt;a href=\u0026quot;http://seriouslyopen.com/\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;Seriously Open\u0026lt;/a\u0026gt; – sounds promising! The first real episode was about Glimpse – if you never heard about that, maybe give the podcast a try! \u0026lt;/td\u0026gt; Am I missing something? Please, if you think I missed a podcast or something interesting, leave a comment.\n",
    "tags": null,
    "categories": ["SharePoint 2010","SharePoint 2013","SharePoint Toolbox"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/05/powershell-enable-refiner-count-for-sharepoint-2013-search-results/",
    "title": "Powershell: Enable Refiner Count for SharePoint 2013 Search Results",
    "date_published": "2013-05-23T16:30:58Z",
    "description": "The refiner count is a very useful indicator in the Search Center whether the click on the refinement is worth it or nor – and the implementation is so intuitive that even end-users understands it. But: It is disabled by default in SharePoint 2013. This post shows you how to enable the Refiner Count for SharePoint 2013 - manually and with PowerShell.\nRefiner Count in SharePoint 2010 The refiner count was introduced in SharePoint 2010 and is a FAST for SharePoint feature.",
    "content": "The refiner count is a very useful indicator in the Search Center whether the click on the refinement is worth it or nor – and the implementation is so intuitive that even end-users understands it. But: It is disabled by default in SharePoint 2013. This post shows you how to enable the Refiner Count for SharePoint 2013 - manually and with PowerShell.\nRefiner Count in SharePoint 2010 The refiner count was introduced in SharePoint 2010 and is a FAST for SharePoint feature. If you don’t have FAST installed and enabled the Refiner Count, the count is estimated roughly with the first 50 results because SharePoint Search was not capable of deep refinement.\nDeep refinement is based on the aggregation of managed property statistics for all of the results of a search query. The indexer creates aggregation data that is used in the query matching process. The advantage of using this kind of query refinement is that the refinement options reflect all the items matching a query.\nQuery Refinement (FAST Search Server 2010 for SharePoint)\nIn other words, the refiner count could change after you click on a refiner which is very confusing for end-users.\nIf you have FAST for SharePoint installed the refiner count worked flawlessly but had to be enabled with a xml modification in the refiner webpart.\nRefiner Count in SharePoint 2010 + FAST for SharePoint 2010 Refiner Count for SharePoint 2013 The refiner count is still possible with SharePoint 2013 – the concept is not new but the implementation has changed. And as already mentioned, the count is disabled by default:\nAs you might know, you can change the rendering/design of elements with Display Templates in SharePoint 2013, most importantly for search results – this also applies to refiners – which is great if you ask me. Basically all you have to do is change the Display Template for the Refiner Filter which is a html file and you are good to go.\nThe file is located in the site collections MasterPage gallery folder, /_catalogs/masterpage/Display Templates/Filters/Filter_Default.html and contains the definition for the refinement item.\nIf you open the file you can see in the very first lines of the file you can see those lines:\nthis.Options = { ShowClientPeoplePicker: false, ShowCounts: false }; Change the lines (replace the false with the true in line 2) to:\nthis.Options = { ShowClientPeoplePicker: false, ShowCounts: true }; And voila, the refiner count is visible:\nPowerShell approach: You have to do it more than once? Automate it!\nHere is my short PowerShell script which automates the step above:\nparam([Parameter(Mandatory = $true, Position = 0)][string] $siteUrl, [switch] $hide) if ([string]::IsNullOrWhiteSpace($siteUrl)) { Write-Host -ForegroundColor red \"Param -webUrl is required\" return } Add-PSSnapin Microsoft.SharePoint.Powershell -Ea 0 $web = get-spweb $siteUrl if (!$web) { throw [string]::Format(\"Web {0} does not exist. \", $siteUrl) } try { $file = $web.GetFile('/_catalogs/masterpage/Display Templates/Filters/Filter_Default.html') $filter = [System.Text.Encoding]::ASCII.GetString($file.OpenBinary()) } catch { throw [string]::Format(\"Refiner File does not exist. Exception: {0}\", $_.Exception) } $regex = [regex] '(ShowCounts: )(true|false)' if ($hide) { $showCount = 'false' } else { $showCount = 'true' } $filter = $filter -ireplace $regex, [string]::Concat('$1', $showCount) $file.SaveBinary([System.Text.Encoding]::ASCII.GetBytes($filter)) if ($hide) { $visibilty = \"not visible\" } else { $visibilty = \"visible\" } Write-Host -ForegroundColor Green ([string]::Format( \"Refiner Count is {1} for Site {0}\", $web.Url, $visibilty)); Usage: Just download this script and call it with the –siteUrl parameter to enable the Refiner count for the specified Site Collection:\nEnable-RefinerCount.ps1 –siteUrl http://sharepoint2013 or add -hide to hide the refiner count again:\nEnable-RefinerCount.ps1 –siteUrl http://sharepoint2013 –hide Pretty easy, isn\u0026rsquo;t it? ",
    "tags": null,
    "categories": ["Powershell","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/05/install-office-web-apps-2013-for-sharepoint-2013-with-pdf-preview/",
    "title": "Install Office Web Apps 2013 for SharePoint 2013 – with PDF Preview",
    "date_published": "2013-05-17T17:57:58Z",
    "description": "Preview of Office Documents (this includes PDF) is a huge benefit when you are searching for information – you can quickly identify if the document is the one you are looking for or skimming/scanning a document efficiently. To get the preview up and running you have to install Office Web Apps 2013 – PDF preview was added in March Public Update 2013 – that’s great, many clients have asked me why there is no support in the 2010 stack.",
    "content": "Preview of Office Documents (this includes PDF) is a huge benefit when you are searching for information – you can quickly identify if the document is the one you are looking for or skimming/scanning a document efficiently. To get the preview up and running you have to install Office Web Apps 2013 – PDF preview was added in March Public Update 2013 – that’s great, many clients have asked me why there is no support in the 2010 stack. But its 2013 – so let’s install Office Web Apps 2013 for SharePoint 2013!\nOverview I did the following steps on my SharePoint 2013 DEV environment. The SP2013 environment was already on March PU because of the awesome AutoSPInstaller/AutoSPSourceBuilder combo. As host I used a virtualized (Hyper-V) Windows Server 2012 with 4 cores and 5gb RAM on my Notebook (Lenovo W520).\nRequirements You can’t install Office Web Apps on a SharePoint or SQL Server. Additionally the SharePoint Server has to use claims-based authentication. Read all the requirements here.\n7 easy steps! Install the PreRequisites Restart the computer Download and install Office Web Apps 2013 Download and install March Public Update for OWA 2013 Create the OWA Farm Configure the binding on the SharePoint side Do a full crawl PreRequisites for Server 2012 Note: For PreRequisites of Server 2008 R2 read the technet article. If you can not install KB2592525 read this blog post by Markus Nöbauer. The installer of the Office Web Apps 2013 is a little bit limited – other than the SharePoint 2013 it does not configure the host. But at least you can automate the whole process. Run PowerShell as admin on the OWA server:\nImport-Module servermanager Add-WindowsFeature Web-Server, Web-WebServer, Web-Common-Http, Web-Static-Content, Web-App-Dev, Web-Asp-Net, Web-Net-Ext, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Includes, Web-Security, Web-Windows-Auth, Web-Filtering, Web-Stat-Compression, Web-Dyn-Compression, Web-Mgmt-Console, InkAndHandwritingServices, Web-Net-Ext45, Web-Asp-Net45 Restart the computer afterwards.\nPowerShell addicted - starting to automate the PreRequisites installation. Download and install Office Web Apps 2013 The installation is quite simple, hit next several times – nothing magic here.\nOWA installation folder OWA installation in progress Download and install the March Public Update After the installation just copy the OWA March 2013 PU on the box and install it. Again, an easy task.\nInstalling March PU 2013 Create the OWA Farm After installation and patching, we have to use PowerShell again:\nNew-OfficeWebAppsFarm -InternalURL http://owa2013.demo.com -AllowHttp –EditingEnabled With New-OfficeWebAppsFarm – you have certainly guessed it - we created the first node of our OWA farm, just replace the internal url with your hostname/FQDN. Because I have a simple DEV environment I did not use https and allowed editing – for editing you need Office licenses, view-only is free (awesome, thanks!). Add the OWA binding on the SharePoint machine, run this in a SharePoint Powershell:\nNew-SPWOPIBinding -ServerName owa2013.demo.com –AllowHTTP Set-SPWopiZone -zone \"internal-http\" Two commands and the two are coupled - great.\nPreview In my opinion seeing the document upfront is huge - a picture worth a thousand words - sooo true! Lets look at the result:\nA picture is worth a thousand words - I like the preview. Enable PDF Preview in Search results Wictor wrote a nice article about how to enable the PDF-Preview - if you followed my guide you do not need to enable it, it\u0026rsquo;s already set. The only part that is missing is the Display Template.\nThe quick and dirty Powershell approach to enable PDF Previews in search results:\n$tenantOwner = Get-SPEnterpriseSearchOwner -Level SSA $ssa = \"Search Service Application\" #adjust if you renamed the service application $rule = get-SPEnterpriseSearchPropertyRule -PropertyName \"FileType\" -Operator \"IsEqual\" $rule.AddValue( \"pdf\" ) $ruleCollection = Get-SPEnterpriseSearchPropertyRuleCollection $ruleCollection.Add($rule) $item = new-SPEnterpriseSearchResultItemType -Owner $tenantOwner -SearchApplication $ssa -Name \"PDF with Preview\" -Rules $ruleCollection -RulePriority 1 -DisplayProperties \"Title,Author,Size,Path,Description,EditorOWSUSER,LastModifiedTime,CollapsingStatus,DocId,HitHighlightedSummary,HitHighlightedProperties,FileExtension,ViewsLifeTime,P arentLink,ViewsRecent,FileType,IsContainer,SecondaryFileExtension,DisplayAuthor,docaclmeta,ServerRedirectedURL,SectionNames,SectionIndexes,ServerRedirectedEmbedURL,S erverRedirectedPreviewURL\" -DisplayTemplateUrl \"~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Word.js\" -OptimizeForFrequentUse $true Do a full crawl There is one managed property containing the link how to embed the preview of the document - this one is built during a crawl. So just do a full crawl and everything should be set.\nShort video If you wanna see the Preview in action, watch the following video:\nReferences: The Server must be joined to a domain: http://bernado-nguyen-hoan.com/2013/01/22/cant-create-new-office-web-apps-farm-the-server-must-be-joined-to-a-domain/\nInstall PreReqs for OWA RC: http://blogs.itacs.de/Consulting/Lists/Beitraege/Post.aspx?ID=70\nNew-OfficeWebAppFarm: http://technet.microsoft.com/en-us/library/jj219436.aspx\nNew-SPWOPIBinding: http://technet.microsoft.com/en-us/library/jj219441.aspx\nSet-SPWopiZone: http://technet.microsoft.com/en-us/library/jj219439.aspx\nOffice Web Apps Powershell cmdlets: http://technet.microsoft.com/en-us/library/jj219457.aspx\nDo you like it? Questions, comments or feedback, just hit the comments!\n",
    "tags": null,
    "categories": ["Office Web Apps 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/05/powershell-efficiently-empty-large-sharepoint-lists/",
    "title": "Powershell: Efficiently empty large SharePoint lists",
    "date_published": "2013-05-03T12:01:24Z",
    "description": "Previously I had a little console app to efficiently empty large SharePoint lists. Today I converted it to powershell.\nSharePoint Online? Read this: Efficiently empty a large Sharepoint Online List\nCompared to the simple item by item delete with item.Delete() its 30 times faster; on my dev machine it deletes ~30 items per second. It works for SharePoint 2010 and should for 2013 (not tested, yet).\nScript param($weburl,$listname) if ($weburl -eq $null -or $listname -eq $null) { write-host -foregroundcolor red \"",
    "content": "Previously I had a little console app to efficiently empty large SharePoint lists. Today I converted it to powershell.\nSharePoint Online? Read this: Efficiently empty a large Sharepoint Online List\nCompared to the simple item by item delete with item.Delete() its 30 times faster; on my dev machine it deletes ~30 items per second. It works for SharePoint 2010 and should for 2013 (not tested, yet).\nScript param($weburl,$listname) if ($weburl -eq $null -or $listname -eq $null) { write-host -foregroundcolor red \"-weburl or -listname are null.\" return } Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 $web = get-spweb $weburl $list = $web.lists[$listname] $stringbuilder = new-object System.Text.StringBuilder try { $stringbuilder.Append(\"\") \u0026gt; $null $i=0 $spQuery = New-Object Microsoft.SharePoint.SPQuery $spQuery.ViewFieldsOnly = $true $items = $list.GetItems($spQuery); $count = $items.Count while ($i -le ($count-1)) { write-host $i $item = $items[$i] $stringbuilder.AppendFormat(\"\", $i) \u0026gt; $null $stringbuilder.AppendFormat(\"{0}\", $list.ID) \u0026gt; $null $stringbuilder.AppendFormat(\"{0}\", $item.Id) \u0026gt; $null $stringbuilder.Append(\"Delete\") \u0026gt; $null $stringbuilder.Append(\"\") \u0026gt; $null $i++ } $stringbuilder.Append(\"\") \u0026gt; $null $web.ProcessBatchData($stringbuilder.ToString()) \u0026gt; $null } catch { Write-Host -ForegroundColor Red $_.Exception.ToString() } write-host -ForegroundColor Green \"done.\" Usage Delete-Items.ps1 -weburl [url of web] -listname [name of list]\nFurther improvements I think if the list is really huge (100k items or greater) the items should be deleted in batches.\nI have not tried it with a document library, maybe there are issues. If there are issues, please leave a comment!\nDisclaimer There is no way back - if you start the script there is no \u0026ldquo;ARE YOU SURE?\u0026rdquo; - all data is gone in a very short time.\n",
    "tags": null,
    "categories": ["Powershell","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/04/sharecamp-2013-recap-and-session-slides/",
    "title": "ShareCamp 2013 – Recap and session slides",
    "date_published": "2013-04-15T20:10:40Z",
    "description": "ShareCamp 2013 took place at Microsoft’s office here in Munich last weekend (4/12/2013-4/14/2013) and it was a BLAST.\nSharecamp 2013 - before it began. Picture taken by Michael Greth Saturday, 9:00am. 200 SharePointers voting for sessions What I totally like was the open but still professional style of the barcamp – every attendee was allowed to suggest one or more presentation topic. After receiving more than 5 votes from the 200 attendees you got a session slot assigned (room and time).",
    "content": "ShareCamp 2013 took place at Microsoft’s office here in Munich last weekend (4/12/2013-4/14/2013) and it was a BLAST.\nSharecamp 2013 - before it began. Picture taken by Michael Greth Saturday, 9:00am. 200 SharePointers voting for sessions What I totally like was the open but still professional style of the barcamp – every attendee was allowed to suggest one or more presentation topic. After receiving more than 5 votes from the 200 attendees you got a session slot assigned (room and time). Meeting friends, colleagues, 5 MVPs (Michael Greth, Christian Glessner, Niki Borell, Daniel Wessels and Fabian Moritz) and other experts (from Microsoft, too) was really cool and I learned a lot, again!\nNo promotion in my company was needed, more than 10 colleagues attended – Sebastian Huppmann gave a nice presentation on Saturday about Twitter’s Streaming API – and it was the first year that Alegri sponsored the event.\nSession: “Search Architecture” by Rainer Asbach, Microsoft Every time Rainer Asbach is speaking I try to attend. Very, very profound search-expertise – I attended 2 years ago - now again and it was very interesting again!\nKey take aways:\nSearch Index is now smaller, FIXML of FAST not stored anymore. Index should be noticeable smaller than with FAST for SharePoint 2010. Better understanding how search is scaled and how to utilize critical services – great video how the crawler/query component hits CPU/RAM and how that affects DB/Webfrontends/Index/Analytics etc. Rainer Asbach - Search Architecture Session: “Search-driven Apps with SharePoint 2013 – what’s possible with the new platform?” Presented my favorite topic – Search – in front of roughly 50 people I showed what the new platform is capable of. From continuous crawling to content by search webpart I covered a lot of stuff and answered even more questions. Had fun!\nPresenting at ShareCamp 2013 - I am the guy with the red shirt Slides: available at slideshare\nSession: SharePoint 2013 / Best Tools / Toolbox + automated SharePoint 2013 Installation Again, 50 people attended my session about tools. This time I showed how to install SharePoint 2013 fully automated with PowerShell – the awesome AutoSPInstaller raised a lot of questions and kept the session very interactive. I was really surprised that only 20% of the audience knew it…\nApparently I could not show the final result, I will record a webcast for the SharePoint Toolbox and you can see the result there.\nAfter showing how to configure the AutoSPInstaller (briefly) – I showed how to install other tools via chocolatey (8 SharePoint tools are available by now).\nThen we discussed some tools but ran out of time because I talked too much! My bad. Here is the list of the tools we collected:\nUlsViewer (two guys in the audience did not know this gem!)\nChocolatey\nCaml Designer (see webcast )\nCKSDEV (webcast, new version for 2012 available)\nSharepoint Manager (2007 / 2010 / 2013)\nHealth check rules (new one for me, will check it out!)\nSPServices\nBlob Cache Manager (SP2010 and SP2013)\nSP2010 Batch Edit (want to batch edit list entries with managed Metadata in SP2010? This is a solution…)\nSPWakeUp (a handy solution for the sleepy SharePoint)\nMicrosoft Remote Desktop Connection Manager (new for me, sounds great!)\nDynamic Forms for SharePoint (adjustable forms for SharePoint to save data to a list with rules and styles)\nSPSin (inject JavaScript and CSS into selected SharePoint pages)\nSlides: available at slideshare\nFinal notes Thanks everyone for organizing this great, great event - I will attend next year, promised. Hopefully no relocation next year so I can attend both days and can join more sessions and discussions.\n",
    "tags": null,
    "categories": ["Presentation","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/04/fast-for-sharepoint-2010-cumulative-update-august-2012/",
    "title": "FAST for SharePoint 2010 – Cumulative Update August 2012",
    "date_published": "2013-04-05T11:13:19Z",
    "description": "The Cumulative Update August 2012 for FAST Search Server for SharePoint 2010 is out for a while now – seems like nobody has tried this one yet. Or quality control has happened…\nUpdating FAST Search When you install a service pack or a cumulative update for FAST you have to run the setup and then you have to start a FAST powershell and start “psconfig –action p” – otherwise your search won’t work because SAM Worker process is dead.",
    "content": "The Cumulative Update August 2012 for FAST Search Server for SharePoint 2010 is out for a while now – seems like nobody has tried this one yet. Or quality control has happened…\nUpdating FAST Search When you install a service pack or a cumulative update for FAST you have to run the setup and then you have to start a FAST powershell and start “psconfig –action p” – otherwise your search won’t work because SAM Worker process is dead.\nCumulative Update August 2012 So what happens when you install the update? The installation went fine – I rebooted my server and then, as usually, I started the powershell to start the patch command! BAM!\nPS C:\\FASTSearch\\installer\\scripts\u0026gt; .\\psconfig.ps1 -action p At C:\\FASTSearch\\installer\\scripts\\include\\commontasks.ps1:169 char:58 + $hostname = ReadHostConfigurationProperty -propertyName $script:$HOST_CONFIG_HO ... + ~~~~~~~~ Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name. + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : InvalidVariableReference IsPostSetupConfigured : The term 'IsPostSetupConfigured' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\\FASTSearch\\installer\\scripts\\psconfig.ps1:670 char:17 + $isInstalled = IsPostSetupConfigured + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (IsPostSetupConfigured:String) [ ], ParentContainsErrorRecordException + FullyQualifiedErrorId : CommandNotFoundException Epic quality check fail! Wonderful!\nSolution At least the fix for this problem is quite simple – and the powershell error is really helpful this time.\nOpen the file “\\installer\\scripts\\include\\commontasks.ps1” and go to line 169. Replace $script:$HOST_CONFIG_HOST_NAME with $script:HOST_CONFIG_HOST_NAME. Save the file and then start the patch again with “psconfig –action p” in the installer\\scripts folder. After patching check with nctrl status if the SAM Worker is alive again.\nEasy fix - just remove the $ Still, unbelievable.\n",
    "tags": null,
    "categories": ["FAST for SharePoint","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/03/sharepoint-2013-search-the-gatherer-service-cannot-be-initialized/",
    "title": "#SharePoint 2013 Search – The gatherer service cannot be initialized",
    "date_published": "2013-03-19T16:30:25Z",
    "description": "I installed SharePoint 2013 on a test system yesterday and was faced with the problem that the search, after successfully provisioning it - did not work. Boo!\nSymptoms There are several noticeable Symptoms\nThe crawl log shows 1 Top Level Error and 1 Error:\nCrawl log with 1 Top Level Error and 1 Error The Eventlog shows some warnings and an error\nEventlog with the error \"The gatherer service cannot be initialized\"",
    "content": "I installed SharePoint 2013 on a test system yesterday and was faced with the problem that the search, after successfully provisioning it - did not work. Boo!\nSymptoms There are several noticeable Symptoms\nThe crawl log shows 1 Top Level Error and 1 Error:\nCrawl log with 1 Top Level Error and 1 Error The Eventlog shows some warnings and an error\nEventlog with the error \"The gatherer service cannot be initialized\" with the following text – not the best error description (again):\nThe gatherer service cannot be initialized. Details: The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder. (0x80070660) Solution In my case the solution was quite simple. The Temp folder is not the %WINDIR%\\Temp or C:\\Temp folder – it’s the location of the search index. I installed SP2013 with AutoSPInstaller (\u0026lt;= highly recommended!) with default values, then the index is located in C:\\Program Files\\Microsoft Office Servers\\14.0\\Data\\Office Server\\Applications\nIf you provisioned the Search Service with my powershell script – then you can customized the Index Location with the $IndexLocation variable in the settings region.\nI can’t tell yet if that problem is related to my installation –. I tried to get more information about this problem and it seems like this could happen if you relocated your index, too.\nNow to fix the problem, modify the permissions of the Applications folder or the parent folder of your search location.\nGrant the local WSS_WPG group at least modify permissions on the folder – in my screenshot I granted full control, it\u0026rsquo;s just a test system…\nThen restart the Search Service, easiest with PowerShell:\nRestart-Service osearch15 Altered permissions to fix the issue Did it work for you? If (not) – would love to hear your feedback!\n",
    "tags": null,
    "categories": ["ITPro","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/03/chocolatey-created-two-new-sharepoint-helpers/",
    "title": "Chocolatey: Created two new SharePoint “Helpers” for lazy developers",
    "date_published": "2013-03-12T16:30:39Z",
    "description": "I mentioned Chocolatey and Powershell quite often in the last time, today I created two little helpers and uploaded them to the chocolatey gallery.\nThe two super-awesome (and simple) packages called SharePoint.HiveShortcut.Desktop and SharePoint.HiveShortCut.Explorer - and the name indicates it, they create shortcuts to the hive folder.\nI could just upload the two lines of powershell on this blog, but I totally like the Chocolatey approach - makes it easy for everyone.",
    "content": "I mentioned Chocolatey and Powershell quite often in the last time, today I created two little helpers and uploaded them to the chocolatey gallery.\nThe two super-awesome (and simple) packages called SharePoint.HiveShortcut.Desktop and SharePoint.HiveShortCut.Explorer - and the name indicates it, they create shortcuts to the hive folder.\nI could just upload the two lines of powershell on this blog, but I totally like the Chocolatey approach - makes it easy for everyone.\nVideo or it did not happen! Why you need the Hive-folder? Good question, most of the time if something is not working as expected. Ever wondered if a feature is where it should be? Images missing? Unsupported customizations? 14-/ 15- folder is the place to go.\nLinks SharePoint.HiveShortcut.Desktop: Chocolatey Gallery\nSharePoint.HiveShortcut.Explorer: Chocolatey Gallery\nGithub repository for all my SharePoint chocolatey packages.\nNext tools for Chocolatey On my personal roadmap are two tools which will be available on the chocolatey gallery very soon.\nSharePoint Manager Caml Designer Something missing? Go drop me a line or use the comments!\n",
    "tags": null,
    "categories": ["Development","Powershell","SharePoint 2010","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/03/sharepoint-toolbox-012-autospsourcebuilder/",
    "title": "SharePoint Toolbox #012: AutoSPSourceBuilder",
    "date_published": "2013-03-11T16:30:00Z",
    "description": "Today a new webcast on the SharePoint Toolbox was released. It\u0026rsquo;s about the very cool AutoSPSourcebuilder powershell script.\nSummary The webcast shows you how to create SharePoint 2013 installer package with bundled Prerequisites (so you can install SharePoint without Internet-Connection) and includes the SharePoint 2013 Cumulative Update December 2012. Language packs or even Service packs could be added, too.\nIts available in English and German.\nFeedback, questions or tool suggestions much appreciated.",
    "content": "Today a new webcast on the SharePoint Toolbox was released. It\u0026rsquo;s about the very cool AutoSPSourcebuilder powershell script.\nSummary The webcast shows you how to create SharePoint 2013 installer package with bundled Prerequisites (so you can install SharePoint without Internet-Connection) and includes the SharePoint 2013 Cumulative Update December 2012. Language packs or even Service packs could be added, too.\nIts available in English and German.\nFeedback, questions or tool suggestions much appreciated. ",
    "tags": null,
    "categories": ["ITPro","Powershell","SharePoint 2013","SharePoint Toolbox"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/03/powershell-list-all-iis-webapplications-net-version-state-identity/",
    "title": "Powershell: List all IIS WebApplications (.net version, state, identity)",
    "date_published": "2013-03-06T18:30:04Z",
    "description": "Short powershell script to list all IIS Web Applications with the .net version, the state of the Web Application and the assigned user/identity.\ntry{ Import-Module WebAdministration Get-WebApplication $webapps = Get-WebApplication $list = @() foreach ($webapp in get-childitem IIS:\\AppPools\\) { $name = \u0026#34;IIS:\\AppPools\\\u0026#34; + $webapp.name $item = @{} $item.WebAppName = $webapp.name $item.Version = (Get-ItemProperty $name managedRuntimeVersion).Value $item.State = (Get-WebAppPoolState -Name $webapp.name).Value $item.UserIdentityType = $webapp.processModel.identityType $item.Username = $webapp.processModel.userName $item.Password = $webapp.processModel.password $obj = New-Object PSObject -Property $item $list += $obj } $list | Format-Table -a -Property \u0026#34;WebAppName\u0026#34;, \u0026#34;Version\u0026#34;, \u0026#34;State\u0026#34;, \u0026#34;UserIdentityType\u0026#34;, \u0026#34;Username\u0026#34;, \u0026#34;Password\u0026#34; }catch { $ExceptionMessage = \u0026#34;Error in Line: \u0026#34; + $_.",
    "content": "Short powershell script to list all IIS Web Applications with the .net version, the state of the Web Application and the assigned user/identity.\ntry{ Import-Module WebAdministration Get-WebApplication $webapps = Get-WebApplication $list = @() foreach ($webapp in get-childitem IIS:\\AppPools\\) { $name = \u0026#34;IIS:\\AppPools\\\u0026#34; + $webapp.name $item = @{} $item.WebAppName = $webapp.name $item.Version = (Get-ItemProperty $name managedRuntimeVersion).Value $item.State = (Get-WebAppPoolState -Name $webapp.name).Value $item.UserIdentityType = $webapp.processModel.identityType $item.Username = $webapp.processModel.userName $item.Password = $webapp.processModel.password $obj = New-Object PSObject -Property $item $list += $obj } $list | Format-Table -a -Property \u0026#34;WebAppName\u0026#34;, \u0026#34;Version\u0026#34;, \u0026#34;State\u0026#34;, \u0026#34;UserIdentityType\u0026#34;, \u0026#34;Username\u0026#34;, \u0026#34;Password\u0026#34; }catch { $ExceptionMessage = \u0026#34;Error in Line: \u0026#34; + $_.Exception.Line + \u0026#34;. \u0026#34; + $_.Exception.GetType().FullName + \u0026#34;: \u0026#34; + $_.Exception.Message + \u0026#34; Stacktrace: \u0026#34; + $_.Exception.StackTrace $ExceptionMessage } And the output is a nice table:\nWebAppName \u0026lt;td style=\u0026quot;background-color: #a81010; color: white;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;67\u0026quot;\u0026gt; Version \u0026lt;/td\u0026gt; \u0026lt;td style=\u0026quot;background-color: #a81010; color: white;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;66\u0026quot;\u0026gt; State \u0026lt;/td\u0026gt; \u0026lt;td style=\u0026quot;background-color: #a81010; color: white;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;66\u0026quot;\u0026gt; UserIdentityType \u0026lt;/td\u0026gt; \u0026lt;td style=\u0026quot;background-color: #a81010; color: white;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;57\u0026quot;\u0026gt; Username \u0026lt;/td\u0026gt; \u0026lt;td style=\u0026quot;background-color: #a81010; color: white;\u0026quot; valign=\u0026quot;top\u0026quot; width=\u0026quot;75\u0026quot;\u0026gt; Password \u0026lt;/td\u0026gt; SharePoint - 80 \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;67\u0026quot;\u0026gt; v2.0 \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;66\u0026quot;\u0026gt; Started \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;66\u0026quot;\u0026gt; SpecificUser \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;57\u0026quot;\u0026gt; demo\\spservices \u0026lt;/td\u0026gt; \u0026lt;td valign=\u0026quot;top\u0026quot; width=\u0026quot;75\u0026quot;\u0026gt; \u0026lt;a href=\u0026quot;mailto:pass@word1\u0026quot;\u0026gt;pass@word1\u0026lt;/a\u0026gt; \u0026lt;/td\u0026gt; ",
    "tags": null,
    "categories": ["ITPro","Powershell"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/02/chocolatey-package-sharepoint-2013-search-query-tool/",
    "title": "Chocolatey Package: SharePoint 2013 Search Query Tool",
    "date_published": "2013-02-09T10:00:04Z",
    "description": "I am a huge fan of automation and powershell - this should explain why I really love chocolatey (a package manager to install software with powershell).\nToday I created a new feed for SharePoint 2013 Development Tools: http://www.myget.org/feed/Packages/sharepoint2013dev and uploaded the very cool SharePoint 2013 Search Query Tool to the chocolatey gallery. This tool helps creating and testing search querries - and search is everywhere in SharePoint 2013!\nAfter installing chocolatey you can get a great starter toolset with one line of powershell:",
    "content": "I am a huge fan of automation and powershell - this should explain why I really love chocolatey (a package manager to install software with powershell).\nToday I created a new feed for SharePoint 2013 Development Tools: http://www.myget.org/feed/Packages/sharepoint2013dev and uploaded the very cool SharePoint 2013 Search Query Tool to the chocolatey gallery. This tool helps creating and testing search querries - and search is everywhere in SharePoint 2013!\nAfter installing chocolatey you can get a great starter toolset with one line of powershell:\ncinst all -source https://www.myget.org/F/sharepoint2013dev This installs 18 tools for SharePoint 2013 development - all of my favorites are included. I maintain a second feed on MyGet for SharePoint 2010 tools, I guess the SP2013 feed will grow and diverge over time.\n",
    "tags": null,
    "categories": ["Customization","Development","Powershell","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/02/sharepoint-2013-design-manager-connect-network-drive-on-windows-server-2012/",
    "title": "SharePoint 2013 Design Manager: Map network drive on Windows Server 2012",
    "date_published": "2013-02-07T14:41:05Z",
    "description": "So the best way to adjust and edit MasterPages and DisplayTemplates in SharePoint 2013 is to map a network drive and edit the files directly there or copy them to this location.\nIf your SharePoint is hosted on Windows Server 2012 this does not work without configuration – I am really surprised that the config wizard or the PreRequisite Installer does not add the required service – but lets just focus on the solution.",
    "content": "So the best way to adjust and edit MasterPages and DisplayTemplates in SharePoint 2013 is to map a network drive and edit the files directly there or copy them to this location.\nIf your SharePoint is hosted on Windows Server 2012 this does not work without configuration – I am really surprised that the config wizard or the PreRequisite Installer does not add the required service – but lets just focus on the solution.\nSolution Open the Server Manager.\nClick next until “Features”.\nExpand the greyed-out “User Interfaces and Infrastructure”, check the Desktop Experience entry (I took the screenshot after installing it).\nClick next and install the feature. Then you have to reboot the Server.\nAfter the reboot open the Service Manager (services.msc) and start the WebClient service – and if you want set it to automatic start so it works after the next reboot.\nAfter this open an explorer and try to connect to [\\_catalogs]5 and the result should look like this:\n",
    "tags": null,
    "categories": ["SharePoint 2013","Windows Server 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/02/cache-cluster-is-down-restart-the-cache-cluster-and-retry/",
    "title": "Cache cluster is down, restart the cache cluster and Retry",
    "date_published": "2013-02-05T08:16:24Z",
    "description": "Had a small issue with my SharePoint 2013 MySite today, I could not update a User Profile in Central Admin – this is what I got from the ULS Log:\nULSViewer: The exception is pointing us in the right direction. The Execute method of job definition Microsoft.Office.Server.UserProfiles.LMTRepopulationJob (ID 104963a2-b53c-4476-bc23-fa7d6453e42f) threw an exception. More information is included below. Unexpected exception in FeedCacheService.IsRepopulationNeeded: Cache cluster is down, restart the cache cluster and Retry.",
    "content": "Had a small issue with my SharePoint 2013 MySite today, I could not update a User Profile in Central Admin – this is what I got from the ULS Log:\nULSViewer: The exception is pointing us in the right direction. The Execute method of job definition Microsoft.Office.Server.UserProfiles.LMTRepopulationJob (ID 104963a2-b53c-4476-bc23-fa7d6453e42f) threw an exception. More information is included below. Unexpected exception in FeedCacheService.IsRepopulationNeeded: Cache cluster is down, restart the cache cluster and Retry.\nAt least the error message pointed me to the right direction, the Cache Cluster is new in SharePoint 2013 and I associated it with the app fabric distributed cache. As I first read it it sounded like \u0026ldquo;The King is dead - long live the King!\u0026rdquo; - but maybe I watch to many movies…\nSolution Restart the app fabric service and wait a couple of second with a line of powershell:\nRestart-Service AppFabricCachingService ",
    "tags": null,
    "categories": ["SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/01/my-links-in-sharepoint-2013/",
    "title": "My Links in SharePoint 2013",
    "date_published": "2013-01-04T16:30:15Z",
    "description": "the My Links “vanished” in SharePoint 2010 – they were no longer visible. The Problem: Some clients heavily utilize those server-side favorites.\nSharePoint 2010 The links are stored in the Database and the controls to manage the favorites and the page for that is there. Luckily the migration from SP2007 to SP2010 migrated the links, too. Just the control in the ribbon was missing – but there is a very good codeplex solution for that.",
    "content": "the My Links “vanished” in SharePoint 2010 – they were no longer visible. The Problem: Some clients heavily utilize those server-side favorites.\nSharePoint 2010 The links are stored in the Database and the controls to manage the favorites and the page for that is there. Luckily the migration from SP2007 to SP2010 migrated the links, too. Just the control in the ribbon was missing – but there is a very good codeplex solution for that.\nSharePoint 2013 In case you are wondering if you could use the links in SharePoint 2013 – the page to manage the links is still there:\nSharePoint 2013 - Manage \"My Links\" page One question is open: Are the links migrated from SP2010 to SP2013? I have not tried it yet but I will update this post as soon as I can confirm it.\n",
    "tags": null,
    "categories": ["SharePoint 2007","SharePoint 2010","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2013/01/powershell-create-the-bdc-service-application-for-sharepoint-2013/",
    "title": "Powershell: Create the BDC Service Application for SharePoint 2013",
    "date_published": "2013-01-02T12:40:42Z",
    "description": "Here a small script to provision the Business Data Connectivity Service Application-without ugly GUID in the database name.\nAdd-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Settings $ServiceName = \"BDC Service\" $ServiceProxyName = \"BDC Proxy\" $AppPoolAccount = \"demo\\spservices\" $AppPoolName = \"SharePoint Services App Pool\" $DatabaseServer = \"sp2013\" $DatabaseName = \"SP2013 BDC\" Write-Host -ForegroundColor Yellow \"Checking if Application Pool Accounts exists\" $AppPoolAccount = Get-SPManagedAccount -Identity $AppPoolAccount -EA 0 if($AppPoolAccount -eq $null) { Write-Host \"Please supply the password for the Service Account.",
    "content": "Here a small script to provision the Business Data Connectivity Service Application-without ugly GUID in the database name.\nAdd-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Settings $ServiceName = \"BDC Service\" $ServiceProxyName = \"BDC Proxy\" $AppPoolAccount = \"demo\\spservices\" $AppPoolName = \"SharePoint Services App Pool\" $DatabaseServer = \"sp2013\" $DatabaseName = \"SP2013 BDC\" Write-Host -ForegroundColor Yellow \"Checking if Application Pool Accounts exists\" $AppPoolAccount = Get-SPManagedAccount -Identity $AppPoolAccount -EA 0 if($AppPoolAccount -eq $null) { Write-Host \"Please supply the password for the Service Account...\" $AppPoolCred = Get-Credential $AppPoolAccount $AppPoolAccount = New-SPManagedAccount -Credential $AppPoolCred -EA 0 } Write-Host -ForegroundColor Yellow \"Checking wether the Application Pool exists\" $AppPool = Get-SPServiceApplicationPool -Identity $AppPoolName -ErrorAction SilentlyContinue if (!$AppPool) { Write-Host -ForegroundColor Green \"Creating Application Pool\" $AppPool = New-SPServiceApplicationPool -Name $AppPoolName -Account $AppPoolAccount -Verbose } Write-Host -ForegroundColor Yellow \"Checking if BDC Service Application exists\" $ServiceApplication = Get-SPServiceApplication -Name $ServiceName -ErrorAction SilentlyContinue if (!$ServiceApplication) { Write-Host -ForegroundColor Green \"Creating BDC Service Application\" $ServiceApplication = New-SPBusinessDataCatalogServiceApplication –ApplicationPool $AppPool –DatabaseName $DatabaseName –DatabaseServer $DatabaseServer –Name $ServiceName } Write-Host -ForegroundColor Yellow \"Starting the BDC Service\" $ServiceInstance = Get-SPServiceInstance | Where-Object { $_.TypeName -like \"*Business*\" } Start-SPServiceInstance $ServiceInstance Write-Host -ForegroundColor Green \"Done - BDC Service is up and running.\" Its basically an extended version of my Provision Search Service Application script, just a little cleaned-up. During the creation (some would say copy \u0026amp; paste) I wondered why the proxy is created automatically – at first I had two proxies.\nPictures Pictures or it did not happen!\nBusiness Data Connectivity Database with a beautiful name (and you can see my Managed Metadata Service Database is still ugly) Provisioned BDC Service Application References http://technet.microsoft.com/en-us/library/ff607899.aspx – Create the BDC Service Application http://technet.microsoft.com/en-us/library/ff607952.aspx – Create the Proxy Questions / Issues ? If I missed a thing or if you have questions – go for it!\n",
    "tags": null,
    "categories": ["ITPro","Powershell","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/12/sharepoint-toolbox-010-sharepoint-2010-blobcache-manager/",
    "title": "SharePoint ToolBox: #010 SharePoint 2010 BlobCache Manager",
    "date_published": "2012-12-17T14:08:47Z",
    "description": "I created another episode of the SharePoint Toolbox: SharePoint 2010 BlobCache Manager.\nFirst time I reviewed the solution with a performance evaluation and the first time ever I contributed to a Codeplex project - interesting times!\nYou can watch it in English or German.\nAbstract The SharePoint 2010 BlobCache Manager enables you to control the BlobCache settings from Central Admin. You don’t have to maintain these settings on each web frontend manually.",
    "content": "I created another episode of the SharePoint Toolbox: SharePoint 2010 BlobCache Manager.\nFirst time I reviewed the solution with a performance evaluation and the first time ever I contributed to a Codeplex project - interesting times!\nYou can watch it in English or German.\nAbstract The SharePoint 2010 BlobCache Manager enables you to control the BlobCache settings from Central Admin. You don’t have to maintain these settings on each web frontend manually. As benefit you get fewer database requests and faster page loads.\nFeedback? Suggestions? As usual, I would love to hear your feedback - or if I should review your favorite tool, drop me a line!\n",
    "tags": null,
    "categories": ["Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/12/signalr-in-sharepoint-2013-the-real-time-web-is-coming/",
    "title": "SignalR in SharePoint 2013 – the real-time web is coming!",
    "date_published": "2012-12-14T23:05:31Z",
    "description": "If you never heard of SignalR – it’s a real-time web framework for bi-directional communication between a client and server – in short: your server (here SharePoint) can notify a client that something very important happened. Let’s say you want to have Task List and a Dashboard where you can see how many tasks are open (you can watch this example here by Matt Menezes)– in real-time, without hitting F5 permanently and without having an AJAX function polling the list every second.",
    "content": "If you never heard of SignalR – it’s a real-time web framework for bi-directional communication between a client and server – in short: your server (here SharePoint) can notify a client that something very important happened. Let’s say you want to have Task List and a Dashboard where you can see how many tasks are open (you can watch this example here by Matt Menezes)– in real-time, without hitting F5 permanently and without having an AJAX function polling the list every second. With SignalR that’s possible and the good thing its very easy, some say its magic! I did a small example for visualizing downloads from my SharePoint farm and IMHO it looks very cool. Things change rapidly, as I wrote this I used Microsoft.AspNet.SignalR 1.0 Alpha 2.\nUpdate 02/05/2013: SignalR has changed a lot - I will write a blog post because the current approach is to complicated for the current SignalR version. Use at your own risk!\nUpdate 06/05/2013: Open Source Solution available - I released a Codeplex project for SharePoint+SignalR. Please go to http://spsignalr.codeplex.com SharePoint 2010 makes it tough! You all know that SharePoint 2010 runs on .NET Framework 3.5 – yepp, its not getting better. Thing is, SignalR needs .NET Framework 4.0 or 4.5. So the easiest solution was to create a second Application Pool, select .NET Framework 4.0/4.5 and host the SignalR application there. I used a WCF Service in that application, SharePoint event receivers can call the WCF Service and voila you are in the 4.0/4.5 domain (if you are lucky without cross domain issues…).\nSharePoint 2013 doesn’t make it easier! Then SharePoint 2013 came out – finally with .NET 4.0 runtime. I said cool, this should make it easy to host SignalR in the same domain and even in the same Application Pool as SharePoint 2013. Yepp, that’s the theory and SharePoint can sometimes make it a little bit harder than it should be (still, SharePoint 2013 is a rock star!!!).\nSignalR Hub in SharePoint 2013 When you create a SignalR application you need a hub. A hub is a class with methods you can call from the clients or externally to notify other clients. In order to communicate all clients need to register on that hub. In normal asp.net world SignalR attaches to the App_Start event where it registers a route “~/signalr/hubs” so clients know the endpoint where they can talk to SignalR hubs or get the hub description file (proxy). With this behavior you have a problem:\nThere is no App_Start\n(You could modify the global.asax – but I want a deployable solution…)\nApp_Start the SharePoint way The only deployable way I could imagine to call a function once the app pool spins up - with several farm nodes – is a http handler. Wait a http handler is call very often, we need to remember this one: public class SignalRModule : IHttpModule { public static bool IsAttached = false; private readonly object _lock = new object(); public void Dispose() { //nothing to clean up. } public void Init(HttpApplication context) { //check if the routes are already attached if (!IsAttached) { //lock it, could be called several times in parallel lock (_lock) { //check if the call before attached. if (!IsAttached) { //this is usually call in the App_Start thing from SignalR and registers the hub endpoint RouteTable.Routes.MapHubs(\"/signalr/hubs\"); IsAttached = true; } } } } } Now we need to add this module to the web.config farm wide – easiest way is the SPWebConfigModification and a Web Application feature.\npublic override void FeatureInstalled(SPFeatureReceiverProperties properties) { RegisterHttpModule(properties); } private void RegisterHttpModule(SPFeatureReceiverProperties properties) { SPWebConfigModification webConfigModification = CreateWebModificationObject(); SPSecurity.RunWithElevatedPrivileges(() =\u0026gt; { SPWebService contentService = SPWebService.ContentService; contentService.WebConfigModifications.Add(webConfigModification); contentService.Update(); contentService.ApplyWebConfigModifications(); }); } private SPWebConfigModification CreateWebModificationObject() { string name = String.Format(\"add[@name=\\\"{0}\\\"]\", typeof(SignalRModule).Name); string xpath = \"/configuration/system.webServer/modules\"; SPWebConfigModification webConfigModification = new SPWebConfigModification(name, xpath); webConfigModification.Owner = \"Max Melcher\"; webConfigModification.Sequence = 0; webConfigModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode; /* * to be resistent to refactoring we use reflection to identity the module, * so in case somebody changes the class name the web.config entry will be still valid */ webConfigModification.Value = String.Format(\"\", typeof(SignalRModule).Name, typeof(SignalRModule).AssemblyQualifiedName); return webConfigModification; } Note: The uninstalling method is not shown here, don’t forget it because the SPWebConfigModification remembers the changes!\nWith that the route will register - only once – and we should be all set right?\nSharePoint 2013 yellow page of death Nasty stack trace Stack trace: at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.IsExcludedPath(String virtualPath)\nat Microsoft.SharePoint.ApplicationRuntime.SPVirtualPathProvider.DirectoryExists(String virtualPath)\nat System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext)\nat System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context)\nat System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()\nat System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean\u0026amp; completedSynchronously)\nThat doesn’t sound good.\nSharePoint and the ~ SharePoint doesn’t like the tilde character. If you add a route (if you don’t, SignalR does) starting with ~, SharePoint shows the yellow page of death. The “easy” fix is to create a custom VirtualPathProvider - I didn’t know what this class is doing before, too – and just pretend the ~ is not there:\npublic class SignalRVirtualPathProvider : VirtualPathProvider { public override string CombineVirtualPaths(string basePath, string relativePath) { return Previous.CombineVirtualPaths(basePath, relativePath); } public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType) { return Previous.CreateObjRef(requestedType); } public override bool DirectoryExists(string virtualDir) { //removing the evil character - otherwise the hell freezes and yeah, SharePoint. virtualDir = virtualDir.TrimStart('~'); return Previous.DirectoryExists(virtualDir); } public override bool FileExists(string virtualPath) { return Previous.FileExists(virtualPath); } public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart) { return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); } public override string GetCacheKey(string virtualPath) { return Previous.GetCacheKey(virtualPath); } public override VirtualDirectory GetDirectory(string virtualDir) { return Previous.GetDirectory(virtualDir); } public override VirtualFile GetFile(string virtualPath) { return Previous.GetFile(virtualPath); } public override string GetFileHash(string virtualPath, System.Collections.IEnumerable virtualPathDependencies) { return Previous.GetFileHash(virtualPath, virtualPathDependencies); } } Now register this little sweety in the previously created http module – two problems solved there now:\npublic void Init(HttpApplication context) { //check if the routes are already attached if (!IsAttached) { //lock it, could be called several times in parallel lock (_lock) { //check if the call before attached. if (!IsAttached) { //this is usually call in the App_Start thing from SignalR and registers the hub endpoint. RouteTable.Routes.MapHubs(\"/signalr/hubs\"); //register the custom VirtualPath provider that trims the starting ~ from the requested url. HostingEnvironment.RegisterVirtualPathProvider(new SignalRVirtualPathProvider()); IsAttached = true; } } } } Okay – that’s it. Open the hub link and finally you get the hub proxy file!\nSignalR hub proxy Does not look too spectacular but a post will follow with some demos – now that I know how it works!\nSignalR in SharePoint 2013 - is there an easier way?! Tell me in the comments and thanks for reading!\n",
    "tags": null,
    "categories": ["Development","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/11/sharepoint-2013-federated-search-deep-dive-twitter/",
    "title": "SharePoint 2013: Federated Search Deep Dive – Twitter",
    "date_published": "2012-11-27T12:46:08Z",
    "description": "SharePoint Search Federation is a really underrated feature if you ask me. You can greatly improve your company’s knowledge management and create a single point of entry to all kind of data. Federation comes into play when you can not crawl the data source (too big or too complex).\nWith SharePoint 2013 and the very cool query templates you have literally thousand of options (to be honest you had them before but with XSLT its not that much fun) to enhance your search results.",
    "content": "SharePoint Search Federation is a really underrated feature if you ask me. You can greatly improve your company’s knowledge management and create a single point of entry to all kind of data. Federation comes into play when you can not crawl the data source (too big or too complex).\nWith SharePoint 2013 and the very cool query templates you have literally thousand of options (to be honest you had them before but with XSLT its not that much fun) to enhance your search results.\nReal Time Twitter Search Lets do a quick example – how about adding Twitter to your search results and style it a bit?\nFirst off, go to Central Admin and click on your with PowerShell provisioned Search Service Application. On the left menu you can see an entry “Result Sources” with 16 default sources defined by SharePoint, compared to SharePoint 2010 that is 4 times more! Most of the SharePoint sources can not be edited but they give you a clue what the intention of this is.\nStep 1: Create the federation If you want to create a search federation you simply need the OpenSearch link. For the twitter example its http://search.twitter.com/search.atom?q={searchTerms}.\nFriendly reminder: Your server needs connection to the internet, at least to that site in order to work…\nStep 2: Upload a new page layout When you edit a search page you might notice that there are only two page layouts available, either you go for two columns and that is not that optimal for “side queries”. Or you change it to Web Part page and have the quick launch on the left side. Best chance to try the new design manager and create a 3 column page layout – too many steps for this article, that’s why you can download my hacked version here. Just drop the file SearchWithFederated (right click and save as!) to [\\sharepoint2013_catalogs\\masterpage][4] (replace sharepoint2013 with the hostname of your server or drop the file to the 15’ folder) – SharePoint 2013 will handle all the rest \u0026lt;— SO COOL!!!\nAfter uploading the page layout, go to site settings of the search center and click on “Page Layouts and Site Templates” and add “SearchWithFederated” to the allowed page layouts:\n[][5]\nThen create a page and e.g. call it social.aspx with the new page layout “SearchWithFederated”. The page should look like this now (except that you don’t have the cool logo!):\n[][6]\nStep 3: Add an additional search Web Part to the new zone In SharePoint 2010 there was a “federated search Web Part” – its gone, you don’t need it anymore. You could do cool stuff with it, at Alegri we have a federation to Microsoft Dynamic where the employees skills and certificates and stuff are managed, on the screenshot you can see it on the right:\n[][7]\nWith SharePoint 2013 they built a lot of new search Web Parts and broke with a lot of old stuff – shiny new world! Okay back to the example, just add:\nRefiner Web Part to zone 1 Search result Web Part to zone 2 Search navigation Web Part to zone 2 Search box Web Part to zone 2 Search result Web Part to zone 3 [][8]\nStep 4: Configure everything Okay, lets start with the search box, that took me a while to notice that you change the connection here:\nSend Queries to Web Parts Search results [1] (check) Search results [2] (check) Now edit Search Results 2:\nClick on change query (cool new wizard, love it!) Basics Select a query: Twitter Number of results per page: 5 Show advanced link: (uncheck) Show result count: (uncheck) Show paging: (uncheck) Show preferences link: (uncheck) Settings Loading Behavior: Async option (this loads the results after the main results in zone 2 appears and doesn’t wait on the twitter search service) Step 5: First results ooookay… very cool stuff:\n[][9]\nYou can click on the results and get redirected to twitter.\nStep 6: Adjust the Display Template So what\u0026rsquo;s next, we got it working right? Yepp, but how about the author and the date of the tweet? Let’s tackle this with the awesome new display templates – too many steps and it took me a while to figure it out (author is in the xml), just download the file [Item_twitter][10] (right click and save as!) and upload it to [\\sharepoint13_catalogs\\masterpage\\Display][11] Templates\\Search (again, replace the hostname)\nOne thing that really helped me creating the display template was the super debugger in chrome. Just add “debugger;” in the JavaScript part of the template, hit F12 in Chrome to open up the Developer Tools – and you can debug the display template and context object (just hover over it or use the console) – SWEET!\n[][12]\nAfter uploading the display template, edit the page and set the Item Display Template to “Twitter”. The setting is in the Display Template section of the result Web Part.\nFinal result And here comes the very last screenshot of this very long blog post – my longest so far!\n[][13]\nFeedback? Much appreciated in the comments!\n[4]: file://\\sharepoint2013_catalogs\\masterpage\u0026quot; data-mce-href= [5]: http://melcher.it/wp-content/uploads/sp2013_pagelayouts.png [6]: http://melcher.it/wp-content/uploads/sp2013_3columpagelayout.png [7]: http://melcher.it/wp-content/uploads/federatedsearch_sp2010.png [8]: http://melcher.it/wp-content/uploads/sp2013_federatedsearch1.png [9]: http://melcher.it/wp-content/uploads/sp2013_federatedsearch2.png [10]: http://melcher.it/wp-content/uploads/Item_twitter.html [11]: file://\\sharepoint13_catalogs\\masterpage\\Display [12]: http://melcher.it/wp-content/uploads/sp2013_DisplayTemplate_debugger.png [13]: http://melcher.it/wp-content/uploads/sp2013_federatedsearch_final.png\n",
    "tags": null,
    "categories": ["Customization","Deep Dive","ITPro","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/11/finally-a-new-blog-theme-with-mobile-support/",
    "title": "Finally a new blog theme… with mobile support!",
    "date_published": "2012-11-26T18:14:38Z",
    "description": "Finally I found some time for a new theme - maybe a motivation to release a couple of blog posts (I have a lot of drafts). The mobile support (fully responsive!) was really needed!\nDo you like it? ",
    "content": "Finally I found some time for a new theme - maybe a motivation to release a couple of blog posts (I have a lot of drafts). The mobile support (fully responsive!) was really needed!\nDo you like it? ",
    "tags": null,
    "categories": ["Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/11/get-all-your-sharepoint-tools-installed-in-20-minutes/",
    "title": "Get ALL your #SharePoint tools installed in 20 minutes",
    "date_published": "2012-11-12T14:43:42Z",
    "description": "A while ago I wrote about chocolatey and how to install a lot tools automatically. Thats especially handy if you have to set up a new environment for SharePoint 2013 RTM…\nNow even more Today and yesterday I added two more packages - two tools that I always use and now I can add them in my scripted setup: ULSViewer and CKSDEV (Server)\nCKSDev The Visual Studio Extension is installed if you have a Visual Studio 2010 or 2012 installed.",
    "content": "A while ago I wrote about chocolatey and how to install a lot tools automatically. Thats especially handy if you have to set up a new environment for SharePoint 2013 RTM…\nNow even more Today and yesterday I added two more packages - two tools that I always use and now I can add them in my scripted setup: ULSViewer and CKSDEV (Server)\nCKSDev The Visual Studio Extension is installed if you have a Visual Studio 2010 or 2012 installed. This is the server version of cksdev.\nInstall with:\ncinst cksdevserver ULSViewer The ULSViewer is installed and a shortcut is added on your desktop - quite handy. Please keep in mind that this is the microsoft ulsviewer not the one from codeplex.\nInstall with:\ncinst ulsviewer Add new packages! Adding of packages was not that easy (start here), but after one hour or two you get used to it - basically its powershell and some nuget related stuff. Go for it!\nMyGet Feed I updated my MyGet Feed and with\ncinst all -source https://www.myget.org/F/sharepointdev you install now:\n7zip Adobe Reader Fiddler git gitextensions github for Windows notepad++ GoogleChrome dotPeek smtp4dev ULSViewer CKSDevServer ",
    "tags": null,
    "categories": ["Development","ITPro","SharePoint 2007","SharePoint 2010","SharePoint 2013","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/09/sharepoint-2013-replace-the-pdf-icon/",
    "title": "SharePoint 2013: Replace the PDF icon",
    "date_published": "2012-09-18T11:55:13Z",
    "description": "Icon madness I uploaded a PDF to SharePoint 2013 and noticed that the PDD icon is not the official and recognizable Adobe PDF icon. In this article I will tell you how to replace the SharePoint 2013 PDF icon.\nOOTB PDF icon from SharePoint 2013 Is it a document with a belt or what ? Nevermind I don’t like it and I am very certain that most of the users out there do not recognize the icon – and that is the main purpose of the icon right?",
    "content": "Icon madness I uploaded a PDF to SharePoint 2013 and noticed that the PDD icon is not the official and recognizable Adobe PDF icon. In this article I will tell you how to replace the SharePoint 2013 PDF icon.\nOOTB PDF icon from SharePoint 2013 Is it a document with a belt or what ? Nevermind I don’t like it and I am very certain that most of the users out there do not recognize the icon – and that is the main purpose of the icon right?\nSearch result with out-of-the-box SharePoint 2013 PDF icon With SharePoint 2010 there was no PDF support out of the box – afaik there was no icon at all. I should be happy and quite right? Nope, created a small powershell that replaced the icon (either you place it next to the script or the script downloads it from the Adobe page).\nThe result will look like this – way better if you ask me.\nOriginal PDF icon - as expected! Same icon in a document library Powershell to the rescue - once again! And here comes the small script:\n######################################################################################### # by Max Melcher, http://melcher.it, @maxmelcher # Feel free to change and reuse as you wish - use on your own risk # Script that replaces the OOTB SharePoint 2013 PDF icon with the orignal Adobe PDF icon. # Execute on each webfrontend ######################################################################################### #settings $destination = \"C:\\Program Files\\Common Files\\microsoft shared\\Web Server Extensions\\15\\TEMPLATE\\IMAGES\\icpdf.png\" #Check if the icon exists otherwise download it $item = Get-ChildItem pdficon_small.png -ErrorAction SilentlyContinue #Helper function download{ # usage: download http://url c:\\temp param([string]$URL, [string]$destination) Write-Host \"Downloading $URL ...\" $clnt = new-object System.Net.WebClient -ErrorVariable err -ErrorAction \"SilentlyContinue\" $clnt.DownloadFile($url,$destination) if ([String]::IsNullOrEmpty($err) -eq $true) { Write-Output \" - Download completed.\" } else { Write-Error \"Download ERROR - Check URL: $err\" } } function RestartIIS(){ $title = \"Restart IIS\" $message = \"Do you want to restart the local IIS?\" $yes = New-Object System.Management.Automation.Host.ChoiceDescription \"Yes\",\"Restarts IIS.\" $no = New-Object System.Management.Automation.Host.ChoiceDescription \"No\",\"Silently continues...\" $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) $result = $host.ui.PromptForChoice($title, $message, $options, 0) if ($result -eq 0){ Write-Host -ForegroundColor Yellow \"Restarting IIS\" iisreset /noforce } } if ($item) { Write-Host -ForegroundColor Yellow \"Supplied icon found - overwriting\" Copy-Item $item -Destination $destination -Force } else { Write-Host -ForegroundColor Yellow \"Downloading icon from Adobe\" Download \"http://www.adobe.com/images/pdficon_small.png\" $destination } Write-Host -ForegroundColor Green \"Icon replaced\" #Icon will only be changed after iisreset or reboot RestartIIS Write-Host -ForegroundColor Green \"done!\" Thats it – go try it! As always, would love to hear your feedback.\n",
    "tags": null,
    "categories": ["Customization","Search","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/08/install-all-the-good-sharepoint-tools-with-one-line-of-powershell-chocolatey/",
    "title": "Install all the good SharePoint tools with one line of powershell – #chocolatey",
    "date_published": "2012-08-17T13:07:54Z",
    "description": "Okay I am in love with a new tool called chocolatey – its a package manager like “apt-get” for windows systems based on the very awesome nuget – and this neat piece of software can install other software. Its very easy to add software or packages and there are even galleries (340 packages in the main gallery yet) or feeds where you get a good start.\nChocolatey So installation of this package manager must be very complicated….",
    "content": "Okay I am in love with a new tool called chocolatey – its a package manager like “apt-get” for windows systems based on the very awesome nuget – and this neat piece of software can install other software. Its very easy to add software or packages and there are even galleries (340 packages in the main gallery yet) or feeds where you get a good start.\nChocolatey So installation of this package manager must be very complicated…. nope – one line, just copy it to a command line (CMD):\n@powershell -NoProfile -ExecutionPolicy unrestricted -Command \"iex ((new-object net.webclient).DownloadString('http://bit.ly/psChocInstall'))\" \u0026\u0026 SET PATH=%PATH%;%systemdrive%\\chocolatey\\bin You can get more information about chocolatey here.\nmyget With myget you can manage packages (basic plan is free) and the cool thing is you can install a lot of packages/software in one go.\nmyget Feed for SharePoint Development Recently I installed a lot of SharePoint Dev- and Demo-Rigs, both SharePoint 2010 and SharePoint 2013 – and I always install the same toolset. With chocolatey/myget I am able to automate and manage my basic tools in a very comfortable way, installed 10 tools in roughly 15 minutes. I like that.\nIf you wanna install my SharePoint development tools feed (not yet complete but I will update the feed and this blog post). Would love feedback about the collection!\ncinst all -source https://www.myget.org/F/sharepointdev Packages in my feed 7zip Adobe Reader Fiddler git gitextensions github for Windows notepad++ GoogleChrome dotPeek smtp4dev Packages I am missing I would love more SharePoint tools like ULSViewer, CKSDev, SharePoint Manager, SharePoint dispose checker… what do you think? Should we add them?\n",
    "tags": null,
    "categories": ["Development","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/07/sharepoint-2013-create-a-search-service-application-and-topology-with-powershell/",
    "title": "#SharePoint 2013 – Create a Search Service Application and Search Topology with Powershell",
    "date_published": "2012-07-23T18:02:49Z",
    "description": "Writing SharePoint 2013 feels very new to me, but I created my first Demo environment and tried to set up search.\nWhat needs to be done? 14 steps for a simple Search Topology - 1 powershell can do them all.\nCreate a Service Application Pool for the Search Service Application (15-22) Create a Search Service Application (22-28) Create a Search Service Application Proxy (30-36) Get the current Search Instance (38) Save the current Search Topology for later use (39) Create a new Search Topology (40) Create all the Search Components (Analytics- , Content Processing, Query Processing, Crawler-, Admin Component) (42-46) Remove the Index-Folder and recreate it (50-51) Create a new Index Component (53) Activate the new Topology (56) Call the method synchronize on the old topology - this errors but forces an update on the old topology object (59) The \u0026ldquo;forced updated\u0026rdquo; Topology object becomes inactive and can be deleted.",
    "content": "Writing SharePoint 2013 feels very new to me, but I created my first Demo environment and tried to set up search.\nWhat needs to be done? 14 steps for a simple Search Topology - 1 powershell can do them all.\nCreate a Service Application Pool for the Search Service Application (15-22) Create a Search Service Application (22-28) Create a Search Service Application Proxy (30-36) Get the current Search Instance (38) Save the current Search Topology for later use (39) Create a new Search Topology (40) Create all the Search Components (Analytics- , Content Processing, Query Processing, Crawler-, Admin Component) (42-46) Remove the Index-Folder and recreate it (50-51) Create a new Index Component (53) Activate the new Topology (56) Call the method synchronize on the old topology - this errors but forces an update on the old topology object (59) The \u0026ldquo;forced updated\u0026rdquo; Topology object becomes inactive and can be deleted. (62) Everything done - start a full crawl oder set it to the new shiny continuous crawling. Enjoy! The numbers in the braces are the line numbers in the powershell script following now.\nPowershell to the rescue! Here is my powershell script for creating the whole service application and creating a basic topology.\nPlease keep in mind that the $IndexLocation folder will be deleted and recreated.\nAdjust the settings in the lines 4-11 to your needs.\nAdd-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Settings $IndexLocation = \"C:\\Search\" #Location must be empty, will be deleted during the process! $SearchAppPoolName = \"Search App Pool\" $SearchAppPoolAccountName = \"demo\\SPSearchAppPool\" $SearchServiceName = \"Search SA\" $SearchServiceProxyName = \"Search SA Proxy\" $DatabaseServer = \"sp2013\\sharepoint\" $DatabaseName = \"SP2013 Search\" Write-Host -ForegroundColor Yellow \"Checking if Search Application Pool exists\" $spAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue if (!$spAppPool) { Write-Host -ForegroundColor Green \"Creating Search Application Pool\" $spAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccountName -Verbose } Write-Host -ForegroundColor Yellow \"Checking if Search Service Application exists\" $ServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceName -ErrorAction SilentlyContinue if (!$ServiceApplication) { Write-Host -ForegroundColor Green \"Creating Search Service Application\" $ServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceName -ApplicationPool $spAppPool.Name -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName } Write-Host -ForegroundColor Yellow \"Checking if Search Service Application Proxy exists\" $Proxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceProxyName -ErrorAction SilentlyContinue if (!$Proxy) { Write-Host -ForegroundColor Green \"Creating Search Service Application Proxy\" New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceProxyName -SearchApplication $SearchServiceName } $searchInstance = Get-SPEnterpriseSearchServiceInstance -local $InitialSearchTopology = $ServiceApplication | Get-SPEnterpriseSearchTopology -Active $SearchTopology = $ServiceApplication | New-SPEnterpriseSearchTopology New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance New-SPEnterpriseSearchCrawlComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance set-SPEnterpriseSearchAdministrationComponent -SearchApplication $ServiceApplication -SearchServiceInstance $searchInstance Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue mkdir -Path $IndexLocation -Force New-SPEnterpriseSearchIndexComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance -RootDirectory $IndexLocation Write-Host -ForegroundColor Green \"Activating new topology\" $SearchTopology.Activate() Write-Host -ForegroundColor Yellow \"Next call will provoke an error but after that the old topology can be deleted - just ignore it!\" $InitialSearchTopology.Synchronize() Write-Host -ForegroundColor Yellow \"Deleting old topology\" Remove-SPEnterpriseSearchTopology -Identity $InitialSearchTopology -Confirm:$false Write-Host -ForegroundColor Green \"Old topology deleted\" Write-Host -ForegroundColor Green \"Done - start a full crawl and you are good to go (search).\" The whole script took about 3 minutes on my machine.\nULSViewer showed me what timer job needs to be started References I took some parts from here, but received some errors, some paramaters were missing so I adjusted the script for my needs.\nThe MSDN documentation is missing that there is a timer job responsible for topology changes - ULSViewer helped me to figure that one out.\nUpdate 1, 24.07.2012 17:11 I exchanged some emails with Alpesh Nakar (funnily he created a script for the same thing) and he helped me reducing my script a lot. Thanks for that.\nDid it work for you? ",
    "tags": null,
    "categories": ["ITPro","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/06/teched-2012-tee12-amsterdam-day-4/",
    "title": "TechEd 2012 (#TEE12), Amsterdam — Day 4",
    "date_published": "2012-06-29T15:47:41Z",
    "description": "Last day at TechEd – today it will be an asp.net-ish day!\nFirst Session: Microsoft ASP.NET and the Realtime Web (Brady Gaster) This gotta be SignalR – hopefully with cool demos. Actually they forgot the SignalR part in the title, the whole thing is about it.\nOkay, first demo is SignalR with Kinect. Kinect detects a person, takes a picture, the picture is uploaded to azure and the link to the picture is pushed to “subscribed”, open browser.",
    "content": "Last day at TechEd – today it will be an asp.net-ish day!\nFirst Session: Microsoft ASP.NET and the Realtime Web (Brady Gaster) This gotta be SignalR – hopefully with cool demos. Actually they forgot the SignalR part in the title, the whole thing is about it.\nOkay, first demo is SignalR with Kinect. Kinect detects a person, takes a picture, the picture is uploaded to azure and the link to the picture is pushed to “subscribed”, open browser.\n9 demos.\nSupported clients: JQuery, Native .NET, WP7, iOS, Silverlight, WinRT, Android.\nSupported hosts: ASP.NET, OWIN, Self-hosted\nSupported backplanes: SQL, Redis, Service Bus\nBenchmarks: 40.000 persistent connections (40% CPU utilization) – goal for version 1.0 is 100.000 concurrent open connections.\nThe demos showed how to build basic applications (totally easy), use diffrent hosts and scale it on Azure.\nBrady rocked the stage, really like his style – infotainment on a very high level!\nSecond Session: Identify \u0026amp; Fix Performance Problems with Visual Studio 2012 Ultimate (Benjamin Day) Session about the different methods to stress test a Web Application.\nWeb Performance Test =\u0026gt; record actions and play them back\nLoad Test =\u0026gt; mix of Web Performance Tests and Unit Tests (important: The Browser Mix just changes the User Agent, they are not using a real browser)\nLimits if you run it from Visual Studio: 250 simultanious user, limited to 1 CPU. If you need more get Test Controller and Test Agents.\nI used the Load/Performance Tests in VS2010 and I couldn’t identify a lot of new stuff.\nLast Session: ASP.NET Roadmap: One ASP.NET - Web Forms, MVC, Web API and more (Brady Gaster) MVC, Web Forms and Web Pages will have the same featureset. There will be a new Visual Studio Web Project template where you can choose what you want and after that nuget will pull the current version and create your project.\nAsync everwhere =\u0026gt; Threads will be released and IIS can serve more requests.\nValidation: UnobstrusiveValidationMode property of a page can enable html5 validation\nOptimization: CSS / JS Bundle \u0026amp; Minification: just set debug=false in the web.config and things are compressed, bundled. Supports Coffeescript and LESS.\nModel-Binding: ASP.NET controls get a property ItemType to bind strongly typed entities. No more EVAL, good.\nDynamicControl =\u0026gt; bind it against a string property and it creates a label, an input field and validation. If you bind it against a DateTime prop, guess what its an DateTimeControl then – slick.\nFinal notes - TechEd 2012 is over! TechEd was awesome as expected. Saw a lot of new technologies, new products – that will help me a lot in the future. The location and everything around was decent – very good speakers \u0026amp; sessions, too!\nNext TechEd will be booked – thats for sure!\n",
    "tags": null,
    "categories": ["Development","TechEd 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/06/teched-2012-tee12-amsterdam-day-3/",
    "title": "TechEd 2012 (#TEE12), Amsterdam – Day 3",
    "date_published": "2012-06-28T09:08:55Z",
    "description": "Third day at TechEd, not getting more sleep here but coffee keeps us going!\nThe delegate party was in the AJAX Amsterdam soccer arena – private public viewing style.\nFirst Session: Best Practices for Building Your Website for Scale with Microsoft SharePoint 2012 (Spencer Harbar, @harbars) At first I thought “Why isnt he talking about User Profiles, Sync or something – he is Mr. UserProfiles for me.\nKey messages:\nCapacity Planning, Architect Scale, Pilot \u0026amp; Test, Deploy, Monitor \u0026amp; Validate, and repeat.",
    "content": "Third day at TechEd, not getting more sleep here but coffee keeps us going!\nThe delegate party was in the AJAX Amsterdam soccer arena – private public viewing style.\nFirst Session: Best Practices for Building Your Website for Scale with Microsoft SharePoint 2012 (Spencer Harbar, @harbars) At first I thought “Why isnt he talking about User Profiles, Sync or something – he is Mr. UserProfiles for me.\nKey messages:\nCapacity Planning, Architect Scale, Pilot \u0026amp; Test, Deploy, Monitor \u0026amp; Validate, and repeat.\nOutput caching increases the Throughput massively – goal is between 80% and 90%.\nCommon bottlenecks: Web front-end: CPU, Memory, Disk I/O, Disk space\nApp servers: Disk I/O, Memory, CPU\nDatabase servers: DB locks, Disk I/O, CPU, Memory, Disk space\nCaches: Web server memory: Output cache (compiled pages), Object cache (SPQuery)\nWeb server disk: BLOB cache\nSee if Site Collection Output Cache is working: Site Collection settings =\u0026gt; Enable debug cache information on pages (then check html source after page rendering, there should be comment ) – Gotcha is that Developer dashboard is not longer working because that guy is cache too.\nMonitor the cache trimming, if there is a lot scale up the web frontend servers (=\u0026gt; more memory or make the items stay longer in the cache).\nIf Web frontend CPU is utilized for more than 80% the response time is impacted (Spence’s example was 7 times slower with CPU above 80%).\nASP.Net Post-Cache substitution (partially cached pages)\nThat was surprising: SPList.GetItems(SPQuery) is not cached – you have to cache it yourself. Same is SharePoint client object model.\nBlob cache: Store on separate drive, increase size and lifetime if possible\nCDN: If the site is internet facing load jquery and modernizr from big CDNs.\nIIS Compression: STRONGLY recommendation to enable static compression. Consider dynamic compressions.\nContent Deployment: Dont use it for high availability, Site relaunch/redesign, schedule the load from write operations – its not made for that.\nContent Deployment Best Practices:\nContent Deployment + SQL Server Enterprise. Central Administration: Tick the box to use sql snapshots Custom solution must be “aware” of Content Deployment Variations – Best Practices at Scale\nAvoid “Multilingual Afterthought Syndrom – what a name. Set up Variations early on, otherwise you have to copy a lot Consider On-Demand Page Propagation TechEd Expo Needed a pause and took the time to discover the different booths. Very interesting products (even useful ones) arround, some I will try. Had a great discussion at the Microsoft booth, could ask a lot of questions (and I got them answered, awesome!). One thing I wanted to know is if you could run Hyper V on a Windows 8 non-Server version – you can with Hyper V Client. Thats good new for me, bad news for VMWare Workstation.\nDespite the fact there are not that much SharePoint sessions here, the coverage of SharePoint experts (MVPs, SharePoint Master and even SharePoint Architects) is quite high (to name some: Spencer Harbar, Todd Klindt, John Ross, Randy Drisgill, Steve Fox, Paul Stubbs, Radi Atanassov, …) – had a great discussion about SignalR, FAST Search, SharePoint Ignite for vNext, SharePoint vNext beta (they told me exactly nothing…). To sum it up: I had fun.\nSecond Session: Building HTTP Services with ASP.NET Web API (Sayed Hashimi) Best reason to use Web API: Interoperability (use on phones, browsers, clients, … ) and SCALE.\nSayed’s demo was pretty slick, he used knockoutJS to visualize and bind the data. As benefit of the service you get content-negotiation (xml or json or whatever if the client requests it without overhead) and odata support: filter and query without implementing them, neat! Just mark methods returning entities with [Queryable] and return IQueryable objects. I literally can see this in SharePoint WebServices in SharePoint ‘15 – this will rock. You need .net 4 for it, so no out-of-the-box benefits for SP2010.\nAnd finally there will be an API Explorer for that – will be a nuget package, cool.\nThird Session: Creating Robust, Maintainable Coded UI Tests with Visual Studio 2012 (Brian Keller) I hoped we see the demo recorded from the new IE, but Brian choose to show a small wpf app. No big deal, I hope the functionality is comparable. A lot of new features added to coded UI tests, seems like its usable in VS 2012 – I tried it in VS2010 but it was too slow and cumbersome to invest time. I\u0026rsquo;ll retry it with VS2012, looks straightforward.\nIf your test fails you can see screenshots why the test failed or even record them during your test.\n",
    "tags": null,
    "categories": ["ITPro","SharePoint 2010","TechEd 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/06/teched-2012-tee12-amsterdam-day-2/",
    "title": "TechEd 2012 (#TEE12), Amsterdam —- Day 2",
    "date_published": "2012-06-27T18:00:18Z",
    "description": "Second day at Teched.\nKeynote: Windows 8 Lots of different features of the new Windows 8 are shown. Windows 2 GO demo was cool – you can boot an entire Windows from usb 3.0 stick. If you unplug the stick you have 60 seconds to replug it and everything continues to work.\nFirst Session: Introducing the New Visual Studio 2012 Unit Testing Experience (Peter Provost) Peter showed some new features of the new Visual Studio – looks great.",
    "content": "Second day at Teched.\nKeynote: Windows 8 Lots of different features of the new Windows 8 are shown. Windows 2 GO demo was cool – you can boot an entire Windows from usb 3.0 stick. If you unplug the stick you have 60 seconds to replug it and everything continues to work.\nFirst Session: Introducing the New Visual Studio 2012 Unit Testing Experience (Peter Provost) Peter showed some new features of the new Visual Studio – looks great. Hoping that new SharePoint has proper support of the new Fakes/Shim test stuff. Would bring SharePoint development to a new level – higher quality for many of us. Many of this you could have used with some effort, it seems like things are getting much easier and faster.\nAs I am live writting – at the end Peter told the audience that there will be a Test Emulation Library for SharePoint Unit Testing – this is good news!!!\nSecond Session: From Development To Production: Optimizing For Continuous Delivery (Chris Patterson) Developer talk focused on Azure and TFS 2012 (Preview).\nKey messages:\nUse the framework you want to use MSTEST, Nunit, xUnit and Others Unit tests drive quality Use Isolation Framework (“Fakes” is deeply integrated into VS2012) Iterate everything (Plan, Develop, Test) Take aways: Lots of new features for Devs - all will profit from that.\nLunch session: Integrating SharePoint and Project Server 2010 – Deployment Approaches, Integration Options and making the most of the SharePoint Enterprise Features. Lunch was short for this session but I wanted to see what you can do with that powerful combo. At Alegri we are using Project 2010 and SharePoint together but I have the feeling we are only using 20% - it seems like we are.\nKey take aways: Change the master page and loose support! Workarround is to use the delegate control in the page head to add css/jquery to style stuff. Lots of additional work.\nFifth session: Advanced SharePoint 2010 Upgrade Troubleshooting (Todd Klindt) One of the most anticipated sessions for me.\nDifferent upgrade scenarios, db attached upgrade deliveres good results. Start with SP2007 SP2 - for SP2010 most recent is CU Feb 2012 (start slipstreamed, except language packs!). Important if you attach UserProfile start with RTM (rumors (\u0026ldquo;smart people told me\u0026rdquo;) are there are problems with it if you go post SP1).\nAlways run preupgradecheck - large list issues (workflow history could be very large and prevents workflows to start in SP2010).\nOrphans: Delete them on SP2007 (several times with stsadm) then test-spcontentdatabase\nUse MSDN ULSViewer to analyze problems - time for a logging feature at www.sharepointtoolbox.de\nUse powershell for everything - Todd loves powershell and he is not a Dev!\nIf you see ID 75802 its Fab40 - check if you can delete it on the SP2007 side. DONT move them to SP2010 - huge side-effects if you do so.\nUpgrade performance is limited by IO - fast disks =\u0026gt; fast upgrade.\nGet rid of unused document versions.\nThemes: Install themes in SP2007 before mounting content database, otherwise you cant change your MasterPage in SP2010.\nMemo to myself: Listen to Todds podcast frequently - that was the best session so far at TechEd 2012.\nSixth session: Exploring the Power of Page Layouts in SharePoint 2010 WCM Sites (John Ross, Randy Drisgill) Page layouts are a powerful concept for SharePoint.\nPros: Encapsuling data based on a contenttype, inheritance if you want it, deployable, searchable.\nCons: No versioning\nIf you crate it with SharePoint Designer, things tend to be created in the content database and you pay a performance price for that.\nIf you create it with Visual Studio take care that the contenttype id is correct (wow, very long), copy it from the url in the content type gallery or with CKSDEV in Visual Studio.\nNext session: Microsoft delegate party. ",
    "tags": null,
    "categories": ["Development","Misc","SharePoint 2010","TechEd 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/06/sql-server-2012-r0-evaluation-expired/",
    "title": "SQL Server 2012 R0 Evaluation expired",
    "date_published": "2012-06-27T17:17:32Z",
    "description": "Yesterday was the 180th day without problems on my DEV/DEMO environment – until my eval expired without noticeable warning ahead. The whole thing just locked down and of course my SharePoint doesn’t like that:\nGreat, just great.\nBecause Alegri is a Microsoft Partner, we do have valid SQL Server 2012 codes – so I asked for one, received one and tried to upgrade my license from EVAL to ENTERPRISE. So I started the installer of R0, clicked on the “change license” link entered the code – everthing ran green.",
    "content": "Yesterday was the 180th day without problems on my DEV/DEMO environment – until my eval expired without noticeable warning ahead. The whole thing just locked down and of course my SharePoint doesn’t like that:\nGreat, just great.\nBecause Alegri is a Microsoft Partner, we do have valid SQL Server 2012 codes – so I asked for one, received one and tried to upgrade my license from EVAL to ENTERPRISE. So I started the installer of R0, clicked on the “change license” link entered the code – everthing ran green. Still Management Studio complains that my version is expired and the SQL Server Service wont start… so I tried to upgrade to SQL Server 2012 RTM – started the upgrade thing in the RTM installer. After checking a lot of stuff it complained that it can\u0026rsquo;t connect to the SQL Server instance. For sure it can\u0026rsquo;t because I can’ start it.\nHow I fixed it - or making it work again Backup your data folder (just to be safe) Uninstall R0 – just search for R0 in the Installed Software list Install SQL Server 2012 RTM Take care that you create the same instance Stop the new instance Copy back the whole data directory Check if everything works again At first tried to attach all Databases back to the instance - but – I would have lost all permissions on the Master node and receive a “Can not connect to SharePoint configuration database”.\nAll works smoothly again – no more time bombs in my environment more. If you don\u0026rsquo;t have a license, sorry, can\u0026rsquo;t help you.\nLessons learned Upgrade even faster to the new versions or wait till RTM.\nBut: SQL Server 2012 is great - what you think? ",
    "tags": null,
    "categories": ["ITPro","SharePoint 2010","SQL Server 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/06/teched-2012-tee12-amsterdam-day-1/",
    "title": "TechEd 2012 (#Tee12), Amsterdam —- Day 1",
    "date_published": "2012-06-26T18:02:49Z",
    "description": "I will blog a bit about the sessions and stuff I saw at TechEd in Amsterdam – all from the perspective of a SharePoint guy.\nKeynote (Brad Anderson) Its all about cloud and virtualization. Broad coverage of all the new stuff, quite like the new Visual Studio features (List definition builder integrated, wondering how it will work with taxonomy fields)\nFirst session: What’s new in Windows Azure (Scott Guthrie) Provisioning of Azure virtual machines with a new and lean HTML5 web interface – metro styled of course.",
    "content": "I will blog a bit about the sessions and stuff I saw at TechEd in Amsterdam – all from the perspective of a SharePoint guy.\nKeynote (Brad Anderson) Its all about cloud and virtualization. Broad coverage of all the new stuff, quite like the new Visual Studio features (List definition builder integrated, wondering how it will work with taxonomy fields)\nFirst session: What’s new in Windows Azure (Scott Guthrie) Provisioning of Azure virtual machines with a new and lean HTML5 web interface – metro styled of course. I think we will see this stlye in SharePoint ‘15.\nHosting virtual machines is quite new, you can even host Linux VMs on Azure. If those VMs would not be so expensive I would migrate my DEV/DEMO environment to Azure – but that\u0026rsquo;s another story.\nThe source control publishing feature is also very cool - I really wanna see this “in the wild” – I use git in a some of my SharePoint projects…\n“Focus on apps, not infrastructure”\nSecond session: Continuous Feedback in Agile Teams (Ed Glas, Sebastian Holst) Smart session about the new tooling in Team Foundation Server 2012. Actually this could be the first Microsoft source control I wanna use – at Alegri we are using TFS2010 but I dont have the feeling that it speeds up my work or helps me and the team working better together. TFS2012 may change this – you can try the new one on tfspreview.com\nThird session: 36 Terabytes: How Microsoft IT Manages SharePoint in the Enterprise Quite entertaining talk for that subject – I learnt that if a meteor hits the datacenter its called a disaster – and what you could do in such a situation. Additionally they showed two tools SPPivot (sppivot.codeplex.com) for showing PowerPivots in SharePoint and one for testing SharePoint configuration with powershell (mini-audits for configuration changes) – I will try and review them at www.sharepointtoolbox.com.\nFourth session: Windows Server 2012 Overview (Michael Leworthy) Wow, amazing cool new stuff. Really too much to list them here, but I am really looking forward to test the new hyper-v when I update my whole DEV/DEMO environment to the new wave (with the SharePoint beta available).\nI will definitive try to automate all tasks with powershell and remove the GUI for a while – lets see how that goes.\nFifth session: Monitoring and Operating a Private Cloud with System Center 2012 I skipped the session and took the first cloud exam for free. Great experience, got 323 points (700 needed) without looking at a book or seeing the product. And failed.\n",
    "tags": null,
    "categories": ["TechEd 2012"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/05/signalr-and-sharepoint-live-download-tracking/",
    "title": "SignalR and SharePoint: Live Download Tracking",
    "date_published": "2012-05-13T20:52:29Z",
    "description": "I uploaded my first video to youtube today:\nApparently the captions were lost during the upload, next time I will explain a bit more 🙂\nMaybe next weekend I add some code examples and further details.",
    "content": "I uploaded my first video to youtube today:\nApparently the captions were lost during the upload, next time I will explain a bit more 🙂\nMaybe next weekend I add some code examples and further details.\n",
    "tags": null,
    "categories": ["Customization","Development","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/04/sharecamp-2012-sharepoint-2010-best-tools-v2/",
    "title": "ShareCamp 2012: SharePoint 2010 “Best Tools” (v2)",
    "date_published": "2012-04-26T10:37:51Z",
    "description": "At this year’s ShareCamp I collected the best SharePoint 2010 tools for IT-Pros and Developers. This year I extended the session with “the best solutions” – we ended with about 40 tools – and had a some fun during the session.\nSome of them are a really \u0026ldquo;must-have\u0026rdquo; - others are \u0026ldquo;hidden-gems\u0026rdquo; and special purpose tools - go check them out!\nDownload You can download the slides with all the tools – for your convenience I added the links to all tools:",
    "content": "At this year’s ShareCamp I collected the best SharePoint 2010 tools for IT-Pros and Developers. This year I extended the session with “the best solutions” – we ended with about 40 tools – and had a some fun during the session.\nSome of them are a really \u0026ldquo;must-have\u0026rdquo; - others are \u0026ldquo;hidden-gems\u0026rdquo; and special purpose tools - go check them out!\nDownload You can download the slides with all the tools – for your convenience I added the links to all tools:\nWhats your favorite tool / solution? I would love your addition in the comments - please share them!\n",
    "tags": null,
    "categories": ["SharePoint 2010","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/04/missing-fast-search-center-template/",
    "title": "Missing FAST Search Center Template",
    "date_published": "2012-04-26T09:40:30Z",
    "description": "Ever wondered where the FAST Search Center Template is and why the hack its not there when you create a new site?\nStart this little powershell and you can create it:\n$site = Get-SPSite -Identity http://sp2010.demo.com/sites/demo $site.Features.Add(\"5EAC763D-FBF5-4d6f-A76B-EDED7DD7B0A5\") ",
    "content": "Ever wondered where the FAST Search Center Template is and why the hack its not there when you create a new site?\nStart this little powershell and you can create it:\n$site = Get-SPSite -Identity http://sp2010.demo.com/sites/demo $site.Features.Add(\"5EAC763D-FBF5-4d6f-A76B-EDED7DD7B0A5\") ",
    "tags": null,
    "categories": ["FAST for SharePoint","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/03/new-theme/",
    "title": "New theme",
    "date_published": "2012-03-11T00:10:15Z",
    "description": "Starting from today melcher.it has a new look. My new template is metro-styled and its based on this codeplex template.",
    "content": "Starting from today melcher.it has a new look. My new template is metro-styled and its based on this codeplex template.\n",
    "tags": null,
    "categories": ["Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/02/fast-open-librarylocation-in-fast-for-sharepoint-search-results/",
    "title": "FAST: Open Library/Location in FAST for SharePoint search results",
    "date_published": "2012-02-20T17:25:51Z",
    "description": "Recently I read a blog post how to customize the core result webpart - thats the webpart showing the results after you do a search with SharePoint 2010. The the output was modified so that you can click on a link to open the library/folder containing the document you searched - quite handy in my eyes.\nSharePoint Search The solution for SharePoint search is quite easy, just add\n\u0026lt;xsl:if test=\u0026#34;isdocument = \u0026#39;True\u0026#39;\u0026#34;\u0026gt; \u0026lt;a\u0026gt; \u0026lt;xsl:attribute name=\u0026#34;href\u0026#34;\u0026gt; \u0026lt;xsl:value-of select=\u0026#34;sitename\u0026#34;/\u0026gt; \u0026lt;/xsl:attribute\u0026gt; View Folder \u0026lt;/a\u0026gt; \u0026lt;/xsl:if\u0026gt; and you are good to go (more details in the mentioned blog post).",
    "content": "Recently I read a blog post how to customize the core result webpart - thats the webpart showing the results after you do a search with SharePoint 2010. The the output was modified so that you can click on a link to open the library/folder containing the document you searched - quite handy in my eyes.\nSharePoint Search The solution for SharePoint search is quite easy, just add\n\u0026lt;xsl:if test=\u0026#34;isdocument = \u0026#39;True\u0026#39;\u0026#34;\u0026gt; \u0026lt;a\u0026gt; \u0026lt;xsl:attribute name=\u0026#34;href\u0026#34;\u0026gt; \u0026lt;xsl:value-of select=\u0026#34;sitename\u0026#34;/\u0026gt; \u0026lt;/xsl:attribute\u0026gt; View Folder \u0026lt;/a\u0026gt; \u0026lt;/xsl:if\u0026gt; and you are good to go (more details in the mentioned blog post).\nThe Problem If you are doing the same thing with FAST for SharePoint (FS4SP) it does not work. The propertysitename is not filled with the location of the document, the FAST crawler extracts, what it should - the sitename.\nThe Solution So I started up Visual Studio, copied the xslt and the search result xml and created a little xslt function to extract the path to a document and to show a link:\n\u0026lt;!-- changes for Open Library--\u0026gt; \u0026lt;div class=\u0026#34;{$docPreviewStyle} srch-Metadata2\u0026#34; style=\u0026#34;margin-bottom:20px;\u0026#34;\u0026gt; \u0026lt;xsl:if test=\u0026#34;isdocument = \u0026#39;True\u0026#39;\u0026#34;\u0026gt; \u0026lt;a\u0026gt; \u0026lt;xsl:attribute name=\u0026#34;href\u0026#34;\u0026gt; \u0026lt;xsl:call-template name=\u0026#34;build-location-link\u0026#34;\u0026gt; \u0026lt;xsl:with-param name=\u0026#34;list\u0026#34; select=\u0026#34;path\u0026#34; /\u0026gt; \u0026lt;/xsl:call-template\u0026gt; \u0026lt;/xsl:attribute\u0026gt; View Location \u0026lt;/a\u0026gt; \u0026lt;/xsl:if\u0026gt; \u0026lt;/div\u0026gt; In the xstl search for the comment \u0026ldquo;\u0026lt;!- END Additional links -\u0026gt;\u0026rdquo; - add my code after the closing \u0026lt;div\u0026gt;, thats arround row number 655.\nThen add the template \u0026ldquo;build-location-link\u0026rdquo; close to the end of the xslt. I added mine right before the comment \u0026ldquo;\u0026lt;!- End of Stylesheet -\u0026gt;\u0026rdquo;. That should be line number 968.\n\u0026lt;xsl:template name=\u0026#34;build-location-link\u0026#34;\u0026gt; \u0026lt;xsl:param name=\u0026#34;list\u0026#34; /\u0026gt; \u0026lt;xsl:variable name=\u0026#34;first\u0026#34; select=\u0026#34;substring-before($list, \u0026#39;/\u0026#39;)\u0026#34; /\u0026gt; \u0026lt;xsl:variable name=\u0026#34;remaining\u0026#34; select=\u0026#34;substring-after($list, \u0026#39;/\u0026#39;)\u0026#34; /\u0026gt; \u0026lt;xsl:value-of select=\u0026#34;$first\u0026#34; /\u0026gt;/\u0026lt;xsl:if test=\u0026#34;substring-after($remaining, \u0026#39;/\u0026#39;)\u0026#34;\u0026gt; \u0026lt;xsl:call-template name=\u0026#34;build-location-link\u0026#34;\u0026gt; \u0026lt;xsl:with-param name=\u0026#34;list\u0026#34; select=\u0026#34;$remaining\u0026#34; /\u0026gt; \u0026lt;/xsl:call-template\u0026gt; \u0026lt;/xsl:if\u0026gt; \u0026lt;/xsl:template\u0026gt; The result should look like this:\nIn my eyes the xslt is not the most elegant solution (any way to remove the recursion with xslt?) - but - I tested it in several installations now - the users loves it!\nIf you have trouble copy/paste all out of this file: FAST Open Library XSLT.\nFurther improvements? So how did you modify the search results - any modifications worth to share?\n",
    "tags": null,
    "categories": ["FAST for SharePoint","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/01/wishlist-sharepoint-2013/",
    "title": "Wishlist: SharePoint 2013",
    "date_published": "2012-01-31T12:15:16Z",
    "description": "Yesterday the SharePoint 2013 SDK (Preview) was released and that made me thinking:\nWhat are my wishes for SharePoint 2013 FAST for SharePoint as Service Application That\u0026rsquo;s my top wish. Easier provisioning of FAST and easier (cheaper :)) licensing, e.g. coupled with ECALs, would help FS4SP to cover more ground. The same applies to Reporting Services with SQL 2012 (Denali) so I think my wish could come true. jQuery Integration (no silverlight anymore!",
    "content": "Yesterday the SharePoint 2013 SDK (Preview) was released and that made me thinking:\nWhat are my wishes for SharePoint 2013 FAST for SharePoint as Service Application That\u0026rsquo;s my top wish. Easier provisioning of FAST and easier (cheaper :)) licensing, e.g. coupled with ECALs, would help FS4SP to cover more ground. The same applies to Reporting Services with SQL 2012 (Denali) so I think my wish could come true. jQuery Integration (no silverlight anymore! ) Drag and Drop everywhere More ajax / WCF-Webservices Metro-Style MasterPages Better Linq for SharePoint Support impersonation! Powershell everywhere Configuring something in the Central Administration and the option to get the configuration changes as a powershell script - would love it! I heard somewhere that\u0026rsquo;s the way Exchange does it… More wishes to come I think that\u0026rsquo;s a good start, I will update the post with more wishes over time.\nHow about your wishes? Share them please! ",
    "tags": null,
    "categories": ["FAST for SharePoint","SharePoint 2013"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/01/patch-cumulative-update-december-2011/",
    "title": "Patch: Cumulative Update December 2011",
    "date_published": "2012-01-27T08:06:54Z",
    "description": "I installed a new SharePoint demo and developing environment on my notebook and started with the slip-streamed installation of SharePoint with SP1 included.\nAfter configuring everything I tried to upload some Pictures to the UserProfiles I created in my Active Directory (synchronization did work!!!) but I got faced with this nice error:\nMethod not found: 'System.String Microsoft.Office.Server.UserProfiles.UserProfileGlobal.GetImportPhotoFolderName(System.Globalization.CultureInfo)'. I really love the User Profile Service I did some research and found out that the SharePoint 2010 Cumulative Update December 2012 should fix some problems of the User Profile Service (still wondering why this could pass the quality control…).",
    "content": "I installed a new SharePoint demo and developing environment on my notebook and started with the slip-streamed installation of SharePoint with SP1 included.\nAfter configuring everything I tried to upload some Pictures to the UserProfiles I created in my Active Directory (synchronization did work!!!) but I got faced with this nice error:\nMethod not found: 'System.String Microsoft.Office.Server.UserProfiles.UserProfileGlobal.GetImportPhotoFolderName(System.Globalization.CultureInfo)'. I really love the User Profile Service I did some research and found out that the SharePoint 2010 Cumulative Update December 2012 should fix some problems of the User Profile Service (still wondering why this could pass the quality control…).\n1. The\u0026nbsp;UserProfileManager.GetUserProfile\u0026nbsp;method returns incorrect user profiles in SharePoint Server 2010. 2. An administrator cannot upload a user’s profile picture to Central Administration in SharePoint Server 2010. Additionally, the administrator receives the following error message: There was an error saving the picture. Please try again later. It works! So after 3 times downloading the 1.1gb uber-patch (it includes the SharePoint Foundation updates and the languages packs) I started the updated and … waited. I really dont know how long it took to update, after 30 Minutes of no progress I decided to go to bed - this morning I saw the update was successfully installed. After that I rebooted.\nRemember: After the update you have to run\npsconfig -cmd upgrade -inplace b2b -wait or the SharePoint Configuration Wizard to update the Content-DBs and get every other bit updated.\nDownload Read the KB first. Only download and install the CU after carefully testing it on a TEST system:\nKB: http://support.microsoft.com/default.aspx?scid=kb;EN-US;2597014\nDownload: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2597014\u0026amp;kbln=en-us Any other experiences with this CU? Please feel free to share it in the comments, would love it!\n",
    "tags": null,
    "categories": ["SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/01/fast-for-sharepoint-build-numbers/",
    "title": "Fast for SharePoint: Build \u0026 version numbers",
    "date_published": "2012-01-26T22:26:49Z",
    "description": "Ever wondered what FAST for SharePoint (FS4SP) version is currently installed? Ever checked if every server in the search cluster has the same version?\nCheck the version! The best approach is - open \u0026ldquo;Program and Features\u0026rdquo; and check the version there:\nWith \u0026ldquo;View installed updates\u0026rdquo; you can even see if Cumulative Updates have been installed.\nPlease be aware that not all files are updated after a patch so the versions in other files or tools can be different.",
    "content": "Ever wondered what FAST for SharePoint (FS4SP) version is currently installed? Ever checked if every server in the search cluster has the same version?\nCheck the version! The best approach is - open \u0026ldquo;Program and Features\u0026rdquo; and check the version there:\nWith \u0026ldquo;View installed updates\u0026rdquo; you can even see if Cumulative Updates have been installed.\nPlease be aware that not all files are updated after a patch so the versions in other files or tools can be different.\nThe stale \u0026ldquo;version.xml\u0026rdquo; If you stumble accross the\\etc\\version.xml (e.g. C:\\FASTSearch\\etc\\version.xml) file you can see the version number - but its not updated even if you install SP1.\nFAST for SharePoint versio.xml Versions (incomplete, to be continued): FAST For SharePoint Versions/Builds Version \u0026lt;th\u0026gt; Description \u0026lt;/th\u0026gt; 14.0.4763.1000 \u0026lt;td\u0026gt; FAST for SharePoint RTM \u0026lt;/td\u0026gt; 14.0.6029.1000 \u0026lt;td\u0026gt; FAST for SharePoint Service Pack 1 \u0026lt;/td\u0026gt; 14.0.6029.1000 \u0026lt;td\u0026gt; FAST for SharePoint Service Pack 1 with CU June 2011 \u0026lt;/td\u0026gt; As you can see there is no version difference between SP1 and CU June 2011.\nDid I miss a version? Cumulative Updates anyone? Update 1 (30.01.2012) As mentioned by Dan in the comments its better to directly check Programs and Features. I updated the post, thanks Dan!\n",
    "tags": null,
    "categories": ["FAST for SharePoint","SharePoint 2010","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/01/tools-cksdev-the-first-tool-i-always-install/",
    "title": "Tools: CKSDev – the first tool I always install",
    "date_published": "2012-01-07T13:10:48Z",
    "description": "If you do SharePoint 2010 development and you haven\u0026rsquo;t used this plugin for Visual Studio you have really missed a jewel:\nCKSDev - Community Kit for SharePoint: Development Tools Edition\n",
    "content": "If you do SharePoint 2010 development and you haven\u0026rsquo;t used this plugin for Visual Studio you have really missed a jewel:\nCKSDev - Community Kit for SharePoint: Development Tools Edition\nKey Features: Copy Assembly Name: Quickly get the Assembly name with namespace and everything, e.g. \u0026ldquo;DCR.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bca0ae98ad91855f\u0026rdquo; Sandbox Compile: Compile against the Sandbox Object Model, if that works you can be more certain that you only use methods that are allowed within the sandbox Generate Entity Classes: Generate the SPMetal (Linq to SharePoint) entities. That is great for small projects - in bigger scenarios you have to use the spmetal.exe to create it (it does not support namespacing or exclude list etc) Several new Visual Studio templates: Sandboxed Visual Web Part (try to build one by yourself! 🙂 ), Custom Actions for the ribbon, SharePoint Console Application (includes the references to SharePoint etc). Quick deploy context commands: I LOVE THOSE. Create a Visual Web Part, change something in the declarative parts or in the JavaScript and quick deploy it (this copies the files to the SharePoint 14 folder) - refresh the browser and you see the changes. No deploy, no IIS app recycle - no wait time! There are several more quick deploy commands and there are keyboard hotkeys for the actions. There are several more features - please visit the project site, maybe there is a more recent version by now. Why I love the plugin: It really speeds up my daily work - quick \u0026ldquo;deploy\u0026rdquo; is awesome same is \u0026ldquo;attach to all SharePoint processes\u0026rdquo; for debugging!\nHow to get it: CKSDev.codeplex.com or in the Visual Studio Extension:\nI am a plugin hunter! So whats your favorite Plugin/Tool for SharePoint?\n",
    "tags": null,
    "categories": ["Development","SharePoint 2010","Tools"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2012/01/accessing-central-administration-with-google-chrome/",
    "title": "Accessing Central Administration with Google Chrome",
    "date_published": "2012-01-04T18:30:30Z",
    "description": "When accessing Central Administration with Google Chrome you will get the following:\n\"This webpage is unavailable\" with the description:\nError 312 (net::ERR_UNSAFE_PORT): Unknown error. In order to fix that edit the Properties of the Chrome link and append the following to the \u0026ldquo;target\u0026rdquo; value:\n--explicitly-allowed-ports=42 where 42 is the port for your Central Administration. You can add more ports if you want, in total it should like this:\nC:\\Users\\mmelcher\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe --explicitly-allowed-ports=42,84,87 Still dont like it - ports are not unsafe by default - but at least there is an option to allow it.",
    "content": "When accessing Central Administration with Google Chrome you will get the following:\n\"This webpage is unavailable\" with the description:\nError 312 (net::ERR_UNSAFE_PORT): Unknown error. In order to fix that edit the Properties of the Chrome link and append the following to the \u0026ldquo;target\u0026rdquo; value:\n--explicitly-allowed-ports=42 where 42 is the port for your Central Administration. You can add more ports if you want, in total it should like this:\nC:\\Users\\mmelcher\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe --explicitly-allowed-ports=42,84,87 Still dont like it - ports are not unsafe by default - but at least there is an option to allow it. Dont you think?\n",
    "tags": null,
    "categories": ["Misc","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2011/11/basics-make-datasheet-view-working-with-office-2010/",
    "title": "Basics: Make Datasheet View working with Office 2010",
    "date_published": "2011-11-22T11:42:29Z",
    "description": "If you ever had problems running the datasheet view with one of the following reasons:\nA datasheet component that is compatible with Windows SharePoint Services is not installed. A Microsoft Office 2003 Professional edition is not installed on the computer. The Web browser does not support ActiveX controls. Support for ActiveX controls is disabled. Try installing the old Office components:\nhttp://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891\u0026amp;displaylang=en",
    "content": "If you ever had problems running the datasheet view with one of the following reasons:\nA datasheet component that is compatible with Windows SharePoint Services is not installed. A Microsoft Office 2003 Professional edition is not installed on the computer. The Web browser does not support ActiveX controls. Support for ActiveX controls is disabled. Try installing the old Office components:\nhttp://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891\u0026amp;displaylang=en\n",
    "tags": null,
    "categories": ["Misc","Uncategorized"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2011/09/sharecamp-2011-sharepoint-2010-best-tools/",
    "title": "ShareCamp 2011: SharePoint 2010 “Best Tools”",
    "date_published": "2011-09-07T06:29:01Z",
    "description": "Due to the data loss I just upload the slides.",
    "content": "Due to the data loss I just upload the slides.\n",
    "tags": null,
    "categories": ["SharePoint 2007","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2011/09/error-occurred-in-deployment-step-recycle-iis-application-pool-provider-load-failure/",
    "title": "Error occurred in deployment step ‘Recycle IIS Application Pool’: Provider load failure",
    "date_published": "2011-09-05T20:59:55Z",
    "description": "Try the following:\nRestart Windows Management Instrumentation service. Restart Visual Studio iisreset Hopefully it helps - usually it does for me. ",
    "content": "Try the following:\nRestart Windows Management Instrumentation service. Restart Visual Studio iisreset Hopefully it helps - usually it does for me. ",
    "tags": null,
    "categories": ["SharePoint 2007","SharePoint 2010"],
    "feature": "/melcher.dev.png"
  },
  {
    "url": "https://melcher.dev/2011/08/blog-still-in-recovery/",
    "title": "Blog still in recovery",
    "date_published": "2011-08-28T22:07:38Z",
    "description": "Due to a hoster failure (servcity.de went bankrupt) my blog is currently without content. I am working on it.",
    "content": "Due to a hoster failure (servcity.de went bankrupt) my blog is currently without content. I am working on it.\n",
    "tags": null,
    "categories": ["Uncategorized"],
    "feature": "/melcher.dev.png"
  }]