<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tech on Matt Thornton</title>
    <link>https://matt-thornton.net/categories/tech/</link>
    <description>Recent content in Tech on Matt Thornton</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sun, 07 Sep 2025 12:20:29 +0000</lastBuildDate><atom:link href="https://matt-thornton.net/categories/tech/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Quick fix for Homepod Mini setup</title>
      <link>https://matt-thornton.net/tech/homepod-mini-setup/</link>
      <pubDate>Sun, 07 Sep 2025 12:20:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/homepod-mini-setup/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m experimenting with trying to remove Sonos. That&amp;rsquo;s a story for another time.&lt;/p&gt;
&lt;p&gt;But a part of that is switching my smart speakers over to Apple Homepod and Homepod Mini. I already have a few around the place, and they work well with Homekit and Siri.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://matt-thornton.net/images/posts/homepodmini.png&#34; alt=&#34;Homepod Mini&#34;&gt;&lt;/p&gt;
&lt;p&gt;I already had one Homepod Mini in my office, but to replace the two Sonos One, an extra Homepod Mini to create a stereo pair was a non-negotiable. As it happened, I had one on the shelf (I tend to pick them up if I see them being sold secondhand&amp;hellip;) - this one was actually brand new and never used. Nice.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Installing Windows 11 in 2025</title>
      <link>https://matt-thornton.net/tech/win11-in-2025/</link>
      <pubDate>Sat, 01 Mar 2025 12:20:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/win11-in-2025/</guid>
      
        <description>&lt;p&gt;I am very much a macOS person but having just gone through the rigmarole of installing a new Windows 11 PC I wanted to document a couple of things.&lt;/p&gt;
&lt;p&gt;The machine is not modern and is being repurposed as a first gaming PC for the house - i.e., Steam, hence needing Windows in place of macOS.&lt;/p&gt;
&lt;p&gt;The components were fortunately &lt;em&gt;just&lt;/em&gt; modern enough to allow Win11 to install by enabling TPM in the BIOS in the usual way. The Windows installer has come a long way since the last time I&amp;rsquo;ve had to do this and must say that other than the points noted below, it was relatively painless. Really just next next finish.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>(Nintex) Workflows failed to run (after security patching) (again)</title>
      <link>https://matt-thornton.net/tech/nintex-workflows-fail-to-run-after-security-patch-update-part-2/</link>
      <pubDate>Wed, 29 Jan 2025 12:20:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/nintex-workflows-fail-to-run-after-security-patch-update-part-2/</guid>
      
        <description>&lt;p&gt;If you enjoyed the &lt;a href=&#34;https://matt-thornton.net/tech/nintex-workflows-fail-to-run-after-security-patch-update&#34;&gt;first exciting instalment of this series on Nintex workflows in SharePoint failing to run after security patching&lt;/a&gt; and were sad that that was seemingly the end of it, then DON&amp;rsquo;T WORRY! BECAUSE IT&amp;rsquo;S BACK.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s right, just when you thought all was fine and hunky-dory in the world, your friendly IT service providers once again went ahead and did some more server patching and once again went ahead and managed to knacker Nintex workflows. Specifically workflows using the state machine activity with the observed behaviour being that workflows simply would never reinflate after switching state.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>AI Test - defeat Excel / me</title>
      <link>https://matt-thornton.net/tech/ai-test-excel-vs-me/</link>
      <pubDate>Tue, 05 Nov 2024 19:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/ai-test-excel-vs-me/</guid>
      
        <description>&lt;p&gt;I recently helped a client with a lovely annual return to our friendly local regulator.&lt;/p&gt;
&lt;p&gt;It required some numbers (from a SQL query) to be put in some boxes (yep, in Excel 🤐) against a list of 251 countries.&lt;/p&gt;
&lt;p&gt;The row heights had been shrunken and the column widths strangely embiggened so that a manual cross-referencing-and-copying into the spreadsheet was a time-consuming and error-prone task.&lt;/p&gt;
&lt;p&gt;You could copy &amp;amp; paste into the relevant column (indeed the guidance encouraged it!) but for this to work you would need the full precise list of countries in the correct order&amp;hellip; except you couldn&amp;rsquo;t extract this list from the spreadsheet since the entire workbook was locked down - locked cells and then password protected. No dice.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Stop using LLMs for generating content</title>
      <link>https://matt-thornton.net/tech/dont-use-LLMs-for-generating-content/</link>
      <pubDate>Sun, 20 Oct 2024 12:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/dont-use-LLMs-for-generating-content/</guid>
      
        <description>&lt;p&gt;Much of the fear surrounding the growth of AI, is the potential (and perceived) threat of machines replacing humans. This is intuitively not an unreasonable fear to hold (despite there being little in the way of evidence to support it&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.)&lt;/p&gt;
&lt;p&gt;In August 2024, around the time of the Olympics, Google were forced to &lt;a href=&#34;https://www.cnbc.com/2024/08/02/google-pulls-ai-ad-for-olympics-following-backlash.html&#34;&gt;pull an advert&lt;/a&gt; for Gemini that &lt;a href=&#34;https://www.youtube.com/watch?v=NgtHJKn0Mck&#34;&gt;depicted&lt;/a&gt; a child writing a fan letter to their sports hero. The public backlash was brutal. &amp;ldquo;This is not what AI is for&amp;rdquo; was the general sentiment.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>AGC Conference 2024 - 12 months in AI</title>
      <link>https://matt-thornton.net/tech/summary-of-agc-ai-talk-2024/</link>
      <pubDate>Sat, 12 Oct 2024 12:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/summary-of-agc-ai-talk-2024/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.charity.org.gg/&#34;&gt;Association of Guernsey Charities&lt;/a&gt; hold an annual conference for the members where they meet and discuss all sorts within the charitable sector in Guernsey. This includes a series of talks, workshops and focus groups.&lt;/p&gt;
&lt;p&gt;I was asked to present in 2023 on the topic of AI - specifically how charities can start using AI to help them. I elected to broaden the talk to also cover the effective use of SaaS as well as AI. They asked me back in 2024 to give an update.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>(Nintex) Workflows failed to run (after security patching)</title>
      <link>https://matt-thornton.net/tech/nintex-workflows-fail-to-run-after-security-patch-update/</link>
      <pubDate>Wed, 25 Sep 2024 12:20:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/nintex-workflows-fail-to-run-after-security-patch-update/</guid>
      
        <description>&lt;p&gt;It&amp;rsquo;s been a while&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; since I&amp;rsquo;ve had to debug obscure SharePoint issues but hey ho, my life remains a rollercoaster of excitement.&lt;/p&gt;
&lt;p&gt;A client environment recently had the following updates and cumulative updates applied, which including their SharePoint 2016 Enterprise infrastructure.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KB5043051 - 2024-09 CU&lt;/li&gt;
&lt;li&gt;KB5043124 - 2024-09 Servicing Stack Update&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.microsoft.com/en-gb/topic/description-of-the-security-update-for-sharepoint-enterprise-server-2016-september-10-2024-kb5002624-db6c8b15-b9e8-4fa5-a34a-b99a0341271e&#34;&gt;KB5002624&lt;/a&gt; - Security Update for MS Sharepoint Enterprise Server 2016 (Description of the security update for SharePoint Enterprise Server 2016: September 10, 2024 (KB5002624) - Microsoft Support)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KB5002624 comes with &amp;lsquo;known issues&amp;rsquo; that it might knacker workflows:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Why we removed all LLM-generated content from cortex.gg</title>
      <link>https://matt-thornton.net/tech/ai-content-removed/</link>
      <pubDate>Wed, 07 Aug 2024 12:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/ai-content-removed/</guid>
      
        <description>&lt;p&gt;Yes. OK. I admit it.&lt;/p&gt;
&lt;p&gt;When ChatGPT burst in to the scene 18 months ago I was amazed as anyone else. The speed at which it could produce words! And words that vaguely seemed to make some sort of believable sense! Incredible.&lt;/p&gt;
&lt;p&gt;We all got excited by the prospect; washed adrift in the hype and excitement of it all. It&amp;rsquo;s no wonder the seismic shift it created in the public consciousness.&lt;/p&gt;
&lt;p&gt;Within a short while of ChatGPT being generally available, all channels - social, blog, online, offline and further were awash with LLM-generated content.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Blazordle - a Wordle solver (and some JetBrains AI Assistant)</title>
      <link>https://matt-thornton.net/tech/blazordle-a-wordle-solver/</link>
      <pubDate>Tue, 12 Dec 2023 21:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/blazordle-a-wordle-solver/</guid>
      
        <description>&lt;p&gt;I love words. And puzzles. And logic. And so &lt;a href=&#34;https://www.nytimes.com/games/wordle/&#34;&gt;Wordle&lt;/a&gt; is right up there for me. Not in a &amp;lsquo;posting it on Twitter&amp;rsquo; sort of a way, though. Something about the simplicity of the gameplay and the English language (and the success story of a simple viral app, of course) is just cool. Right?&lt;/p&gt;
&lt;p&gt;But it only recently occurred to me - what it would be like to write a solver for it&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;? How hard would it be? Not because I need or wanted a solver to help play the game, but simply because I was intrigued by the complexity. It was also a decent excuse to write some code, something I don&amp;rsquo;t get to do a lot nowadays, and maybe a chance to play with some shiny things in .NET8 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. And also the recently announced AI Assistant in JetBrains Rider&amp;hellip; could I write my usual janky code and then have an AI smarten it up right nice?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Plausible proxy in Azure App Service</title>
      <link>https://matt-thornton.net/tech/plausible-proxy-in-azure-app-service/</link>
      <pubDate>Mon, 27 Nov 2023 21:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/plausible-proxy-in-azure-app-service/</guid>
      
        <description>&lt;p&gt;We use the excellent &lt;a href=&#34;https://plausible.io&#34;&gt;Plausible Analytics&lt;/a&gt; for tracking and analytics on the majority of our websites (including this one!)&lt;/p&gt;
&lt;p&gt;This is in a &lt;a href=&#34;https://plausible.io/vs-google-analytics&#34;&gt;direct and conscious alternative&lt;/a&gt; to Google Analytics. However, there is a known issue with all tracking scripts is that they can be blocked either by the browser or by plugins. Plausible are doing what they can to convince the maintainers of those &lt;a href=&#34;https://plausible.io/docs/proxy/introduction&#34;&gt;products to stop blocking&lt;/a&gt; but on the basis that blocking can account for anywhere from 5% to 25% of tracking, it&amp;rsquo;s something that needs a more immediate fix. There used to be a workaround which meant hosting the script on a sub-domain (using DNS/CNAME) but apparently this is no longer reliable.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Resetting a Raspberry Pi root password</title>
      <link>https://matt-thornton.net/tech/resetting-a-raspberry-pi-password/</link>
      <pubDate>Mon, 25 Sep 2023 12:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/resetting-a-raspberry-pi-password/</guid>
      
        <description>&lt;p&gt;Quick tip, because I cannot recall how many times I&amp;rsquo;ve had to do this.&lt;/p&gt;
&lt;p&gt;Despite being fairly rigorous about using a password manager &lt;strong&gt;whenever&lt;/strong&gt; I create a password for &lt;em&gt;something&lt;/em&gt;, I haven&amp;rsquo;t been able to break the bad habit of whenever I (re-)provision a &lt;a href=&#34;https://matt-thornton.net/tech/building-a-webcam-on-a-pi-setting-up/&#34;&gt;Raspberry Pi&lt;/a&gt; for something, whilst I do invariably remember to change the default username and password but I also  invariably forget to write down what I changed them to. Sub-ideal.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s reasonably easy to just reflash and start over, but sometimes you really don&amp;rsquo;t want to have to do that.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a website with AI - the state of ChatGPT</title>
      <link>https://matt-thornton.net/tech/building-a-website-with-ai/</link>
      <pubDate>Sun, 03 Sep 2023 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-website-with-ai/</guid>
      
        <description>&lt;p&gt;A few months ago, at the start of what should&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; have been a glorious Guernsey summer, I published a new website - &lt;a href=&#34;https://dipndine.gg&#34;&gt;DipNDine.gg&lt;/a&gt;. What&amp;rsquo;s more, ChatGPT wrote ~80% of the code for me.&lt;/p&gt;
&lt;p&gt;The site was as much a personal hobby thing as it was an evaluation of just what could be achieved with ChatGPT. I mean, everyone loves a Dip and Dine right? (If you need to ask what a DnD is then please go to the site and find out!) I&amp;rsquo;d had the idea to publish the various locations that you can Dip and Dine in the Bailiwick of Guernsey for a number of years but it was just never quite high enough up the priority list to actually get done. There were some challenges - assembling the data about the locations, some technical challenges that I wanted to have a go at&amp;hellip; and, well, you know - time, life. It&amp;rsquo;s difficult.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Coding with an AI Sidekick - How ChatGPT Facilitated the Creation of DipnDine.gg</title>
      <link>https://matt-thornton.net/tech/building-a-website-with-ai-intro/</link>
      <pubDate>Sun, 03 Sep 2023 22:45:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-website-with-ai-intro/</guid>
      
        <description>&lt;p&gt;&lt;em&gt;Note: This is the first post about creating a website using ChatGPT. The below was entirely generated by ChatGPT and is, as you will agree, utter bollocks. Part 2 talks through it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the bustling and ever-evolving world of technology, building a website from scratch can sometimes feel like a daunting task. With numerous technological frameworks and libraries at your disposal, choosing the right ones and integrating them seamlessly can be overwhelming. This is the story of how I harnessed the power of ChatGPT to streamline the process of creating a successful website, DipnDine.gg, a dynamic platform that has remarkably benefitted from the prowess of AI in coding with technologies like Tailwind CSS and Leaflet.js. Here, I recount my journey and share insights on how the synergy of human creativity and artificial intelligence can revolutionize web development.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Atomstack A5 Laser on macOS Catalina and LightBurn</title>
      <link>https://matt-thornton.net/tech/atomstack-a5-laser-macos-lightburn/</link>
      <pubDate>Tue, 29 Aug 2023 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/atomstack-a5-laser-macos-lightburn/</guid>
      
        <description>&lt;p&gt;Of all the many, mnay toys on my &amp;rsquo;to buy&amp;rsquo; list, a laser engraver definitely wasn&amp;rsquo;t one of them. I&amp;rsquo;ve had mixed success with 3d printing in the past, and whilst I&amp;rsquo;ve often thought a CNC could be fun, despite the appeal of burning things with fire and the occasional Austin Powers reference to frickin&amp;rsquo; laser beams, engraving with lasers has never been high up my priority list.&lt;/p&gt;
&lt;p&gt;So when an Atomstack A5 randomly showed up on Facebook marketplace, the inevitable happened. The seller had actually made a nice little side hustle doing personalised gifts and such like so there was maybe even a vague chance of recouping the cost and turning it in to something. Haha, yeah right, but hey whatever helps to justify it. With my motto&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; of &amp;lsquo;why let being sensible stand in the way of an opportunity to buy new dangerous tools&amp;rsquo; the purchase was made and a rather spangly new frickin&amp;rsquo; laser beam made its way in to my possession.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a Webcam on a Raspberry Pi - the Code</title>
      <link>https://matt-thornton.net/tech/building-a-webcam-on-a-pi-code/</link>
      <pubDate>Wed, 28 Jun 2023 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-webcam-on-a-pi-code/</guid>
      
        <description>&lt;p&gt;The code is all in Python is not that complicated. If you followed my previous guide on &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-with-python-episode-3/&#34;&gt;beginning web scraping with Python&lt;/a&gt; then there will be nothing here to catch you out.&lt;/p&gt;
&lt;p&gt;The flow is reasonably simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a connection to the camera&lt;/li&gt;
&lt;li&gt;Grab an image&lt;/li&gt;
&lt;li&gt;Store a copy of it (possibly on an external USB stick)&lt;/li&gt;
&lt;li&gt;Watermark that image with something&lt;/li&gt;
&lt;li&gt;Upload it to Azure, always with the same name, so that the website displaying it doesn&amp;rsquo;t need to know the name of the latest file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The solution (moreorless) consists of 2 files:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a Webcam on a Raspberry Pi - Setting Up</title>
      <link>https://matt-thornton.net/tech/building-a-webcam-on-a-pi-setting-up/</link>
      <pubDate>Tue, 27 Jun 2023 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-webcam-on-a-pi-setting-up/</guid>
      
        <description>&lt;p&gt;I had no plans to change the original design, other than performing a little bit of maintenance.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://matt-thornton.net/images/posts/webcam2.jpg&#34; alt=&#34;webcam 2&#34;&gt;&lt;/p&gt;
&lt;p&gt;Given that the Raspbian image on there was now 2 years out of date, it made sense to stick on a fresh copy. So that meant following pretty much my previous guide on &lt;a href=&#34;https://matt-thornton.net/tech/building-a-pihole/&#34;&gt;setting up a Pihole on a Raspberry Pi&lt;/a&gt;, again choosing the Lite OS option, setting up static IPs for eth0 and wlan0 and enabling SSH. The only additional step is in raspi-config and to enable the legacy support for the camera.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a Webcam on a Raspberry Pi - Intro</title>
      <link>https://matt-thornton.net/tech/building-a-webcam-on-a-pi/</link>
      <pubDate>Mon, 26 Jun 2023 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-webcam-on-a-pi/</guid>
      
        <description>&lt;p&gt;A couple of years ago, peering lustfully out the back door of the 4th floor &lt;a href=&#34;https://cortex.gg&#34;&gt;Cortex&lt;/a&gt; offices, I spotted an unusual sight - a plug on a roof top:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://matt-thornton.net/images/posts/webcam1.jpg&#34; alt=&#34;webcam 1&#34;&gt;&lt;/p&gt;
&lt;p&gt;What could that be for? I wondered.&lt;/p&gt;
&lt;p&gt;More precisely&amp;hellip; what could that be &lt;em&gt;used&lt;/em&gt; for? I immediately started thinking. Well, given the glorious view behind said roof top, it seemed pretty obvious that we could stick a webcam up there.&lt;/p&gt;
&lt;p&gt;Something connected via wifi to our office network should do the trick. Since we are on a metered internet connection, I didn&amp;rsquo;t want to put something up that would completely flatten our internet connection, especially if a few people started using it, so I figured something that would periodically take an image and upload it to our storage CDN on Azure would be fine.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a PiHole on a Raspberry Pi</title>
      <link>https://matt-thornton.net/tech/building-a-pihole/</link>
      <pubDate>Tue, 08 Nov 2022 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/building-a-pihole/</guid>
      
        <description>&lt;p&gt;&lt;a href=&#34;https://pi-hole.net/&#34;&gt;Pi-Hole&lt;/a&gt; should need little by way of introduction. If you know what it is, happy days. If you don&amp;rsquo;t know what it is, then read on to find out why you need one.&lt;/p&gt;
&lt;p&gt;In summary, it&amp;rsquo;s a hardware-based traffic blocker for a network.&lt;/p&gt;
&lt;p&gt;In technical terms, it becomes a DNS proxy for your network - all your traffic flows through it, and it cleanses out a lot of the ads and other scummy shit that you don&amp;rsquo;t want to see.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Samsung M8 Smart Monitor review</title>
      <link>https://matt-thornton.net/tech/samsung-m8/</link>
      <pubDate>Tue, 04 Oct 2022 08:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/samsung-m8/</guid>
      
        <description>&lt;p&gt;&lt;a href=&#34;https://www.theregister.com/2022/10/03/samsung_m8_smart_monitor_review/&#34;&gt;This article&lt;/a&gt; popped up with a review of the Samsung M8 Smart Monitor. The review itself seemed pretty fair, but as is reasonable for The Reg, the comments were ablaze with people slating the device, despite it being pretty likely that none of them actually has one of these. As it happens, I do, so I decided to leave a comment, which seemed to make sense to reproduce here.&lt;/p&gt;
&lt;p&gt;My use case was pretty specific - I have a 49&amp;quot; LG ultrawide already (so not exactly short of screen real estate) but there are some occasions having the screen physically separate makes sense. If I&amp;rsquo;m working late then I tend to like to have something &amp;lsquo;on&amp;rsquo; in the background&amp;hellip; e.g., sports, some other low commitment event that I can flick eyes to when necessary but otherwise focus on the main display, and having something I can occasionally beam to from the main computer would be a bonus, and also connect another computer/laptop/device from time to time.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Can AI ever be sentient? On LaMDA and the wider debate</title>
      <link>https://matt-thornton.net/general/can-ai-ever-be-sentient/</link>
      <pubDate>Thu, 23 Jun 2022 09:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/general/can-ai-ever-be-sentient/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re reading this then chances are you already well aware of the recent AI-themed issue: operator of Google-owned LaMDA, Blake Lemoine, was suspended from his job for claiming that his AI was sentient.
(Well actually, he was suspended for sharing company secrets, in the form of the chat transcript.)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not up to speed, then you won&amp;rsquo;t have to look far to find the story. I first read about it on &lt;a href=&#34;https://www.theregister.com/2022/06/13/google_lamda_sentient_claims/&#34;&gt;The Register&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The huge interest initially was sparked because of Google&amp;rsquo;s handling of the situation - everyone loves a little-person-vs-big-corp scenario but everyone soon got bored of that and then piled in on the actual claims - was the chatbot indeed sentient?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Moving my Music library to a NAS - update</title>
      <link>https://matt-thornton.net/general/i-finally-moved-my-music-library-to-a-nas-part-2/</link>
      <pubDate>Wed, 15 Jun 2022 09:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/general/i-finally-moved-my-music-library-to-a-nas-part-2/</guid>
      
        <description>&lt;p&gt;Quick update on this as I&amp;rsquo;ve just migrated to a new Mac. For some reason I opted to do a sort of half-half job using the Mac migration assistant which, I may write about separately, because ultimately it&amp;rsquo;s been a bit of a mission to do this.&lt;/p&gt;
&lt;p&gt;One issue was how to get Music set up on the new Mac. The music library on the NAS is fine and nicely organised but despite the media itself being somewhere else, the Mac still relies on a file called &amp;lsquo;Music Library&amp;rsquo; (by default) which is effectively a big list of everything.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>At last a macOS update I can get on board with</title>
      <link>https://matt-thornton.net/tech/macos-15.4-finally</link>
      <pubDate>Fri, 10 Jun 2022 09:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/macos-15.4-finally</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve used &amp;ldquo;the Mac OS&amp;rdquo; for longer than I care to admit but through many, many incarnations over the years. In the early days, you would look forward to the releases/updates of new major versions because they would bring major innovation. But over &lt;em&gt;at least&lt;/em&gt; the last 5 major versions, I&amp;rsquo;ve updated but experienced very little in the way of new functionality that has been of any real use or interest. In most cases, it usually just becomes more irritating to use. I don&amp;rsquo;t begrudge Apple making changes for e.g., security purposes, but I couldn&amp;rsquo;t tell you one new feature over the last 10 years that has genuinely changed the way I work or made me step back and notice.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL - get previous and next rows in one query</title>
      <link>https://matt-thornton.net/tech/mysql-get-previous-next-rows-in-one-query/</link>
      <pubDate>Wed, 23 Mar 2022 14:26:59 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/mysql-get-previous-next-rows-in-one-query/</guid>
      
        <description>&lt;p&gt;Over on the &lt;a href=&#34;https://cortex.gg/blog&#34;&gt;Cortex blog&lt;/a&gt; we have a janky-ass blog system that uses some filthy PHP and MySQL to do news article type things. I wrote it, it&amp;rsquo;s disgusting, we should do better, but it is what it is.&lt;/p&gt;
&lt;p&gt;The plumber&amp;rsquo;s toilet, and all that.&lt;/p&gt;
&lt;p&gt;Pending some time to actually do it properly, we wanted to polish the turd enough that it was semi-functional - and this included having in-post navigation - so that, from a post you could either jump forward or backwards to the post. Much like on this blog. Which Hugo somehow just does automagically.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Hugo escape shortcodes for display</title>
      <link>https://matt-thornton.net/tech/hugo-escape-shortcodes-for-display/</link>
      <pubDate>Thu, 10 Mar 2022 15:18:21 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hugo-escape-shortcodes-for-display/</guid>
      
        <description>&lt;p&gt;In the post on &lt;a href=&#34;https://matt-thornton.net/tech/bootstrap-style-tables-in-hugo-without-bootstrap&#34;&gt;bootstrap style tables in Hugo&lt;/a&gt; I wanted to show the actual shortcodes you needed to create in your templates.&lt;/p&gt;
&lt;p&gt;But in some cases, Hugo was helpfully rendering the shortcode as the actual output, rather than the raw code.&lt;/p&gt;
&lt;p&gt;(This is likely because I have unsafe set to true for historic reasons.)&lt;/p&gt;
&lt;p&gt;You can create code blocks using backticks, e.g.,&lt;/p&gt;
&lt;code&gt;
``` code here ```
&lt;/code&gt;
&lt;p&gt;but if you try and include HTML (or similar), then the tags themselves just disappear:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bootstrap Style Tables in Hugo (without bootstrap...)</title>
      <link>https://matt-thornton.net/tech/bootstrap-style-tables-in-hugo-without-bootstrap/</link>
      <pubDate>Thu, 10 Mar 2022 14:26:59 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/bootstrap-style-tables-in-hugo-without-bootstrap/</guid>
      
        <description>&lt;p&gt;Tables in Markdown are a bit of an anomaly that requires a mish-mash of hypens and pipes. You can get the basics from &lt;a href=&#34;https://www.markdownguide.org/extended-syntax/&#34;&gt;this article at markdownguide&lt;/a&gt;. By default, though, how these then render will depend on your template (and the configured CSS) but it&amp;rsquo;s reasonable to say there&amp;rsquo;s a chance the tables will look a bit shit.&lt;/p&gt;
&lt;p&gt;What if we could have swanky looking tables à la bootstrap? Yep, but what if you don&amp;rsquo;t actually use bootstrap in your theme? You could just use it, but this is almost certainly going to interfere with at least some of your other styling. So what if you could have bootstrap style tables but without actually having bootstrap? Well, yep, that&amp;rsquo;s doable in two-ish, steps.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Migrating Wordpress comments to HashOver for Hugo</title>
      <link>https://matt-thornton.net/tech/migrating-wordpress-comments-to-hashover-for-hugo/</link>
      <pubDate>Wed, 23 Feb 2022 05:26:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/migrating-wordpress-comments-to-hashover-for-hugo/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve briefly covered thoughts around &lt;a href=&#34;https://www.matt-thornton.net/general/hugo-migration-part-2/&#34;&gt;adding a comment system&lt;/a&gt; in to this blog since it was migrated to Hugo.&lt;/p&gt;
&lt;p&gt;I won&amp;rsquo;t rehash the decision making process - but fundamentally I wasn&amp;rsquo;t going to go with Disqus and wanted a simpler solution. There are various options out there and tl;dr I ended up choosing &lt;a href=&#34;https://github.com/jacobwb/hashover&#34;&gt;HashOver&lt;/a&gt;, mostly for the following reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It appeared to be reasonably simple to stand it up completely external to the &amp;lsquo;main&amp;rsquo; site, i.e. in a sub-domain&lt;/li&gt;
&lt;li&gt;It runs on PHP/MySQL which is already available on my host. Other commenting systems needed different stacks which I don&amp;rsquo;t have access to without switching.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Incidentally, HashOver supports other persistence options such as SQLite and even XML which if you wanted to be completely serverless which could be interesting; but as it happens this comment migration process would likely have been a fair whack harder.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Deploying Hugo sites - rclone to the rescue?!</title>
      <link>https://matt-thornton.net/tech/hugo-thoughts-deployment/</link>
      <pubDate>Mon, 07 Feb 2022 05:26:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hugo-thoughts-deployment/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve posted earlier in this series my thoughts and experiences of migrating a Wordpress blog over to Hugo. So far I have not been too favourable although the majority of that is down to the muscle-memory invested in having a browser-based CMS publishing platform and the many conveniences that provides you.&lt;/p&gt;
&lt;p&gt;One of the major teething issues I was having was with the literal publishing process of new content. For a brand new site - it&amp;rsquo;s pretty simple, you create your output and then just SFTP the whole dang lot up to your webhost.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Updated Initial Thoughts on Hugo</title>
      <link>https://matt-thornton.net/tech/hugo-thoughts-updated/</link>
      <pubDate>Sun, 06 Feb 2022 17:26:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hugo-thoughts-updated/</guid>
      
        <description>&lt;h1 id=&#34;update-after-a-few-weeks&#34;&gt;Update after a few weeks&amp;hellip;&lt;/h1&gt;
&lt;p&gt;It&amp;rsquo;s worth prefacing this with a short detour as to why I &lt;s&gt;upgraded&lt;/s&gt; migrated this blog from Wordpress. I&amp;rsquo;ve already published some technical and other reasons for it - performance and security mainly - but the subtext to it all was that I wanted to get back in to blogging - and blogging more regularly.&lt;/p&gt;
&lt;p&gt;For some reason, I had become convinced - possibly persuaded - that doing this in a static file generator such as Hugo was the way. A fresh start in a new environment without some of the &amp;ldquo;overhead&amp;rdquo; of Wordpress would unlock a passion for writing again - and empower me to write regularly.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Draytek vs Netgear Orbi for Mesh Wifi</title>
      <link>https://matt-thornton.net/tech/netgear-orbi-vs-draytek-mesh/</link>
      <pubDate>Thu, 27 Jan 2022 15:26:55 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/netgear-orbi-vs-draytek-mesh/</guid>
      
        <description>&lt;p&gt;This post has been in draft for some time and to be honest it&amp;rsquo;s been long enough now that I don&amp;rsquo;t know exactly what I had planned to write.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SO WHY WRITE IT&lt;/em&gt;? I hear you mumble. Well, that&amp;rsquo;s a good question, but it&amp;rsquo;s not how my OCD allows me to operate. There was a reason.&lt;/p&gt;
&lt;p&gt;So for now, though, until my memory sorts itself out, I&amp;rsquo;ll just explore the topic a little, and maybe update it again in the future.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Initial thoughts on Hugo over Wordpress</title>
      <link>https://matt-thornton.net/tech/hugo-migration-part-3/</link>
      <pubDate>Thu, 20 Jan 2022 22:33:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hugo-migration-part-3/</guid>
      
        <description>&lt;h1 id=&#34;initial-thoughts-on-hugo-vs-wordpress&#34;&gt;Initial thoughts on Hugo vs Wordpress&lt;/h1&gt;
&lt;p&gt;The move to Hugo from Wordpress was a long time coming but also a little impulsive. I&amp;rsquo;d used Wordpress for a long time and had become accustomed to its pros and cons. It&amp;rsquo;s too soon to talk confidently and about good or bad bits, so here are just some observations.&lt;/p&gt;
&lt;p&gt;Also, it&amp;rsquo;s worth pointing out this quote that sits on the official Hugo forums which neatly encaptures the intended users of Hugo:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Migrating from Hugo to Wordpress</title>
      <link>https://matt-thornton.net/tech/hugo-migration-part-2/</link>
      <pubDate>Thu, 20 Jan 2022 21:33:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hugo-migration-part-2/</guid>
      
        <description>&lt;h1 id=&#34;migrating-from-wordpress-to-hugo&#34;&gt;Migrating from Wordpress to Hugo&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Important caveat: I am not a Hugo expert. I almost said not yet. But I doubt I ever will be. I am literally winging this. The main &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; site is really good and far better than this site.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Migrating from Wordpress to Hugo was actually a reasonably straight-forward process. There are plenty of articles out there covering it and I was &lt;a href=&#34;https://loganmarchione.com/2021/02/migrating-from-wordpress-to-hugo/&#34;&gt;following this one&lt;/a&gt; and &lt;a href=&#34;https://ma.ttias.be/step-by-step-guide-migrating-wordpress-to-hugo/&#34;&gt;this one&lt;/a&gt;- which also does a nice job of why you might want to move to Hugo (or a static site) in the first place.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Blog update 2022: migrated to Hugo</title>
      <link>https://matt-thornton.net/general/hugo-migration-part-1/</link>
      <pubDate>Thu, 20 Jan 2022 14:33:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/general/hugo-migration-part-1/</guid>
      
        <description>&lt;h1 id=&#34;2022-update-with-a-fresh-new-look&#34;&gt;2022 update&amp;hellip; with a fresh new look&lt;/h1&gt;
&lt;p&gt;OK bear with, this could take a while as I am currently writing this all in &lt;a href=&#34;https://www.markdownguide.org/getting-started/&#34;&gt;markdown&lt;/a&gt;. Or at least attempting to. I haven&amp;rsquo;t published in this way in at least 20 years since University days where it was popular to use &lt;a href=&#34;https://www.markdownguide.org/getting-started/&#34;&gt;LaTeX&lt;/a&gt; for typesetting scientific articles. For at least the last 10-15 years I&amp;rsquo;ve been using Wordpress as the CMS platform for this blog and, as we shall find out, for one reason or another I decided it was time for a change. So this may end up being a mini-series on how and why I moved my blog from Wordpress to Hugo and any experiences or observations along the way.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Word Automation: there is no word services application proxy configured for this site collection</title>
      <link>https://matt-thornton.net/tech/sharepoint-word-automation-there-is-no-word-services-application-proxy-configured-for-this-site-collection/</link>
      <pubDate>Thu, 02 Dec 2021 12:20:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint-word-automation-there-is-no-word-services-application-proxy-configured-for-this-site-collection/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re trying to configure Word Automation Services (esp. for use in the PDF Nintex tasks) then you may have used my previous post on the topic as a guide. Not seen it? &lt;a href=&#34;https://matt-thornton.net/tech/sharepoint/troubleshooting-word-automation-services-in-sharepoint&#34;&gt;It&amp;rsquo;s nice&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We recently upgraded a SharePoint environment but despite following the guide and configuring Word Automation Services and so on, workflows (or anything trying to use WAS) were failing with the error “there is no word services application proxy configured for this site collection”. All a bit odd because it all looked to be setup correctly.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My site was hacked. Sort of.</title>
      <link>https://matt-thornton.net/tech/my-site-was-hacked-sort-of/</link>
      <pubDate>Wed, 14 Apr 2021 23:25:56 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/my-site-was-hacked-sort-of/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;A story of when abandoned tech gets assimilated for undesirable purposes.
AKA when I inadvertently created a massive open spam proxy. (Although in fairness I can also now say that I have created a site that was creating literally thousands of hits per minute&amp;hellip; which is pretty huge.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;lets-start-with-some-excuses&#34;&gt;Let&amp;rsquo;s start with some excuses&lt;/h2&gt;
&lt;p&gt;(&lt;strong&gt;Warning&lt;/strong&gt;: large amount of, shall we say, “&lt;em&gt;scene-setting&lt;/em&gt;“.)&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t claim to be a web developer. Or certainly I don&amp;rsquo;t claim to be a &lt;em&gt;very good&lt;/em&gt; one. Despite what some of my friends and family may think, it&amp;rsquo;s not what I do for a job. I know a little bit about a little bit but I am miles behind what some of the bigshots can do with the web nowadays.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Exchange Online Powershell on macOS</title>
      <link>https://matt-thornton.net/tech/exchange-online-powershell-on-macos/</link>
      <pubDate>Tue, 02 Mar 2021 16:09:07 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/exchange-online-powershell-on-macos/</guid>
      
        <description>&lt;p&gt;&lt;strong&gt;Update: 06/01/2022&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just tried this all on macOS 12.0.1 (Monterey) and it was all fine. The only difference was that (a) Homebrew moaned that Xcode was out of date, so that needed a 12gb update, and (b) Powershell moaned about using stuff from an untrusted repository. In the end I trusted PSGallery by using:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Set-PSRepository -Name &#39;PSGallery&#39; -InstallationPolicy Trusted&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In fact the only real issue was the horrific shade of yellow that the highlighting decided to use for cmdlet names!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>I finally moved my Music library to a NAS</title>
      <link>https://matt-thornton.net/general/i-finally-moved-my-music-library-to-a-nas/</link>
      <pubDate>Fri, 29 Jan 2021 22:46:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/general/i-finally-moved-my-music-library-to-a-nas/</guid>
      
        <description>&lt;p&gt;&lt;em&gt;A vaguely tech-related philosophical-ish thought-piece.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tedious irrelevant tech challenge #7582: I still buy music. On physical media. CD mainly.&lt;/p&gt;
&lt;p&gt;Tedious philosophical quandry #29: are streaming services eroding our emotional connection with music?&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know why I still buy physical media. The economics of it don&amp;rsquo;t really make sense when compared with all the kool-kidz streaming stuff that is available nowadays. I can buy one album for around a tenner. I can buy a month&amp;rsquo;s streaming service of near-infinite music for around a tenner.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GoPro still has an issue with some SanDisk SD cards</title>
      <link>https://matt-thornton.net/general/gopro-still-has-an-issue-with-some-sandisk-sd-cards/</link>
      <pubDate>Sat, 23 Jan 2021 22:08:17 +0000</pubDate>
      
      <guid>https://matt-thornton.net/general/gopro-still-has-an-issue-with-some-sandisk-sd-cards/</guid>
      
        <description>&lt;p&gt;In true form for this blog of documenting obscure things that will be inconsequential to 99.999999% of normal people, here&amp;rsquo;s (yet) another.&lt;/p&gt;
&lt;p&gt;My — well-documented on Twitter, but as yet undocumented here — fallout with Drift Innovation&amp;rsquo;s Ghost cameras led me to emergency buy three GoPro Hero Session cameras - 1x Hero 4 Session and 2x Hero 5 Session.&lt;/p&gt;
&lt;p&gt;The form factor of these diminutive cameras is highly appealing compared with the bulkier form of similar. You can really achieve a stealth cam thing.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>VMWare Fusion / Big Sur / Ubuntu / Black screen</title>
      <link>https://matt-thornton.net/tech/vmware-fusion-big-sur-ubuntu-black-screen/</link>
      <pubDate>Sat, 05 Dec 2020 20:15:59 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/vmware-fusion-big-sur-ubuntu-black-screen/</guid>
      
        <description>&lt;p&gt;Recently updated to macOS Big Sur. I&amp;rsquo;m not sure why I do this sort of thing quite so freely&amp;hellip; I always naively assume everything will be OK. And so far, Big Sur vs Catalina is just a bit nightmare.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure there&amp;rsquo;s a huge amount of “don&amp;rsquo;t like change” in there but there are many things that are annoying the crap out of me with Big Sur. Calendar notifications for one. Gah.&lt;/p&gt;
&lt;p&gt;But anyway, one real issue I have had was with VMware Fusion. I was previously on v11.something and when trying to launch a VM got greeted with “Host OS does not have enough physical memory to launch this VM” which was a complete load of bollocks. After a quick Google, it was evident it was a VMware incompatibility issue - Fusion 11 will not run on Big Sur and you must upgrade to VMWare 12. Yay. $100 later and I have Fusion 12 and&amp;hellip; things are still broken. Main issue is that trying to start a VM results in a bunch of error messages&amp;hellip; these seem to get resolved by changing the compatibility level of the VM&amp;hellip;. but even then, starting the VM ends up in a black screen.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Obscure SharePoint errors #13653: DavWWWRoot is not accessible</title>
      <link>https://matt-thornton.net/tech/sharepoint/obscure-sharepoint-errors-13653-davwwwroot-is-not-accessible/</link>
      <pubDate>Thu, 26 Nov 2020 16:38:53 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/obscure-sharepoint-errors-13653-davwwwroot-is-not-accessible/</guid>
      
        <description>&lt;p&gt;The scenario is: SharePoint&amp;hellip; open in Windows Explorer is working great and then mysteriously, BOOM, it no worky no mo. &lt;figure class=&#34;wp-block-image size-large&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://matt-thornton.net/images/posts/image-8.png&#34; alt=&#34;&#34; class=&#34;wp-image-2492&#34; /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;blockquote class=&#34;wp-block-quote&#34;&gt;
  &lt;p&gt;
    \\server\DavWWWRoot\etc is not accessible. You might not have permission to use this network resource. Contact the administrator of this server to find out if you have access permissions.
  &lt;/p&gt;
  &lt;p&gt;
    A device attached to the system is not functioning.
  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Except it does worky on other places, even in the same site. Screams of permissions issues&amp;hellip;. but it&amp;rsquo;s not.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Misc Ubuntu 20.04 on Hyper-V from macOS setup stuff</title>
      <link>https://matt-thornton.net/tech/misc-ubuntu-20-04-on-hyper-v-from-macos-setup-stuff/</link>
      <pubDate>Wed, 18 Nov 2020 14:34:07 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/misc-ubuntu-20-04-on-hyper-v-from-macos-setup-stuff/</guid>
      
        <description>&lt;p&gt;Not much intro needed to this one. Have recently binned our monstrous VMWare ESXi host in favour of a single monstrous Windows Server 2019 and within a matter of nanoseconds of doing a requirement came in that needed a VM building that would allow us to easy test some Java-y / Tomcat-y / MySQL-y stuff and rather than jump the hoops of doing this in Windows, figured an Ubuntu-y type machine would do the job, and rather than faff with VMWare decided to give Hyper-V a bash.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Eugh. Configuring Powershell for remote Exchange management</title>
      <link>https://matt-thornton.net/tech/powershell-tech/eugh-configuring-powershell-for-remote-exchange-management/</link>
      <pubDate>Tue, 19 May 2020 10:03:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/eugh-configuring-powershell-for-remote-exchange-management/</guid>
      
        <description>&lt;p&gt;I use a mixture of Mac and Linux for most of my needs. I&amp;rsquo;ve run Windows virtual machines of same flavour or another but since .NET core 3 landed I&amp;rsquo;ve barely had to do even fire it up. There&amp;rsquo;s nowadays very little you can&amp;rsquo;t do in a non-Windows environment.&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t really extend (yet?) to remote administration of your Office365 tenant using Powershell.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m trying to configure some DNS bits for one of our domains that needs the &lt;a href=&#34;https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/exchange-online-powershell-v2/exchange-online-powershell-v2?view=exchange-ps#install-and-maintain-the-exchange-online-powershell-v2-module&#34;&gt;Exchange Online V2 Powershell&lt;/a&gt; module. Come with me as I disappear down a rabbit hole of getting this working.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Basic web scraping with Python: Episode 3!</title>
      <link>https://matt-thornton.net/tech/basic-web-scraping-with-python-episode-3/</link>
      <pubDate>Mon, 13 Apr 2020 11:32:55 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/basic-web-scraping-with-python-episode-3/</guid>
      
        <description>&lt;p&gt;This is the third edition of this post. It was originally &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-with-a-raspberry-pi-python-and-requests&#34;&gt;an intro to web scraping with Python&lt;/a&gt; (in Python 2) using the Requests library. It was &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-part-2-thoughts-on-debugging-and-python3&#34;&gt;then updated&lt;/a&gt; to cover some extra topics and also update for Python 3.&lt;/p&gt;
&lt;p&gt;The scenario is to download the back catalogue of the excellent &lt;a href=&#34;https://magpi.raspberrypi.org/issues?page=1&#34;&gt;MagPi&lt;/a&gt; magazine which is published monthly and the PDF is available for free. More info on the background is in the original post.&lt;/p&gt;
&lt;p&gt;However, since the original post a fair bit has changed: the MagPi website was updated so the scraping broke, Python has moved on and I found that despite downloading the issues, having them on a Pi meant I never actually read them because I forgot they were there!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Nintex site workflow &#43; lookup columns</title>
      <link>https://matt-thornton.net/tech/sharepoint/nintex-site-workflow-lookup-columns/</link>
      <pubDate>Mon, 09 Mar 2020 16:54:23 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/nintex-site-workflow-lookup-columns/</guid>
      
        <description>&lt;p&gt;Scenario: you have a Nintex workflow and you want to create an item in a list, where one of its column is a lookup column to another list.&lt;/p&gt;
&lt;p&gt;Background: this took *too* long to figure out. I had an initial version of a workflow; it was actually a list workflow, running on an item which already had the lookup value I needed. Using the ‘Create Item&amp;rsquo; action to create an item in a different list (which had the same lookup column) was straight-forward; you simply reference the current item in a list lookup&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ASP.NET Core OAuth Facebook cancel causes 500 fix</title>
      <link>https://matt-thornton.net/tech/asp-net-core-oauth-facebook-cancel-causes-500-fix/</link>
      <pubDate>Wed, 04 Mar 2020 15:16:49 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/asp-net-core-oauth-facebook-cancel-causes-500-fix/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re using ASP.NET Core built-in authentication to allow your users to sign up / login to your web application using alternative providers, Microsoft provides various out of the box, such as Microsoft, Google, Twitter and Facebook.&lt;/p&gt;
&lt;p&gt;Chances are you have something like the following in your startup.cs&lt;/p&gt;
&lt;pre class=&#34;wp-block-code&#34;&gt;&lt;code&gt;services.AddFacebook(options=&gt; ...)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This works pretty nicely. All you need are you keys and secrets (hello Urban Cookie Collective) and all should rock.&lt;/p&gt;
&lt;p&gt;However, an issue arises if your user clicks ‘Sign in with &lt;x&gt;&amp;rsquo;, which (if they are not already signed-in) takes them to that app to sign in, but if they then cancel that (e.g., clicking the ‘Not Now&amp;rsquo; link on the Facebook screen) can result in a ghastly 500 error.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Visual Studio regex replace for 7 year old issue...</title>
      <link>https://matt-thornton.net/tech/visual-studio-regex-replace-for-7-year-old-issue/</link>
      <pubDate>Wed, 13 Nov 2019 18:12:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/visual-studio-regex-replace-for-7-year-old-issue/</guid>
      
        <description>&lt;p&gt;I still work on a lot of old technology. Today I was updating one of my client&amp;rsquo;s systems that consumes a (3rd party) web service - the service was moving from -gasp- anonymous auth to requiring a username and password. (Sent in plain text over non-SSL, mind, but&amp;hellip; baby steps. I&amp;rsquo;m guessing this was good enough to close an audit point.)&lt;/p&gt;
&lt;p&gt;The original implementation used the old Visual Studio ‘Web Service reference&amp;rsquo; (for old style SOAP .asmx) which was replaced sometime later by ‘Service Reference&amp;rsquo; and intended for anything implementing the WCF protocol. The old style didn&amp;rsquo;t support the WSE security stuff, whereas the newer did.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bulk delete items from SharePoint Document Library with Powershell - with filters</title>
      <link>https://matt-thornton.net/tech/sharepoint/bulk-delete-items-from-sharepoint-document-library-with-powershell-with-filters/</link>
      <pubDate>Wed, 26 Jun 2019 13:19:11 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/bulk-delete-items-from-sharepoint-document-library-with-powershell-with-filters/</guid>
      
        <description>&lt;p&gt;I recently posted some Powershell for bulk / batch emptying a SharePoint document library (&lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/bulk-delete-items-and-folders-from-sharepoint-document-library-using-powershell&#34;&gt;https://www.matt-thornton.net/tech/sharepoint/bulk-delete-items-and-folders-from-sharepoint-document-library-using-powershell&lt;/a&gt;) which works nicely.&lt;/p&gt;
&lt;p&gt;(As long as you remember that the Batch Delete XML syntax is incredibly fiddly and sensitive! Case is important and backticks are required to escape stuff.)&lt;/p&gt;
&lt;p&gt;Anyway; it works great to empty an entire library, but you may prefer to just be tidying up really old stuff. Well, that&amp;rsquo;s what I was doing anyway, and therefore wanted to expand it a bit.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Troubleshooting Word Automation Services in SharePoint</title>
      <link>https://matt-thornton.net/tech/sharepoint/troubleshooting-word-automation-services-in-sharepoint/</link>
      <pubDate>Wed, 19 Jun 2019 12:08:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/troubleshooting-word-automation-services-in-sharepoint/</guid>
      
        <description>&lt;p&gt;Continuing the theme of obscure SharePoint issues; this one on a new topic - Word Automation Services. A client has a new requirement to automate some documents and using Word templates and converting them to PDF all from a Nintex workflow would be&amp;hellip; nifty. So away we go.&lt;/p&gt;
&lt;p&gt;In Word, we created a Word document and then inserted some ‘Content Controls&amp;rsquo; - have some options here, but for proof of concept, started with a simple text control. Then in the Developer tab of the ribbon, you can edit the properties of the control and give it a title. Save the document and upload to a document library in SP.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Basic web scraping - Part 2: thoughts on debugging and Python3</title>
      <link>https://matt-thornton.net/tech/basic-web-scraping-part-2-thoughts-on-debugging-and-python3/</link>
      <pubDate>Mon, 13 May 2019 16:18:14 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/basic-web-scraping-part-2-thoughts-on-debugging-and-python3/</guid>
      
        <description>&lt;h3 id=&#34;update-2020-04-13-the-main-article-has-been-overhauled-and-republished&#34;&gt;&lt;strong&gt;Update: 2020-04-13. The main article has been overhauled and republished &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-with-python-episode-3&#34;&gt;here&lt;/a&gt;! Includes Python3 updates, Dropbox uploading and a code repo.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m leaving the below in place for info and posterity and for misc useful tidbits.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A while ago, I posted a &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-with-a-raspberry-pi-python-and-requests&#34;&gt;basic tutorial on how to do some simple web scraping&lt;/a&gt; in Python using requests and beautifulsoup.&lt;/p&gt;
&lt;p&gt;It obviously got found in Google because the hits were good. There were however, a couple of comments highlighting issues with it - Brett and Sean saying issues with “TypeError: ‘NoneType’ object is not callable”&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sharepoint - Open .eml files in Outlook</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-open-eml-files-in-outlook/</link>
      <pubDate>Thu, 10 Jan 2019 14:52:44 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-open-eml-files-in-outlook/</guid>
      
        <description>&lt;p&gt;If you use email enabled document libraries or indeed any other method of storing email messages (commonly created in Exchange / Outlook) in Sharepoint document libraries then they are more than likely stored in .eml format (that first appeared in Outlook Express) as opposed to the more modern .msg format. .eml is a nice format, which was defined in MIME RFC 822 but because it&amp;rsquo;s so heavily ingrained in to a Windows environment there can be a less than desirable experience when operating with it in a Sharepoint context.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Basic web scraping with a Raspberry Pi, Python and Requests</title>
      <link>https://matt-thornton.net/tech/basic-web-scraping-with-a-raspberry-pi-python-and-requests/</link>
      <pubDate>Sun, 06 Jan 2019 23:11:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/basic-web-scraping-with-a-raspberry-pi-python-and-requests/</guid>
      
        <description>&lt;h3 id=&#34;update-2020-04-13-article-has-been-overhauled-and-republished&#34;&gt;&lt;strong&gt;Update: 2020-04-13. Article has been overhauled and republished &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-with-python-episode-3&#34;&gt;here&lt;/a&gt;! Includes Python3 updates, Dropbox uploading and a code repo.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m leaving the below in place for background, info and posterity and for misc useful tidbits.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Update: 2019-05-13 - this has been edited to fix a little bug in the code transcript. There is also a follow-up article on working with Python3 &lt;a href=&#34;https://matt-thornton.net/tech/basic-web-scraping-part-2-thoughts-on-debugging-and-python3&#34;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;_Update: 2019-12-16 - looks like MagPi have amended their page so the code as below won&amp;rsquo;t work directly. I&amp;rsquo;ve left it there for interest but see one of the comments which has amended code. Thanks to Dave for pointing this out!&lt;br&gt;
_&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Use DISKPART to bring a disk online</title>
      <link>https://matt-thornton.net/tech/use-diskpart-to-bring-a-disk-online/</link>
      <pubDate>Tue, 27 Nov 2018 14:09:05 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/use-diskpart-to-bring-a-disk-online/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;ve recently migrated a &lt;a href=&#34;https://www.matt-thornton.net/tech/vmware/migrate-vmware-fusion-virtual-machines-to-vmware-esxi&#34;&gt;VMWare Fusion virtual machine to VMWare ESXi&lt;/a&gt;, which itself had multiple disks, you may find that secondary disks don&amp;rsquo;t show up. You can change this using DISKPART.&lt;/p&gt;
&lt;p&gt;In my case, this didn&amp;rsquo;t happen in a Windows 10 VM with two disks, but did happen in Windows Server 2016 with two disks.&lt;/p&gt;
&lt;p&gt;Weird.&lt;/p&gt;
&lt;p&gt;Anyway, it&amp;rsquo;s reasonably easy to fix, using DISKPART.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a CMD prompt and type DISKPART&lt;/li&gt;
&lt;li&gt;You should got a ACL type auth warning, just OK It&lt;/li&gt;
&lt;li&gt;This will open a new console window with DISKPART&amp;gt; prompt&lt;/li&gt;
&lt;li&gt;Type LIST DISK&lt;/li&gt;
&lt;li&gt;You should see your various disks listed, and one (or more) will be Offline&lt;/li&gt;
&lt;li&gt;Type SELECT DISK 1&lt;/li&gt;
&lt;li&gt;Type ONLINE DISK&lt;/li&gt;
&lt;li&gt;At this point, your disk should appear in Windows Explorer&lt;/li&gt;
&lt;li&gt;If you find you cannot create anything on the disk, then it&amp;rsquo;s possible it&amp;rsquo;s readonly, in which case&lt;/li&gt;
&lt;li&gt;Type ATTRIB DISK CLEAR READONLY&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That should be everything you need.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Migrate VMWare Fusion virtual machines to VMWare ESXi</title>
      <link>https://matt-thornton.net/tech/vmware/migrate-vmware-fusion-virtual-machines-to-vmware-esxi/</link>
      <pubDate>Tue, 27 Nov 2018 12:21:23 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/vmware/migrate-vmware-fusion-virtual-machines-to-vmware-esxi/</guid>
      
        <description>&lt;p&gt;Way back in 2012, &lt;a href=&#34;https://matt-thornton.net/tech/my-vmware-esxi-5-1-build-part-1-the-hardware&#34;&gt;I dabbled with ESXi&lt;/a&gt;. In fact, I faced then, moreorless the same problem I was facing a few days ago.&lt;/p&gt;
&lt;p&gt;That particular ESXi server didn&amp;rsquo;t last particularly long - no technical issues, it just didn&amp;rsquo;t turn out to be the thing I wanted.&lt;/p&gt;
&lt;p&gt;Fast forward 6 years, and I found myself in a new situation where having an ESXi host would be useful. We use Azure a lot nowadays, but there are still some scenarios where we&amp;rsquo;d like some on-premise kit such as developing against Sharepoint. (Although in fairness, I&amp;rsquo;m not sure anyone really ever *wants* to do that.) I digress.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SQL Server - quickly delete all tables</title>
      <link>https://matt-thornton.net/tech/databases/sql-server-quickly-delete-all-tables/</link>
      <pubDate>Fri, 12 Oct 2018 15:37:14 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/sql-server-quickly-delete-all-tables/</guid>
      
        <description>&lt;p&gt;With most things in SQL Server it&amp;rsquo;s tempting to think you can script it. Because most of the time you can.&lt;/p&gt;
&lt;p&gt;Recently, I had a requirement to quickly drop everything out of a database (but without actually just dropping the whole database.)&lt;/p&gt;
&lt;p&gt;The best option I found, was:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the database tree view, find the container for the type of objects you want to delete (e.g., tables)&lt;/li&gt;
&lt;li&gt;Press F7 to open up the Object Explorer&lt;/li&gt;
&lt;li&gt;From here, select all the items you want to delete. Press delete.&lt;/li&gt;
&lt;li&gt;This opens up the standard ‘drop item&amp;rsquo; dialog, but with all those objects included.&lt;/li&gt;
&lt;li&gt;Hit OK&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And boom, away it goes. You can repeat this for any database objects by navigating around the Object Explorer. If you wanted to script this, you&amp;rsquo;d need to (probably) start navigating the master database and get some cursors and whatnot going on.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Installing SharePoint in standalone / single server mode</title>
      <link>https://matt-thornton.net/tech/sharepoint/installing-sharepoint-in-standalone-single-server-mode/</link>
      <pubDate>Fri, 12 Oct 2018 15:33:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/installing-sharepoint-in-standalone-single-server-mode/</guid>
      
        <description>&lt;p&gt;In SharePoint 2016, it&amp;rsquo;s no longer possible to use PSConfig / SharePoint Products Configuration Wizard to provision a single server SharePoint Farm. You&amp;rsquo;re likely doing this because you just want a single dev environment to&amp;hellip; do some stuff. Strangely (more like typically) Microsoft don&amp;rsquo;t make this particularly easy for you.&lt;/p&gt;
&lt;p&gt;Assuming you have the basis of a SharePoint server, i.e., :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Some sort of OS (i.e. Windows Server)&lt;/li&gt;
&lt;li&gt;Some sort of SQL Server (i.e., SQL Server 2016)&lt;/li&gt;
&lt;li&gt;SharePoint binaries installed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;which isn&amp;rsquo;t connected to a domain, then you likely fire up the Config Wizard, fill in the obvious entries (ie. specify database server, create new farm, provide credentials, etc.) and specify a local account and the “wizard” tells you that local accounts can only be used in stand alone mode. Well, yeah, exactly, that&amp;rsquo;s what I wanted. But there&amp;rsquo;s no way past it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sharepoint 2010 - Access denied... even for farm admins</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-access-denied-even-for-farm-admins/</link>
      <pubDate>Fri, 14 Sep 2018 17:20:01 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-access-denied-even-for-farm-admins/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;If you&amp;rsquo;re getting Access Denied for all users even after configured the Super User and Super Reader cache accounts&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I recently deployed a new site collection into a new content database. As soon as I tried to hit it, I got unexpected errors. I checked the logs which revealed the familiar stuff about the portalsuperuser and portalsuperreader accounts not being configured - object cache misses and so on, for example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Object Cache: The super user account utilized by the cache is not configured. This can increase the number of cache misses, which causes the page requests to consume unneccesary system resources.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sharepoint 2010 SP2 installation - variety of issues</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-sp2-installation-variety-of-issues/</link>
      <pubDate>Thu, 13 Sep 2018 17:55:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-sp2-installation-variety-of-issues/</guid>
      
        <description>&lt;p&gt;I know. Sharepoint 2010. It&amp;rsquo;s not even. I mean. Just.&lt;/p&gt;
&lt;p&gt;Look let&amp;rsquo;s skip past any discussion about why this is happening in 2018, and just cover the issues, OK?&lt;/p&gt;
&lt;p&gt;So. You&amp;rsquo;re installing SP2 on a Sharepoint 2010 Farm. This may well apply to any CU in fact. And it possibly applies to SP2013+ also - but at least one of these issues is allegedly caused by a CU that was rolled up in SP2.&lt;/p&gt;
&lt;p&gt;Right, that&amp;rsquo;s enough foreplay.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bulk delete items and folders from Sharepoint document library using Powershell</title>
      <link>https://matt-thornton.net/tech/powershell-tech/bulk-delete-items-and-folders-from-sharepoint-document-library-using-powershell/</link>
      <pubDate>Fri, 10 Aug 2018 12:35:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/bulk-delete-items-and-folders-from-sharepoint-document-library-using-powershell/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ll cut to the chase. A lot has been written about how to handle large lists and how to handle bulk deleting things. To summarise: getting all items and iterating one by one is *not* the way to do it.&lt;/p&gt;
&lt;p&gt;The right way to do it is to use the &lt;a href=&#34;https://docs.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.spweb.processbatchdata?view=sharepoint-server&#34;&gt;ProcessBatchData&lt;/a&gt; method on the SPWeb object.&lt;/p&gt;
&lt;p&gt;Have done this plenty of times in C# but this time I wanted to cut straight to Powershell. A quick Google later and I found &lt;a href=&#34;http://www.danielroot.info/2012/03/how-to-bulk-delete-files-in-large.html&#34;&gt;Daniel Root&amp;rsquo;s boiler plate&lt;/a&gt;. It properly handles checked out files as well, and deletes folders. Ideal!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SSRS: the given path&#39;s format is not supported</title>
      <link>https://matt-thornton.net/tech/business-intelligence-tech/ssrs-given-paths-format-not-supported/</link>
      <pubDate>Fri, 16 Mar 2018 13:57:33 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/business-intelligence-tech/ssrs-given-paths-format-not-supported/</guid>
      
        <description>&lt;p&gt;As an aside &lt;a href=&#34;https://matt-thornton.net/tech/business-intelligence-tech/ssrs-visual-studio-sp-integrated-mode&#34;&gt;to my other post on SSRS in SharePoint integrated mode&lt;/a&gt;, this is a niggly little issue I encountered.&lt;/p&gt;
&lt;p&gt;If you find yourself needing to edit a published report and, for whatever reason can&amp;rsquo;t go back to source to make the change, then a reasonable option is to download a copy of the report from SharePoint and then open it up in your Visual Studio of choice and make the edits. RDL files are pretty great at encapsulating everything they need to run within a single file (they are just XML files, after all) so this is a workable approach.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SSRS &#43; Visual Studio &#43; SP Integrated Mode</title>
      <link>https://matt-thornton.net/tech/business-intelligence-tech/ssrs-visual-studio-sp-integrated-mode/</link>
      <pubDate>Fri, 16 Mar 2018 13:44:30 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/business-intelligence-tech/ssrs-visual-studio-sp-integrated-mode/</guid>
      
        <description>&lt;p&gt;Visual Studio is a good option for designing SSRS reports. Now, that is. But years ago we had a different toolset. One of those around the 2009/2010 time was ‘Business Intelligence Developer Studio&amp;rsquo;. This was effecting a Visual Studio shell that had report templates for the various SQL Business Intelligence suite (e.g., SSIS, SSRS, SSAS.) and was installed from the main SQL Server installer. This then morphed in to SQL Server Data Tools which was available as a standalone package.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Does SharePoint 2013 work on SQL Server 2016?</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2013-work-sql-server-2016/</link>
      <pubDate>Fri, 23 Feb 2018 12:21:44 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2013-work-sql-server-2016/</guid>
      
        <description>&lt;p&gt;Q: Does SharePoint 2013 work on SQL Server 2016?&lt;br&gt;
A: &lt;a href=&#34;https://blogs.technet.microsoft.com/stefan_gossner/2016/11/04/sharepoint-2013-and-sql-server-2016/&#34;&gt;No&lt;/a&gt; and &lt;a href=&#34;https://blogs.msdn.microsoft.com/ronalg/2016/06/13/sharepoint-20132016-and-sql-server-2016-supportability-with-ssrs-fun-facts/&#34;&gt;no&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;#mvp (minimum viable post.)&lt;/p&gt;
&lt;p&gt;(* Except, it actually &lt;em&gt;does&lt;/em&gt; work - it&amp;rsquo;s just not officially supported by Microsoft.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint trace service keeps getting disabled</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-trace-service-keeps-getting-disabled/</link>
      <pubDate>Fri, 23 Feb 2018 12:17:04 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-trace-service-keeps-getting-disabled/</guid>
      
        <description>&lt;p&gt;Continuing the theme of obscure SharePoint gotchas you&amp;rsquo;re unlikely to encounter (unless, I assume, you&amp;rsquo;re reading this) here&amp;rsquo;s another. One environment was experiencing an issue whereby the SharePoint Tracing Service was constantly getting set to disabled. No amount of editing it in services.msc to set it to Automatic would ‘take&amp;rsquo; - that is, you could enable it and start it and it would work - but then at some miscellaneous point later it would mysteriously revert to being disabled.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Search Service Application recovery &#43; WCF Endpoint</title>
      <link>https://matt-thornton.net/tech/sharepoint-search-service-application-recovery-wcf-endpoint/</link>
      <pubDate>Wed, 17 Jan 2018 11:58:09 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint-search-service-application-recovery-wcf-endpoint/</guid>
      
        <description>&lt;p&gt;I recently had some fun and games trying to fix a broken SharePoint Search Service Application. Although I&amp;rsquo;m not entirely what caused the issue (other than, you know, SharePoint) although it may be to do with changing the &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-passphrase-recovery&#34;&gt;Farm Passphrase&lt;/a&gt; but one way or another it was, fooked.&lt;/p&gt;
&lt;p&gt;I opted to just delete it and create a new one. This didn&amp;rsquo;t go well. A new application was created, but it, also, was dead.&lt;/p&gt;
&lt;p&gt;As many people have found, Central Admin and Remove-SPServiceApplication have a habit of doing entirely nothing when it comes to remove broken Search Applications.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sharepoint solutions - stuck on retracting or deploying</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-solutions-stuck-retracting-deploying/</link>
      <pubDate>Sun, 14 Jan 2018 12:57:20 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-solutions-stuck-retracting-deploying/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m adding this here in the hope it may save someone a few hours of pain and hair-pulling. (i.e., what I&amp;rsquo;ve just been through.)&lt;/p&gt;
&lt;p&gt;If you use solution management in Central Administration in SharePoint - you&amp;rsquo;ll be fairly used to the whole add-spsolution / install-spsolution / uninstall-spsolution / remove-spsolution stuff that you either run from Powershell or the GUI.&lt;/p&gt;
&lt;p&gt;You will also be familiar with the fact that solution management depends on both the SharePoint Timer Service (SPTimerV4) but also the SharePoint Administration service. If either of those services are not running, you will not be able to deploy or retract any solutions. In normal operation, solutions will go in and out like a greased piglet, but, from time to time, things mysteriously stop working. (This is SharePoint after all.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>HP-Setup wifi network on HP M377dw</title>
      <link>https://matt-thornton.net/tech/hp-setup-wifi-network-hp-m377dw/</link>
      <pubDate>Sat, 23 Dec 2017 13:35:34 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/hp-setup-wifi-network-hp-m377dw/</guid>
      
        <description>&lt;p&gt;This had been bugging me for a long time. I have an &lt;a href=&#34;http://store.hp.com/us/en/pdp/hp-color-laserjet-pro-mfp-m377dw&#34;&gt;HP M377DW laserjet printer&lt;/a&gt; and after setting it up on my wifi network there was a spare ‘HP-Setup&amp;rsquo; network hanging around in my local area. When I recently added an HP Envy 500 photo printer which did the same thing I resolved to hide them.&lt;/p&gt;
&lt;p&gt;I assumed it was something to do with Wifi Direct - a wifi-like protocol that allows you to printer directly to the printer without going through the main LAN. The idea is simple - you connect to the printer&amp;rsquo;s wifi network and away you go.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Create SharePoint Content Organiser rules programmatically with lookup fields</title>
      <link>https://matt-thornton.net/tech/sharepoint/create-sharepoint-content-organiser-rules-programmatically-lookup-fields/</link>
      <pubDate>Tue, 12 Dec 2017 12:53:10 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/create-sharepoint-content-organiser-rules-programmatically-lookup-fields/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve wittered on &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/creating-sharepoint-2010-content-organizer-rules-programmatically&#34;&gt;before&lt;/a&gt; about how much I like the content organiser in SharePoint. It&amp;rsquo;s really pretty handy. Even creating rules that target other content organisers is possible. (&lt;a href=&#34;https://www.matt-thornton.net/tech/powershell-tech/setting-content-organiser-settings-programmatically&#34;&gt;With a little trickery&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;But since it&amp;rsquo;s SharePoint, it&amp;rsquo;s not without its quirks. I like to do as much as my dev work programmatically as possible. Every now and then you think maybe you&amp;rsquo;ve hit something you can&amp;rsquo;t script and you&amp;rsquo;ll have to resort to adding a deployment step. I was close with this.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint &#43; Visual Studio - cannot rename Feature folder</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-visual-studio-cannot-rename-feature-folder/</link>
      <pubDate>Mon, 11 Dec 2017 14:25:19 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-visual-studio-cannot-rename-feature-folder/</guid>
      
        <description>&lt;p&gt;When you Add Feature in Visual Studio, it by default creates a ‘folder&amp;rsquo; with some gubbins underneath it. By default this is Feature1.&lt;/p&gt;
&lt;p&gt;This is pretty ugly, but you may encounter a scenario where you cannot rename it. It seems to be based on other characters that exist in the path of the solution/project. For instance, we tend to use full stops to delineate a pseudo namespace. Now amount of Right-Click &amp;gt; Rename will sort it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL on Raspberry Pi - allow connections from non-localhost</title>
      <link>https://matt-thornton.net/tech/databases/mysql-raspberry-pi-allow-connections-non-localhost/</link>
      <pubDate>Wed, 06 Dec 2017 05:21:05 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/mysql-raspberry-pi-allow-connections-non-localhost/</guid>
      
        <description>&lt;p&gt;If you want to connect to MySQL from any device in your network that isn&amp;rsquo;t on localhost, then you may encounter an error:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MySQL error: Could not connect to any of the specified hosts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bear in mind that e.g., a PHP web app or phpmyadmin will continue to work, since (assuming your web server such as Apache is running on the same server as MySQL) they&amp;rsquo;re technically running on localhost and will be able to connect.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Recovering files from broken Raspberry Pi - Part 2</title>
      <link>https://matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-2/</link>
      <pubDate>Tue, 05 Dec 2017 22:43:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-2/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;This is the second part of a guide on recovering MySQL data from a broken Raspberry Pi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Part 1: &lt;a href=&#34;https://matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-1&#34;&gt;Rebuild the Raspberry Pi&lt;/a&gt;&lt;br&gt;
Part 2: Recover the MySQL data and restore to the new environment.&lt;/p&gt;
&lt;p&gt;With a newly functional Raspberry Pi, it was now time to try and recover MySQL data. Clearly this will only work if the SD card in the old Pi itself is actually functional and readable.&lt;/p&gt;
&lt;p&gt;The good news is that MySQL stores its data on the file system in a reasonably compact and accessible format. There are a few differences in structure based on whether your database tables are in MyISAM or InnoDB format. This post assumes your tables are in InnoDB format (since that&amp;rsquo;s what mine were) but as far as I know, the only difference is that if your tables are in MyISAM format, then there&amp;rsquo;s no need to copy the ibdata* files over.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Recovering files from broken Raspberry Pi - Part 1</title>
      <link>https://matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-1/</link>
      <pubDate>Tue, 05 Dec 2017 22:17:13 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-1/</guid>
      
        <description>&lt;p&gt;I have a Raspberry Pi 3 which serves solely as a MySQL server. It does have an important (production-esque) purpose but despite that&amp;hellip; I didn&amp;rsquo;t have it backed up properly. Oops.&lt;/p&gt;
&lt;p&gt;So when it spectacularly died the other day, and, um&amp;hellip; production things&amp;hellip; stopped productioning&amp;hellip; I worried a little. Well after I changed my pants, I worried a lot.&lt;/p&gt;
&lt;p&gt;Not so much about the server, or even in fact the data, but the &lt;em&gt;structure&lt;/em&gt; of the databases.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Chaining Powershell commands - now with email alerts</title>
      <link>https://matt-thornton.net/tech/powershell-tech/chaining-powershell-commands-now-email-alerts/</link>
      <pubDate>Tue, 05 Dec 2017 11:06:59 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/chaining-powershell-commands-now-email-alerts/</guid>
      
        <description>&lt;p&gt;I recently talked about some &lt;a href=&#34;https://www.matt-thornton.net/tech/powershell-tech/quick-tip-chaining-powershell-commands&#34;&gt;simple functionality to chain Powershell&lt;/a&gt; commands together so that you can time long-running processes.&lt;/p&gt;
&lt;p&gt;I decided to take this concept a little further so that Powershell will send email messages at start and finish so I don&amp;rsquo;t need to keep checking for when a long-running process has actually finished.&lt;/p&gt;
&lt;p&gt;The idea is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You send a message when it starts&lt;/li&gt;
&lt;li&gt;You run the process&lt;/li&gt;
&lt;li&gt;You send a message when it ends&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: this assumes you&amp;rsquo;re in a Windows domain environment with access to an Exchange server. In order to authenticate against Exchange, you obviously need a domain account and be aware, there may be some things about your Exchange environment that does not allow this functionality (e.g., no relaying etc.) If you&amp;rsquo;re not in an Exchange environment, you&amp;rsquo;ll need to set the SMTP server of whatever you&amp;rsquo;re using.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quick tip: chaining powershell commands</title>
      <link>https://matt-thornton.net/tech/powershell-tech/quick-tip-chaining-powershell-commands/</link>
      <pubDate>Tue, 28 Nov 2017 22:30:07 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/quick-tip-chaining-powershell-commands/</guid>
      
        <description>&lt;p&gt;Let&amp;rsquo;s say, for example, that you&amp;rsquo;re doing something &lt;a href=&#34;https://matt-thornton.net/tech/powershell-tech/sharepoint-2010-pain-splitting-large-content-database&#34;&gt;that takes a freaking age&lt;/a&gt;. You need a long-running process and want to fire and forget, but for analysis purposes, want to know how long it took (without sitting there for hours watching and waiting for it to complete.)&lt;/p&gt;
&lt;p&gt;The answer is chaining powershell commands together with get-date.&lt;/p&gt;
&lt;p&gt;eg.,&lt;/p&gt;
&lt;pre&gt;get-date;somelongrunningpowershell.ps1;get-date
&lt;/pre&gt;
&lt;p&gt;In this case, it&amp;rsquo;s the ; that chains commands together.&lt;/p&gt;
&lt;p&gt;OK, that was actually a bad example, because if you&amp;rsquo;re running a script you&amp;rsquo;re in control of, then obviously you can do whatever you like and output the timestamps then:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 pain - splitting a large content database</title>
      <link>https://matt-thornton.net/tech/powershell-tech/sharepoint-2010-pain-splitting-large-content-database/</link>
      <pubDate>Tue, 28 Nov 2017 19:16:46 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/sharepoint-2010-pain-splitting-large-content-database/</guid>
      
        <description>&lt;p&gt;I know, I know. SharePoint 2010. Bad. But here I am.&lt;/p&gt;
&lt;p&gt;Much of the pain I have been going through over the last week or so is frankly caused by the biggest mistake that a someone designing a new SharePoint environment can make: not planning for data volumes. It doesn&amp;rsquo;t matter how many times your client tells you “ah, it&amp;rsquo;ll never grow that big, we won&amp;rsquo;t use it much” - ignore them, they are lying.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Yes, more! Timer jobs not running!</title>
      <link>https://matt-thornton.net/tech/powershell-tech/yes-timer-jobs-not-running/</link>
      <pubDate>Fri, 24 Nov 2017 19:14:28 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/yes-timer-jobs-not-running/</guid>
      
        <description>&lt;p&gt;OK, so I&amp;rsquo;ve posted 5 times in the last 2 days on various SharePoint related things. Any regular readers of this blog will know that is entirely out of the ordinary and does not take a genius to determine that I&amp;rsquo;ve been doing something with SharePoint and, as with most SharePoint projects, I&amp;rsquo;ve encountered a bunch of issues. The events that have led to these are probably not common but equally something that you will face from time to time. The perfect storm of requirements consist of:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint - Error encrypting or decrypting credentials</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-error-encrypting-decrypting-credentials/</link>
      <pubDate>Fri, 24 Nov 2017 16:14:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-error-encrypting-decrypting-credentials/</guid>
      
        <description>&lt;p&gt;I recently talked about the method for &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-passphrase-recovery&#34;&gt;updating the SharePoint passphrase&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whilst this did ‘work&amp;rsquo; I suffered a slightly unfortunate consequence - which may or may not affect you. (I&amp;rsquo;m guessing if you&amp;rsquo;re here, then you&amp;rsquo;re facing a similar issue.)&lt;/p&gt;
&lt;p&gt;As part of what I had been doing, I had changed the Farm Account password. I did this in AD and then manually changed the credentials in IIS and Services.msc for e.g., the Timer service and all other places that I thought it needed changing. However, I did NOT change it in Central Admin for the Managed Account itself.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Setting content organiser settings programmatically</title>
      <link>https://matt-thornton.net/tech/powershell-tech/setting-content-organiser-settings-programmatically/</link>
      <pubDate>Fri, 24 Nov 2017 12:24:08 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/setting-content-organiser-settings-programmatically/</guid>
      
        <description>&lt;p&gt;The content organiser is a powerful feature in SharePoint that allows users to upload files to a single central area and then use rules to route the documents to the correct place.&lt;/p&gt;
&lt;p&gt;Creating new rules programmatically is simple but what if you want to change the actual settings of the content organiser? Things like ‘require users to use the organiser&amp;rsquo;, ‘allow rules to specify another site as a target location&amp;rsquo; and so on. This is one area where the SharePoint server APIs fall over a little.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint site locked (read only)</title>
      <link>https://matt-thornton.net/tech/powershell-tech/sharepoint-site-locked-read/</link>
      <pubDate>Wed, 22 Nov 2017 15:50:25 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/sharepoint-site-locked-read/</guid>
      
        <description>&lt;p&gt;Recently I was trying to figure out a way to restore a copy of a site collection to a different location. (Well that&amp;rsquo;s the short version, anyway, there was a much bigger issue I was trying to resolve.)&lt;/p&gt;
&lt;p&gt;One solution was to backup the site collection and restore it to the new location. The site collection itself is a bit of a monster (around 300gb). From Central Administration I tried to use the GUI screen to backup the site collection to a network share.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>psconfig v2v or b2b?</title>
      <link>https://matt-thornton.net/tech/sharepoint/psconfig-v2v-b2b/</link>
      <pubDate>Tue, 21 Nov 2017 15:15:40 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/psconfig-v2v-b2b/</guid>
      
        <description>&lt;p&gt;Yesterday I posted about a &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-passphrase-recovery&#34;&gt;quick hack to reset the farm passphrase&lt;/a&gt;. Part of this was using the psconfig cli to perform an in-place upgrade of SharePoint.&lt;/p&gt;
&lt;p&gt;Part of this was the command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;psconfig.exe -cmd upgrade -inplace v2v -passphrase &amp;quot;passphrase&amp;quot; -wait&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;At the time, all seemed to Ok&amp;hellip; but today have noticed that the Manage Database Upgrade Status in Central Admin was showing that some databases had been left behind - “Database is in compatibility range and should be upgraded”. And the output from&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint passphrase recovery</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-passphrase-recovery/</link>
      <pubDate>Mon, 20 Nov 2017 18:11:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-passphrase-recovery/</guid>
      
        <description>&lt;p&gt;Was doing a Service Pack upgrade on a SharePoint installation and hit an unexpected error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unable to create a Service Connection Point in the current Active Directory domain. Verify that the SharePoint container exists in the current domain and that you have rights to write to it.&lt;br&gt;
Microsoft.SharePoint.SPException: The object LDAP://CN=Microsoft SharePoint Products,CN=System,DC=xxx,DC=com doesn&amp;rsquo;t exist in the directory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This seemed odd - I&amp;rsquo;d just completed the same process on a different environment and didn&amp;rsquo;t hit the same issue. And after checking with one of the domain admins&amp;hellip; confirmed that this container does not exist at all. So it seems it&amp;rsquo;s a spurious issue.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL table name case sensitivity</title>
      <link>https://matt-thornton.net/tech/mysql-table-name-case-sensitivity/</link>
      <pubDate>Sun, 01 Oct 2017 16:46:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/mysql-table-name-case-sensitivity/</guid>
      
        <description>&lt;p&gt;Just encountered a fun little issue when trying to move something from a local MySQL server to a ‘Prod&amp;rsquo; server. The difference in architecture being that dev MySQL was running on OSX whereas the ‘Prod&amp;rsquo; MySQL was running on Linux (debian).&lt;/p&gt;
&lt;p&gt;The issue was that a lot of my queries/views/procedures were failing on the Linux box due to non-existence of tables. (When they definitely existed.)&lt;/p&gt;
&lt;p&gt;The problem was how different operating systems treat case sensitivity in tables. In short, on Windows and OSX table names are case insensitive. In Linux and other Unix based platforms, they are case sensitive.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>On Mono on a Raspberry Pi... vs Win10 IOT Core</title>
      <link>https://matt-thornton.net/tech/mono-raspberry-pi-vs-win10-iot-core/</link>
      <pubDate>Sat, 30 Sep 2017 21:55:15 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/mono-raspberry-pi-vs-win10-iot-core/</guid>
      
        <description>&lt;p&gt;Last week I posted about &lt;a href=&#34;https://www.matt-thornton.net/tech/net-console-app-mono-raspberry-pi-writing-mysql-compiled-mac&#34;&gt;the setup of a RPI / Mono&lt;/a&gt;. Having played with a little, I&amp;rsquo;ve ultimately abandoned that line of approach.&lt;/p&gt;
&lt;p&gt;This is not directly a reflection on Mono - no doubt the team behind that have done an incredible job of developing a platform well beyond the original intentions of the .NET framework. My main issue was that the application I&amp;rsquo;d written in a true WinDev environment didn&amp;rsquo;t just move over to the RPI / Mono environment, thus my dev cycle was broken.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>.NET console app on Mono on Raspberry Pi writing to MySQL (compiled on a Mac)</title>
      <link>https://matt-thornton.net/tech/net-console-app-mono-raspberry-pi-writing-mysql-compiled-mac/</link>
      <pubDate>Sun, 17 Sep 2017 21:18:29 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/net-console-app-mono-raspberry-pi-writing-mysql-compiled-mac/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;Update: if you&amp;rsquo;re just looking to build a simple LAMP server on a Pi, then there is an updated version of this guide which installs more up to date versions of e.g., PHP, &lt;a href=&#34;https://www.matt-thornton.net/tech/databases/recovering-files-broken-raspberry-pi-part-1&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For reasons I won&amp;rsquo;t go into, I have an unnecessarily complicated set of requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dev environment is Windows 10 + Visual Studio 2015 running as a virtual machine inside VMWare Fusion on Max OSX 10.11.6&lt;/li&gt;
&lt;li&gt;Target application is .NET 4.5.2 running on a Raspberry Pi 3 under Mono&lt;/li&gt;
&lt;li&gt;App must write data to MySQL db&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is my first time working with Mono. It&amp;rsquo;s actually relatively straight-forward to setup, but there were one or two hoops I jumped through, so I figure this may be helpful. You could choose to use VSCode on your Mac if you didn&amp;rsquo;t want to go down the Windows dev VM route.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main issue I encountered is the latest MySQL Connector for .NET that you get using NuGET doesn&amp;rsquo;t seem to work in Mono. The trick was to install an early version (&lt;a href=&#34;https://dev.mysql.com/downloads/file/?id=410730&#34;&gt;6.4.6 to be exact&lt;/a&gt;) and once I did this, all seemed to work OK. Have not got much further yet, so not yet sure what other issues I will encounter.&lt;/p&gt;
&lt;p&gt;This assumes you have a completely fresh copy of Raspbian latest. If you haven&amp;rsquo;t, follow a guide &lt;a href=&#34;https://www.raspberrypi.org/documentation/installation/installing-images/README.md&#34;&gt;here&lt;/a&gt;. I used &lt;a href=&#34;https://etcher.io/&#34;&gt;Etcher&lt;/a&gt; for the first time and was very impressed as it worked perfectly.&lt;/p&gt;
&lt;p&gt;I am using the &lt;a href=&#34;https://www.raspberrypi.org/downloads/raspbian/&#34;&gt;-Lite&lt;/a&gt; (no UI) version so may have had to do extra stuff that the full fat version didn&amp;rsquo;t require. I also configured Apache/PHP etc. so I could have phpmyadmin running.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>.NET application output app.config settings at runtime nicely formatted</title>
      <link>https://matt-thornton.net/tech/programming/net-application-output-app-config-settings-runtime-nicely-formatted/</link>
      <pubDate>Tue, 25 Apr 2017 15:29:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/programming/net-application-output-app-config-settings-runtime-nicely-formatted/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m a big fan of .NET console applications. They&amp;rsquo;re a really quick way of getting something functional up and running fast without wasting loads of effort on user interfaces. (Hey, I&amp;rsquo;m a developer, OK&amp;hellip; not a designer. Function over form and all that.)&lt;/p&gt;
&lt;p&gt;I also make heavy use of the built-in app.config / settings functionality so that I can control functionality at runtime. One thing I wanted to do recently was to output the configured settings to the console window so that I could eyeball all was well before going ahead.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 Programmatically Create List from Custom List Template in C#</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-programmatically-create-list-custom-list-template-c/</link>
      <pubDate>Wed, 12 Apr 2017 13:15:07 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-programmatically-create-list-custom-list-template-c/</guid>
      
        <description>&lt;p&gt;Yep - tech 2010! Continuing my tour of strange facets of old SharePoint technology, here&amp;rsquo;s something new I tried to do today that took a lot more effort than it should.&lt;/p&gt;
&lt;p&gt;The objective was simple: create a new list, based on an existing list.&lt;/p&gt;
&lt;p&gt;This is reasonably easy to do using List Templates&amp;hellip; when you know how of course.&lt;/p&gt;
&lt;p&gt;So the steps are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Save a copy of your current list as a template&lt;/li&gt;
&lt;li&gt;Create a new list based on that template.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The main issue is the way SP stores the custom list template when you&amp;rsquo;ve created it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sample Python code to query Wunderlist API</title>
      <link>https://matt-thornton.net/tech/sample-python-code-query-wunderlist-api/</link>
      <pubDate>Fri, 30 Dec 2016 20:17:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sample-python-code-query-wunderlist-api/</guid>
      
        <description>&lt;blockquote&gt;
&lt;p&gt;Update: Wunderlist is no more - it got acquired by Microsoft :( The domain is also broken but I&amp;rsquo;ll leave the code here for funzies.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I&amp;rsquo;ve been working on a simple application at home, part of which I want a list of items, which I want to be able to control from Wunderlist. As a relative novice to Python, I was looking around for some pre-built library that I could just plug in to my existing code. A few things do exist - there&amp;rsquo;s some &lt;a href=&#34;https://github.com/wunderlist/wunderlist-python&#34;&gt;sample code at Github&lt;/a&gt; and there&amp;rsquo;s even a basic API wrapper called &lt;a href=&#34;https://pypi.python.org/pypi/wunderpy2&#34;&gt;wunderpy2&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>HTML5 input number and search</title>
      <link>https://matt-thornton.net/tech/html5-input-number-search/</link>
      <pubDate>Wed, 15 Jun 2016 08:58:56 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/html5-input-number-search/</guid>
      
        <description>&lt;p&gt;Hurrah! Long gone are the days of frantically worrying whether or not your flashy new website is going to display nicely in IE5 and Netscape (‘Nutscrape&amp;rsquo; Lolz) and the heady days of Firefox (you know, before it became total bloatware.) HTML5, CSS3.0, frameworks like Bootstrap and even - would you believe it - some form of agreement amongst the browser manufacturers on what should work irrespective of what you&amp;rsquo;re viewing it in means that a lot of the old challenges are gone.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SQL Database login for x on x failed. Login failed for x. Event ID: 3351</title>
      <link>https://matt-thornton.net/tech/powershell-tech/sql-database-login-for-x-on-x-failed-login-failed-for-x-event-id-3351/</link>
      <pubDate>Fri, 19 Feb 2016 14:49:31 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/sql-database-login-for-x-on-x-failed-login-failed-for-x-event-id-3351/</guid>
      
        <description>&lt;p&gt;Below follows some notes on an issue I recently encountered and spent best part of a day troubleshooting. This was occurring in a small SharePoint environment but I suspect it could occur in any environment which has some sort of distributed call to a SQL Server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR - it was the Dell KACE Agent. See the end of the article for more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this case though, there was a SharePoint application server, and a SharePoint WFE that every half hour was showing an error in their event logs with EventID 3351. I noticed the errors were staggered - i.e. one server was at 15 and 45 minutes past the hour and the other was at approx 20 and 50 minutes past the hour.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>This functionality is unavailable for fields not associated with a list</title>
      <link>https://matt-thornton.net/tech/sharepoint/this-functionality-is-unavailable-for-fields-not-associated-with-a-list/</link>
      <pubDate>Fri, 21 Aug 2015 17:36:59 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/this-functionality-is-unavailable-for-fields-not-associated-with-a-list/</guid>
      
        <description>&lt;p&gt;Ah, the danger of the Internet. I hit this problem - trying to update a field built-in to a content type (the Title field) so that it was hidden from the UI. Easy I thought, get the SPWeb, get the SPContentType, find the field (ct.Fields[“Title”]), set it to hidden and update it. Nope.&lt;/p&gt;
&lt;p&gt;Exception: This functionality is unavailable for fields not associated with a list&lt;/p&gt;
&lt;p&gt;Engaging my brain / memory resolved this, but not before I encountered numerous “helpful” posts on the web about how what I was trying to do &lt;u&gt;was not possible&lt;/u&gt;. One such example &lt;a href=&#34;http://geekswithblogs.net/Norgean/archive/2013/05/30/functionality-unavailable.aspx&#34;&gt;here&lt;/a&gt;, which categorically stated&amp;hellip;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Features &#43; Renaming</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-features-renaming/</link>
      <pubDate>Wed, 05 Aug 2015 12:14:15 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-features-renaming/</guid>
      
        <description>&lt;p&gt;This is a fun one. In some of our Visual Studio solutions we use the period character - “.” - for project naming which broadly reflects the namespaces in use.&lt;/p&gt;
&lt;p&gt;However, this causes issues for Visual Studio namely in the ability to rename features. So when you create a feature, it will adopt a default name of Feature1 and it&amp;rsquo;s not possible to rename it directly from within the solution.&lt;/p&gt;
&lt;p&gt;Fortunately, there&amp;rsquo;s a nifty workaround that does appear to work, without having to redo your solution/project structure and naming convention. Found via &lt;a href=&#34;http://stackoverflow.com/questions/7168852/visual-studio-2010-sharepoint-dev-tools-can-feature1-feature-be-renamed&#34;&gt;this post&lt;/a&gt;:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sharepoint 2010 &#43; Internal Field Name Max Length</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-internal-field-name-max-length/</link>
      <pubDate>Tue, 04 Aug 2015 13:05:27 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-internal-field-name-max-length/</guid>
      
        <description>&lt;p&gt;Little reminder about something that has just kept me busy for the last hour or so - internal field names in SharePoint lists have a max length of 32 characters. SharePoint treats this a little bizarrely - it will create the column but then truncate the internal field name. Thus is you&amp;rsquo;re doing this programmatically - and then depending on the column existing with that particular field name, things will fall over. You&amp;rsquo;ll probably see an error like&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>gnucash &#43; mysql &#43; OS X 10.10: getting it running</title>
      <link>https://matt-thornton.net/tech/databases/gnucash-mysql-os-x-10-10-getting-it-running/</link>
      <pubDate>Tue, 07 Apr 2015 15:05:53 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/gnucash-mysql-os-x-10-10-getting-it-running/</guid>
      
        <description>&lt;p&gt;&lt;em&gt;This post will help you to get gnucash running with MySQL on OS X 10.10.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I do the bookkeeping and accounts for a variety of small NFPs or charitable organisations. I recently moved my bookkeeping for these from a combination of Sharepoint (seriously) and SSRS and Excel in to &lt;a href=&#34;http://gnucash.org&#34;&gt;Gnucash&lt;/a&gt;. I had been looking for a decent free app for a while and whilst there are some interesting cloud options (in fact there are a million options) I stumbled across Gnucash - a nice looking open source, cross-platform tool that would work on my Mac (without X11) and decided to go for it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Two useful SharePoint Powershell links</title>
      <link>https://matt-thornton.net/tech/sharepoint/two-useful-sharepoint-powershell-links/</link>
      <pubDate>Fri, 22 Aug 2014 18:35:19 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/two-useful-sharepoint-powershell-links/</guid>
      
        <description>&lt;p&gt;I continue to do some work in SharePoint 2010 which means I continue to trip over weird issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Issue 1: Error creating content type. A duplicate content type was found.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.mattjimison.com/blog/2011/06/21/a-duplicate-content-type-found-error/&#34;&gt;Matt&lt;/a&gt; covers this issue:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you’ve gotten this error and come to this site looking for answers, chances are it isn’t simply because the name you’re trying to give a new content type is already in use. On the contrary, you are probably sitting there saying that you know without a doubt the name you are entering is not in use, and you have probably even pounded a random value out on your keyboard just to prove the point.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Event ID: 1108 SQL Server Reporting Services cannot load the SQLPDW extension</title>
      <link>https://matt-thornton.net/tech/business-intelligence-tech/event-id-1108-sql-server-reporting-services-cannot-load-the-sqlpdw-extension/</link>
      <pubDate>Thu, 27 Feb 2014 17:33:57 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/business-intelligence-tech/event-id-1108-sql-server-reporting-services-cannot-load-the-sqlpdw-extension/</guid>
      
        <description>&lt;p&gt;This event log error will occur in Sharepoint 2010 or SharePoint 2013 environments with SQL Server 2012 and SSRS in integrated mode. You will see either&lt;/p&gt;
&lt;p&gt;“SQL Server Reporting Services Shared Service cannot load the SQLPDW extension. (Application: [service app name]. CorrelationId: etc.)”&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;“SQL Server Reporting Services Shared Service cannot load the TERADATA extension. (Application: [service app name]. CorrelationId: etc.)”&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://technet.microsoft.com/en-us/library/ms159704.aspx#TeradataException&#34;&gt;This link&lt;/a&gt; explains some of the reasoning behind it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This error occurs because the Teradata extension is registered in the Reporting Services configuration file by default, but the Teradata assemblies are not shipped with SQL Server 2008 or as part of the .NET Framework. If the error message does not bother you, you can ignore the error when it is logged.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint list views filtered by date AND time</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-list-views-filtered-by-date-and-time/</link>
      <pubDate>Fri, 31 Jan 2014 12:41:56 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-list-views-filtered-by-date-and-time/</guid>
      
        <description>&lt;p&gt;There are a &lt;a href=&#34;http://abstractspaces.wordpress.com/2009/05/02/common-date-time-formulas-for-sharepoint-calculated-fields/&#34;&gt;huge&lt;/a&gt; &lt;a href=&#34;http://social.technet.microsoft.com/Forums/en-US/57758c23-8a4d-4160-89e6-5539d9153337/content-query-web-part-filter-problems-date-vs-datetime?forum=sharepointadminlegacy&#34;&gt;number&lt;/a&gt; of &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/aa981241(v=office.14).aspx&#34;&gt;articles&lt;/a&gt; &lt;a href=&#34;http://joshmccarty.com/2011/04/using-an-offset-in-a-caml-query-to-filter-list-items-and-other-useful-caml-resources/&#34;&gt;out&lt;/a&gt; &lt;a href=&#34;http://sharepoint.stackexchange.com/questions/55436/caml-offsetdays&#34;&gt;there&lt;/a&gt; &lt;a href=&#34;http://www.sharepoint-tips.com/2009/06/using-today-token-in-caml-query.html&#34;&gt;discussing&lt;/a&gt; &lt;a href=&#34;http://nickgrattan.wordpress.com/2008/04/24/filtering-views-by-time-and-date/&#34;&gt;how&lt;/a&gt; to &lt;a href=&#34;http://stackoverflow.com/questions/745059/filtering-sharepoint-lists-on-a-now-or-today&#34;&gt;create&lt;/a&gt; (semi-) dynamic list views or filters based on some volatile property like current time. For instance: “Show me all documents that were created today” or “Show me all documents that were created more than 7 days ago” or “Show me all in tasks due in the next three days”. The solution to this is some combination of a list view filter, or calculated column, and the use of a property like [Today]. (Note: There are a couple of key &lt;a href=&#34;http://blog.pentalogic.net/2008/11/truth-about-using-today-in-calculated-columns/&#34;&gt;caveats&lt;/a&gt; to do with this.)&lt;/p&gt;
&lt;p&gt;A limitation of this, however, is that the time portion of a datetime is ignored. So when I wanted to “show all documents created in the last 10 minutes” - I couldn&amp;rsquo;t. There were a few workarounds - various combinations of calculated columns, using SharePoint Designer and so on were available - but I was determined to find a solution that didn&amp;rsquo;t require any of this!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Debugging SharePoint 2010</title>
      <link>https://matt-thornton.net/tech/sharepoint/debugging-sharepoint-2010/</link>
      <pubDate>Tue, 14 Jan 2014 11:50:25 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/debugging-sharepoint-2010/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m posting this here as, despite using this all the time, I still find myself looking it up.&lt;/p&gt;
&lt;p&gt;There are a couple of things you can do, in your &lt;strong&gt;Dev&lt;/strong&gt; environment, to assist with debugging SharePoint and your custom solutions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CustomErrors and SafeMode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should only be used in a Dev environment, but you can disable the “friendly” error messages in SharePoint and replace them with full exceptions, and, if desirable, a stack trace.&lt;/p&gt;
&lt;p&gt;You can edit the web.config for your application. Note: SharePoint has various web.configs spewed about the place, and for this to work, you need to edit the one located in&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 workflow stuck on starting</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-stuck-on-starting/</link>
      <pubDate>Wed, 30 Oct 2013 13:20:22 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-stuck-on-starting/</guid>
      
        <description>&lt;p&gt;Using SharePoint Workflow (in fact, Nintex, but it applies to “standard” SharePoint workflow, after all, Nintex is just standard workflow with a few bells and whistles) on a document library and a workflow that is set to auto-start on document creation.&lt;/p&gt;
&lt;p&gt;The symptoms were: if you add a document to the library, then the workflow fires, but it sits forever in a state of “starting”. However, if you manually start the workflow on the same document, then it runs absolutely fine.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; SSRS Integrated mode &#43; deploy &#43; login prompt</title>
      <link>https://matt-thornton.net/tech/business-intelligence-tech/sharepoint-2010-ssrs-integrated-mode-deploy-login-prompt/</link>
      <pubDate>Wed, 02 Oct 2013 10:52:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/business-intelligence-tech/sharepoint-2010-ssrs-integrated-mode-deploy-login-prompt/</guid>
      
        <description>&lt;p&gt;If you try to deploy an SSRS report from Visual Studio to your SharePoint environment, where SSRS has been configured in Integrated Mode, using the built-in deployment mechanism, you may encounter a situation where you are endlessly prompted for login boxes, and no account details seem to help.&lt;/p&gt;
&lt;p&gt;There is some useful info out there about what causes this - typically a mismatch where you&amp;rsquo;re using Kerberos authentication. There&amp;rsquo;s a good post and some resolution &lt;a href=&#34;http://blogs.msdn.com/b/lukaszp/archive/2008/03/26/solving-the-reporting-services-login-issue-in-the-february-ctp-of-sql-server-2008.aspx&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Exception occured while connecting to WCF endpoint: An unsecured or incorrectly secured fault was received from the other party</title>
      <link>https://matt-thornton.net/tech/sharepoint/exception-occured-while-connecting-to-wcf-endpoint-an-unsecured-or-incorrectly-secured-fault-was-received-from-the-other-party/</link>
      <pubDate>Tue, 18 Jun 2013 09:30:00 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/exception-occured-while-connecting-to-wcf-endpoint-an-unsecured-or-incorrectly-secured-fault-was-received-from-the-other-party/</guid>
      
        <description>&lt;p&gt;When SharePoint goes bad: spurious error messages in the ULS logs that will lead you down a blind path. ULS logs were full of User Profile related errors, all saying moreorless this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Exception occured while connecting to WCF endpoint: System.ServiceModel.Security.MessageSecurityException: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. —&amp;gt; System.ServiceModel.FaultException: An error occurred when verifying security for the message&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spent a while looking through the UPS app config, Profile DB and everything looked normal. The issue is actually a “generic” WCF error - whereby the system clocks on the App Server (1) and WFE server (2) were out of sync by about 6 minutes. Manually setting the clock on the slow one to the current time resolved the issue.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SP2010 and Managed Metadata and &amp;</title>
      <link>https://matt-thornton.net/tech/sp2010-and-managed-metadata-and/</link>
      <pubDate>Tue, 16 Apr 2013 17:40:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sp2010-and-managed-metadata-and/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve been doing some work with dynamically populating a Managed Metadata term store using the API and data stored in a list.&lt;/p&gt;
&lt;p&gt;The code was quite simple - check to see if a term existed, and if not, add it. The first pass of this routine would work fine, but then the second pass would crap out with an issue:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is already a term with the same default label and parent term.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a bit of debugging, I figured out it was falling over on a term that contained an &amp;amp; (ampersand) in the name. After a further bit of debugging (converting the character to HEX) it became apparent that it&amp;rsquo;s storing it as the wide (*pretty) rendition of the ampersand. And after some further &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/ee577519%28v=office.14%29.aspx&#34;&gt;research&lt;/a&gt;, it would appear that this is by design!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; DocumentSets &#43; OfficialFile.asmx max file size</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-documentsets-officialfile-asmx-max-file-size/</link>
      <pubDate>Thu, 07 Mar 2013 16:52:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-documentsets-officialfile-asmx-max-file-size/</guid>
      
        <description>&lt;p&gt;Tripped over &lt;a href=&#34;http://danmyhre.wordpress.com/2012/05/15/50mb-limit-on-files-sent-to-content-organizerofficialfile-asmx/&#34;&gt;this issue&lt;/a&gt; today. This post explains exactly what&amp;rsquo;s going on - namely that when using the OfficialFile web service (for e.g., records management), the 50mb upload file size is in place, irrespective of any setting the Web Application General Settings.&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Make sure that you have set the max file size on the web application&lt;br&gt;
Central Admin –&amp;gt; Manage Web Applications –&amp;gt; Select the Web Application –&amp;gt; General Settings –&amp;gt; Maximum Upload Size&lt;/li&gt;
&lt;li&gt;Open the following file and edit on each SharePoint server:&lt;br&gt;
C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14ISAPIweb.config&lt;br&gt;
Add the following section, then save and close&lt;br&gt;
&lt;code &gt;&lt;location path=”OfficialFile.asmx”&gt; &amp;lt;system.web&amp;gt; &lt;httpRuntime maxRequestLength=”2097151″ executionTimeout=”240″ /&gt; &amp;lt;/system.web&amp;gt; &lt;/location&gt;&lt;/code&gt;&lt;br&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Didn&amp;rsquo;t even need to recycle the web services website/app pool. Perfect!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Current user is not a farm administrator - redux</title>
      <link>https://matt-thornton.net/tech/sharepoint/current-user-is-not-a-farm-administrator-redux/</link>
      <pubDate>Tue, 05 Feb 2013 11:20:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/current-user-is-not-a-farm-administrator-redux/</guid>
      
        <description>&lt;p&gt;A while ago, I &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-2010-custom-retention-formula-installation-failure-current-user-is-not-a-farm-administrator#.UQ_lilrC9Q4&#34;&gt;posted about an issue with deploying a custom SharePoint retention policy&lt;/a&gt; where activating a feature was failing due to a permissions issue.&lt;/p&gt;
&lt;p&gt;I fell over this issue again recently, but despite following all the advice in that post, I still couldn&amp;rsquo;t get things to activate and I didn&amp;rsquo;t really want to start giving all known service accounts local admin and DBO on everything in sight. So instead, I used a quick Powershell workaround. This works because PS always runs in the context of the Farm Admin, so I assumed it must have the relevant permissions. This script will find the feature you want to activate, and then activate it. Success is no message returned!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The OLE DB provider Microsoft.Ace.OLEDB.12.0 for linked server (null) reported an error. Access denied.</title>
      <link>https://matt-thornton.net/tech/databases/the-ole-db-provider-microsoft-ace-oledb-12-0-for-linked-server-null-reported-an-error-access-denied/</link>
      <pubDate>Fri, 30 Nov 2012 11:11:01 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/the-ole-db-provider-microsoft-ace-oledb-12-0-for-linked-server-null-reported-an-error-access-denied/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m noting this here primarily because I&amp;rsquo;m almost certain to trip over this again in the future. If you want to use the ACE or JET providers to read an e.g., Excel spreadsheet to an e.g., SQL Server table, then something like this is possible. Assuming you had a simple Excel workbook (Book1.xlsx) and in Sheet1 you had&lt;/p&gt;
&lt;p&gt;Col1 Col2&lt;br&gt;
Test Test2&lt;/p&gt;
&lt;p&gt;You could use this to load it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SELECT * INTO #tmpTable FROM OPENROWSET(&#39;Microsoft.ACE.OLEDB.12.0&#39;,&#39;Excel 12.0 Xml;HDR=YES;Database=C:TempBook1.xlsx&#39;,&#39;SELECT * FROM [Sheet1$]&#39;)&amp;lt;br /&amp;gt; GO&amp;lt;br /&amp;gt; SELECT * from #tmpTable&amp;lt;br /&amp;gt; &lt;/code&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Auto generate SQL audit tables and database triggers</title>
      <link>https://matt-thornton.net/tech/databases/auto-generate-sql-audit-tables-and-database-triggers/</link>
      <pubDate>Wed, 28 Nov 2012 15:56:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/auto-generate-sql-audit-tables-and-database-triggers/</guid>
      
        <description>&lt;p&gt;One approach to monitoring version history of items in SQL tables is to use an _Audit table version with database triggers. However, the creation and maintenance of the tables and triggers can be time consuming. &lt;a href=&#34;http://www.geekzilla.co.uk/ViewECBC0CC3-1C7E-4E7E-B243-F2F259A5C920.htm&#34;&gt;This post&lt;/a&gt; provided a nice script to automate the creation but unfortunately it suffered a few issues. In the comments, someone posted a sproc version of the script - but unfortunately this was also broken.&lt;/p&gt;
&lt;p&gt;So I have tidied it up and fixed the issues. My host doesn&amp;rsquo;t let me post SQL in these posts, so you can view the file &lt;a href=&#34;https://matt-thornton.net/images/posts/createtriggers.txt&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Designer 2010 - list/library There are no items to show in this view - ListData.svc woes</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-designer-2010-listlibrary-there-are-no-items-to-show-in-this-view-listdata-svc-woes/</link>
      <pubDate>Thu, 08 Nov 2012 17:38:38 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-designer-2010-listlibrary-there-are-no-items-to-show-in-this-view-listdata-svc-woes/</guid>
      
        <description>&lt;p&gt;This is one of &lt;em&gt;those&lt;/em&gt; SharePoint errors. You know the ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I was trying to use SharePoint Designer to customise a list. I opened up SharePoint Designer, and, although I could connect to the site itself, when clicking on the lists/libraries folder, you get a message saying:&lt;/p&gt;
&lt;p&gt;“There are no items to show in this view”.&lt;/p&gt;
&lt;p&gt;Weird. I tried this on various other web applications (even on the same server) and everything was working fine.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 - Managed Metadata - Required feature is not enabled for this column type</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-managed-metadata-required-feature-is-not-enabled-for-this-column-type/</link>
      <pubDate>Tue, 06 Nov 2012 19:17:23 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-managed-metadata-required-feature-is-not-enabled-for-this-column-type/</guid>
      
        <description>&lt;p&gt;Quick tip: if you&amp;rsquo;re using the Managed Metadata service in SharePoint 2010, you may encounter an issue when trying to use it in a site column. When creating the column of type, Managed Metadata, you may encounter the error message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Required feature is not enabled for this column type&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is simple to fix. In powershell, issue&lt;/p&gt;
&lt;p&gt;&lt;code&gt;get-spfeature | where {$_.DisplayName -eq &#39;TaxonomyFieldAdded&#39;} | enable-spfeature -url http://yoursiteurl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;changing the -url paramater to match the URL of your site. Job done.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Some notes on VMWare Converter</title>
      <link>https://matt-thornton.net/tech/some-notes-on-vmware-converter/</link>
      <pubDate>Thu, 11 Oct 2012 10:50:24 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/some-notes-on-vmware-converter/</guid>
      
        <description>&lt;p&gt;VMWare converter is a free tool from VMWare to convert Virtual Machines from one format to another. I&amp;rsquo;ve recently built an ESXi server and was looking to move some machines from VMWare Fusion 5 over to it. There are a few pitfalls to be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;VMWare Converter 5.0 is not compatible with ESXi 5.1 (yet). Don&amp;rsquo;t even try - Converter will just hang.&lt;/li&gt;
&lt;li&gt;Converter 4.3 is allegedly compatible with 5.1, but I didn&amp;rsquo;t have any success. I would get “invalid fault” exceptions.&lt;/li&gt;
&lt;li&gt;Convert 5.0 with ESXi 5.0U1 is painfully slow to transfer machines, even on gigabit lan. There is one option &lt;a href=&#34;http://communities.vmware.com/thread/333786?tstart=30&#34;&gt;here&lt;/a&gt; that explains how to improve conditions. However, even with that fix, I only got transfer speeds of around 5mb/s when transferring file-based VMs.&lt;/li&gt;
&lt;li&gt;It may not help, but check DNS and network config between you and your ESXi server is setup. DNS in my ESXi was set up to be some random IP address which presumably did not help.&lt;/li&gt;
&lt;li&gt;Installing the converter on the machine you want to transfer is much faster. So rather than targetting a .vmx file, you can tell it to transfer the “currently powered-on machine”. Doing this with a simple W7 machine achieved speeds of anywhere up to 14mb/s. (Not great if you want to transfer a non-Windows machine, though!)&lt;/li&gt;
&lt;li&gt;You may encounter issues with VMs that have multiple virtual hard drives. I had a SQL Server with 3 separate drives installed, and whilst it did transfer all drives, with data intact, only the C: drive was alive when starting the machine. You may need to use DISKPART to get the other drives going again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Will add more issues as I encounter them.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My VMWare ESXi build - Part 2 - Building ESXi</title>
      <link>https://matt-thornton.net/tech/my-vmware-esxi-build-part-2-building-esxi/</link>
      <pubDate>Wed, 10 Oct 2012 17:41:50 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/my-vmware-esxi-build-part-2-building-esxi/</guid>
      
        <description>&lt;p&gt;This is the second post in a series about running ESXi on a home server. See the first part, &lt;a href=&#34;https://www.matt-thornton.net/tech/my-vmware-esxi-5-1-build-part-1-the-hardware&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;ESXi is a free download from VMWare. You just need to register an account and install it. Simple huh? Well, not all the way. Two main issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I didn&amp;rsquo;t install an optical drive (intentionally, although with hindsight it would have been a bit easier to have one)&lt;/li&gt;
&lt;li&gt;The Broadcam NetXtreme BCM57781 LAN card on my ASROCK board is not supported by ESXi. D&amp;rsquo;oh.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, there are ways around this. If you&amp;rsquo;re running the same build as me, you should be able to follow these steps. If you&amp;rsquo;re using different hardware, substitute in the relevant bits!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My VMWare ESXi 5.1 build - Part 1 - The Hardware</title>
      <link>https://matt-thornton.net/tech/my-vmware-esxi-5-1-build-part-1-the-hardware/</link>
      <pubDate>Wed, 10 Oct 2012 17:20:28 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/my-vmware-esxi-5-1-build-part-1-the-hardware/</guid>
      
        <description>&lt;p&gt;This is the first part of a series on running ESXi on a home server. See the second part, &lt;a href=&#34;https://matt-thornton.net/tech/my-vmware-esxi-build-part-2-building-esxi&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a been a while since updating this blog. Apologies, but it&amp;rsquo;s mostly because I&amp;rsquo;ve been really busy. As part of that though, I use a lot of VMWare Virtual Machines. Being an Apple “fanboy” (gah) I use VMWare Fusion on my Macs which is great for running various virtual machines. (In fact, Windows 7 and Windows Server 2008 R2 seem to run a hell of a lot better virtualised rather than natively. Go figure.)&lt;/p&gt;
&lt;p&gt;Anyway, it got to a point where I decided I needed a bigger and more robust framework to run virtual machines on. Simply speaking, running one or two VMs on my Mac is fine, but when you need to run several at one time with limited resources, it starts to get a lot more involved. Given that VMWare ESXi Hypervisor is a free platform for running a single server VM host, I figured I&amp;rsquo;d experiment with building an ESXi server for home use. This blog post details some of the pain I went through in getting there.&lt;/p&gt;
&lt;p&gt;Before I get started, there are a few terms I will use:&lt;/p&gt;
&lt;p&gt;HOST - the physical machine, that is running ESXi&lt;br&gt;
GUEST (or guest OS) - this is the virtual machine(s) that then runs on ESXi&lt;/p&gt;
&lt;p&gt;And quickly:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is ESXi&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ESXi is a cut down linux kernel that acts as a hypervisor. That is, it&amp;rsquo;s a piece of software that runs on the physical machine, and then presents the physical hardware to the guest machines that want to use it. It in itself is not an OS. So they key difference here between say VMWare Fusion or Workstation is that you&amp;rsquo;re not running an edition of e.g., Windows Server which itself is running Virtual Machines - you&amp;rsquo;re, moreorless, cutting out the middle man.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 State Machine workflow delayActivity tip</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-workflow-delayactivity-tip/</link>
      <pubDate>Wed, 03 Oct 2012 12:59:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-workflow-delayactivity-tip/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re using a delayActivity in your Visual Studio State Machine workflow, you are likely to want to use the InitializeTimeoutDuration handler to set the length of the delay.&lt;/p&gt;
&lt;p&gt;An easy mistake to make is to think you could do the following:&lt;/p&gt;
&lt;pre&gt;private void DelayActivity_InitializeTimeoutDuration(object sender, EventArgs e)
        {
            delayActivity1.TimeoutDuration = new TimeSpan(0, 10, 0);
        }
&lt;/pre&gt;
&lt;p&gt;However, this won&amp;rsquo;t work. This is because SharePoint will intialise a new instance of the delayActivity with the timeoutduration specified as default. To set the TimeoutDuration of your “actual” activity, you should do the following:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 State Machine workflow onWorkflowItemChanged firing multiple times</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-workflow-onworkflowitemchanged-firing-multiple-times/</link>
      <pubDate>Fri, 28 Sep 2012 15:53:15 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-workflow-onworkflowitemchanged-firing-multiple-times/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re designing a SharePoint 2010 workflow, particularly a state machine, you may base the workflow activities around an item in a list. Particularly, you may want the workflow to carry out activities when the item is changed by the end user.&lt;/p&gt;
&lt;p&gt;This is a relatively straight-forward task, but one thing you will quickly encounter is that if you have multiple states, and each one handling the onWorkflowItemChanged event, you&amp;rsquo;ll notice that the event will fire once for each occurrence of your handler. So if you had 3 states, and each one has an onWorkflowItemChanged event, then your state that is handling the event will receive it 3 times. This is clearly undesirable and quite frankly strange behaviour.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Get SPUser from Person or Group field</title>
      <link>https://matt-thornton.net/tech/sharepoint/get-spuser-from-person-or-group-field/</link>
      <pubDate>Fri, 28 Sep 2012 10:00:40 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/get-spuser-from-person-or-group-field/</guid>
      
        <description>&lt;p&gt;On any list, you can define a new column as a type of “Person or Group”. In event handlers or workflow, you may want to grab this value as use it as a real SPUser object, which will expose the name and email address, for example. Unfortunately if you just grab the value of the field, e.g.,&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;br /&amp;gt; item[&amp;quot;MyPersonField&amp;quot;]&amp;lt;br /&amp;gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;you&amp;rsquo;ll end up with a string that looks a bit like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;15;#DOMAIN\Matt Thornton&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 State Machine delay activity (and why it may not fire)</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-delay-activity-and-why-it-may-not-fire/</link>
      <pubDate>Sun, 23 Sep 2012 21:44:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-delay-activity-and-why-it-may-not-fire/</guid>
      
        <description>&lt;p&gt;A common problem in designing workflows is how to make the workflow “sleep” for a period whilst users do (or don&amp;rsquo;t do) something. A common scenario is where you wait for some user input, but if you don&amp;rsquo;t get any by a certain time to continue the workflow in a different stream. You achieve this with a delay activity where you specify a timeout in the form of a Timespan.&lt;/p&gt;
&lt;p&gt;The delay activity was broken in SP2007 which was then fixed with a Hotfix. Surprisingly, this remains &lt;em&gt;kind of broken&lt;/em&gt; in SP2010 as well. That is to say, the delay activity never wakes up.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Activity onWorkflowItemChanged validation warning: The correlation token may be uninitialized</title>
      <link>https://matt-thornton.net/tech/sharepoint/activity-onworkflowitemchanged-validation-warning-the-correlation-token-may-be-uninitialized/</link>
      <pubDate>Sun, 23 Sep 2012 13:45:34 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/activity-onworkflowitemchanged-validation-warning-the-correlation-token-may-be-uninitialized/</guid>
      
        <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; the below information is useful reference, but you may find it leads to undesirable results, where your workflowItem events fire repeatedly. Read the below, and then read &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-2010-state-machine-workflow-onworkflowitemchanged-firing-multiple-times&#34;&gt;this&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Working in Visual Studio 2010 and designing SharePoint 2010 state machine and sequential workflows, you may come across the following warning message when building and deploying your solution when using the onWorkflowItemChanged event:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Activity ‘onWorkflowItemChanged&amp;rsquo; validation warning: The correlation token may be uninitialized&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You will also probably notice that your workflow doesn&amp;rsquo;t respond or wake up to any onWorkflowItemChanged events. This is almost certainly due to the correlation token you&amp;rsquo;re using. The way to get this working correctly is:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Error occurred in deployment step Activate Features: Invalid file name</title>
      <link>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-invalid-file-name/</link>
      <pubDate>Thu, 30 Aug 2012 16:29:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-invalid-file-name/</guid>
      
        <description>&lt;p&gt;This is one of those “d&amp;rsquo;oh” SharePoint moments. Created a new SharePoint feature and used Visual Studio to deploy it. Worked like a dream. Great, I think, ready for UAT. Package up the solution, install to the UAT environment and then attempt to activate the feature. Boom.&lt;/p&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://matt-thornton.net/images/posts/doh.png&#34; alt=&#34;&#34; title=&#34;doh#&#34; /&gt; 
&lt;p&gt;Weird. The feature was very simple so the error, as is the wont of SharePoint, was a bit unhelpful. Quick bit of Googling which didn&amp;rsquo;t help, before, thankfully, my brain engaged. I checked to see if what my feature was trying to do - create a site column and attach it to a couple of content types - had actually worked. It had.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Error occurred in deployment step Activate Features: This functionality is unavailable for field collections not associated with a list.</title>
      <link>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-this-functionality-is-unavailable-for-field-collections-not-associated-with-a-list/</link>
      <pubDate>Thu, 30 Aug 2012 15:40:46 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-this-functionality-is-unavailable-for-field-collections-not-associated-with-a-list/</guid>
      
        <description>&lt;p&gt;This follows on from some of my other posts about deploying fields and content types programmatically. In this case, I was simply trying to add a choice field (SPFieldChoice) to a site, and then add it to some content types.&lt;/p&gt;
&lt;p&gt;So I had something like:&lt;/p&gt;
&lt;pre&gt;var myCt = // snip - code to get my existing content type;

// create the choice column
                var fieldChoices = new StringCollection() { &#34;choice1&#34;, &#34;choice2&#34;, &#34;choice3&#34; };
                var docSourceField = web.Fields.Add(&#34;MyChoiceColumn&#34;, SPFieldType.Choice, false, false, fieldChoices);

                // get the column we just created 
                SPFieldChoice docSourceChoiceField = (SPFieldChoice)web.Fields[DocumentSourceColumnName];

                if (null == docSourceChoiceField)
                {
                    throw new Exception(&#34;Error: Couldn&#39;t get the docSourceChoiceField.&#34;);
                }
                                // add the new field to my content type
                myCt.Fields.Add(docSourceChoiceField);
                myCt.Update(true);
&lt;/pre&gt;
&lt;p&gt;However, running this fell over with the error:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Event Receivers &#43; Inherited Documents &#43; ItemUpdating</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-event-receivers-inherited-documents-itemupdating/</link>
      <pubDate>Thu, 12 Jul 2012 10:27:49 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-event-receivers-inherited-documents-itemupdating/</guid>
      
        <description>&lt;p&gt;A while back I &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-event-receivers-itemadded-null-columns-fun&#34;&gt;posted&lt;/a&gt; some info about using Event Receivers in SharePoint 2010 and a workaround to item values being null. Today, I needed to do something much more basic, and during an ItemUpdating event set the value of a column. I wrote the code that I knew would work - but, of course, it simply wouldn&amp;rsquo;t work. I did a spot of Googling about, and found the chaps at Tango Technology who had written a &lt;a href=&#34;http://blog.tangotechnologygroup.com/2011/02/09/sharepoint-events-setting-a-column-value-in-the-itemupdating-event/&#34;&gt;very simple solution&lt;/a&gt; to it. But - it wouldn&amp;rsquo;t work for me. I knew the event was firing - but no matter what I did, the new value just wouldn&amp;rsquo;t “take”.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 upgrade failure - Failed to upgrade SharePoint Products</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-upgrade-failure-failed-to-upgrade-sharepoint-products/</link>
      <pubDate>Fri, 06 Jul 2012 12:02:49 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-upgrade-failure-failed-to-upgrade-sharepoint-products/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;m not a SharePoint administrator, but from time to time you have to get involved. I needed to migrate some data between farms but in order to do a backup / restore of e.g., Site Collections, version numbers have to be in range. Although the source server was reporting the version was OK, in Central Admin, it was saying that an upgrade was required. This is usually achieved by running the SharePoint 2010 Products Configuration Wizard.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quick tip: Access Denied when editing navigation (areanavigationsettings.aspx) in MySites</title>
      <link>https://matt-thornton.net/tech/sharepoint/quick-tip-access-denied-when-editing-navigation-areanavigationsettings-aspx-in-mysites/</link>
      <pubDate>Thu, 03 May 2012 20:03:27 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/quick-tip-access-denied-when-editing-navigation-areanavigationsettings-aspx-in-mysites/</guid>
      
        <description>&lt;p&gt;If you encounter an issue, specifically in MySites, where you get an Access Denied error trying to edit the navigation, check whether you have the publishing feature enabled. I had this same issue when “Enterprise features” were re-enabled at the Central Admin, which for some reason enabled that on the My Site host, which isn&amp;rsquo;t needed.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Error activating features - key cannot be null - redux</title>
      <link>https://matt-thornton.net/tech/sharepoint/error-activating-features-key-cannot-be-null-redux/</link>
      <pubDate>Thu, 08 Mar 2012 18:10:57 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/error-activating-features-key-cannot-be-null-redux/</guid>
      
        <description>&lt;p&gt;A while ago, I &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-error-occurred-during-deployment-step-activate-features&#34;&gt;posted about&lt;/a&gt; a problem deploying declarative XML content types and fields.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Error occurred in deployment step ‘Activate Features’: Key cannot be null. Parameter name: Key&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve just encountered the same error - but this time with a field being deployed programmatically - i.e., no XML at all. I was deploying a Managed Metadata field (TaxonomyField) and doing this:&lt;/p&gt;
&lt;pre&gt;TaxonomyField taxField = web.Fields.CreateNewField(&#34;TaxonomyFieldType&#34;, &#34;My Field&#34;) as TaxonomyField;
taxField.SspId = termStore.Id;
...snip...
taxField.Update();
web.Fields.Add(taxField);
&lt;/pre&gt;
&lt;p&gt;This seemed pretty reasonable - except for the error, of course. In this case it was caused by &lt;strong&gt;taxField.Update()&lt;/strong&gt; - this is not required - the field doesn&amp;rsquo;t actually exist at this point.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; Custom retention formula installation failure &#43; current user is not a farm administrator</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-custom-retention-formula-installation-failure-current-user-is-not-a-farm-administrator/</link>
      <pubDate>Tue, 06 Mar 2012 19:06:19 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-custom-retention-formula-installation-failure-current-user-is-not-a-farm-administrator/</guid>
      
        <description>&lt;p&gt;You may encounter this issue when trying to deploy a Custom Expiration Formula for use as part of records management within SharePoint 2010. The error you may encounter is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The SPPersistedObject, PolicyConfigService Name=PolicyConfigService, could not be updated because the current user is not a Farm Administrator.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a really nasty little error and it may be easy to miss as people have a tendency to use an empty try catch {} in their FeatureActivation so the feature activates but you&amp;rsquo;re not aware there is a problem. (Well, you become aware of it when for all the activation in the world, the “Use Custom Retention Formula” dropdown never changes from disabled.) It&amp;rsquo;s particularly annoying because you&amp;rsquo;re activating a feature at the Site Collection level - why would you need Farm Admin to do it? Well, it&amp;rsquo;s because it makes changes to the Content Service (or thereabouts) - and this is proven when you go to Central Admin &amp;gt; Security &amp;gt; Configure Information Policy Management &amp;gt; Retention and you&amp;rsquo;ll notice (after a successful activation) that your custom policy shows up in the “Resources” section.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; Search within document sets</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-search-within-document-sets/</link>
      <pubDate>Mon, 05 Mar 2012 15:15:43 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-search-within-document-sets/</guid>
      
        <description>&lt;p&gt;I could play a game of “state the obvious” and say that SharePoint 2010 search is powerful. It&amp;rsquo;s really an incredible beast - and that&amp;rsquo;s even without any FAST goodies in there. But something that isn&amp;rsquo;t obviously supported OOTB but seems there&amp;rsquo;s a few people out there trying to do - search &lt;strong&gt;within&lt;/strong&gt; folders, or in my case, Document Sets. SharePoint search was already configured and, actually, I &lt;em&gt;could&lt;/em&gt; search within document sets, by doing a site wide search and then using the refinement panel (on the left hand side of a search result page in a search center) to narrow it down to my document set. What I wanted to do was perform this search directly from a search box.&lt;/p&gt;
&lt;p&gt;As you use the refinement panel, you&amp;rsquo;ll notice that the URL changes, as you stack up the filters, and as it happens, that&amp;rsquo;s all that&amp;rsquo;s required is a properly crafted URL:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;br /&amp;gt; http://yoursite/_layouts/OssSearchResults.aspx?k=[searchterms] &amp;lt;strong&amp;gt;site:&amp;quot;http://yoursite/yourlibrary/yourdocset&amp;quot;&amp;lt;/strong&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note the highlighted part - you can restrict your search results to a specified document set (or folder) by supplying the URL in to the &lt;strong&gt;site:&lt;/strong&gt; refinement option/filter.&lt;/p&gt;
&lt;p&gt;With that bit taken care of, the challenge was to get a searchbox that would do this dynamically - i.e., craft the URL properly to apply the filter and direct through to the search results page properly. It&amp;rsquo;s possible using a standard search box and the trusty old Content Editor.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint Event Receivers &#43; ItemAdded &#43; Null Columns fun</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-event-receivers-itemadded-null-columns-fun/</link>
      <pubDate>Fri, 02 Mar 2012 18:24:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-event-receivers-itemadded-null-columns-fun/</guid>
      
        <description>&lt;p&gt;Event receivers enable you to run some action when a particular event occurs. For example, every time a new item is added to a list, you may want to run some code, or start a workflow. This is really handy - but be aware of some gotchas. SharePoint event receivers will generally be one of two types - an “-ing” event or an “-ed” event, such as ItemAdding or ItemAdded. As their name suggests, an -ing event runs &lt;em&gt;whilst&lt;/em&gt; the the event is happening (and might therefore give you the option to cancel it) and -ed events occur &lt;em&gt;after&lt;/em&gt; the event has occurred. You need to be aware of how these events run. Generally, the -ing events run &lt;em&gt;synchronously&lt;/em&gt;, that is, they are blocking and run in the same thread/cycle that they were generated in, and -ed events run &lt;em&gt;asynchronously&lt;/em&gt;, meaning the opposite - they are not blocking - they will be run in a separate thread and not block the execution of the main thread. You therefore need to be aware of what info may, or may not, be available to you when you run code in an event receiver.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Web Service access &#43; internal traffic &#43; 407 Proxy Authentication Required</title>
      <link>https://matt-thornton.net/tech/web-service-access-internal-traffic-407-proxy-authentication-required/</link>
      <pubDate>Fri, 02 Mar 2012 14:35:11 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/web-service-access-internal-traffic-407-proxy-authentication-required/</guid>
      
        <description>&lt;p&gt;This had me stumped for a while. I was developing a SharePoint-based client to consume a simple web service. I started by writing a console app version of the code before deploying to SharePoint. Fairly straight-forward - added a web reference to my VS2010 project, and used&lt;/p&gt;
&lt;pre&gt;MyWebService srv = new MyWebService();
srv.DoSomething();
&lt;/pre&gt;
&lt;p&gt;Early on in the project, I didn&amp;rsquo;t give much to the fact that when calling the method on the web service, I was given a 407 Proxy Authentication Error. I just setup a simple proxy for it:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Creating SharePoint 2010 Content Organizer Rules programmatically</title>
      <link>https://matt-thornton.net/tech/sharepoint/creating-sharepoint-2010-content-organizer-rules-programmatically/</link>
      <pubDate>Thu, 23 Feb 2012 13:43:01 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/creating-sharepoint-2010-content-organizer-rules-programmatically/</guid>
      
        <description>&lt;p&gt;The Content Organizer (gah! Organi&lt;strong&gt;s&lt;/strong&gt;er!) in SharePoint 2010 is a nifty new feature that enables documents to be added to a single library (the “Drop Off Library”) and then let SharePoint &lt;em&gt;route&lt;/em&gt; them through to the correct final resting position based on a set of configured rules. Rules can be configured per content type and allow conditions to be set based on metadata on the item. You can even use it to send documents - and document sets - between site collections, e.g., to a Records Center. Very cool.&lt;/p&gt;
&lt;p&gt;Depending on your requirements, you may find you need to create a lot of rules which as with most things SharePoint can be cumbersome if you need to do it all through the UI. Fortunately, creating the rules programmatically is straight-forward.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Powershell tip - find all checked out files</title>
      <link>https://matt-thornton.net/tech/powershell-tech/powershell-tip-find-all-checked-out-files/</link>
      <pubDate>Wed, 15 Feb 2012 17:51:32 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/powershell-tip-find-all-checked-out-files/</guid>
      
        <description>&lt;p&gt;I needed to quickly find all files in a particular web that were checked out. I immediately went to Powershell, and after hacking about for a few minutes did what I should have done first - Google&amp;rsquo;d it. Doing this revealed that Gary &lt;a href=&#34;http://blog.falchionconsulting.com/index.php/2011/06/getting-and-taking-ownership-of-checked-out-files-using-windows-powershell/&#34;&gt;had already done the bulk of what I needed to do&lt;/a&gt;. However, I made a couple of changes, namely that I only wanted it to traverse a specific web, &lt;strong&gt;but&lt;/strong&gt; I needed it to traverse any subwebs in that web and lists.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quick tip: SharePoint powershell - get items in a list based on custom columns and other hints</title>
      <link>https://matt-thornton.net/tech/powershell-tech/quick-tip-sharepoint-powershell-get-items-in-a-list-based-on-custom-columns-and-other-hints/</link>
      <pubDate>Tue, 14 Feb 2012 12:35:49 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/powershell-tech/quick-tip-sharepoint-powershell-get-items-in-a-list-based-on-custom-columns-and-other-hints/</guid>
      
        <description>&lt;p&gt;This may be handy when trying to find specific items in a list based on values of various fields:&lt;/p&gt;
&lt;pre&gt;$web = Get-SPWeb http://yourweb
$list = $web.Lists[&#34;Your Library Name&#34;]

// this is the bit - get items of a particular content type
// ? is shorthand for where, and $_ is the item in the pipeline
$listItems = $list.Items | ?{$_.ContentType.Name -eq &#34;Content Type Name&#34;}

// or items based on a custom column - if using -like then the wildcard is *
$listItems = $list.Items | ?{$_[&#34;InternalFieldName&#34;] -like &#34;*this*&#34;

// you could join them up using -and
$listItems = $list.Items | ?{$_.ContentType.Name -eq &#34;Content Type Name&#34; -and $_[&#34;InternalFieldName&#34;] -like &#34;*this*&#34;

// or iterate the loop and print them out
foreach($item in $listItems) { Write-Host $item.Name, $item[&#34;InternalFieldName&#34;] }

or more directly

$list.Items | ?{$_.ContentType.Name -eq &#34;Content Type Name&#34; -and $_[&#34;InternalFieldName&#34;] -like &#34;*this*&#34; | foreach { $_.Name, $_[&#34;InternalFieldName&#34;]

// or count them
$listItems.Count

or

$list.Items | ?{$_.ContentType.Name -eq &#34;Content Type Name&#34; -and $_[&#34;InternalFieldName&#34;] -like &#34;*this*&#34; | foreach {$count++}
$count
&lt;/pre&gt;
&lt;p&gt;Powershell can be infuriating - but when you find the syntax, it can be pretty helpful.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SSRS error: Operation is not valid due to the current state of the object</title>
      <link>https://matt-thornton.net/tech/ssrs-error-operation-is-not-valid-due-to-the-current-state-of-the-object/</link>
      <pubDate>Fri, 10 Feb 2012 12:27:50 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/ssrs-error-operation-is-not-valid-due-to-the-current-state-of-the-object/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re using SSRS in SharePoint integrated mode, you may come across this error when using report parameters that have a high number of items in them. A &lt;a href=&#34;http://technet.microsoft.com/en-us/security/bulletin/MS11-100&#34;&gt;recent security bulletin&lt;/a&gt; highlighted some issues and vulnerabilities in ASP.net, and a patch was released to cover some of the items. One of these was the maximum number of items you can have in a collection. If you exceed the limit, then you&amp;rsquo;ll likely get an error like:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 Foundation &#43; SQL Server Reporting Services Integrated mode installation issues: Failed to establish connection with report server, 401 errors and more</title>
      <link>https://matt-thornton.net/tech/databases/sharepoint-2010-foundation-sql-server-reporting-services-integrated-mode-installation-issues-failed-to-establish-connection-with-report-server-401-errors-and-more/</link>
      <pubDate>Thu, 09 Feb 2012 18:50:28 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/sharepoint-2010-foundation-sql-server-reporting-services-integrated-mode-installation-issues-failed-to-establish-connection-with-report-server-401-errors-and-more/</guid>
      
        <description>&lt;p&gt;You may be trying to set up SharePoint 2010 to act as the report repository for SQL Server Reporting Services report. This is a pretty nifty feature, especially as it&amp;rsquo;s available in the Foundation (i.e., Free) version of SharePoint. There is a &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/bb677365.aspx&#34;&gt;pretty exhaustive guide&lt;/a&gt; on how to set it up and for extra help, this &lt;a href=&#34;http://blogs.msdn.com/b/psssql/archive/2011/02/18/sharepoint-adventures-setting-up-reporting-services-with-sharepoint-integration.aspx&#34;&gt;blog post&lt;/a&gt; is pretty good too, and if you follow the steps, you get pretty far. However, if you&amp;rsquo;re in a multiple server setup (i.e. your SQL server isn&amp;rsquo;t on the same server as your Central Admin) you will likely encounter configuration issues surrounding authentication, and there is a great deal of confusion about what it all means - especially when it comes down to Kerberos. That&amp;rsquo;s beyond the scope of this post - what I&amp;rsquo;m covering here is one very annoying issue that there was no definitive answer to on the web.&lt;/p&gt;
&lt;p&gt;Assuming you get all the server parts setup and Reporting Services configured, you might find that you can browse to your report server address on the machine hosting reporting services, but, if you try to browse to that address from anywhere else, you&amp;rsquo;ll get an endless stream of login boxes, and no credentials will work. Also, if you go to Central Admin and go to General Application Settings &amp;gt; Reporting Services Integration, when you fill in the details to connect to reporting services, you&amp;rsquo;ll hit an error like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Failed to establish connection with report server. Verify the server URL is correct or review ULS logs for more information. Product area: SQL Server Reporting Services, Category: Configuration Pages&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and, in the ULS logs, an error like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SQL Server Reporting Services Configuration Pages Failed to retrieve RS configuration information: System.Net.WebException: The request failed with HTTP status 401: Unauthorized.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here&amp;rsquo;s &lt;del datetime=&#34;2012-02-09T18:19:01+00:00&#34;&gt;how I fixed it&lt;/del&gt; my workaround.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The search service is not able to connect to the machine that hosts the administration component</title>
      <link>https://matt-thornton.net/tech/sharepoint/the-search-service-is-not-able-to-connect-to-the-machine-that-hosts-the-administration-component/</link>
      <pubDate>Tue, 24 Jan 2012 11:37:58 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/the-search-service-is-not-able-to-connect-to-the-machine-that-hosts-the-administration-component/</guid>
      
        <description>&lt;p&gt;Another example of “when SharePoint goes wrong.” On a dev machine, the search service mysteriously stopped working. I can&amp;rsquo;t pinpoint what caused it, but SP1 and a CU were recently applied and these seem like good candidates for breaking things. When trying to admin the search service, you would see the following error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The search service is not able to connect to the machine that hosts the administration component. Verify that the administration component ’{guid}′ in search application ‘Search Service Application’ is in a good state and try again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip;and trying to modify the topology of the search, resulted in a spurious error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An unhandled exception occurred in the user interface.Exception Information: Exception has been thrown by the target of an invocation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Something was clearly unhappy. Rather than waste too much time, the simplest solution seemed to be to &lt;a href=&#34;http://davidbajak.com/blog/post/2011/09/29/Fix-SharePoint-2010-Enterprise-Search-After-Using-AutoSPInstaller-Script-Installer.aspx&#34;&gt;delete the search application and recreate it&lt;/a&gt;, which I duly did, via Central Admin, verified that DBs and application pools disappeared and recreated the search application, using new names and credentials. Same error. I &lt;del datetime=&#34;2012-01-24T11:23:40+00:00&#34;&gt;wasted&lt;/del&gt; spent some looking at permissions and the usual array of logs, events and other candidates, ran PSConfig and other upgrades, all to no avail.&lt;/p&gt;
&lt;p&gt;I figured I could create the search application via Powershell. Why should this make a difference? No idea, but worth a shot. Then thankfully, I found &lt;a href=&#34;http://blogs.msdn.com/b/russmax/archive/2009/10/20/sharepoint-2010-configuring-search-service-application-using-powershell.aspx&#34;&gt;that someone had already done it for me&lt;/a&gt;. And yes, this resolved the issues. I can&amp;rsquo;t explain why seeing as this script shouldn&amp;rsquo;t do anything that the GUI doesn&amp;rsquo;t do.&lt;/p&gt;
&lt;p&gt;Script:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Error formatting query, probably invalid parameters [SQLSTATE 42000] (Error 22050)</title>
      <link>https://matt-thornton.net/tech/databases/error-formatting-query-probably-invalid-parameters-sqlstate-42000-error-22050/</link>
      <pubDate>Mon, 12 Dec 2011 16:28:55 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/error-formatting-query-probably-invalid-parameters-sqlstate-42000-error-22050/</guid>
      
        <description>&lt;p&gt;I just tripped over this problem, and despite a fair amount of Googlage, I didn&amp;rsquo;t find anything that directly resolved my issue. I was trying to use dbMail in SQL Server 2008 to send an email on a schedule which included the results of a query. Doing this should be fairly straightforward, by executing the sp_send_dbmail stored procedure, which is in MSDB:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-12-12-at-16.27.36.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-12-12-at-16.27.36.png&#34; alt=&#34;&#34; title=&#34;Screen shot 2011-12-12 at 16.27.36&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This query works fine in SSMS, but when run as a SQL Server Agent Job, it fails, with the error&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Useful SharePoint script to restart SharePoint services and IIS</title>
      <link>https://matt-thornton.net/tech/sharepoint/useful-sharepoint-script-to-restart-sharepoint-services-and-iis/</link>
      <pubDate>Fri, 02 Dec 2011 17:40:36 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/useful-sharepoint-script-to-restart-sharepoint-services-and-iis/</guid>
      
        <description>&lt;p&gt;A SharePoint developer&amp;rsquo;s life is filled with many things, but one of the most common is the old faithful iisreset, coupled with a reset of the Timer Service and the Admin Service. When you&amp;rsquo;re working on timer jobs, it can get tedious quickly to have to  keep resetting things.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m sharing a useful batch script I knocked together to do it for you. It will perform three functions - restart the SharePoint 2010 Timer Service, the SharePoint 2010 Administration Service and do an IISReset. It will prompt you if you want to do each of them, and if you don&amp;rsquo;t reply within 5 seconds automatically do it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Configuring certificates and trust in SharePoint 2010 for accessing Exchange Web Services</title>
      <link>https://matt-thornton.net/tech/exchange-web-services/configuring-certificates-and-trust-in-sharepoint-2010-for-accessing-exchange-web-services/</link>
      <pubDate>Wed, 09 Nov 2011 15:38:22 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/exchange-web-services/configuring-certificates-and-trust-in-sharepoint-2010-for-accessing-exchange-web-services/</guid>
      
        <description>&lt;p&gt;Exchange is built on web services and as I &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/exchange-web-services-and-reading-an-emailmessage-to-memory&#34;&gt;posted about&lt;/a&gt; a while about accessing EWS from SharePoint can be pretty neat. There is a &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/dd637749(v=exchg.80).aspx&#34;&gt;managed API&lt;/a&gt; to make your life even easier. However, one issue you may come across is actually getting SharePoint and Exchange to talk nicely to each other. This will walk you through some of the steps required to get things going.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010: The filename, directory name, or volume label syntax is incorrect</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-the-filename-directory-name-or-volume-label-syntax-is-incorrect/</link>
      <pubDate>Mon, 07 Nov 2011 12:25:33 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-the-filename-directory-name-or-volume-label-syntax-is-incorrect/</guid>
      
        <description>&lt;p&gt;This is a peculiar little bug. When creating a List Definition, you may encounter the following error when you try to deploy:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The filename, directory name or volume label syntax is incorrect.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It took a while to track the cause, seeing as a lot of info out there info out there relates to things to do with file systems, which in this case, obviously wasn&amp;rsquo;t the cause.&lt;/p&gt;
&lt;p&gt;The bug for me was that I had created a List Definition and called it My.List.Definition - notice the multiple periods. I wanted it to match the namespaces that we were using. It turns out that the second period trips it up. When you create a List Definition with multiple periods, the List Definition only gets the first period, e.g., My.List, whereas the Elements.xml file for the List Definition still references My.List.Definition - hence it can&amp;rsquo;t deploy properly.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The field with Id {} defined in feature {} was found in the current site collection or in a subsite</title>
      <link>https://matt-thornton.net/tech/sharepoint/the-field-with-id-defined-in-feature-was-found-in-the-current-site-collection-or-in-a-subsite/</link>
      <pubDate>Tue, 01 Nov 2011 16:19:09 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/the-field-with-id-defined-in-feature-was-found-in-the-current-site-collection-or-in-a-subsite/</guid>
      
        <description>&lt;p&gt;This is a known bug in Visual Studio. It seems to occur most often when using VS to deploy (and redeploy) declarative content types to a SharePoint site. I&amp;rsquo;ve seen it happen most often when deploying List Definitions and List Instances. There are a variety of steps out there to try to make it go away:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Retract solution, close VS, restart VS, deploy solution.&lt;/li&gt;
&lt;li&gt;Deploy project, attempt to activate via UI, deactivate, retract, restart VS, deploy solution.&lt;/li&gt;
&lt;li&gt;Deploy, retract, deploy. Open Task Manager, kill VSSHostP4.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Deploying after this should be resolved.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quick tip: SPListItem.CopyTo custom method</title>
      <link>https://matt-thornton.net/tech/sharepoint/quick-tip-splistitem-copyto-custom-method/</link>
      <pubDate>Fri, 28 Oct 2011 12:02:20 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/quick-tip-splistitem-copyto-custom-method/</guid>
      
        <description>&lt;p&gt;One use for my &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-2010-document-sets-custom-ribbon-buttons-with-custom-code&#34;&gt;custom Ribbon buttons&lt;/a&gt; could be to move files (or Document Sets) from one library to another. I was trying to get the SPListItem.CopyTo method working, but for various reasons, it refused to play ball.&lt;/p&gt;
&lt;p&gt;I came across a &lt;a href=&#34;http://www.communardo.de/home/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-liste-kopieren/&#34;&gt;handy piece of code&lt;/a&gt; that is essentially a custom method for doing the same thing. Couldn&amp;rsquo;t understand a word of the article, but got the gist of what the code was doing. It essentially creates an item in the target location, and then copies all the field info over to the new item. This works fine for Lists, and even copies attachments, but what about for document libraries, which are setup a bit differently?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; Document Sets &#43; Custom Ribbon Buttons with Custom Code</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-document-sets-custom-ribbon-buttons-with-custom-code/</link>
      <pubDate>Thu, 27 Oct 2011 15:16:24 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-document-sets-custom-ribbon-buttons-with-custom-code/</guid>
      
        <description>&lt;p&gt;I recently &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-code&#34;&gt;posted a guide&lt;/a&gt; on how to add an item to the SharePoint 2010 context menu (“EditControlBlock”) and run some custom code on the click action. SharePoint 2010 uses the love-it-or-hate-it Microsoft Ribbon, which, to the developer, is fully accessible. This guide will show you how to implement a custom button for a Document Set, in the Manage group and also on the Edit form, and run some custom code when it&amp;rsquo;s clicked, in Visual Studio 2010.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 context menu item with custom code</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-code/</link>
      <pubDate>Wed, 28 Sep 2011 15:35:02 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-code/</guid>
      
        <description>&lt;p&gt;List items in SharePoint lists and document libraries have a “context menu” on the Filename/FileLeafRef field. When you hover to the right of the field, you see a drop down menu with a bunch of options. You can add your own items to this list, and also run custom code when the item is clicked. This tutorial will show you how, using Visual Studio 2010 and SharePoint 2010.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit: 16/02/2012&lt;/strong&gt; - there were a few comments about the custom assembly not firing. I&amp;rsquo;ve revised the post below to include an extra bit in the XML to ensure the control loads (see #13.)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matt-thornton.net/images/posts/refile1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; class=&#34;size-full wp-image-1467 alignnone&#34; title=&#34;refile1&#34; src=&#34;https://matt-thornton.net/images/posts/refile1.png&#34; alt=&#34;&#34; width=&#34;274&#34; height=&#34;247&#34; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>More fun with deploying Document Sets via XML</title>
      <link>https://matt-thornton.net/tech/sharepoint/more-fun-with-deploying-document-sets-via-xml/</link>
      <pubDate>Thu, 15 Sep 2011 12:57:34 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/more-fun-with-deploying-document-sets-via-xml/</guid>
      
        <description>&lt;p&gt;To finish a set of posts about the fun I&amp;rsquo;ve had in deploying document sets as XML content types, here&amp;rsquo;s a fun little &lt;span style=&#34;text-decoration: line-through;&#34;&gt;bug&lt;/span&gt; vagary I encountered. In the &lt;a href=&#34;http://www.youtube.com/watch?v=t3bynskrnpA&#34;&gt;video walkthrough&lt;/a&gt;, there&amp;rsquo;s a section on deploying the custom WelcomePage to your site, and provisioning some WebParts automatically to that page.&lt;/p&gt;
&lt;p&gt;You achieve this in the Elements.xml file of your WelcomePage module by including some &lt;AllUsersWebPart&gt;&amp;gt; sections. Within those tags, you enter the definition of the webpart, and you can reuse the built-in webparts.&lt;/p&gt;
&lt;p&gt;(Hint: to get at the required definition for &lt;strong&gt;built-in SP webparts&lt;/strong&gt;, find the webpart in the Webparts Gallery in Site Settings, save a copy of the file to your hard drive (as a .dwp file) and then open that file in Visual Studio. You get the required info. Neat.)&lt;/p&gt;
&lt;p&gt;You can then deploy your feature, and assuming you&amp;rsquo;ve &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/provision-document-set-xmldocuments-and&#34;&gt;covered all the bases&lt;/a&gt; your Document Sets, with custom Welcome Page should be deployed. But here&amp;rsquo;s a problem. Let&amp;rsquo;s say you make some changes to it, and redeploy the feature. You may experience one of a series of behaviours:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;None of your changes are displayed&lt;/li&gt;
&lt;li&gt;Your changes are displayed OK&lt;/li&gt;
&lt;li&gt;You end up with multiple webparts on your custom Welcome Page.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s the third issue I tripped over, and it seems to occur if/when you manually deactivate and reactivate your feature (using the “deploy” feature from VS doesn&amp;rsquo;t seem to cause this.) It makes some sense - the Elements.xml file says “add these webparts to this page”. Assuming you&amp;rsquo;ve not added any FeatureDeactivating event receiver to remove the webparts when the feature is deactivated, well, you&amp;rsquo;ll end up with lots of webparts on the one page.&lt;/p&gt;
&lt;p&gt;This being the case, how do you actually go about getting rid of the extra webparts on the page? Retracting the solution doesn&amp;rsquo;t help. You could completely bin your site content type, site or even site collection. That would probably do it. But it&amp;rsquo;s a bit drastic. The alternative? Update the database manually. You can decide if this is more drastic than the previous options.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To be clear, you should never, ever, on any account, ever, manually hack the SharePoint content database!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But if you want to do it, here&amp;rsquo;s how:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Updating declarative XML content types</title>
      <link>https://matt-thornton.net/tech/updating-declarative-xml-content-types/</link>
      <pubDate>Thu, 15 Sep 2011 11:37:01 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/updating-declarative-xml-content-types/</guid>
      
        <description>&lt;p&gt;Becoming a SharePoint developer is always a journey - every new day you spend doing something, the more you learn. More often than not, the more “little subtleties” you uncover about the great wide SharePoint platform. I recently tripped over one such example. This “issue” is not new in SharePoint development - it certainly goes back as far as MOSS2007, but unless you&amp;rsquo;re actually doing it, it&amp;rsquo;s not something you&amp;rsquo;d instinctively just know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating content types via XML Visual Studio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As soon as you start building SharePoint solutions of any real size and complexity, you&amp;rsquo;ll quickly learn that creating fields and content types via the UI, or SharePoint Designer, is not a great solution. For instance, there&amp;rsquo;s no &lt;em&gt;supported&lt;/em&gt; way to move a SPD designed solution from e.g., Dev to Live - that is, with SPD, you design directly against live. This can be OK for initial deployments, but as soon as the system has data in and you need to start potentially breaking things, this is not a good place to be in. The alternative to this is develop Visual Studio solutions and features, which are deployable pretty much wherever you&amp;rsquo;d like. You can define &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/gg295290.aspx&#34;&gt;fields and content types in XML&lt;/a&gt;, and when you&amp;rsquo;re finished, package it all up and deploy. Simple, right? Well, no, not necessarily - as &lt;a href=&#34;https://www.matt-thornton.net/tech/provision-document-set-xmldocuments-and&#34;&gt;I mentioned recently&lt;/a&gt;, this process is not without its bugs and issues.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve deployed a few solutions in this way, and was (until today) singing the praises of deploying content types via XML, thinking how wonderful it was to have the flexibility to build in dev, test and then deploy (i.e. what you can&amp;rsquo;t do with SPD). And of course, if you make any changes, you can update your solution and hey presto, nice neat update.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Error occurred in deployment step Activate Features: Invalid field name.</title>
      <link>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-invalid-field-name/</link>
      <pubDate>Mon, 12 Sep 2011 13:50:02 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/error-occurred-in-deployment-step-activate-features-invalid-field-name/</guid>
      
        <description>&lt;p&gt;I &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/provision-document-set-xmldocuments-and&#34;&gt;posted&lt;/a&gt; about an issue I had been facing with deploying document sets via XML, where things like the custom welcome page and the shared fields (defined in XmlDocuments) wasn&amp;rsquo;t showing up.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a further issue I encountered. I defined my Document Set content type in the usual way. A bunch of Site Fields, then the Content Type definition, and then within the FieldRefs section some FieldRef elements for the fields to use.&lt;/p&gt;
&lt;p&gt;At some point, I started to experience a strange error - when I was deploying the solution, I would get an error:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Provision Document Set &#43; XMLDocuments and ???</title>
      <link>https://matt-thornton.net/tech/sharepoint/provision-document-set-xmldocuments-and/</link>
      <pubDate>Mon, 12 Sep 2011 08:18:36 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/provision-document-set-xmldocuments-and/</guid>
      
        <description>&lt;p&gt;SharePoint development is fraught with frustrations. Little things that should be simple, end up taking far longer than they should. Take this example. I&amp;rsquo;m trying to provision a Document Set content type via XML in a VS feature. I was using &lt;a href=&#34;http://www.youtube.com/watch?v=t3bynskrnpA&#34;&gt;this video&lt;/a&gt; and the &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/gg581064.aspx&#34;&gt;supporting article&lt;/a&gt; as a guide. I get all the way through, and everything is working&amp;hellip; &lt;em&gt;ish&lt;/em&gt;. That is, the Document Set content type is created, but the extra stuff to do with it, such as the custom welcome page and the extra properties (shared fields, etc.), defined in the XmlDocuments section of the content type, don&amp;rsquo;t appear. No manner of tweaking and reducing code had any effect. I got a hold of the source code from the tutorial - lo and behold, that works fine. So the theory is sound, it &lt;em&gt;should&lt;/em&gt; work, and so something somewhere was different. The job was tracking down said difference.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>the specified value for the locstringid parameter is outside the bounds of this enum</title>
      <link>https://matt-thornton.net/tech/the-specified-value-for-the-locstringid-parameter-is-outside-the-bounds-of-this-enum/</link>
      <pubDate>Tue, 09 Aug 2011 13:56:40 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/the-specified-value-for-the-locstringid-parameter-is-outside-the-bounds-of-this-enum/</guid>
      
        <description>&lt;p&gt;This was a rarity. SharePoint 2010 threw up the error, whilst trying to create a new Web Application:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-08-09-at-11.23.15.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-08-09-at-11.23.15.png&#34; alt=&#34;&#34; title=&#34;Screen shot 2011-08-09 at 11.23.15&#34; width=&#34;300&#34; height=&#34;200&#34; class=&#34;alignnone size-medium wp-image-1413&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The error was:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the specified value for the locstringid parameter is outside the bounds of this enum&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and there&amp;rsquo;s nothing extra in the logs about the specifics of the problem. So, as usual, I put that in to Google - and it was completely clueless!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-08-09-at-13.50.48.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://matt-thornton.net/images/posts/Screen-shot-2011-08-09-at-13.50.48.png&#34; alt=&#34;&#34; title=&#34;Screen shot 2011-08-09 at 13.50.48&#34; width=&#34;300&#34; height=&#34;100&#34; class=&#34;alignnone size-medium wp-image-1414&#34; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010: Visual Webpart tutorial</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-visual-webpart-tutorial/</link>
      <pubDate>Mon, 08 Aug 2011 15:01:38 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-visual-webpart-tutorial/</guid>
      
        <description>&lt;p&gt;One of the scourges of software development, and it seems especially SharePoint development, is that more often than not, when faced with a new task, Google is your first stop, looking for tutorials or guides. Frequently, however, people posting the tutorials (MSDN/Microsoft included) are guilty of putting up guides and source code that is incorrect, or missing some vital info. I experienced this very issue recently when I needed to create a &lt;a href=&#34;http://blog.concurrency.com/sharepoint/create-a-custom-web-part-for-sharepoint-2010/&#34;&gt;visual webpart&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The tutorial is good enough, but the actual source code posted, doesn&amp;rsquo;t work. What&amp;rsquo;s most infuriating, though, is when the author then goes radio silence, and the comments fill up with bemused readers, all looking to achieve the same goal - but unable to do so.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint: Error occurred during deployment step activate features</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-error-occurred-during-deployment-step-activate-features/</link>
      <pubDate>Fri, 05 Aug 2011 15:43:23 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-error-occurred-during-deployment-step-activate-features/</guid>
      
        <description>&lt;p&gt;Quick (annoying) thing. Whilst deploying a solution, you may see this error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Error occurred in deployment step ‘Activate Features’: Key cannot be null. Parameter name: Key&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is unhelpfully connected to your Content Type definitions where you have FieldRefs and you&amp;rsquo;re closing them with the long tag, as opposed to the short tag, i.e.,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;FieldRef ID=&amp;#8221;...&amp;#8221;&gt;&lt;/FieldRef&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;replace it with this to fix:&lt;/p&gt;
&lt;blockquote&gt;
&lt;FieldRef ID=&amp;#8221;...&amp;#8221; /&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;http://www.dhirajranka.com/?p=327&#34;&gt;Dhiraj&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Tip: Visual Studio &#43; Batch replace GUIDs</title>
      <link>https://matt-thornton.net/tech/programming/tip-visual-studio-batch-replace-guids/</link>
      <pubDate>Mon, 01 Aug 2011 15:41:50 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/programming/tip-visual-studio-batch-replace-guids/</guid>
      
        <description>&lt;p&gt;A common method for creating Visual Studio-based SharePoint solutions is to actually create them in the SharePoint GUI first, and then save the site as a template, and import that .wsp file in to Visual Studio as a SharePoint project. This often saves a lot of the hard slog of starting from scratch in Visual Studio, but still giving you the reusability of Visual Studio based solution.&lt;/p&gt;
&lt;p&gt;One small issue you may run in to though is the (re-)use of GUIDs in e.g., Site Columns. For safety, you may like to replace the GUIDs, but in the case where you have a lot to replace, doing this by hand could be cumbersome. Step up Visual Studio Macros. You can create a simple Macro to automate virtually any process. The only problem, in this case, though, is that my testing of macro-ing the Find/Replace was that I could easily find GUIDs in a file, but replacing them with a freshly generated one wasn&amp;rsquo;t obvious. So I created a custom macro.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Powershell tip for updating document sets</title>
      <link>https://matt-thornton.net/tech/programming/powershell-tip-for-updating-document-sets/</link>
      <pubDate>Wed, 20 Jul 2011 11:25:44 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/programming/powershell-tip-for-updating-document-sets/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;re using the handy Document Sets feature in SharePoint 2010 you may run in to a small issue where you make some changes to your document set (e.g., add/remove content types from the allowed contents). When you do this, and push changes down to existing document sets, you&amp;rsquo;ll see a little yellow bar appear on each document set with the message&lt;/p&gt;
&lt;p&gt;“Content Types that are available to this Document Set have been added or removed. Click here to update the Document Set.”&lt;/p&gt;
&lt;p&gt;The reason is that the document set refresh date needs updating. Quite why SharePoint can&amp;rsquo;t manage this for you, is beyond me, but nevertheless, if you do click the yellow bar, it disappears. But it still remains for &lt;strong&gt;all&lt;/strong&gt; your other document sets. Irritating. So here&amp;rsquo;s how to remove the little yellow bar with the message using Powershell. The neatest way is just to provision the document set.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Exchange Web Services and reading an EmailMessage to memory</title>
      <link>https://matt-thornton.net/tech/exchange-web-services/exchange-web-services-and-reading-an-emailmessage-to-memory/</link>
      <pubDate>Fri, 01 Jul 2011 10:10:07 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/exchange-web-services/exchange-web-services-and-reading-an-emailmessage-to-memory/</guid>
      
        <description>&lt;p&gt;The Exchange Web Services Managed API is a great tool for exposing Exchange Web Services to a .NET programming environment. You are able to work with all the key features of an Exchange Mailbox, such as downloading messages. In my particular case, I&amp;rsquo;ve been capturing emails and storing them in a SharePoint document library.&lt;/p&gt;
&lt;p&gt;The upload to SharePoint can be achieved by passing in a MemoryStream object - that is, you read an EmailMessage to memory, and then upload it to SharePoint. The FileAttachment object has a neat Load() method which allows you to read a FileAttachment to a MemoryStream:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; Kofax Express &#43; Object reference not set to an instance of an object</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-kofax-express-object-reference-not-set-to-an-instance-of-an-object/</link>
      <pubDate>Fri, 01 Jul 2011 10:01:14 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-kofax-express-object-reference-not-set-to-an-instance-of-an-object/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve been working with Kofax Express 2.0 recently to move documents from a scanner directly in to a SharePoint document library. I was using a custom list definition (created in Visual Studio) but was experiencing a strange error. If I created an instance of my list through the UI and then tried to scan from Kofax directly in to SharePoint, it was working no problem. However, if I tried to scan directly to SharePoint to the instance of the list created by the Visual Studio solution, I was getting the common error - “Object reference not set to an instance of an object”. There were no helpful logs on the Kofax or SharePoint end, and it was only through trial and error that I found the issue. I noticed that when the list was created through the UI, it was created with a URL of “/Document Library Name” whereas in my list instance definition in Visual Studio, I had given it a URL of “/Lists/Document Library Name”. It was the Lists part at the beginning which was causing an error. I don&amp;rsquo;t know why this caused Kofax to fail to find the library, but nevertheless, setting the URL in the list instance as just “/Document Library Name”, resolved the issue.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Can&#39;t alter server principal &amp;#8216;dbo&#39;</title>
      <link>https://matt-thornton.net/tech/databases/cant-alter-server-principal-dbo/</link>
      <pubDate>Fri, 03 Jun 2011 13:05:27 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/cant-alter-server-principal-dbo/</guid>
      
        <description>&lt;p&gt;If you&amp;rsquo;ve encountered anything like &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/new-spsite-filenotfoundexception&#34;&gt;this&lt;/a&gt; problem, then you may have had to update the permissions that a specific SQL login has. However, if the user you&amp;rsquo;re trying to edit is mapped to dbo, then you&amp;rsquo;re not allowed to make changes.&lt;/p&gt;
&lt;p&gt;There are &lt;a href=&#34;http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/ed57f994-de86-45e5-838f-d6c6264e409c/&#34;&gt;ways to do it&lt;/a&gt;, but you need a pretty thorough understanding of what you&amp;rsquo;re trying to achieve.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a quick way around this using only the GUI. In SSMS, open the properties of the database(s) you need access to. In the ‘Files&amp;rsquo; page, you&amp;rsquo;ll see the Owner of the database. This is quite likely the account you want to add additional permissions to. But since it&amp;rsquo;s mapped to dbo, you can&amp;rsquo;t. Therefore you update the owner of the database to something other than your login (e.g., sa). When you do this, you should then be able to add the required permissions to your login.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint workflow &#43; list item edit &#43; value cannot be null</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-list-item-edit-argumentnullexception/</link>
      <pubDate>Thu, 26 May 2011 19:27:37 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-list-item-edit-argumentnullexception/</guid>
      
        <description>&lt;p&gt;You may encounter a random error when using a custom Visual Studio SharePoint 2010 workflow. Everything appears OK, but when you go to edit the item that the workflow is running on, the EditForm fails to load and you see an error like:&lt;/p&gt;
&lt;p&gt;`Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Exception Details: System.ArgumentNullException: Value cannot be null.&lt;br /&gt;
Parameter name: s&lt;/p&gt;
&lt;p&gt;Source Error:&lt;/p&gt;
&lt;p&gt;An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.&lt;/p&gt;
&lt;p&gt;Stack Trace:&lt;/p&gt;
&lt;p&gt;[ArgumentNullException: Value cannot be null.&lt;br /&gt;
Parameter name: s]&lt;br /&gt;
   System.IO.StringReader..ctor(String s) +10151478&lt;br /&gt;
   System.Xml.XmlDocument.LoadXml(String xml) +51&lt;br /&gt;
   Microsoft.SharePoint.Publishing.Internal.WorkflowUtilities.FlattenXmlToHashtable(String strXml) +90&lt;br /&gt;
   ...&lt;br /&gt;
`</description>
      
    </item>
    
    <item>
      <title>Tip: Error occurred in deployment step Activate Features: Object not set to an instance of an object</title>
      <link>https://matt-thornton.net/tech/sharepoint/tip-error-occurred-in-deployment-step-activate-features-object-not-set-to-an-instance-of-an-object/</link>
      <pubDate>Fri, 06 May 2011 16:46:46 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/tip-error-occurred-in-deployment-step-activate-features-object-not-set-to-an-instance-of-an-object/</guid>
      
        <description>&lt;p&gt;Yet another SharePoint vagary. If you&amp;rsquo;re trying to deploy a feature and get the unhelpful error: “Error occurred in deployment step ‘Activate Features&amp;rsquo;: Object not set to an instance of an object” check the &lt;strong&gt;scope&lt;/strong&gt; of the feature that you&amp;rsquo;re trying to deploy. I added a new feature to a project that had another working feature. Both were calling the Microsoft.Office.Workflow.Feature assembly but only one was failing and it was only after a lot of messing about that it turned out to be this innocuous little setting.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint 2010 &#43; Associate workflow to Content Type in a feature</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-associate-workflow-to-content-type-in-a-feature/</link>
      <pubDate>Thu, 05 May 2011 16:17:57 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-2010-associate-workflow-to-content-type-in-a-feature/</guid>
      
        <description>&lt;p&gt;Quick tip: this plagued me for a while. You may develop a custom workflow which should only be associated with particular content types. You can deploy it to your site and then manually associate it to your content type. It&amp;rsquo;s possible to do this in code but the process isn&amp;rsquo;t as straight forward as it should be. Not to mention the fact that it&amp;rsquo;s infuriatingly hard to debug EventReceivers (“no symbols have been loaded” misery!).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SharePoint &#43; Visual Studio &#43; Get Current User</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-visual-studio-get-current-user/</link>
      <pubDate>Wed, 04 May 2011 17:34:08 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-visual-studio-get-current-user/</guid>
      
        <description>&lt;p&gt;A frequently asked question in the MSDN forums is “how you can get access to the user who is interacting with your workflow?”. For example, the user modifying a task. The workflow is likely running in a different context and/or session to your browser session so there&amp;rsquo;s not an obvious tie-up.&lt;/p&gt;
&lt;p&gt;However, in this scenario, you can get the login name of the person who modified the SharePoint task, via the Executor property of the OnTaskChanged event. Simply bind the Executor property to a string (e.g., “taskLastModifiedBy”) and whenever the task changes, SharePoint will copy the user ID to this property in the format of DOMAIN\LoginName. You can then get an &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spuser.aspx&#34;&gt;SPUser object&lt;/a&gt; for that login name with, e.g.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SPUser user = workflowProperties.Web.AllUsers[taskLastModifiedBy];&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On a related subject, and the thing that prompted this post - if you&amp;rsquo;re trying to update a &lt;em&gt;Person or Group&lt;/em&gt; field on your workflowProperties.Item, then you &lt;strong&gt;must&lt;/strong&gt; pass it an SPUser object! This is bizarre, because other types of list (e.g, the task list) you can pass it a &lt;strong&gt;string&lt;/strong&gt; and SharePoint will do the rest. I spent ages and all kinds of different things and always getting the “Invalid data has been used to update the list item. The field you are trying to update may be read only.” error. Annoying.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Tip: infopath comments and newline textbox</title>
      <link>https://matt-thornton.net/tech/sharepoint/infopath-comments-newline-textbox/</link>
      <pubDate>Tue, 26 Apr 2011 10:21:12 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/infopath-comments-newline-textbox/</guid>
      
        <description>&lt;p&gt;One method for persisting data in a SharePoint environment is the use of Infopath forms. Infopath stores data in your form in XML format. I have a form which has a “comments” box where people add new comments as they progressively update the form and a “consolidate comments” box which shows all previous comments*. However, Infopath forms don&amp;rsquo;t natively support appending new data to existing data - and new comments added may blow away any previous comments.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Visual Studio 2010 Workflow &#43; Infopath 2010 forms - troubleshooting</title>
      <link>https://matt-thornton.net/tech/visual-studio-2010-workflow-infopath-2010-forms-troubleshooting/</link>
      <pubDate>Mon, 28 Mar 2011 21:58:33 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/visual-studio-2010-workflow-infopath-2010-forms-troubleshooting/</guid>
      
        <description>&lt;p&gt;Microsoft markets that Sharepoint Designer workflows are directly exportable to Visual Studio workflows. And in many ways, this is absolutely true. It&amp;rsquo;s trivial to create a .wsp from an SPD workflow and import it to VS. However, if you then inspect the workflow that has been created for you, a little concern would not be underestimated. If your SPD workflow was what you wanted, then you could be reasonably confident that its VS version would do the same job. But presumably your reason for importing to VS is because you need more control over the workflow in the longer term, in which case, you&amp;rsquo;re likely to be left underwhelmed by what the import process creates for you. Imagine creating a webpage in Microsoft Word and you&amp;rsquo;ll get the drift.&lt;/p&gt;
&lt;p&gt;So when faced with a similar proposition, recreating the workflow in Visual Studio from scratch immediately became apparent as the best solution. After all, the intent and purpose of the workflow was clear; recreating it in VS ought to have been a doddle. However, to complicate matters, the SPD workflow used Infopath edit forms. This turned out to be easy in SPD, but non-trivial in Visual Studio. Getting an Infopath form to register with a VS workflow project requires various items, that VS may not do automatically for you.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Could not load web.config file. The given key was not present in the dictionary.</title>
      <link>https://matt-thornton.net/tech/sharepoint/could-not-load-web-config-file-the-given-key-was-not-present-in-the-dictionary/</link>
      <pubDate>Fri, 25 Mar 2011 16:10:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/could-not-load-web-config-file-the-given-key-was-not-present-in-the-dictionary/</guid>
      
        <description>&lt;p&gt;Quick hint about debugging SharePoint projects in Visual Studio 2010. You may find a bizarre error where deploying projects/solutions is fine, but trying to debug doesn&amp;rsquo;t work. You see an error alert with the text:&lt;/p&gt;
&lt;p&gt;“Could not load the Web.config configuration file. Check the file for any malformed XML elements, and try again. The following error occurred: The given key was not present in the dictionary.”&lt;/p&gt;
&lt;p&gt;Checking the Web.config shows no malformed XML at all. One thing to check into is the configuration of alternate access mappings in Central Administration. For debugging to work, &lt;strong&gt;the Site URL property of your SharePoint project must match the URL of the Default zone for your web application&lt;/strong&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>new SPSite - FileNotFoundException</title>
      <link>https://matt-thornton.net/tech/sharepoint/new-spsite-filenotfoundexception/</link>
      <pubDate>Wed, 02 Feb 2011 12:55:05 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/new-spsite-filenotfoundexception/</guid>
      
        <description>&lt;p&gt;It seems to me that every SharePoint developer, at some point in their career, will encounter this particular error. It&amp;rsquo;s one of those infuriatingly obtuse errors that could be caused by a multitude of different issues - either individually or cumulatively. In my case, I was in the middle of developing a SharePoint timer job and I had a particular piece of code that I wasn&amp;rsquo;t too sure about, and so wanted to test very quickly, over and over again - without the rigmarole of deploying/retracting solutions, hunting through Central Admin to run the job, etc. I just wanted to run this particular section of code against the SharePoint object model and see what happened. As is a common technique for this, I started up a fresh Console Application project, pasted in my code and figured that would be enough.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Simplified deleting in OSX Finder</title>
      <link>https://matt-thornton.net/tech/simplified-deleting-in-osx-finder/</link>
      <pubDate>Mon, 17 Jan 2011 12:51:02 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/simplified-deleting-in-osx-finder/</guid>
      
        <description>&lt;p&gt;I finally got around to solving a longstanding irritation I&amp;rsquo;ve had with Finder. Well, when I say that, what I mean is, I &lt;a href=&#34;http://hintsforums.macworld.com/showthread.php?t=116349&#34;&gt;posted&lt;/a&gt; the irritation to a forum, and some helpful folks there gave me the inspiration for the solution.&lt;/p&gt;
&lt;p&gt;The irritation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Quite often I copy a bunch of images off my phone on to my laptop. In Finder I open them up and use the quickview (using spacebar) to quickly view and delete items [using the keyboard only]&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Turbocharge your SQL development: get more out of SQL Server Management Studio</title>
      <link>https://matt-thornton.net/tech/databases/turbocharge-your-sql-development-get-more-out-of-sql-server-management-studio/</link>
      <pubDate>Tue, 14 Dec 2010 13:46:22 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/turbocharge-your-sql-development-get-more-out-of-sql-server-management-studio/</guid>
      
        <description>&lt;p&gt;When SQL Server 2000 became SQL Server 2005, a huge number of things changed. DTS became SQL Server Integration Services, and as part of the package we saw the likes of Analysis Services and Reporting Services. All these additions to the SQL Server family necesitated a change in the suite of management tools - and that meant the death of Enterprise Manager and SQL Query Analyzer, tools loved by everyone, everywhere. They were combined and rebranded as a single tool: SQL Server Management Studio. DBAs and SQL developers cried out in horror - the new tool was, well, &lt;em&gt;new&lt;/em&gt; - it was very different and required a change in working practice. What&amp;rsquo;s more, there was &lt;em&gt;no choice&lt;/em&gt; - if you wanted SQL Server you had to use SSMS - there&amp;rsquo;s no using Enterprise Manager (although you can use SSMS to manage SQL Server 2000.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Quick tip: Use OVER to get row numbers in subsets</title>
      <link>https://matt-thornton.net/tech/databases/quick-tip-use-over-to-get-row-numbers-in-subsets/</link>
      <pubDate>Fri, 10 Dec 2010 14:38:27 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/databases/quick-tip-use-over-to-get-row-numbers-in-subsets/</guid>
      
        <description>&lt;p&gt;Consider the following. You have a set of data. Within the data are multiple subsets that share an identifier. WIthin your main set, you need to number the subsets for each item within it, e.g.,&lt;/p&gt;
&lt;p&gt;Data&lt;/p&gt;
&lt;p&gt;ID SubsetID Name Lots more columns&amp;hellip;&lt;br&gt;
———- ———-&lt;br&gt;
1 ABC Dave&lt;br&gt;
2 DEF Trev&lt;br&gt;
3 DEF Bob&lt;br&gt;
4 DEF Steve&lt;br&gt;
5 HIJ Jim&lt;br&gt;
6 HIJ Bilbo&lt;/p&gt;
&lt;p&gt;and you want something like&lt;/p&gt;
&lt;p&gt;ID SubsetID SubsetPosition Name Lots more columns&amp;hellip;&lt;br&gt;
———- ———-&lt;br&gt;
1 ABC 1 Dave&lt;br&gt;
2 DEF 1 Trev&lt;br&gt;
3 DEF 2 Bob&lt;br&gt;
4 DEF 3 Steve&lt;br&gt;
5 HIJ 1 Jim&lt;br&gt;
6 HIJ 2 Bilbo&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Guide: MOSS 2007 Multiple site collections on Port 80</title>
      <link>https://matt-thornton.net/tech/sharepoint/guide-moss-2007-multiple-site-collections-on-port-80/</link>
      <pubDate>Thu, 09 Dec 2010 13:39:03 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/guide-moss-2007-multiple-site-collections-on-port-80/</guid>
      
        <description>&lt;p&gt;Requirement: multiple site collections on port 80 on unique URLs in SharePoint 2007, e.g,. &lt;em&gt;http://democlient1&lt;/em&gt;, &lt;em&gt;http://someotherdemo&lt;/em&gt;&lt;br&gt;
The scenario: you have one development machine which you use for multiple clients. Because of this, you want to host multiple site collections and allow a unique URL for each, without having to specify the port number in the URL. For example, if your machine name is &lt;em&gt;SPDEV&lt;/em&gt; then by &lt;strong&gt;default&lt;/strong&gt; your primary web application will respond on &lt;em&gt;http://spdev&lt;/em&gt;. But you also want to have &lt;em&gt;http://democlient1&lt;/em&gt;, &lt;em&gt;http://someotherdemo&lt;/em&gt;, etc. There are a three ways of doing this. The two common ways are 1) assign unique IP addresses to each web application each responding on port 80, but this can be more complicated to setup and manage at the machine level, or 2) Use a non-standard port number for each web application, but this creates uglier URLs, e.g., &lt;em&gt;http://democlient1:18765&lt;/em&gt;, &lt;em&gt;http://someotherdemo:18734&lt;/em&gt; etc.&lt;/p&gt;
&lt;p&gt;Solution: It&amp;rsquo;s possible to achieve the requirement.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Troubleshooting BDC Associations and Related Data List Web part</title>
      <link>https://matt-thornton.net/tech/sharepoint/troubleshooting-bdc-associations-and-related-data-list-web-part/</link>
      <pubDate>Tue, 22 Jun 2010 09:53:18 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/troubleshooting-bdc-associations-and-related-data-list-web-part/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve been working with the BDC and a proprietary CRM system to bring data about sales history into SharePoint. I&amp;rsquo;ve been using the basic BDC tool - &lt;a href=&#34;http://blogs.msdn.com/b/sharepoint/archive/2007/08/22/announcing-the-microsoft-business-data-catalog-definition-editor-for-microsoft-office-sharepoint-server-2007.aspx&#34;&gt;Business Data Catalog Definition Editor&lt;/a&gt; - that is bundled with the &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/ms550992%28office.12%29.aspx&#34;&gt;SharePoint SDK&lt;/a&gt;. It&amp;rsquo;s very basic, and there are one or two commercial products out there, but it just about does enough, and is free, after all. It enables you to define the entities, relationships and methods, and test them, within the tool. The error reporting is moderate - you&amp;rsquo;re informed about the major issues, but, some errors only appear when you&amp;rsquo;ve imported the ADF and are actually working within the SharePoint environment.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Set SharePoint BDC field value programmatically in Visual Studio workflow</title>
      <link>https://matt-thornton.net/tech/programming/set-sharepoint-bdc-field-value-programmatically-in-visual-studio-workflow/</link>
      <pubDate>Wed, 16 Jun 2010 16:58:09 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/programming/set-sharepoint-bdc-field-value-programmatically-in-visual-studio-workflow/</guid>
      
        <description>&lt;p&gt;The Business Data Catalog (BDC) in SharePoint is a superb way of hooking up virtually any disparate system to SharePoint 2007. By defining the connection in to the system, you can expose any part of the system to SharePoint, and harness some of SharePoint&amp;rsquo;s real power - for example, its powerful search capabilities. Once you&amp;rsquo;ve created your connection (your Line Of Business [LOB] system), you can attach BDC columns to any list (e.g., document library) and you can, for example, have a document with a reference to your other system, so that you can permanently associate extra data to your document, without having to reproduce the information in SharePoint and create unnecessary duplication.&lt;/p&gt;
&lt;p&gt;Using the BDC is beyond the scope of this post, but I&amp;rsquo;d like to cover an issue that I recently encountered when trying to work with the BDC and a document library. I had a fairly simple Visual Studio 2008 workflow that ran when a new item was created in the document library.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Simplified SharePoint solution deployment</title>
      <link>https://matt-thornton.net/tech/sharepoint/simplified-sharepoint-solution-deployment/</link>
      <pubDate>Wed, 16 Jun 2010 15:15:34 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/simplified-sharepoint-solution-deployment/</guid>
      
        <description>&lt;p&gt;Any SharePoint developer will have to work with SharePoint Features at some point. Features are a great way to extend the core functionality of MOSS - in Web 2.0 speak, think of them as “plugins” and you&amp;rsquo;ll understand why they&amp;rsquo;re useful. Features can take a variety of forms - workflows being one of them. I&amp;rsquo;ve &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/extend-sharepoint-designers-workflow-activities&#34;&gt;discussed in the past&lt;/a&gt; the usefulness of SharePoint Designer for workflow creation and eventually you&amp;rsquo;ll need to move to Visual Studio. Features (and workflows) can be designed directly in Visual Studio - support was added in 2005, but its support is further extended in 2008 - Visual Studio will generate all the required bits you need to actually get the workflow ready to be deployed to your SharePoint environment and gives you the all important debugging and code step through stuff. There&amp;rsquo;s &lt;a href=&#34;http://vspug.com/andynoon/2008/02/06/sharepoint-2007-workflow-with-visual-studio-2008/&#34;&gt;a nice guide to the basics of workflow and Visual Studio&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Extend SharePoint Designer&#39;s workflow activities</title>
      <link>https://matt-thornton.net/tech/sharepoint/extend-sharepoint-designers-workflow-activities/</link>
      <pubDate>Wed, 16 Jun 2010 13:52:32 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/extend-sharepoint-designers-workflow-activities/</guid>
      
        <description>&lt;p&gt;SharePoint Designer 2007 is a useful tool for performing quick tasks in your SharePoint environment. It&amp;rsquo;s moreorless Frontpage on steroids, but it&amp;rsquo;s designed to interact directly with SharePoint installations. I&amp;rsquo;ve used it almost exclusively to create simple workflows - &lt;a href=&#34;https://www.matt-thornton.net/tech/sharepoint/sharepoint-workflow-help-failed-on-start-and-more&#34;&gt;simple being the operative word&lt;/a&gt;. And what&amp;rsquo;s more, it&amp;rsquo;s now &lt;a href=&#34;http://www.microsoft.com/downloads/details.aspx?FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42&amp;amp;displaylang=en&#34;&gt;free&lt;/a&gt;! You&amp;rsquo;ll need the likes of Visual Studio to do anything complex, but for every day use where you don&amp;rsquo;t want to worry about packaging up solutions and features and getting involved with stsadm, SharePoint Designer definitely has its place.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Reporting a product bug to Microsoft</title>
      <link>https://matt-thornton.net/tech/reporting-a-product-bug-to-microsoft/</link>
      <pubDate>Fri, 12 Mar 2010 12:08:14 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/reporting-a-product-bug-to-microsoft/</guid>
      
        <description>&lt;p&gt;I needed to update our installation of SQL Server 2008 to include Integration Services so that maintenance plans would run. I have local admin privilege on the machine, but as with most Microsoft related installation tasks, you routinely get so far through the process and you&amp;rsquo;re hit with the SeSecurityPrivilege error - that is, you don&amp;rsquo;t have some permission or other. The installation process goes wrong and you have to cancel out of the whole process in order to restart it with an account that has the privilege.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Force comment entry when editing a list item</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-force-comment-entry-when-editing-a-list-item/</link>
      <pubDate>Wed, 10 Feb 2010 11:28:58 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-force-comment-entry-when-editing-a-list-item/</guid>
      
        <description>&lt;p&gt;Quick tip: custom lists are a great way to store data about a business process or operation that doesn&amp;rsquo;t necessarily fit in a standard list. They can be used to store virtually any type of data, that makes sense in list form. For instance, you might record the configuration details of all the switches on your network. They&amp;rsquo;re especially helpful in that by enabling versioning on a list, you can create an audit trail of when things changed. Critically, though, when something changes, you&amp;rsquo;re likely to want to know why. Therefore, when someone changes an item, you might want to insist that they add a comment to quickly describe the change they have made, and why.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Canon IP5200R wireless printing &#43; OSX 10.6.* Snow Leopard</title>
      <link>https://matt-thornton.net/tech/canon-ip5200r-wireless-printing-osx-10-6-snow-leopard/</link>
      <pubDate>Tue, 17 Nov 2009 21:05:35 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/canon-ip5200r-wireless-printing-osx-10-6-snow-leopard/</guid>
      
        <description>&lt;p&gt;If like me you found that your previously perfectly working Canon IP5200R wireless printer is broken after upgrading to Snow Leopard - don&amp;rsquo;t worry, there&amp;rsquo;s (now) an easy fix. The long and the short of it is - in 10.6 they included an old version of the Canon printer driver. Useful, huh?&lt;/p&gt;
&lt;p&gt;These tips are for UK based people - if you&amp;rsquo;re elsewhere, you should find the appropriate place on the Canon website to get the updates.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Workflow error help: failed on start and more</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-help-failed-on-start-and-more/</link>
      <pubDate>Thu, 16 Jul 2009 16:05:08 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-workflow-help-failed-on-start-and-more/</guid>
      
        <description>&lt;p&gt;One of the major selling points of SharePoint is the power of workflows. Designing very basic sequential workflows in Sharepoint Designer 2007 is a very straightforward task using the workflow designer wizard. But unfortunately straightforward is the key word here, as you are limited by the functionality available to you in SharePoint Designer. Simple tasks (e.g., update an item, send an email, etc.) are doable, but, for example, you can&amp;rsquo;t do any string manipulation other than building “dynamic strings”. So even creating a suitable subject line to an email can require a complicated collection of variables and such like. SPD workflows are also very much “single use” - i.e., they start, they run, they finish. They &lt;em&gt;can&lt;/em&gt; wait and so on, but complicated business logic is pretty difficult to program. At that point, you&amp;rsquo;ll need to get involved with Visual Studio. That&amp;rsquo;s not without its difficulties, however, and as someone coming from a Visual Studio software background, creating workflows can be a minefield. Certain expectations you may have with Winforms just go completely out the window.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Business Data Catalog tips, hints and errors</title>
      <link>https://matt-thornton.net/tech/sharepoint/sharepoint-bdc-tips-hints-and-errors/</link>
      <pubDate>Tue, 14 Jul 2009 11:37:36 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/sharepoint/sharepoint-bdc-tips-hints-and-errors/</guid>
      
        <description>&lt;p&gt;A few tips/hints from my experience in working with the Business Data Catalog Definition Editor to create line of business (LOB) application definition files for use in Sharepoint MOSS 2007.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create a&lt;/strong&gt; _&lt;strong&gt;SpecificFinder method&lt;/strong&gt; - b_y default, BDC DE doesn&amp;rsquo;t create a &lt;em&gt;SpecificFinder&lt;/em&gt; method. You&amp;rsquo;ll need one for use in Sharepoint. &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/ee231569.aspx&#34;&gt;More here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wildcard search&lt;/strong&gt; - When creating a &lt;em&gt;Finder&lt;/em&gt; method (for use with e.g., a Wildcard search) make sure the wildcard character is defined - which is done in the very topmost node of the tree (i.e, the LOB node.) Without it you might find the query runs, you just get no results. Where you&amp;rsquo;re using SQL Server, the Wildcard character by default is %.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple Finder methods&lt;/strong&gt; - You can create multiple filters on a single finder method, just make sure you specify default values and update your e.g., SQL select statement so instead of e.g., &lt;em&gt;where name like @name&lt;/em&gt; you change it to &lt;em&gt;where name like @name and date_create &amp;gt; @date_create_gt&lt;/em&gt;&amp;hellip; etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“Provided stream is invalid”&lt;/strong&gt; - If you get this error “The provided stream is invalid (not of type IDataReader, IEnumerable or IEnumerator). Parameter name: rawAdapterEntityInstanceStream” first thing to check is that your return parameter is the &lt;strong&gt;last one physically specified in your file&lt;/strong&gt;.. i.e., you can have multiple &lt;em&gt;in&lt;/em&gt; parameters, but the &lt;em&gt;return&lt;/em&gt; parameter has to be last in the list. The way to fix this is export your application definition file (to XML), then manually adjust the order of the parameters, then reimport to BDC DE.&lt;br&gt;
4a. &lt;strong&gt;Note:&lt;/strong&gt; If you make manual changes to your ADF file and want to reimport to BDC DE, you have to delete the original definition from BDC DE first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For reference, there&amp;rsquo;s a really good series of articles on basic BDC stuff, &lt;a href=&#34;http://blah.winsmarts.com/2007-4-SharePoint_2007__BDC_-_The_Business_Data_Catalog.aspx&#34;&gt;right about here&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My iPhone experience</title>
      <link>https://matt-thornton.net/tech/my-iphone-experience/</link>
      <pubDate>Thu, 23 Oct 2008 16:16:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/my-iphone-experience/</guid>
      
        <description>&lt;p&gt;As a fully-fledged Apple fanboi (as the idiots would call me), I was waiting with great anticipation for the iPhone to arrive in my area. In mainland UK, the iPhone is locked to o2, but here in Guernsey, we have three mobile carriers (none of which are o2) so there was a long, long wait for them to arrive here. And when they did, they were by no means official - that is, the two carriers offering them are importing them certain European countries for sale unlocked, and I&amp;rsquo;m reasonably sure Apple has little to no idea about it. As I was on the waiting list, I was one of the first to get my hands on one.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d needed a new phone for ages, as the ghetto orange Sony Ericsson I had been using was both a) a girl&amp;rsquo;s phone and b) a lesbian one at that. Not to mention totally beaten to hell and displaying typical “old phone” behaviour in randomly turning off when it ballywell felt like it. Not a good look. When the iPhone arrived here, it was a no-brainer to get one. And, as it turns out, I really had disengaged my brain in getting one.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Wireless backups: USB drive, Airport extreme and Time Machine</title>
      <link>https://matt-thornton.net/tech/wireless-backups-usb-drive-airport-extreme-and-time-machine/</link>
      <pubDate>Mon, 08 Sep 2008 18:23:48 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/wireless-backups-usb-drive-airport-extreme-and-time-machine/</guid>
      
        <description>&lt;p&gt;Quick hint: if you&amp;rsquo;re having trouble getting wireless backups on Time Machine and an Airport Extreme working, then try this - I had the same problem and fixed it for me. Plug the USB drive in to your Mac and using disk utility, veryify and repair the &lt;strong&gt;disk&lt;/strong&gt; not the actual partition. Alternatively, remove all existing partitions from your drive, and then recreate the necessary partitions for your backup scenario. It seems that if you only verify / repair the partitions then the Airport Extreme won&amp;rsquo;t necessarily mount the drive properly (meaning you can&amp;rsquo;t use it as an Airdisk, and you can&amp;rsquo;t use it with Time Machine.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Leopard, iTunes &amp; Airport Express: An unknown error occurred (-3256)</title>
      <link>https://matt-thornton.net/tech/leopard-itunes-airport-express-an-unknown-error-occurred-3256/</link>
      <pubDate>Tue, 27 May 2008 18:07:06 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/leopard-itunes-airport-express-an-unknown-error-occurred-3256/</guid>
      
        <description>&lt;p&gt;You may find you get the following problem when trying to stream music to multiple speakers. Streaming to either local computer OR your airport express works, but when you try to stream both, you get an error message that looks like this:&lt;/p&gt;
&lt;p&gt;“An error occurred while connecting to the remote speaker ‘speaker_name&amp;rsquo;. An unknown error occurred (-3256).”&lt;/p&gt;
&lt;p&gt;This is most likely caused by a firewall issue. If you&amp;rsquo;re running Tiger, then there&amp;rsquo;s a fix &lt;a href=&#34;http://docs.info.apple.com/article.html?artnum=303157&#34;&gt;here&lt;/a&gt;. If, however, you&amp;rsquo;re running Leopard, then it&amp;rsquo;s a little different:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Awesome programming cock-up</title>
      <link>https://matt-thornton.net/tech/awesome-programming-cock-up/</link>
      <pubDate>Thu, 13 Apr 2006 14:11:25 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/awesome-programming-cock-up/</guid>
      
        <description>&lt;p&gt;D-Link, one of the world&amp;rsquo;s biggest manufacturers of networking and Internet equipment, has had a bit of a shocker. NTP (Network Time Protocol) is a simple protocol designed to allow computer equipment to keep an up-to-date time clock - it&amp;rsquo;s done by a handful of hierarchical “time servers” around the world which individual computers are supposed to indirectly connect to to update their time. I say “indirectly” and “hierarchical” because the availability ot so-called “Stratum 1” servers, or those time servers at the very top of the food-chain is quite limited, and normally are only connected to by time servers further down the list.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Imagelists in VS2005</title>
      <link>https://matt-thornton.net/tech/imagelists-in-vs2005/</link>
      <pubDate>Thu, 26 Jan 2006 12:38:44 +0000</pubDate>
      
      <guid>https://matt-thornton.net/tech/imagelists-in-vs2005/</guid>
      
        <description>&lt;p&gt;Amongst the multitude of annoyances that I&amp;rsquo;m putting up with in Visual Studio 2005, one small thing is they&amp;rsquo;ve removed the ability to assign an imagelist to the new toolstrip, via the designer. So you can do it; but only in the code (i.e., in the form designer generated code that you&amp;rsquo;re not supposed to touch).&lt;/p&gt;
&lt;p&gt;What made me chuckle though was a discussion about it on the MSDN forums, and why you should use the image property and not the imagelist anymore&amp;hellip;&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>