Tuesday, October 31, 2017

How to Duplicate the Mircrosoft Surface Hub's Screen on another Hub

So, you've got yourself a few Surface Hubs and now you're having a big meeting. Big enough to need to use both hubs together.

So... how do you do it?

The Problem

In our case, we have two meeting rooms, each with a Microsoft Surface hub on the wall.  The rooms have a removable partition which enables it to be opened up into a large board room. Unfortunately, when this happens, the meeting participants can't always see the "master screen". 

The ideal solution to this would be to have the display of the master screen duplicated on a "slave screen".  The diagram below illustrates this need.

Two Methods

There are two ways in which the screen can be duplicated.  Method 1 involves skype. It's fairly easy to set up and requires no cabling. Unfortunately, because of generally slow internet speeds, it doesn't cope with high motion slideshows -- and it certainly doesn't cope with video.

The other method involves cables.

In this post, I want to cover off both methods. I'll be referring to the hubs as the "source", which displays the images and the "target" which receives the images from the source.

The Skype Method

The skype method is really simple.

  1. Go to the target hub and turn off the volume. 
  2. You should also turn off the microphone (these first two steps are important because they prevent the microphone from going into a feedback loop -- ie: a squeal sound).
  3. On the source hub, invite the target to your skype meeting.
  4. On the target hub, join the meeting.
  5. On the source push "Present Screen" near the top of the screen. 
  6. On the target hub, maximise the screen.

You will now be able to present on the source hub and have it display on the target.  For extra points, you could optionally include a laptop and share the screen to both hubs from there.

Bear in mind that while this method works, it can be a little slow to change slides and it's terrible with animation and video.

The Cable Method

To use the cable method, you need to obtain a  DisplayPort to DisplayPort cable. The Microsoft specficiations suggest that 3 metres is the maximum length but you should be able to get it to about 5 meters without too much trouble if you use a quality cable.

In the diagram below, the red marks the things that need to be looked at if you're driving an 84" surface hub from a 55" one.  The purple indicates the things that would need to be changed if the target was another 55" hub.

The ports on the surface are confusing, to say the least as they're in reverse order on the 55" and 84" models.  They're also not labelled well at all, particularly not as a group of "input" or "output" ports. There's subtle arrows on the ports pointing into a box or out of a box. That's your indication of whether the port is an input or output one.  

Additionally, there's an important slide switch which is simply marked with an exclaimation mark in a trangle.  If you slide this to the left (looking from behind the surface screens), it "turns the onboard computer off"  -- except it doesn't. The onboard computer seems to function well enough regardless of how the switch is set. 

What the switch does do however is determine whether or not the surface will look at the input ports. This might be important if you were going to set up a permanent cable connection but only wanted it to be "active" sometimes.

Finally, on the target hub, you'll need to switch the input to Display Port. 

HDMI and VGA are options

While HDMI isn't supported as an output format, you can have HDMI as an input. That's good because HDMI cables can be longer and you can get them with built-in repeaters though I haven't tested one -- yet. 

You can also, apparently connect via VGA but since VGA doesn't carry sound, you'll want to connect the audio ports together too. I haven't tested this procedure. 

The official Microsoft documentation on this is here

Friday, October 27, 2017

Getting Started with SharePoint Lists

SharePoint lists are a great way to build quick "applications" and registers. 

If, like me, you've migrated from IBM Domino, and you were wondering where the Office 365 development functionality is, this is where it starts.  For everyone else, who has never heard of domino, don't worry, I'll explain what SharePoint lists are and why they're a great tool for you. 

What Are SharePoint Lists?

SharePoint lists are essentially a "cloud way" to store data that you want to share and search. You can put documents into lists but the best use of lists is to store and update "data".

Essentially, SharePoint lists are a kind of database. They're not incredibly powerful, like SQL server but they're usually going to be powerful enough to replace a lot of the things you might have in Microsoft Access.

One of the easiest ways to determine what applications are a good fit for SharePoint lists is to look at your spreadsheets.  Spreadsheets, like Excel are great for maths and finance but they're less suitable for simple lists -- especially if those lists need to be shared. If you're keeping track of things in excel but you're not doing maths or graphs, a list is probably a better fit.

What can I use them for? 

You can use SharePoint lists for almost anything but here's a few business ideas to get you started;

  • Inventories and Asset Registers; to track serial numbers, device allocations, IMEIs and even problems against devices.
  • Contracts; to store the actual contracts but also record information against them like start and end dates, terms and contacts.
  • Share Passwords; In most IT teams (and other business teams) there's a bunch of shared URLs, user names and passwords. Putting these into a central list makes it easier to search for them when you need them.
  • Keywords: Lists can be used to power other lists (I'll talk about that more in a future post).
  • Changes: If you're putting together a Change Management system, a list can be a good way to register a change and set a status on it.
  • Collection management; If you collect anything; books, dvds etc, Lists can be used to manage the collection. 

Building your own SharePoint List

Without further ado, here's a slideshow that walks you through the process of building a simple SharePoint list. I've ignored a lot of options and a lot of the opportunities for a slicker experience in order to keep this as simple as possible. 

Where to From Here?

This is just the tip of the iceberg when it comes to lists and there's a whole lot of other places we can go from here. In particular, we can "skin the list" to make it look nicer and we can built a mobile app using PowerApps (it's very easy), we can also add validation and security.

Tuesday, October 17, 2017

Fixing up those Pesky # Filenames for Importing into OneDrive and SharePoint

Once you're used to the new way of working, OneDrive and SharePoint are great file storage systems. The biggest problem is getting your files into them. Sure, it's usually just a case of drag and drop but the real problems are related to some tighter controls on the file names.

The worst offenders are the ampersand and the hashtag. In fact, it seems to be really common for people to name their files with a hashtag in financial circles. For example: "Invoice No #675853.pdf"

OneDrive and SharePoint will "spit the dummy" if you try to upload a file that breaks these rules.

Interface Problems

What's worse is that while the upload tools will happily report all of the errors, it doesn't give you a chance to correct them and it doesn't tell you exactly where in the path the offending file is.

What's more, you can't copy the log of errors to the clipboard and I haven't seen any signs of any other forms of logging - not that I've really looked that hard for them.

In any case, fixing these problems by hand is just a little too much, especially if you're migrating a large company with lots of files and folders.  The better solution is to prepare the files before you upload them.

OneDrive Check

I looked around for a solution to this problem as I was quite reluctant to try to roll my own. Eventually, after trying several other non-functional solutions, I found what seems to be the Microsoft supported solution.

It's a little PowerShell script called OneDrive-Check.  Since it was so difficult to find, I figured it was worth posting about to see if I could raise awareness for this little hero.

How to Use it

First of all, you need to download the ZIP file, which includes accepting an agreement. On the off-chance that the file is gone one day... and since it's a tiny text file called "OneDrive-Check.ps1", I'll include the actual contents at the end of this post... that way, you can easily recreate it if you need to.

Because there are a lot of people out there that don't seem to remember DOS, I'm going to give you the DOS/PowerShell commands for things like changing directories. I hope everyone else doesn't find this too patronising. ... oh and means to press the enter key.   :-)

  1. Click on the link, download the ZIP file and extract OneDrive-Check.ps1
  2. Copy that file to a useful place (eg: C:\temp\OneDrive-Check.ps1)
  3. Start Windows PowerShell (Click Start/Window and type Power, you'll find it). You might want to right-click on it and run as Administrator.
  4. Once PowerShell has loaded, go to the location where you saved your file
    (for example:  C: then CD C:\temp ).
  5. Type: Import-Module C:\temp\OneDrive-Check.ps1
    This should load the new module.
  6. Now go to where the files that you want in OneDrive are stored:
    (eg:  M: then CD M:\DATA )
    Remember that if you're changing into a folder with spaces in the name, you will probably want to enclose it in inverted commas;
    (eg: CD "M:\Data\Our Company Files" )
  7. To check what will happen, you can type
     OneDrive-Check -Folder "M:\Data\Our Company Files"
    (obviously substitute your folder name)
  8. To actually make the changes, you can type
    OneDrive-Check -Folder "M:\Data\Our Company Files" -Fix
  9. Best of luck. It's not perfect but it will significantly reduce your workload.
    (did I mention that it does sub-directories too?)
The main thing that doesn't seem to work (for obvious reasons) is that it doesn't resolve super-long file names.

Once the script has finished its work you can start dragging and dropping your folders into OneDrive or SharePoint document libraries.

And Now the "OneDrive-Check.ps1" File

So, just in case the OneDrive-Check.ps1 file disappears off the internet someday, here it is.  Bear in mind that in posting it on the internet, it's possible that some character changes might occur, so test it carefully before use.

(and a huge thank you to Andreas Molin, wherever he is. What a Hero!)

### Created by Andreas Molin
### Usage: Import-Module OneDrive-Check.ps1
### OneDrive-Check -Folder
### OneDrive-Check -Folder -Fix

function OneDrive-Check($Folder,[switch]$Fix){
    $Items = Get-ChildItem -Path $Folder -Recurse

    $UnsupportedChars = '[!&{}~#%]'

    foreach ($item in $items){
        filter Matches($UnsupportedChars){
        $item.Name | Select-String -AllMatches $UnsupportedChars |
        Select-Object -ExpandProperty Matches
        Select-Object -ExpandProperty Values

        $newFileName = $item.Name
        Matches $UnsupportedChars | ForEach-Object {
            Write-Host "$($item.FullName) has the illegal character $($_.Value)" -ForegroundColor Red
            if ($_.Value -match "&") { $newFileName = ($newFileName -replace "&", "and") }
            if ($_.Value -match "{") { $newFileName = ($newFileName -replace "{", "(") }
            if ($_.Value -match "}") { $newFileName = ($newFileName -replace "}", ")") }
            if ($_.Value -match "~") { $newFileName = ($newFileName -replace "~", "-") }
            if ($_.Value -match "#") { $newFileName = ($newFileName -replace "#", "") }
            if ($_.Value -match "%") { $newFileName = ($newFileName -replace "%", "") }
            if ($_.Value -match "!") { $newFileName = ($newFileName -replace "!", "") }
         if (($newFileName -ne $item.Name) -and ($Fix)){
            Rename-Item $item.FullName -NewName ($newFileName)
            Write-Host "$($item.Name) has been changed to $newFileName" -ForegroundColor Green

Thursday, October 05, 2017

SharePoint works if you start working the NEW way

It's been a long road from drive letters to SharePoint but I feel quite comfortable in this space now. It's all a matter of perspective -- and of course, resisting the urge to rebuild the old world in the new space. 

SharePoint works extremely well with files but there's a disturbing trend that I've seen amongst my users.  They use Sync to create a local replica of the entire of their SharePoint file libraries on their computers.

Apart from being extremely dangerous, this also introduces a lot of complications. One of the biggest complications is that many of the limitations that don't exist or are reduced in SharePoint, particularly folder structure (long path and file names) are still present in Windows 10. This means that if you sync a large SharePoint library you may find it difficult to save files in the lower levels on your PC.

When you think about it, syncing everything is just a way of trying to bring the old world into the new. A way to continue using "mapped drives".

I've found that working a new way, makes things so much easier but of course, it requires a bit of retraining.

A Training Presentation

Below is a presentation I made to help train people where I work on the new way to work with SharePoint files. I've deliberately kept it short and tried not to go off on tangents.  Feel free to use it and modify it for your audiences.

Link: https://www.slideshare.net/secret/AxiJKTViS54DpM

and here's an embedded version.