Category Archives: Technology

Office 365 Premium == Happy Home Computing

For a measly $20 per user you can now power up your family of 5 with:

  • Word
  • Excel PowerPoint
  • OneNote
  • Outlook
  • Access
  • Publisher

     

Yes that’s right! 5 family licenses for $100 per year! I can suite up my kids and wife with all the tools for school, work and social and never worry about upgrades again! Me so happy!

 

If you are not familiar with Office 365 it is the same Microsoft Office you are familiar with only your license allows for you to access it not only from your Laptop of Desktop but also from within your browser, mobile phone, public PC’s or Macs. Upgrades just happen so you are always fresh with the latest and greatest features and unburdened from the hassle of buy and/or downloading and installing upgrades yourself (bit time saver). Documents can be stored on OneDrive so you a free from losing data when you’re hard drive fails. OneDrive makes is very easy to share a document with others. Just selected it and click “Share”. You can then share it with anyone you want and set permissions for them to either view-only or edit.

 

Each license comes with 20 GB of OneDrive storage making it extremely easy to share documents with each other and out-siders like teachers, friends, coworkers and extended family. Included are 60 minutes of Skype caller per month so if you make that many calls it almost off-sets the price of a single user license.

 

I am having great success with this product and would like to hear how or if it works for you!

 

Link to the Amazon download here.

Release of my latest Web Project: “Check In Now”

I don’t usually get to showcase my development work because the vast majority is for internal business and intranet usage. Today, however, is an exception as we are live with a project I have worked on over the past 4 months. It is an ASP.Net, HTML5 MVC4 application which leverages Entity Framework 6, JQuery, Titter Bootstrap, oAuth, Toastr and other plugins.

The Covenant Medical Group “Check In Now” application allows patients to view current wait times and pre-register at four urgent care facilities located in Lubbock Texas. This app will be expanded to cover many more facilities and regions of the St. Joseph Health System. Patients can complete paperwork at home, ahead of their arrival time. Doing so, fast-tracks their registration process and time to treatment once they arrive. Facility administrators have the ability of updating wait times, view incoming queue of patients and send emails and SMS text messages directly to arriving patients.

https://covenantmedicalgroupcheckinnow.org

 

Sniffing SharePoint for Enterprise License Feature Usage

SharePoint Enterprise features provide users the ability to use advanced capabilities not found in standard SharePoint licensing. Once you have licenses for Enterprise features all you do is enable them on the site collections and users are free to consume them.

Once enabled, however, there is no easy way to determine if they are being actually used. Enterprise license are pretty expensive so you want to be sure you are getting your money’s worth.

One, painful way to determine usage is to manually thumb around sites looking for things like Excel or Visio Web Parts, InfoPath forms, Content Organizer Rules, Data Connection Libraries or Power Pivot libraries. That is not practical, nor accurate, nor fun.

In my case I have no fancy commercial tools to manage and administer my farm so I often resort to rolling my own PowerShell scripts. The following are some functions I wrote to detect and document the instances of Enterprise feature usages.

The first thing you need is a loop that iterate down through your farm Site Collections and sites. Something like this usually works fine.

Once this main loop is in place we can insert detection functions which analyze SPList objects of each site. With the help of some online research below are the functions I came up with. All of the functions accept a site URL and iterates over the SPList objects to determine if the condition I am looking for is found. If a SPList object contains the feature I seek, it is added to an ArrayList and returned to the calling main loop. The main loop collects all ArryLists and then exports them to CSV or whatever you want to do with them. I export to CSV and put those in MS Access for creating nice reports.

Detecting PowerPivot Libraries

The trick to this function is to analyze the TemplateFeatureId property of a document library and compare it to the feature ID’s for PowerPivot. The PowerPivot feature Id’s are specified in the code.

Detecting Data Connection Libraries

This method is the same as used for detecting PowerPivot Libraries with the exception of a different feature Id.

Detecting Excel Web Parts

This one is a bit more complicated and requires first determining if the function is dealing with a Publishing site or not. For Publishing sites we have to get something called a “LimitedWebPartManager” from each SPListItem in the Pages library. The “LimitedWebPartManager” allows you to iterate over each web part on the page to detect if the any web part of type “ExcelWebRenderer.”

If we are not dealing with a Publishing site, then function looks through all SPList objects that have a “BaseTemplate” property of “WebPageLibrary.” Again using the “LimitedWebPartManager” we look for the same “ExcelWebRenderer” type web parts.

When we find even one “ExcelWebRenderer” web part in a page we add the SPList to the ArrayList which is returned to the calling loop.

Detecting Content Organizer Rules

Content Organizing Rules are Enterprise features usually found in Document or Record Centers. These rules are created by users to automatically route documents to their proper folder based on Meta data on the document. Look it up if you are not sure what they are I think you will find them pretty cool.

Content Organizer Rules are stored in HIDDENs list using a content type named “Rule” so we just iterate over the Hidden SPList objects looking to see if the “Rule” content type is being used. If it is, the SPList is put in my return ArrayList.

Detecting InfoPath Forms

There is probably a cleaner way to detect usage of InfoPath forms but this was what I found in a pinch. In my environment it worked for at least a very large portion of InfoPath usages. I noticed that when you examine a list that has a custom InfoPath form instead of the default, SharePoint Designer will display alongside the default NewForm.aspx and EditForm.aspx additional forms called newifs.aspx and editifs.aspx respectively. I assumed that the “ifs” suffix stands for “InfoPath Form Services” so I set out to detect those. In addition, Form Libraries can also use InfoPath forms and those can be detected by inspecting their BaseTemplate property. If “XMLForm” is the BaseTemplate then an InfoPath Form is being used.

Exporting to CSV

As mentioned before, the main loop collects all the ArrayLists returned by the detection functions for export to CSV (in my case pipe delimited rather than comma). Just select the properties of the SPList and send them to the Export-CSV commandlet. Since all the CSV’s have the same columns just import them into Excel or Access and make your report.

Final Code

Code Snippets using Geshi Syntax Highlighter

From here on out I will be using Geshi Syntax Highlighter. I think this will work out nicely. Below is a sample.

Using PowerShell to reboot remote servers

Here is a handy script to reboot remote servers in your SharePoint farm (or any server for that matter).

$stageSrvrs = @(“Server1″, “Server2″, “Server3″);
$prodSrvrs = @(“Server1″, “Server2″, “Server3″);

# Set downstream functions destination to either Stage or Production Servers.
$destAnswr = Select-Item “Select Destination” -Message “Deploy to: ” -choice “&Stage”, “&Production”;

if($destAnswr -eq 0)
{$destSrvrs = $stageSrvrs}
else
{$destSrvrs = $prodSrvrs}

$destSrvrs | foreach-object {
Write-Host “Rebooting ” $_;
(gwmi win32_operatingsystem -ComputerName $_).Win32Shutdown(6)
}

PowerPivot Won’t Work if CU is installed before PowerPivot

For all you installing a brand new SharePoint 2010 farm here is a Microsoft gotcha that I learned the hard way.  It turns out that if you install the October 2010 cumulative update prior to installing PowerPivot it will break and not work – forever!  Furthermore you will have to wait until the late June arrival of SP1 to fix it.  Enjoy!

clip_image001[4]

SharePoint 2010 Central Administration URL

Yesterday I applied a CU to my farm and noticed that the URL to my Central Administration was changed to my front-end web server. 
No matter which server I used to open the Central Administration using the Start Menu I was directed to the wrong server. 

If you look at the shortcut target property on the start menu link you see:

“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\psconfigui.exe” -cmd showcentraladmin

See that –cmd showcentraladmin parameter? That told me the URL was configured somewhere. 

Many of us on the SharePoint Shoptalk figured the URL was stored in the configuration database but after fumbling through the tables there nothing was standing out at me. 
I then ran a search on my registry for “Central Administration” and low-and-behold found a CentralAdministrationURL key that contained the wrong URL. 
So I changed it to the correct URL and then opened Central Administration from the Start Menu and all was well again.. 

Unfortunatly, I have a number of Servers to fix this on so I decided to write this little Powershell Script to run on each server.


$oldValue = Get-ItemProperty -Path ‘HKLM:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\14.0\WSS\’ -Name CentralAdministrationURL | select CentralAdministrationURL;

$CentralAdminURL = http://myserver:port/default.aspx;

Set-ItemProperty -Path ‘HKLM:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\14.0\WSS\’ -Name CentralAdministrationURL -Value $CentralAdminURL;

If you know of any other way to set this than let me know.

Be very carful to have the correct URL specified in the $CentralAdminURL variable. You have been warned!

SharePoint 2010 Certification Exam Prep Materials

I conjured up some Exam preparation materials and wanted to share them with my readers.  These are not my own documents but docs I acquired by asking some very nice MS people (I have my sources :))

Having just passed the MCTS 70-667 Exam I can attest that these docs will help you!  Additionally I would recommend the book “Professional SharePoint 2010 Administration”  by Todd Klindt, Shane Young, and Steve Caravajal.

Here are the links to where you can download the materials:

http://tjo.me/SP70-667
http://tjo.me/SP70-668
http://tjo.me/SP70-576
http://tjo.me/SP70-573

 

Enjoy!

Using Local Managed Accounts in SharePoint 2010

Recently, I began working extensively with SharePoint 2010 and of course after receiving a new Dell 64bit M4500 Mobile Workstation I wanted to install a SharePoint instance on my Win 7 OS. The instructions for installing a single server SharePoint Farm on Win 7 can be found on MSDN.

One thing I learned through this process is that even though you are installing a single SP instance on Win 7 the installer enforces rules as though you are installing on a corporate domain. One of these rules I found is that the installer won’t let you use local security accounts. So the service account I created (myMachine\sp_AppPool) was not acceptable to the installer because it complained about it not being a domain account. To work around this at the time I simply used my own corporate domain account and let the installer merrily continue installing with the expectation I would fix this later.

It turns out that Central Administration also enforces the same domain account rule. Going to Central Admin | Security | Configure Managed Accounts | Register Managed Account will still prevent you from adding sp_myMachine\AppPool as a Managed Account because it is not a domain account.

So Now what?  Well it turns out that PowerShell has functionality that can create Managed Accounts in a Cmdlet named New-SPManagedAccount.  So after I created the service account myMachine\sp_AppPool in Windows I executed the following PowerShell command to add it to the list of SharePoint Managed Accounts.

 

The first line opens a dialog box where you enter the user myMachine\sp_AppPool and associated password.  The second line’s Cmdlet will complain that you are attempting to add local account as a managed account so just acknowledge that you are aware of this at the prompt and the Cmdlet will add the account anyway.

The next thing you need to do is assign the Managed Account to an Application Pool which can be done using Central Admin as well as PowerShell.  Since I was in the PowerShell mood I looked up the following snippet to assign the account to my Central Administration Web Application’s Application Pool.

 

The nice thing about using PowerShell over Central Admin is that your actions are always documented (assuming your using the ISE or PowerGui or some other script writing tool).  So if my actions ever break something and I don’t understand why I can just reverse them easily by using the same scripts to reassign back to the previous accounts.

So now the service account is properly assigned to the Web Application from SharePoint’s perspective but looking at the IIS Management Console the Application Pool’s Identity for the Central Administration Web Site is still using the old account.  So again, I decided to go the PowerShell route and looked up the following script to change the Identity for the App Pool.

 

After executing all  of the above scripts I opened up Central Admin and found the site returned a 500 error.   A quick trip the my event log found an error that indicated an Execute permission was denied on the SharePoint Administration Content Database which was solved by adding the sp_AppPool account to the dbo role on that database and all is well again.

If you have any suggestions on or thoughts on this post please feel free to comment.

My Thoughts about the IPad

Now that I have and a few months to use the IPad I thought I would formally document my opinion since it seems everywhere it is with me in public people ask me what I think.

First, I bought the IPad because I believed it to be game changer in my productivity. I am a technical manager and developer by trade so my hopes were that it would aid me by containing various technical books, integrate easily with my Outlook and Gmail accounts, manage tasks and project updates, and generally improve my productivity by factor X, etc., etc., etc.

So far, none of these goals have yet to be realized to my satisfaction. However before I get too deep into the disappointments of the IPad I will say that it is great for internet portability, map navigation and being socially interactive via email, Facebook, Twitter and the like. Whenever you need a quick touch point with the internet the 3G IPad is very handy indeed. Another intriguing feature to me was and still is the remote access to servers, WebEx and other web conferencing technologies. Although I have yet to try these features I look forward to my first opportunity to do so. I’ll report back when I do more testing on that.

However, the IPad falls short of my expectations for the following reasons.

  1. Cost: Apple is a premium product so the 64 GB, 3 G IPad with tax and extended warranty is a cool $1k. The expected Windows 7 and Google OS Pad products will be out soon (I wish I knew when) and those I bet will be 25% – 50% less for something similar and have more features.
  2. Flash Incompatibility: At first I thought this was just a pissing contest between personalities with little impact to me. The fact is you never really know how much Flash content exists on the internet until you cannot access it. So this is a real problem (to me anyway) because many technical videos I need to access are unable to be played with the IPad. Also my little girls cannot play
    Poptropica which is a real problem!!!
  3. Silverlight Incompatibility, not only does Apple have it out for Flash but it also prevents Microsoft Silverlight applications to run! This convinces me that the incompatibility issues
    Steve Jobs talks about in his blog is less about what he mentions and more about controlling third party applications that could run on the IPad.
  4. This leads me to the biggest problem; the Safari Browser: This is the biggest POS on the market and should be called out as so. As a Web developer, I realize that pages are incorrectly composed quite frequently and goofy rendering can be blamed on either the publisher or browser. However, when I look at the same page with the IPad and compare it with Microsoft Internet Explorer, Firefox, or Chrome I expect them to be the same. Facebook for instance does not render the Friend’s online section allowing me to Instant Message someone.
    MSDN and
    Technet frequently use a technique where divisions of the page need to scroll without the entire page scrolling. IPad/Safari fails to handle that correctly so I cannot effectively read technical articles I need. It is ridiculous that no other popular browsers can installed on the IPad. Didn’t Microsoft catch hell for this type of thing years ago!?
  5. App Store: Buying apps is perilous. Even though many are only a few dollars it can be death by a thousand cuts because you never really know what you are buying. I have bought a number of $3 and $6 apps only to feel ripped off because of misleading (ergo “Professional”) reviews led me to believe they were more popular or effective then I found them to be. I really would like to see apps having a few day trials before committing the money. Also, contrary to popular belief, app development is slow to evolve as I am still using the IPod Touch versions of Skype, Seesmic, and a host of other popular tools.

In sum, I wish the IPad provided the productivity gains I hoped for but it does not as of yet – perhaps as apps develop and flexibility evolves we will see those gains. The device is very convenient when access to the internet is needed on the road and you don’t want to lug around a laptop and the cost is high.