Archive for the ‘Microsoft’ Category

The built-in Facebook OWIN provider in ASP.NET MVC can open your website to the benefits of logging in via the social networking behemoth. Still, it’s limited when it comes to pulling in profile details such as photo, birthdate, gender, and so forth. I recently implemented retrieval of those profile properties, and will explain how you can do it, too! I feel the obvious benefit is your users don’t need to manually type in their profile details, should you have similar fields in your system.

I’m assuming you’ve created and configured a Facebook app via Facebook’s Dev center, and won’t be going into that process in this article.

Determine Which Profile Fields You Need

Before we write any code, you need to know to which profile details you desire access. Facebook used to be relatively open. Not anymore! Now you need to ask permission for a ton of items, and many are no longer available. Make sure you check permissions at least every 3 months, otherwise you may find your granted permissions are no longer, well, granted, or even accessible.

Here’s a link to everything you can get: https://developers.facebook.com/docs/facebook-login/permissions/

In my case, to access the Profile photo, name information, and some other basic items, I chose:

  • public_profile
  • email
  • user_photos
  • user_about_me

I probably don’t need all these right now, but I may in the future. I figured I’d ask ahead of time.

Once you have your list, continue to the fun coding part…

Enable the Facebook Provider in Startup.Auth.cs

If you haven’t already, you’ll need to enable the Facebook provider via Startup.Auth.cs. Make sure you do this *after* any cookie authentication, so “normal” username/password logins are serviced before Facebook takes over. This should already be the case, as the default ASP.NET MVC template includes the many optional providers afterwards by default.

I suggest keeping the App ID and Secret in your config file – or at least out of code – so you can swap for differing environments as necessary. The code snippet below enables Facebook authentication, and specifies the profile fields for which we’ll be asking read permission:

You don’t have to use what I chose – it’s just what I needed for my particular case. Facebook *does* change allowed permissions and profile item visibility somewhat often. Stay on top of their developer changes – otherwise your site login may unexpectedly break.

// Enable Facebook authentication with permission grant request.
// Otherwise, you just get the user's name.
var options = new FacebookAuthenticationOptions();
options.AppId = ConfigurationManager.AppSettings["Facebook.AppId"];
options.AppSecret = ConfigurationManager.AppSettings["Facebook.AppSecret"];
options.Scope.Add("public_profile");
options.Scope.Add("email");
options.Scope.Add("user_photos");
options.Scope.Add("user_about_me");
app.UseFacebookAuthentication(options);

Install the Facebook NuGet Package

In order to easily get access to the Facebook data, I used the Facebook.NET library. It’s easy enough to install:

Install-Package Facebook

Note: I used version 7.0.6 in this example. You should be able to find the latest version and changelog at https://www.nuget.org/packages/Facebook/7.0.10-beta

Handle the Facebook External Login Callback in AccountController.cs

Once Facebook has been configured, all requests from your website will direct to Facebook, where it will ask permission, and, if granted, will redirect back to the ExternalLoginCallback action in the Account controller. It is here that I suggest you retrieve the data you’ve requested from Facebook. You’ll then modify the associated ExternalLoginConfirmation View with fields to correct or remove any information from Facebook, then continue with the account creation process on your website. That’s the part where you’ll populate the ApplicationUser entity, or whatever you decided to call it.

It’s relatively simple, as shown in the code below. The steps are as follows:

  1. Get the Facebook OAuth token with a simple HttpClient call
  2. Make the request for Profile details using the Facebook.NET library
  3. Optionally, download the Profile photo and save it somewhere

Yes, I could split this out – refactor as you see fit, and feel free to share any optimizations.

Below is the change to ExternalLoginCallback to grab the data from Facebook after the redirect:

ExternalLoginCallback Code

If you’d like to get the profile image, below is an example:

GetProfileImage Code

 

Moving Forward

I hope this article has helped answer your Facebook integration questions. If you would like additional details, please post in the comments, or message me on Twitter: @Auri

Thank you!

I was recently having trouble telling Jira to connect to a named SQL Server instance. Using Jira’s configuration manager, I should be able to use the SERVERNAME\INSTANCENAME syntax like every other modern application. Well, not with Jira. I found the solution and here ya go:

In the database field in the configuration manager, which you can launch from bin\config.bat in the Atlassian Jira Program Files folder, type

SERVERNAME;instance=INSTANCENAME

Oh, did Atlassian forget to tell you to install Java Runtime Edition on your server? Of course they did… Go ahead and install it if you haven’t, but make sure you pay very close attention and don’t click I Agree to install Yahoo and junkware on your machine. Because, well, Oracle.

This information was lovingly sourced from the comments on: https://confluence.atlassian.com/jira/connecting-to-named-instances-in-sql-server-173435.html

Enjoy!

I recently ran into a need to use the LAME MP3 encoder in a customer’s website. Problem was, once I deployed to Azure, I received an error of “Unable to load DLL libmp3lame.32.dll”. Uh oh! “But it’s in the bin folder!” I screamed silently at Starbucks. So, I binged the issue and found a good answer on StackOverflow. I’m sharing here because it helped unstick me, and I imagine others may be running to this issue with libraries other than LAME.

I ended up adding the function to my Global.asax, in addition to importing namespaces System.IO and System.Linq:

/// <summary>
/// Updates PATH variable in hosting instance to allow referring to items in this project's /bin folder.
/// Very helpful with Azure.
/// </summary>
public static void CheckAddBinPath()
{
    // find path to 'bin' folder
    var binPath = Path.Combine(new string[] { AppDomain.CurrentDomain.BaseDirectory, "bin" });
    // get current search path from environment
    var path = Environment.GetEnvironmentVariable("PATH") ?? "";
 
    // add 'bin' folder to search path if not already present
    if (!path.Split(Path.PathSeparator).Contains(binPath, StringComparer.CurrentCultureIgnoreCase))
    {
        path = string.Join(Path.PathSeparator.ToString(), new string[] { path, binPath });
        Environment.SetEnvironmentVariable("PATH", path);
    }
}

Then in Application start I simply added:

// Sometimes files aren't loaded properly from bin. Hint to the app to load from /bin, too.
CheckAddBinPath();

I hope that helps!

I’ve discussed at length how to fix SkyDrive sync issues. Check out Another possible solution for OneDrive / SkyDrive sync issues and Possible OneDrive / SkyDrive sync fix for Windows 8. I have found that sometimes even resetting SkyDrive doesn’t fix the problem. Microsoft will charge you for a brute force approach, but I figured out one more option if nothing you’ve tried has started syncing back up again. Before you follow these steps, try the other two – this is a last ditch resort!

1. Make sure all other desktop and “modern” applications are NOT running. Only File Explorer should be running. Word, Chrome, whatever – they should all be closed.

2. Press Windows Key + X, select Command Prompt (Admin), and the Windows command prompt should appear.

3. Make sure the OneDrive app isn’t running – right-click it and select Close if you see it in the taskbar.

4. Type skydrive /shutdown

5. Wait a minute.

6. Right-click the task bar and select Task Manager.

7. Keep trying to end the OneDrive Sync Engine process until it disappears, as shown in the figure below. This may take a few tries.

image

8. Open the following folder:
C:\Users\your user account name\AppData\Local\Microsoft\Windows\SkyDrive\settings
and you’ll see something like the figure below:

image

9. Delete all the files except for ClientPolicy.ini and global.ini.

10. Once they have been deleted, type the following: shutdown -r -t 0

11. Your computer should restart.

12. Log back in and your files should start resyncing. You’ll probably see results within a few hours. This will depend on the total number of files you have on OneDrive. You’ll also see downloads.txt and another funky-looking file start growing in size. If you see that, you know things are working, and OneDrive has started rebuilding everything.

I’ve been underwhelmed by Microsoft’s response for documentation regarding SkyDrive and its inner workings. So, I’m on a mission to break things down. I’ll update this blog post as I find more information. As always, any info provided here is used at your own risk. I take no responsibility if you hose a system.

In case you want to see all the SkyDrive process settings:

C:\Users\<your account name>\AppData\Local\Microsoft\Windows\SkyDrive\settings

There are two files of interest:

global.ini and ClientPolicy.ini

There were some settings that surprised me in ClientPolicy.ini:

  • MaxFileSizeBytes = 2147483647 Is the 2 GB max file size mentioned on MSFT’s site? They should probably mention that, since all shipping systems are 64-bit and video files and ISOs can be pretty big.
    • Update 7-Jan-2015: It appears Microsoft has upped this to 10 terabytes.
  • Tier1MaxFileSizeBytes = 2147483647 These would be Microsoft’s Office file types
  • Tier1FileInclusionList = |doc|docm|docx|dot|dotm|dotx|odc|odp|ods|odt|pot|potm|potx|pps|ppsm|ppsx|ppt|pptm|pptx|rtf|vdw|vdx|vsd|vsdm|vsdx|vssm|vssx|vst|vstm|vstx|vsw|vsx|vtx|xla|xlam|xlm|xls|xlsb|xlsm|xlsx|xlt|xltm|xltx|xlw|
  • MaxItemsInOneFolder = 150000 I wonder if this caused my earlier sync problems, since I had more than 150K files in a folder, and then I deleted the folder. Maybe that messed up Microsoft’s storage system in the cloud? When I finally had a Microsoft technician look at my account, things magically started working a day later. I didn’t change anything, but what happened on their end?
  • MaxClientMBTransferredPerDay = 131072
    • Update 7-Jan-2015: It appears Microsoft has upped this to over 250000. Makes sense, given average home broadband speeds.
  • MaxClientRequestsPerDay = 500000 So what happens if you reach your limit?
  • NumberOfConcurrentUploads = 3 I’d rather have more, but it appears the next setting helps here, even though it’s not accessible via the SkyDrive app.
  • AllowUserOverrideOfConcurrentUploads = true
  • SyncTelemetryURL = http://wlepsi3.redmond.corp.microsoft.com/SyncDiag.ashx This one bothers me a bit. What is this URL tracking? And why isn’t it over SSL?
  • LowDiskSpaceLimitMB = 3072 If you want to override the low disk space limit… I’m going to try this on my Dell Venue Pro 8. Update: It worked! Yay!
    • Update 7-Jan-2015: It appears Microsoft has lowered this to 200MB. Much better for tablets! Of course, in the future, tablets will probably have 64GB, 128GB or more by default due to lowered storage costs.
  • AutomaticVerboseLoggingEnabled = true I wonder where the log file is. There’s one in this folder, but it’s used by the SkyDrive process. I’ll play with that in a VM so I don’t mess anything up Smile

I’m also curious as to why SkyDrive.exe can’t be opened in a decompiler. If I request it, the file system says the file doesn’t exist. Is c:\windows\system32\SkyDrive.exe simply a shim? Very interesting.

Breaking down the SkyDrive process, I found what appears to be additional command line parameters. I have not tested these as of yet.

/shutdown
/register
/unregister
/installperfcounters
/uninstallperfcounters
/background
/watson

Until next time… enjoy!

Best,

-Auri

I went back and forth between my code and various Telerik and Stack Overflow demos of how the Kendo grid is supposed to refresh its datasource without reloading the entire grid. Finally, Telerik sent me a code example that included a function that’s not in their API documentation, but darn well should be. So, if you’re having the same issue I did, where you want to call read() on your grid’s datasource, but it simply isn’t working, here’s an example from Telerik that may help you.

The function: getKendoGrid()

Now, I keep my createDataSource() function around so I can swap out the data I’m paging. Their example uses some sample data, but you could simply use their example of creating a datasource to call your back-end JsonResult action in MVC and things can still work magically.

I hope this helps others Smile

<body>
  <div id="grid" />
  <script>
    function createDataSource() {
      return new kendo.data.DataSource({
        transport: {
          read: {
            url: "/echo",
            dataType: "json",
            method: "POST",
           
            // Simulate response
            data: {
              "json": JSON.stringify([{
                firstName: "John",
                lastName: "Smith",
                age: 25
              }])
            }
          }
        },
        pageSize: 10
      });
    }
   
    var ds = createDataSource();
   
    $("#grid").kendoGrid({
      dataSource: ds,
      autobind: false,
      scrollable: false,
      columns: ["firstName", "lastName", "age"]
    });
   
    $("#grid").getKendoGrid().dataSource.read();
  </script>
</body>
</html>

And here’s a colorized version:

image

Quick thought for the day: Microsoft’s OneDrive doesn’t appear to act “smart” when it’s installed on a tablet, or what I prefer to call a Limited Storage Space Device. The premise of OneDrive is clear: store your stuff in the cloud and keep your device clean of clutter, holding local only what you need. Google made the same business case with their Chromebooks and Google Drive, but “cloud-first” is in its teenage years.

On a Limited Storage Device, such as a tablet or a phone, OneDrive should be smart enough to take offline, locally cached files, and make them “online only” again, freeing up the space. It doesn’t do this, and thus silently, and sometimes quickly, eats up storage on the device. Case in point: I recently drove Tail of the Dragon and took hundreds of photos. About one gigabyte of these I copied from my camera to OneDrive. One day later, my Dell Venue Pro 8 tablet started complaining of low drive space. OneDrive had copied the files from the cloud to the device, automatically, even though there was no reason to do so. The device wasn’t requesting those files. Yet, even if for whatever reason there was a valid request, shouldn’t OneDrive have “put them back” in the Cloud?

Microsoft – if you ever listen about device categories you’ve had a tough time understanding – you can’t treat these limited storage devices like mainstream PCs. You have to, pardon the pun, “think differently” and make your software do the same. The above scenario, where your Cloud solution makes a non-mainstream device relatively unusable due to a mainstream PC approach, is very common amongst your current product offerings. My gosh, just look at Office on a tablet.

Thanks for listening Smile

-Auri

There’s no doubt about it – SkyDrive (now OneDrive) is broken in Windows 8.1. At some point, your files may stop syncing, and Windows simply will not let you know. It happened to me across all devices I had upgraded from 8.0 to 8.1. Many forum posts: here, here, here, and here, are complaining about the problem. The real issue? Nobody knows. Microsoft hasn’t been helpful, either, turning a deaf ear to consumer complaints, and offering no advice in their forums other than to run their SkyDrive troubleshooter. What does that do? It simply restarts the SkyDrive service most of the time, which doesn’t solve the problem.

Researching the issue a bit more, I noticed in the File Manager event log, a message of “Error message: Offline availability: found one item with an empty resourceId, aborting”. That sounded like a permissions/access issue may be causing a file to be unreadable. This lead me to try resetting all the permissions on the SkyDrive folder. Guess what? That process caused other pop-ups to appear. Pop-ups with error messages about file permissions being unable to be changed or accessed. Aha! Progress! If those files can’t be read by SkyDrive’s sync tool, maybe that’s holding up all my syncing!

By moving out those files above and restarting the SkyDrive services, my sync is working again! I don’t know how long this will last, but I hope the steps below will help you troubleshoot the issue on your end.

1. Open Explorer and right-click your SkyDrive folder and select Properties.

image

2. Click Security, then Advanced, and you should see something similar to the dialog below. Make sure SYSTEM, Administrators, and your own user name all have Full control.

image

3. Check the box Replace all child object permission entries with inheritable permissions from this object and click Apply.

4. Make note of any files on which you receive errors so you can find them and move them out of the SkyDrive folder to somewhere else. This appears to be what was tripping things up for SkyDrive on my end.

5. Move the files from Step 4 to a folder outside of SkyDrive. I zipped these up and kept that ZIP folder in SkyDrive. I have not yet found the reason for those files to have issues. It’s possible setting their permissions again may fix it. My guess is some files may have domain credentials attached that may cause trouble, since I sync with my work PC.

6. Open an elevated command prompt by pressing Windows + X and selecting Command Prompt (Admin).

image

7. Shut down SkyDrive by typing skydrive /shutdown in c:\windows\system32. You should be starting in c:\windows\system32, but if not, you can type cd “c:\windows\system32” to get there. Wait two minutes.

8. Start up SkyDrive by typing skydrive from that same prompt, this time without the /shutdown command, and wait two minutes. Launch the SkyDrive app from the Start menu as well, just to make sure everything’s kickstarted. Check to see if the SkyDrive Sync Engine Host process is running in Task Manager. You can press Control + Shift + Escape to bring up Task Manager, sort by name, and find SkyDrive Sync Engine Host under Processes. If the SkyDrive process doesn’t launch after a couple minutes, try restarting your machine.

image

9. You’ll see a lot of disk activity while SkyDrive appears to scan your files and folders all over again. Depending on the number of files and folders you have to sync, this could take a while.

10. Check again in a few hours and see if your SkyDrive folder online appears to properly match with your machine. If it does, then my fix worked.

Good luck!

Best,

-Auri

I picked up a Dell Venue 8 Pro for $99 as part of Microsoft’s 12 Days of Presents spree. Here are some tips & tricks for the more techy folks out there:

How to Access the BIOS

Press the power button once. Then hold down the Volume Down button until the Dell logo disappears. You don’t need a keyboard – it has an on-screen mouse mapped to the touch screen. Cool, eh?

To access the Advanced settings of the BIOS, follow the instructions through Step 7 below:

How to Speed Up SSD Disk Access by Modifying the EFI / BIOS

Thanks to Sasha for the following steps, which can increase speeds by over 50%!

1) From Windows, bring up the charms (swipe in from right)
2) Select Settings -> Change PC Settings, or Start, then All Apps, then PC Settings.
3) Choose Update and Recovery -> Recovery
4) Under Advanced Startup, select Restart Now
5) From this blue menu, select Troubleshoot, then select Advanced Options
6) Select UEFI Firmware Settings, then click Restart
7) Now, the BIOS shows up, hit the on-screen ESC button ONLY ONCE.
8) You’re now in the Main “tab”, with a vertical list of options, from here you must select Advanced, this lets you see all the BIOS settings and is different from hitting the Advanced tab across the top.
9) Select LPSS & SCC Configuration
10) Select SCC eMMC 4.5 HS200 Support and select Enabled (Mine was disabled by default)
12) Select DDR50 Support for SDCard and select Enabled (Mine was disabled by default)
13) Press F10 on the on-screen keyboard to save, then Save Settings and Exit and you’re all set.

Getting Back ~5 Gigabytes of Space by Removing Recovery Partition

The Dell Recovery Partition is essential for restoring your machine should something catastrophic happen. To add insult to injury, Dell often runs out of stock of recovery media, and won’t send you such after a year or two has passed. That’s hit me before, and it’s not fun. So, make sure you’ve backed it up!

Once you’ve backed up that recovery partition, there’s no point in keeping it. Get those gigs back!

Here’s how:

NOTE: Make sure you have at least 50% of your battery left for this process. I wouldn’t do this when hitting the lower ends of the battery spectrum.

  1. Go to All Applications and scroll all the way right to the Dell group. Tap the My Dell application.
  2. Click Backup, even if it says no backup software is installed.
  3. Click the Download Local Backup button. This will provide a link to download Dell Backup and Recovery, which you should download and install. Basically, once you click the Download button, select Run and wait for Setup to do its job. This process can take a long time. Even the download appears to be huge. It’s probably downloading the latest recovery data, but that’s just a guess.
  4. After the software has installed, it will request a restart. So, restart the tablet.
  5. Go to All Applications and back to the Dell group. Note the new Dell Backup and… option. Tap it.
  6. Wait a few moments for the cool clock animation to complete, then agree to whatever terms are presented, or not.
  7. Tap the Reinstall Disks option. This is the equivalent of a Factory Restore partition backup.
  8. Tap USB Flash Drive, which is probably the only real option you have with this unit. This includes use of the Micro SD card, which is what I used, since I didn’t have a USB adapter handy. If you decide to use an external burner, that’s cool, too. But… why?
  9. Select your USB drive, or the MicroSD card. I backed up to an 8 GB MicroSD. Dell estimates the backup at 4.03 GB, so 8 GB should suit you just fine.
  10. Tap Start, then tap Yes when asked if you’re sure about wiping out the USB or MicroSD drive. Of course you’re sure! (right?)
  11. Wait until it’s done.
  12. When it’s complete, click OK, and put the backup media in a safe place. I put it in my Venue Pro’s box.
  13. Go back to Start, then All Programs, then Desktop.
  14. Hold down on the Start button and select Command Prompt (Admin).
  15. Type diskpart to launch the Disk Partition manager.
  16. Type list partition to see the available partitions.
  17. Type select partition X, where X is the number of the approximately 4 gigabyte recovery partition. On my Venue, it was 6.
  18. Make sure you see “Partition X is now the selected partition”!!!
  19. Type delete partition override and hit enter.
  20. You should be greeting with “DiskPart successfully deleted the selected partition.”
  21. Type exit to quit DiskPart, then exit again to quit Command Prompt.
  22. Now that the partition is gone, we need to expand the size of the main partition.
  23. Open an Explorer window and long press This PC, then select Manage.
  24. When Computer Management appears, select Disk Management under Storage.
  25. You should see the 4.64 gigabytes or so we freed up showing as Unallocated.
  26. Long press your C: drive and select Extend Volume….
  27. The Extend Volume Wizard appears. Click Next.
  28. You’ll be asked where the space to extend the volume should come from. Everything should already be filled out to assign the maximum unallocated space. Simply tap Next or adjust as desired and click Next.
  29. The wizard will confirm the extension settings. Click Finish.
  30. There you go! Your C: drive is now almost five gigabytes larger!

UPDATE: You can also back up to a USB drive by acquiring a USB OTG, or “On-The-Go”, adapter. Pick one up from Fry’s, SKU number 7582626, here. This will also enable you to use thumb drives and such on your Dell Venue 8 Pro.

Disable the Annoying Backlight

Dell’s power management settings for the backlight are wretched, making the display dim almost all the time. Let’s get around that, shall we?

  1. Swipe out the charms menu, then select Settings, then Change PC Settings on the bottom.
  2. Select PC and devices.
  3. Select Power and sleep.
  4. Set Adjust my screen brightness automatically to Off.