Category Archives: Windows

Primer for Modern Office Development – start your journey here

Lets start with a little bit of history, the year was 2008, Windows PCs and Microsoft Office had been entrenched throughout organizations around the globe. We saved all our files on a network drive (if we were smart), or SharePoint if we were really smart and had a dedicated engineer that could keep up with patching it. Sales of Apple Mac had been increasing since the turn of the century and Microsoft had built a version of Office specifically for the Mac and had it running there since 1998. The development story for Microsoft Office had almost exclusively been a Windows only experience, it was quite a rich experience with Visual Studio Extensions for Office allowing Office add-ins to be written in managed code. But I see 2008 as a pivotal year, the landscape of IT usage was about to change in a very disruptive way… Apple had just launched the first version of the iPhone.

In the decade since this moment we have seen a shift towards an always connected, productive on any device world. Microsoft Office was changing dramatically to keep pace with the demands of this changing world. Office was already on the Mac, but fast forward to today (2018) and we have:

  • Office for Windows – the original and still a powerhouse with all the bells and whistles
  • Office for Mac – a very mature product suite that doesn’t lag far behind the Windows offering
  • Office Online – any device with a web browser can not only read but also have a rich editing experience
  • Office for iOS – native applications for iPhone and iPad
  • Office for Android – native applications for Android devices

As you can see in those 10 years a lot had changed, and we don’t even know where our files are physically stored anymore, they are just up there, somewhere, in the Office 365 cloud.

That lead to 2 radical shifts for Office development:

  1. The development technology for extending Office needs to run everywhere that Office does. The one run-time technology that is consistent across all of these devices is the web browser. This meant the shift to web technologies and developing web application (HTML5, JavaScript, CSS). Sure each web browser has it’s own idiosyncrasies but the web development world had been working on ways around this for many years and we now have mature frameworks for building web based applications.
  2. We have an opportunity we never had before – users data stored in the Office 365 cloud (with a shiny new API to get to it – the Microsoft Graph API)

So when we talk about Office Development we talk about 2 distinct types of development:

  1. Extending the user experience within the Office applications (i.e. an add-in)
  2. A standalone application that accesses user data stored in the Office 365 cloud.

 

Where to from here?

The best starting place within the Microsoft documentation for developing Office add-ins is

https://docs.microsoft.com/en-us/office/dev/add-ins/

and for accessing user data via the Microsoft Graph

https://developer.microsoft.com/en-us/graph/docs/concepts/overview

 

Further reading

Office Dev Center

https://developer.microsoft.com/en-us/office

History of Microsoft Office

https://en.wikipedia.org/wiki/History_of_Microsoft_Office

History of Visual Studio Tools for Office

https://en.wikipedia.org/wiki/Visual_Studio_Tools_for_Office

History of Office Online

https://en.wikipedia.org/wiki/Office_Online

 

 

Microsoft Insider Dev Tour – Sydney 2018

The Insider Dev Tour is such a great event for Microsoft developers, you get the key announcements and latest news that came out of the Build Conference, delivered locally in a more intimate and interactive environment. Best of all it’s a free event put on by Microsoft.

I was very grateful for the opportunity to present two sessions at the Insider Dev Tour in Sydney last week.

  • Create Productive Apps with Office 365
  • Drive User Engagement Across all your Devices with Microsoft Graph

If you attended I hope you enjoyed the experience as much as I did. The following are links to the resources mentioned during the presentations.

Microsoft Graph Explorer

Adaptive Cards Visualizer

Insider Dev Tour Labs

Github repo of demos from the Create Productive Apps with Office 365 session

Github repo of demos from the Microsoft Graph session

insider-dev-tour-sydney-cameron-dwyer-mvp-graph-api-office-365-microsoft

 

How to fix mouse cursor disappearing on Remote Desktop

I wrote a blog post a while back about the disappearing mouse cursor in Visual Studio on virtual machines that I’d connect to using remote desktop. It seems the problem is more widespread and affects most input or editing controls across many applications in the remote desktop session. For example the mouse cursor disappears in Notepad, Word, Excel and other applications.

remote-desktop-cursor-disappear-not-visibile-input-cameron-dwyer

Thankfully the fix is a pretty simple one. Simply edit the current Windows theme and change the mouse cursor.

remote-desktop-mouse-cursor-disappear-not-visibile-input-02-themes-mouse-cursor-cameron-dwyer

In the Mouse properties window, change the Scheme to Windows Black (system scheme)

remote-desktop-mouse-cursor-disappear-not-visibile-input-02-Windows-black-scheme-cameron-dwyer

Say hello to your cursor when editing text again!

Family tech support – How to get Office for free?

If you read my blog you are probably working with IT everyday and are familiar with the fact that all your family members (and extended family) use you as the family IT help desk – if only you could charge them your hourly rate…

A frequent family help desk call is the one you get after they have purchased a new laptop or PC. They need help to set it up and get the basic applications installed – one of which is Office.

You can point them towards buying an Office subscription, but these days it’s also worth considering what a Microsoft Live account provides for free. How much are they really going to use the “power” features of Office? I know they want Office installed because they need to feel assured that when they want to start writing a novel or need to fire up Excel for working out their finances and budget that it’s going to be there for them – but in reality it’s probably just the basic features that they require; and guess what, a free Microsoft Live account gives you online versions of Word, Excel and PowerPoint that are actually very good. So much so that I find them faster than their desktop counterparts and in the commercial world find myself using Office Online more and more to read and make changes to Office files (Word, Excel, PowerPoint & OneNote).

So what do you get when you sign up for a consumer Microsoft Live free account?

The sign-up page lists quite a few things but I don’t think it does a great job of telling you what you actually get, lets take a look at them:

  • Account – This is the identity of your user account pretty simple.
  • Outlook – You get an Outlook.com email address and you can use Outlook in a web browser, and native Outlook apps available on iPhone and Android (for free) which are really good. What you don’t get is a license to use the Desktop version of Outlook on Windows. The built in Windows mail app can be used to connect to your Outlook.com account however. It’s not as powerful and feature rich as the Outlook Desktop client but it’s also faster and baked into Windows 10.
  • Office Online – This to me is really the unsung hero of a consumer Microsoft account. What this means is that you get:
    • Word Online (plus native Word on iPhone/iPad and Android) – Read and pretty impressive edit capabilities
    • Excel Online (plus native Word on iPhone/iPad and Android) – Read and pretty impressive edit capabilities
    • PowerPoint Online (plus native Word on iPhone/iPad and Android) – Read and pretty impressive edit capabilities
    • OneNote (Full Windows application plus native Word on iPhone/iPad and Android) – Read and pretty impressive edit capabilities
    • Office Lens – If you haven’t used this app on iPhone or Android it’s going to blow your mind (just a little). It turns your phone into a handheld scanner. Take a photo and it automatically straightens up the page and makes the scan look good (with document, business card and whiteboard modes).
  • Skype – This refers to the consumer version of Skype that you may already have used for free, well since Microsoft acquired in quite a few years ago now your Microsoft Live account has an associated Skype identity.
  • OneDrive – This is personal cloud storage (think DropBox). You can save files to the cloud and they are backed up and available anywhere you log in (Windows PC, Mac, tablet, web browser, iPhone, Android etc).  On the free plan you get 5GB of cloud storage for free.
  • Windows – to get the most out of Windows 10 you really need to have a Microsoft account at the time of setting Windows up. Your free Microsoft Live account provides this Windows identity, this is who you will sign into you new laptop or PC with.
  • XBox Live, Bing, Store, MSN – I don’t think these are anything to rave about they are really just providing you with an identity to these services.

So we’ve covered off the services that Microsoft advertises you get with a Microsoft Live account, but once you have set it up these are the application that you actually get access to (this is accessing your account via a web browser).

In addition to what’s advertised you also get:

  • Calendar – Yes this is pretty much what you’d expect it to be. It’s baked into Windows 10 and the Cortana personal assistant can make use of it too
  • People – This is your central contact management area for your Microsoft Live account
  • Photos – these are stored in OneDrive but you get specific handling of photos with thumbnails, albums and some AI classification as well.
  • Tasks – These are basically a ToDo list but with pretty slick apps for iPhone and Android as well. This has come partly from Microsoft’s acquisition of Wunderlist which was one of the most popular mobile ToDo applications.
  • Sway – this is for creating rich and engaging online presentations
  • Flow – very useful for automating tasks and connecting systems together (even outside the Microsoft ecosystem). Example: every time you receive and email with a certain subject or from a certain sender you want to copy the attachment to a folder in OneDrive – Flow can do that for you. Flow is similar to IFTTT (If This Then That)

The real draw cards here for your family and friends though is Office online (Word, Excel, PowerPoint). The editing capabilities of the online version of these apps is now to the point that it would be sufficient for most use cases. Have a look at the ribbons options on the screenshots below, are they missing anything you’d need for day to day use?

 

 

You’re getting a lot out of the box now with your free Microsoft Live account. It’s by far the smartest move when setting up a new laptop or PC so that your Microsoft Live account is used when you are logging in and you are going to get all of these great apps for free and may even replace the need for buying a Office subscription or installing a desktop version of the Office application. Now that has to cut down your future IT help desk overhead!

It’s a fast moving space and hard to keep up with even when you are working in the space, so cut your family and friends some slack, it may take a little education but they can achieve what they used to with a minimal install and without having to part with any hard earned cash.

Read more about Office Online.

 

Solving issues Scaling Remote Desktop on High DPI screens (Surface Pro)

The high density (DPI or Dots Per Inch) of modern screens such as a Surface Pro can cause numerous issues when trying to use Remote Desktop Connection (RDC) to remotely connect to another machine. Add an external monitor to the mix and you’ll be pulling your hair out before long at all.

These are the typical issues you can expect to run into:

  • Can’t get the remote desktop to fill up the entire screen
  • Remote desktop is tiny and you can’t make it any bigger
  • Text and images in remote desktop are really small
  • Mouse cursor in remote desktop is very small or very large
  • Blurry text in remote desktop
  • Blurry images in remote desktop
  • Can’t move remote desktop between screens without issues (e.g. between Surface screen and external monitor)

windows-dpi-scaling-remote-desktop-cameron-dwyer-01-small-remote-desktop

Screenshot (click to enlarge): Remote Desktop Connection on Surface Pro 4, trying to maximize the remote desktop just pushes it to the top right corner of the Surface screen, the icons and text are so small you can hardly read them.

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-2-small-remote-desktop-full-screen

Screenshot (click to enlarge): Remote Desktop Connection on Surface Pro 4, if you try to put the remote desktop into full screen mode, you end up with the same tiny text and images just centred on the Surface screen with a black background around it.

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-03-blurry-text-large-fonts-small-cursor

Screenshot (click to enlarge): Remote Desktop Connection on Surface Pro 4 opened on an external monitor. Trying to show the Remote Desktop on an external monitor is often affected by; Blurry text/images/fonts (such as the Word ribbon), some really oversized text (such as the window title), tiny mouse cursor (or reverse, sometimes I get a massive cursor)

 

Almost all the symptoms above are due to differences in DPI and resolutions between:

  • The host machine
  • The remote machine session
  • The host screen and the external screen

I have transitioned across to using a Surface Pro 4 as my main work machine, I don’t do much development work directly on the Surface, rather I have a few virtual machines running on servers in the office and in Azure. As soon as I tried to RDC to these virtual machines I immediately started running into these problems.

The closest thing I have found to a silver bullet that addresses most of these issues in one hit is to stop using the Remote Desktop Connection client that comes built into Windows 10. Instead I now use a separate free product that Microsoft has available called Remote Desktop Connection Manager.

Remote Desktop Connection Manager has the added benefits of:

  • A navigation list of machines you regularly connect to make it super fast to open and switch between connections
  • Persistence of connection credentials
  • Lots more configuration options (compared to the standard RDC)

windows-dpi-scaling-remote-desktop-cameron-dwyer-04-desktop-connection-manager

Screenshot (click to enlarge): Remote Desktop Connection Manager layout

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-05-remote-desktop-scaled-correctly

Screenshot (click to enlarge): Connecting using Remote Desktop Connection Manager I now get the remote desktop completely filling up my Surface screen, and at a resolution and DPI that is useable. Text, images and cursor all appear crisp and as expected! Extending out to an external monitor is much more successful than with the standard RDC. Again in full screen mode, the remote desktop takes up the entire screen and scaling happens without leaving you with blurry text, images and cursor.

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-06-session-full-screen

Screenshot (click to enlarge): Remote Desktop Connection Manager full screen option is a bit hidden away under the Session menu

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-07-display-options

Screenshot (click to enlarge): Remote Desktop Connection Manager also provides a much richer set of configuration options regarding the display if it doesn’t just work for you immediately as well.

 

One important thing to note is that some scaling of the remote desktop occurs when the remote session is established. This only happens when you disconnect and reconnect. So if you have a session open on one of your screens (e.g. Surface screen) and then move that across to an external monitor it may not fill up the whole external screen when you try to go full screen. If you disconnect and reconnect while on the external monitor you will now be able to go full screen on the external monitor. Remote Desktop Connection Manager has a quick way of doing this (just right-click and select Reconnect server).

 

windows-dpi-scaling-remote-desktop-cameron-dwyer-08-reconnect-session

Screenshot: Reconnect server option

 

The handling of DPI and associated scaling behaviour is different based on the version of the operating system. I have been using Remote Desktop Connection Manager from my Windows 10 Surface Pro 4 connecting to a mix of Windows Server 2012 and Windows 10 virtual machines. You may not have as much success if you add other operating system versions into the mix.

While it’s not perfect (I still find problems now and then and taking screenshot of remote connections usually come out smaller or larger than you would expect), its a lot better than just using the standard remote desktop connection client built into Windows.

 

Further reading:

https://blogs.msdn.microsoft.com/rds/2013/12/16/resolution-and-scaling-level-updates-in-rdp-8-1/

https://blogs.msdn.microsoft.com/rds/2015/06/29/zoom-windows-10-remote-desktop-connections-to-older-versions-of-windows-to-improve-your-experience-on-a-hi-dpi-client-display/

Neat trick to enable LTE on Surface Pro 4 (for Windows Phone users)

Microsoft Surface Pro 4 doesn’t have built in LTE capability (at the time of writing this). What this means is that your Surface Pro 4 can’t connect to the internet on its own. It needs to connect to a wireless network/hotspot, or use a USB adaptor to provide access to the internet (e.g. physical Ethernet connection).

I’ve read a few articles dismissing the Surface Pro 4 because the lack of LTE (or SIM card). I don’t really find it an issue, why? Because of a neat little trick that the Surface can do with my Windows Phone.

Most smartphones these days support tethering (also called internet sharing, or wireless hotspot). This effectively shares the internet connection that your phone has with other devices. Other devices connect to your phone (which acts as a wireless hotspot) and then get access to the internet (which you can secure with a password). Ok, boring blurb over, you already knew that you could get out to the internet by using your phone right?

Here’s what you are probably used to:

  • Pull out your phone
  • Unlock your phone
  • Navigate into the phone settings area
  • Find the tethering/internet sharing settings
  • Turn tethering/internet sharing on
  • Now back on your Surface, if you’ve set up the Wi-Fi connection to your phone to auto connect you should find the connection is made automatically after a few seconds and you’re on the internet

But this process is just so clunky and slow.

So here’s the neat trick that your Windows Phone, teamed up with your Surface is capable of:

  • Leave your phone alone – in your pocket, bag, backpack, desk drawer (wherever as long as it within a reasonable range)
  • On your Surface, simply click on the Wi-Fi icon in the task tray to show any available Wi-Fi connections. You should see your phone listed (even though the tethering is not enabled on your phone). You can see my NOKIA Lumia phone in the list below and it shows as “Mobile hotspot, off”

microsoft-surface-pro-LTE-SIM-01-select-phone-hotspot-cameron-dwyer

  • Now I just select the NOKIA Lumia option in the list and click Connect

microsoft-surface-pro-LTE-SIM-02-enable-tethering-automatically-cameron-dwyer

  • Without touching my phone, the Surface is able to turn on the hotspot/tethering feature of the phone and connect to it.

microsoft-surface-pro-LTE-SIM-03-connected-cameron-dwyer

 

I would also suggest changing the connection to your phone to set it as a metered connection. This will prevent Windows from performing costly data transfers such as downloading updates.

So do I care that my Surface Pro 4 doesn’t have LTE (SIM card)? Not at all, because I’ve always got my phone close by and I can now share its internet connection with just 2 clicks. It’s a pretty cool integration that makes a world of difference.

I’ve only tried this on a Surface Pro 4 (Windows 10) and Nokia Lumia 930 (Windows 10), although the articles below suggest that this feature also works on Windows 8.1.

Further Reading

http://www.neowin.net/forum/topic/1229889-windows-can-now-control-internet-sharing-on-windows-phone/

http://www.surfaceforums.net/threads/automatic-tethering-to-windows-phone.6305/

Windows Phone 10–Continuum and Remote Desktop Combo is Huge

Being a Windows Phone user I was pretty excited when the Continuum feature started getting demonstrated. But the sceptic inside me kept nagging at me that it’s probably going to be more gimmick than substance. A chance conversation at Microsoft Ignite Australia has changed my opinion and got me excited again.

A reminder about what Continuum is:

Continuum for Windows phones lets you turn your phone into a PC-like experience by connecting an external display, keyboard, and mouse using the new Microsoft Display Dock. The experience on the phone (start screen, calls etc) remains completely independent of the PC-like experience on the external display.

Microsoft-Display-Dock-continuum

The Continuum magic is only supported by the new Universal Windows Apps (primarily Microsoft Apps to start with, e.g. Office/Mail/Calendar). This is the bit that the sceptic in me initially thought great feature, but who’s going to build the apps to support it.

The phone (via the dock) is capable of driving a single HDMI display and apps scale up to use a high resolution on the external monitor.

The real light bulb moment happened during a conversation when it was mentioned that a remote desktop app that supported Continuum was not only in the pipeline but I was able to get a demonstration. This is epic, as my development machines are all virtual (some on premises at the office and others in Azure). What this would mean for me is that I could plug my phone in to get the Continuum PC like experience, then start a remote desktop session to one of my development machines and start coding with very much the same experience I would have on a beefy laptop. The only drawback from the specs of been reading is that you can’t drive 2 external displays from the dock (but for those occasions that you would use it you’re probably not carrying around dual displays!)

Also worth noting is the demo kit that I saw was using the wireless dock. No cords at all; phone, dock, mouse, keyboard, display all in close proximity but not a cord in sight.

Update (16 Dec 2015)

A Microsoft forum moderator has posted this information

“We’ve heard a lot of buzz around being able to connect to a remote desktop from Continuum for phone. We are excited to share that the Remote Desktop Universal Windows Platform (UWP) app will be released very soon in Technical Preview. We are very interested in hearing more from remote desktop users to help prioritize investments in this much-requested app. How do you intend to use it on Continuum for phone? What apps will you run and what tasks will you do? In what environments or scenarios will you use it?”

http://www.winbeta.org/news/remote-desktop-universal-windows-10-app-will-be-released-very-soon

Further Reading:

http://www.windowscentral.com/how-continuum-windows-10-mobile-works-lumia-950

http://www.slashgear.com/microsoft-display-dock-hands-on-continuum-could-be-huge-06408536/

Update (13 Jan 2016) – The Preview of Remote Desktop Universal App is Here

Remote Desktop Preview now available on Windows 10 Mobile and Continuum

How to Dock Windows Left & Right using Multiple Monitors

Here’s a quick tip that one of my colleagues showed my this week that makes working with multiple monitors a lot easier. Thanks to @FreeRangeEggs for this tip.

 

The Problem

You’ve got 2 windows (A and B) and you want to dock them side by side on monitor 1.

cameron-dwyer-windows-doc-multi-monitor-01-window-a-b

Its easy to dock window A to the left on monitor 1. Just drag the window to the left of the monitor and it will “snap” or dock to the left side and fill up half the screen.

cameron-dwyer-windows-doc-multi-monitor-02-drag-window-a-left

But now if we try to do the same with windows B, instead of docking the the right of monitor 1, the window just glides across onto monitor 2.

cameron-dwyer-windows-doc-multi-monitor-03-drag-window-b-rightcameron-dwyer-windows-doc-multi-monitor-04-window-pushes-across-monitor

The Solution

So how do we get window B to dock to the right side of monitor 1? First select window B then use the keyboard shortcut WINDOWS KEY + RIGHT ARROW.

cameron-dwyer-windows-doc-multi-monitor-05-win-plus-right

Simple as that.

Note: You can also use WINDOWS KEY + LEFT ARROW to dock to the left side of the current monitor. This can help you do the reverse (that is, if you are on monitor 2 and want to dock a window to the left side)

My favourite announcements from BUILD 2015 (Day 1)

 

Microsoft’s really long Build developer keynote, condensed into 2 minutes

http://mashable.com/2015/04/29/microsoft-build-keynote-video/?utm_cid=mash-com-Tw-main-link

 

Welcoming Developers to Windows 10

  • Windows 10 on One Billion Devices
  • Universal Windows Platform Innovation
  • Windows 10 Welcomes All Developers and Their Code (including Android and iOS)
  • Microsoft Edge (new browser replacement for IE)

http://blogs.windows.com/bloggingwindows/2015/04/29/welcoming-developers-to-windows-10/

 

Continuum for Windows 10 for phones puts a PC in your pocket

http://www.techradar.com/news/phone-and-communications/mobile-phones/continuum-for-windows-10-for-phones-puts-a-pc-in-your-pocket-1292491

 

Visual Studio Code, Visual Studio 2015 RC, Team Foundation Server 2015 RC, Visual Studio 2013 Update 5

http://blogs.msdn.com/b/visualstudio/archive/2015/04/29/build-2015-news-visual-studio-code-visual-studio-2015-rc-team-foundation-server-2015-rc-visual-studio-2013-update-5.aspx

How to enable “Hey Cortana” with Windows Phone 8.1 Update in Australia

Currently only USA and UK Windows Phones can access Cortana Beta. Some other countries such as Australia have access to Cortana Alpha. The “Hey Cortana” feature which allows you to start Cortana listening by simply saying “Hey Cortana” is not included in the Alpha and we have to wait patiently for the Beta. There is always the option to opt in to the Developer Preview and get the latest goodies, but if you’d prefer to keep your phone on a stable build and still get access to the “Hey Cortana” feature here’s a quick way to acheive it. In a nutshell you can change your phones region to UK just long enough to enable “Hey Cortana” and then switch your region back. After doing this “Hey Cortana” says it’s disabled in the settings but seems to keep working fine.

Here’s how to do it:

Settings | System

I’ve you are in Australia you should see that Region currently says Australia, English (Australia) and Speech is set to English (United Kingdom)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (1)

Open the Region setting (it should currently be set similar to below)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (2)

Change the Country/Region from Australia to United Kingdom and then press the restart phone button that appears once you change the Country/Region

enable-hey-cortana-australia-windows-phone-cameron-dwyer (3)

When your phone restarts go to Settings | System. Hey Cortana will still show as disabled

enable-hey-cortana-australia-windows-phone-cameron-dwyer (4)

Open the Hey Cortana settings you should now be able to switch this feature on.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (6)

Continue on to setup (train) Cortana. You will only be able to do this while your Country/Region is set to United Kingdom, once we switch it back to Australia you will loose the ability to retrain.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (7)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (8)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (9)

Once you’ve completed the Cortana training you should be back at the settings screen.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (10)

Now your region will be set to United Kingdom, English (Australia)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (11)

Now lets change the Region | Country/Region back to Australia. Select the restart phone button when it becomes available.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (12)

Once your phone restarts go to Settings | System. You should find that Hey Cortana is disabled.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (13)

enable-hey-cortana-australia-windows-phone-cameron-dwyer (14)

But if you say “Hey Cortana” either while you phone screen is on (or even if you phone is locked with screen off), Cortana will respond by turning the screen on and making a beep sound. Cortana is now listening for your command.

enable-hey-cortana-australia-windows-phone-cameron-dwyer (15)

%d bloggers like this: