ACS Blogs

A blog site for Architecting Connected Systems staff to tell the world about their exploits in
SharePoint 2007/2010/2013, Windows Workflow Foundation (3.0/4.0) and other great technologies!
Welcome to ACS Blogs Sign in | Join | Help
in Search


  • Introducing codename PowerStream!

    Well, I can't keep stuff under wraps too long.  Sooo, a small little announcement about something I built in the past few months.  A tool code-named called "PowerStream" that will be officially announced with the new ShareSquared site in a few weeks.  This tool allows for the migration from anything (literally) to SharePoint with very little effort.  So far, I have tested the tool with several ECM systems (Documentum, oracle, custom, blah) and everything works perfectly!  In addition this tool integrates with another tool which I can't announce at the moment, but if you do anything around file plans, this will integrate with tools like Gimmal very easily.

    A lot of code came from the design of my Oracle to SharePoint tool that was developed at General Atomics, but this version adds in some of the other code I had from ACS days and some new stuff including:

    • Dynamic property setting
    • Managed Metadata leveling
    • OCR of TIFF and any other image formats
    • TIFF page/file merge
    • TIFF to OCR'd PDF/A
    • Really true awesome redaction capabilities

    Want to move your old redundant no featured ECM to SharePoint (on-premises or O365, yeah its CSOM based!)?  Let me know, I'll do it really quickly!



  • NEW SharePoint 2016 CSOM Rest EndPoints

    Here are the new end points segments and all new class methods and properties in SharePoint 2016:

    New endpoints:

    • /Me
      • /User
      • /Current
    • /GroupSiteManager
      • Create
      • GetSiteStatus
      • Notebook

    Out of the 529 new methods and properties available via CSOM/REST, here are some of the major changes I see:

    • Ability to interface with the new directory features (Microsoft.Office.Server.Directory.SharePoint.Provider.Remote)
    • A SharedWithMeDocument properties on the UserProfiles endpoint
    • TenantAdministration features for DeletedSiteProperties and SiteCreationProperties as well as SiteProperties; Tenant level methods for  (Microsoft.Online.SharePoint.Dedicated.TenantAdministration)
    • IRM properties - Microsoft.SharePoint.SPEffectiveInformationRightsManagementSettings and Microsoft.SharePoint.SPInformationRightsManagementFileSettings
    • Ability to get App Info - Microsoft.SharePoint.SPTenantAppInformation

    New clientcallable classes:

    • Microsoft.Office.Server.Directory.SharePoint.Provider.RemoteDirectoryObjectData

    The tool will be updated soon with a 2013/2016 mode so you can browse the new 2016 endpoints.


  • Getting K2 System Key without using the installers

    Yeah, you know if you have ever done a K2 install, you know what I'm talking about.  Well, the days of waiting to get the system key to request the license is over.  You can run the following script to get your system keys for BlackPearl, BlackPoint and SmartForms:

    $scriptPath = "C:\temp\K2 for SharePoint 4.6.11 (4.13350.1734.1)\Installation"
    $scriptPath = "C:\Temp\K2 blackpearl 4.6.11 (4.12060.1731.1)\Installation"

    cd $scriptPath


    [System.Environment]::CurrentDirectory = $scriptPath;
    $installpath = "M:\Program Files (x86)\K2 blackpearl";

    $license = new-object SourceCode.Install.Licensing.Licensing($installPath + "\host server\bin");
    "BlackPearl " + $license.MachineKey;

    $license = new-object SourceCode.Install.Licensing.Licensing($installPath);
    "SmartForms " + $license.MachineKey;


  • Internet Information Service not installed

    Got bit by this on my personal servers in the past week.  A very helpful post pointed me to the issue:

    Except...mine was a tad bit different.  The IISADMIN service was completed removed from the WFE!  This was due to a SharePoint Server windows update not completing and failing.  In order to get it back, I simply re-ran the pre-req installer and once the service came back, I was able to load the Central Admin and continue with windows updates.


  • Welcome to ShareSquared Shannon Bray!

    Yep...Shannon Bray has decided to join ShareSquared!

    Amazingly, it had nothing *directly* of my doing, although a few people would disagree.  It just happened that David K. hit up Shannon like he always does and happened to get a bit more "response" back because of my move a few months ago.  This latest move certainly peaked Shannon's interest as he knows me really well and working for someone has never been something he thought I would do again.  After a couple quick convo's, Shannon had some serious stuff to think about.  Certainly his Planet Technology co-workers are going to miss him, as I deduced from the Facebook and SMS messages Smile

    I have known Shannon longer than I have known David (10+ years).  It all started back in the truely good old MCT days of everyone getting started with SharePoint via my famous (infamous?) 50064 SharePoint 2007 Developer course.  It was a tough course and those that could handle teaching it over a week were certainly complete and total rockstars.  Shannon was one of these people.  As he taught the course and grew over the years, he distinguished himself in many many ways. Husband, Father, Leader, Consultant, Cool Dude, Best Friend...etc etc.

    I'm excited that Shannon has decided to join myself and the ShareSquared team.  It means that he'll be around for my next round of cloud startup's in the next couple of years (yeah, those are still in the works) and I couldn't imagine it any other way!  

    Welcome Shannon, this is going to be a blast my friend!


  • Diff of SharePoint 2013 and 2016 codebase

    Hi all,

    I have done this the past two versions and every time I learn exactly what changed in the product.  Gives me a ton of stuff to explore and blog about later!  In this version, and as in the past two, there were some surprises that I will share here.  Keep in mind, the build that was released still doesn't have a ton of stuff "wired" up in terms of backend code.  Pretty ridiculous to see people touting "SharePoint 2016 training" based on a build that isn't even a Release Candidate (RC).  It's total bull.

    Some pre-reqs that the current code-base requires (and is not installed as part on the installer process):

    • Reporting Services Add-In - SQL R2 2008 - 10.0
    • Reporting Services Add-In - SQL R2 2008 - 11.0
    • SQL Server ADOMD.NET (Analysis Services) - 10.0 
    • Windows Azure Storage
    • Microsoft.Azure.GraphClient.FirstClient - ??? - no idea where or what this is...has to do with UserProfiles and sync but is not included and can't be downloaded from what research I have done

    Couple that show up that are installed\configured, yet still interesting:

    • NewtonSoft.Json 6.0 - used in Search
    • System.Web.Http - used in Search
    • Microsoft.Data (5.3 and 5.6) - seems some dlls have old 5.3 references that have not been updated

    Interesting things I noticed:

    • ChicagoIntegration.dll - check it out...and the fact it has as its version...LOL - used for ContentPush
    • Assemblies moved from GAC_MSIL to GAC_64 - yeah, much more performant for the target processor.  Many Search Dlls fell into this world.  I'll leave it to you to find the rest and see where performance was improved.
    • All things SilverLight and windows phone are gone!
    • SharePoint Education is now much as Rob thought it didn't ship before...LOL
    • Ceres Flows are not longer seperate Dlls...still need to find where these went!
    • New Ceres OfficeGraph and ContentPush Dlls are included now
    • Portable libraries are now included in the install
    • New format handlers for search and Office Excel files
    • New FileStorage code for Azure Storage interation
    • New O365 Resource discovery code
    • New Directory code with ServerStubs for CSOM

      There were a few Dlls added to the codebase.  These include (some are not verified and should be removed, but I only have so much time in the day):

      • AbsBlobStore
      • ChicagoIngestion
      • Microsoft.Ceres.AnalysisEngine.Managed
      • Microsoft.Ceres.Common.Tools.Sandbox
      • Microsoft.Ceres.ContentEngine.ContentPush
      • Microsoft.Ceres.ContentEngine.Operators.ContentPush
      • Microsoft.Ceres.ContentEngine.Operators.External
      • Microsoft.Ceres.ContentEngine.Operators.Mars
      • Microsoft.Ceres.ContentEngine.Operators.Security
      • Microsoft.Ceres.ContentEngine.Processing.ContentPush
      • Microsoft.Ceres.ContentEngine.Processing.External
      • Microsoft.Ceres.ContentEngine.Processing.Security
      • Microsoft.Ceres.DataLossPrevention
      • Microsoft.Ceres.DocParsing.External.Client
      • Microsoft.Ceres.DocParsing.External.Core
      • Microsoft.Ceres.DocParsing.FormatHandlers.ExcelGeneric
      • Microsoft.Ceres.DocParsing.FormatHandlers.ExcelLegacy
      • Microsoft.Ceres.DocParsing.FormatHandlers.ExcelOdbc
      • Microsoft.Ceres.DocParsing.FormatHandlers.PointPublishing
      • Microsoft.Ceres.External.ContentApi.GraphExtensions
      • Microsoft.Ceres.Flighting
      • Microsoft.Ceres.NlpBase.Phonetic
      • Microsoft.Ceres.Platform.Parallax
      • Microsoft.Ceres.SearchCore.FastServer.DumpLib.Managed
      • Microsoft.Ceres.SearchCore.FastServer.Managed
      • Microsoft.Ceres.SearchCore.GraphModel
      • Microsoft.Ceres.SearchCore.GraphQueryModel
      • Microsoft.Ceres.SearchCore.GraphSeedingModel
      • Microsoft.Ceres.SearchCore.GraphServer.Managed
      • Microsoft.Ceres.SearchCore.GraphStatusModel
      • Microsoft.Ceres.SearchCore.Indexes.GraphServerIndex
      • Microsoft.Ceres.SearchCore.IndexStorage
      • Microsoft.Ceres.SearchCore.KeyValueModel
      • Microsoft.Ceres.SearchCore.Tango
      • Microsoft.Ceres.SearchCore.TenantMapping
      • Microsoft.Ceres.SearchVssWriter
      • Microsoft.Data.Services.Client
      • Microsoft.Data.Services.Design
      • Microsoft.Data.Services
      • Microsoft.FileServices.Beta
      • Microsoft.FileServices.ServerStub.Beta
      • Microsoft.FileServices.ServerStub.V1
      • Microsoft.FileServices.ServerStub.V2
      • Microsoft.FileServices.V1
      • Microsoft.FileServices.V2
      • Microsoft.HtmlTrans.Interface
      • Microsoft.NaturalLanguage.Core
      • Microsoft.NaturalLanguage.KeywordExtraction
      • Microsoft.NaturalLanguage.KeywordExtraction.resources
      • Microsoft.O365.ResourceCatalog.PulsePackage
      • Microsoft.O365.ResourceCatalog.WexPackage
      • Microsoft.O365.ResourceDiscovery
      • Microsoft.OData.Core
      • Microsoft.OData.Edm
      • Microsoft.Office.Access.Server.Application
      • Microsoft.Office.Access.Server.Calculation
      • Microsoft.Office.Access.Server.Calculation.Interface
      • Microsoft.Office.Access.Server.Calculation.Interop
      • Microsoft.Office.Access.Server
      • Microsoft.Office.Access.Server.resources
      • Microsoft.Office.Access.Server.Security
      • Microsoft.Office.Access.Server.UI
      • Microsoft.Office.Access.Services.Application
      • Microsoft.Office.Access.Services.DataProxy
      • Microsoft.Office.Access.Services.DataServer
      • Microsoft.Office.Access.Services
      • Microsoft.Office.Access.Services.Moss
      • Microsoft.Office.Access.Services.Native
      • Microsoft.Office.Access.Services.resources
      • Microsoft.Office.Access.Services.Sql
      • Microsoft.Office.Access.Services.Storage
      • Microsoft.Office.Access.Services.UI
      • Microsoft.Office.BusinessApplications.Tools.AutoGen
      • Microsoft.Office.BusinessApplications.Tools
      • Microsoft.Office.BusinessApplications.Tools.Intl
      • Microsoft.Office.Client.Policy.Portable
      • Microsoft.Office.CompliancePolicy.Platform
      • Microsoft.Office.DocumentManagement.Intl
      • Microsoft.Office.DocumentManagement.ServerStub
      • Microsoft.Office.Excel.Server.CalculationServer.Proxy
      • Microsoft.Office.Excel.Server
      • Microsoft.Office.Excel.Server.MossHost
      • Microsoft.Office.Excel.WebUI
      • Microsoft.Office.Graphics.ShapeBuilder
      • Microsoft.Office.InfoPath.CLRLoader
      • Microsoft.Office.InfoPath
      • Microsoft.Office.InfoPath.Server.Administration.CommandLine
      • Microsoft.Office.InfoPath.Server
      • Microsoft.Office.InfoPath.Server.Host
      • Microsoft.Office.InfoPath.Server.Intl
      • Microsoft.Office.InfoPath.Server.Intl.Resources
      • Microsoft.Office.InfoPath.Server.Pages
      • Microsoft.Office.InfoPath.Server.RepairUtilities.Intl
      • Microsoft.Office.InfoPath.Server.RepairUtilities.Intl.Resources
      • Microsoft.Office.MhtExport
      • Microsoft.Office.Ofc
      • Microsoft.Office.Policy.Barcode.Generator
      • Microsoft.Office.Policy.intl
      • Microsoft.Office.Policy.ServerStub
      • Microsoft.Office.Project.Server.Database.Extension
      • Microsoft.Office.Project.Server.Optimizer
      • Microsoft.Office.SecureStoreService
      • Microsoft.Office.SecureStoreService.Intl
      • Microsoft.Office.Server.Chart
      • Microsoft.Office.Server.Chart.Intl
      • Microsoft.Office.Server.Chart.Intl.Resources
      • Microsoft.Office.Server.Conversion.Framework
      • Microsoft.Office.Server.Conversion.Storage
      • Microsoft.Office.Server.Conversion.ViewerInterface
      • Microsoft.Office.Server.Conversions
      • Microsoft.Office.Server.Diagnostics
      • Microsoft.Office.Server.Directory.SharePoint
      • Microsoft.Office.Server.Directory.SharePoint.Remote
      • Microsoft.Office.Server.Directory.SharePoint.Remote.ServerStub
      • Microsoft.Office.Server.Directory.SharePointInterface
      • Microsoft.Office.Server.Directory.SharePointInterface.ServerStub
      • Microsoft.Office.Server.FilterControls
      • Microsoft.Office.Server.ImportProfileProperties
      • Microsoft.Office.Server.Intl
      • Microsoft.Office.Server.PowerPoint
      • Microsoft.Office.Server.PowerPoint.Intl
      • Microsoft.Office.Server.PowerPoint.Intl.Resources
      • Microsoft.Office.Server.Sandbox
      • Microsoft.Office.Server.Search.Administration.MSSITLB
      • Microsoft.Office.Server.Search.ClickPredict
      • Microsoft.Office.Server.Search.ETW
      • Microsoft.Office.Server.Search.Intl
      • Microsoft.Office.Server.Search.Native
      • Microsoft.Office.Server.Search.Portability
      • Microsoft.Office.Server.Search.PowerShell
      • Microsoft.Office.Server.Search.RemoteSharepoint
      • Microsoft.Office.Server.UI
      • Microsoft.Office.Server.UserProfiles.Synchronization
      • Microsoft.Office.Server.WebAnalytics
      • Microsoft.Office.Server.WebAnalytics.Intl
      • Microsoft.Office.Server.WebAnalytics.Intl.Resources
      • Microsoft.Office.Server.WebAnalytics.UI
      • Microsoft.Office.ServiceInfrastructure.Definitions
      • Microsoft.Office.SharePoint.ClientExtensions.Intl
      • Microsoft.Office.SharePoint.Tools
      • Microsoft.Office.SlideLibrary
      • Microsoft.Office.TranslationServices.intl
      • Microsoft.Office.TranslationServices.intl.resources
      • Microsoft.Office.Visio.Server
      • Microsoft.Office.Visio.Server.GraphicsServer
      • Microsoft.Office.Visio.Server.Intl
      • Microsoft.Office.Visio.Server.Intl.Resources
      • Microsoft.Office.Web.Environment.OfficeServer
      • Microsoft.Office.Web.Sandbox
      • Microsoft.Office.Word.Server.intl
      • Microsoft.Office.Word.Server.intl.resources
      • Microsoft.Office.Workflow.Actions.intl
      • Microsoft.Office.Workflow.Actions.intl.resources
      • Microsoft.Office.Workflow.Feature
      • Microsoft.Office.Workflow.Routing
      • Microsoft.Office.Workflow.Routing.intl
      • Microsoft.Online.FileServices
      • Microsoft.Online.FileServices.ServerStub
      • Microsoft.PerformancePoint.Scorecards.DataSourceProviders.Standard
      • Microsoft.PerformancePoint.Scorecards.Server
      • Microsoft.Search.Platform.Parallax
      • Microsoft.Search.Server.comadmin
      • Microsoft.SharePoint.Client.Directory
      • Microsoft.SharePoint.Client.DocumentManagement.Portable
      • Microsoft.Sharepoint.Client.Publishing.Portable
      • Microsoft.SharePoint.Client.Runtime.Windows
      • Microsoft.SharePoint.Client.Runtime.WindowsPhone
      • Microsoft.SharePoint.Client.Runtime.WindowsStore
      • Microsoft.SharePoint.Client.Search.Applications.Portable
      • Microsoft.SharePoint.Client.Search.Portable
      • Microsoft.SharePoint.Client.ServerRuntime.OData
      • Microsoft.SharePoint.Client.UserProfiles.Portable
      • Microsoft.SharePoint.Client.WorkflowServices.Portable
      • Microsoft.Sharepoint.Excel.Proxies.Intl
      • microsoft.sharepoint.excel.proxies.intl.resources
      • Microsoft.Sharepoint.Sandbox
      • Microsoft.SharePoint.Search.Extended.Query
      • Microsoft.SharePoint.Search.Native
      • Microsoft.SharePoint.WorkflowServices
      • Microsoft.Spatial
      • Microsoft.Web.Constraint
      • Microsoft.Web.Design.Server
      • Newtonsoft.Json
      • System.Spatial
      Check out the Excel\PowerPivot workbook attached to this post for more details!
    • Latest Office 365 MVPs

      In keeping with previous posts, here is a list of all Office 365 MVPs as of 6/10/2015 (update coming July 1st)...At the bottom is a powershell script that you can run to follow all the SO365 MVPs in one go!

      Some quick stats...

      • 108 (non-anonymous) Office 365 MVPs

      Country breakdown:

      • 15 United States
      • 12 Not Shared
      • 7 Japan
      • 7 Sweden
      • 6 Australia
      • 6 Canada
      • 5 Brazil
      • 5 France
      • 4 Germany
      • 4 United Kingdom
      • 4 Netherlands
      • 3 Croatia
      • 2 China
      • 2 New Zealand
      • 2 Italy
      • 2 Switzerland
      • 2 Malaysia
      • 1 Mexico
      • 1 United Arab Emirates
      • 1 Vietnam
      • 1 Norway
      • 1 Peru
      • 1 Philippines
      • 1 Poland
      • 1 Portugal
      • 1 Russia
      • 1 Spain
      • 1 Bulgaria
      • 1 Austria
      • 1 Belgium
      • 1 Bosnia-Herzegovina
      • 1 Denmark
      • 1 Korea
      • 1 Latvia
      • 1 Hungary
      • 1 India
      • 1 Indonesia

      New MVPs (within last year):

      • Chris Goosen
      • David Petree
      • Elio Struyf
      • Erwin van Hunen
      • Haylee Fox
      • Johan Dahlbom
      • Knut Relbe-Moe
      • Matthew Green
      • Michael Blumenthal
      • Naohiko Maeda (?? ??)
      • Naomi Moneypenny
      • Nathan OBryan
      • Paolo Pialorsi (Paolo Pialorsi)
      • Ravikumar Sathyamurthy
      • Robert *** (Robert ***)
      • Samantha
      • Sébastien Levert
      • Susan Hanley
      • Tung Pham
      • Vasil Michev
      • Victor Meirans (Viktors Meirans)
      • Vitaly Vedenev
      • Wellington Agápto
      • Yoan Topenot
      • Yvette Watson

      Longest running\most awarded SharePoint MVPs:

      • Cindy Meister 19
      • Arnaud 12
      • Goran Husman 12
      • HeeJin Lee (Hee Jin Lee) 12
      • Nitin Sadashiv Paranjape 11
      • Tomislav Bronzin (Tomislav Bronzin) 11
      • Maarten van Stam 10
      • Scot Hillier 10

      The list (data comes from your MVP profile, you don't see it, go update it):

      Agnes MolnarBlogmolnaragnes
      Alan RichardsBlogarichards_Saruk
      Alex PearceBlog
      Alvaro dos Santos RezendeBlog
      Amin TavakoliBlogamintvk
      Arnaud Blogalcabeza
      Ayman Mohammed El-HattabBlogaymanelhattab
      Ben CurryBlog
      Benjamin NiaulinBlogbniaulin
      Benoit HAMETBlogbenoit_hamet
      Brendon FordBlogstewartisland
      Brett HillBlogbretthill
      Brian NøhrBlogbsnohr
      Byeongguk KuBlog
      Chris GoosenBlog
      Christian BuckleyBlogbuckleyplanet
      Cindy MeisterBlog
      Dan HolmeBlogdanholme
      Danny BurlageBlogdannyburlage
      Darrell C Webster (Darrell Webster)Blog
      David PetreeBlogdmixx
      Dean HowarthBlog
      Diogo Dias HeringerBlog
      Dragan PanjkovBlogpanjkov
      Elio StruyfBlogeliostruyf
      Emre AydinBlog
      Erwin van HunenBlog
      Eunjoo Lee (Eunjoo Lee)Blog
      Fernando AndreaziBlogfandreazi
      Genki WatanabeBloggenkiw
      Geoff EvelynBlog
      Gilles PommierBlog
      Goran HusmanBlog
      Haylee FoxBlog
      HeeJin Lee (Hee Jin Lee)Blog
      Igor PavlekovicBlogigorpnet
      J. Peter BruzzeseBlog
      Jasper Oosterveld (Jasper Oosterveld)Blogjasoosterveld
      Jeremy DahlBlog
      Jesper StåhleBlogJesperStahle
      Jethro SeghersBlogjseghers
      Jian Chen (??)Blogloveunicom
      Johan DahlbomBlogdaltondhcp
      Jorge Castañeda CanoBlogxorxe
      Juan Carlos Gonzalez Martin (Juan Carlos González)Blogjcgm1978
      Kamil Baczyk (Kamil Baczyk)BlogKamilBaczyk
      Kanwal KhippleBlogkkhipple
      Kazuhiko ?? Nakamura ??Blog
      Kelsey EppsBlogkelseyepps
      Kerstin RachfahlBloghimmlischeit
      Knut Relbe-MoeBlogsharePTkarm
      Laurent Miltgen-DelinchampBlog
      Liang Tang (??)Blog
      Loryan StrantBlogthecloudmouth
      Maarten van StamBlogaafvstam
      Magnus BjorkBlog
      Malin DandenellBlog
      Mario Cortes FloresBlog
      Markus WidlBlogmarkuswidl
      Martina GromBlogmagrom
      Matthew GreenBlogmattdgreen
      Mauricio CassemiroBlog
      Michael Kirst-NeshvaBlogankbs
      Michael BlumenthalBlog
      Michael WashingtonBlogADefWebserver
      Myles JefferyBlogmjthinkscape
      Naohiko Maeda (?? ??)Blognaohikomaeda
      Naoki OsadaBlog
      Naomi MoneypennyBlognmoneypenny
      Nathan OBryanBlogMCSMLab
      Nitin Sadashiv ParanjapeBlog
      Nuno Árias Silva (Nuno Árias Silva)BlogNunoAriasSilva
      Paolo Pialorsi (Paolo Pialorsi)Blog
      Patrick LamberBlogpatricklamber
      Patrick GuimonetBlogpatricg
      Paul SchaefleinBlogpaulschaeflein
      Paul WoodsBlogpaulwoods
      Poo Ching LoongBlog
      Rahmat ZikriBlogzikr1
      Raphael KoellnerBlogra_koellner
      Ravikumar SathyamurthyBlogShakthiRavi
      Rene Dominik ModeryBlogmodery
      Rie Okuda (?? ??)Blog
      Robert *** (Robert ***)Blog
      Robert D. CraneBlog
      Samantha Blog
      Sara Barbosa (Sara Barbosa)BlogSarabarbosa
      Scot HillierBlog
      Sean McNeillBlogs_mcneill
      Sébastien LevertBlogsebastienlevert
      Seiji Noro (?? ??)Blog
      Steve NoelBlogCloudItca
      Susan HanleyBlog
      Tomislav Bronzin (Tomislav Bronzin)Blogtbronzin
      Tommy ClarkeBlogitommyclarke
      Tung PhamBlog
      Ty AndersonBlog
      Vasil MichevBlog
      Victor Meirans (Viktors Meirans)Blog
      Vincent ChoyBlog
      Vitaly VedenevBlogvedenev
      Wellington AgáptoBlog
      WenXing LiaoBlog
      Yoan TopenotBlogYoanTopenot
      Yoni KirshBlog
      Yoshihide SakamotoBlog
      Yvette WatsonBlogyfwatson
      Zeljka KnezovicBlogzeljkak
    • Latest SharePoint MVPs (Twitter Follow Script)

      In keeping with previous posts, here is a list of all SharePoint MVPs as of 6/10/2015 (update coming July 1st)...At the bottom is a powershell script that you can run to follow all the SP MVPs in one go!

      Some quick stats...

      • 219 (non-anonymous) SharePoint Server MVPs

      Country breakdown:

      • 40    United States
      • 28    Not Shared
      • 22    Canada
      • 10    France
      • 8    Australia
      • 8    United Kingdom
      • 6    Switzerland
      • 6    Belgium
      • 6    India
      • 6    Japan
      • 5    Italy
      • 5    Netherlands
      • 5    Germany
      • 5    China
      • 4    Brazil
      • 4    Korea
      • 4    Spain
      • 3    Sri Lanka
      • 3    Denmark
      • 3    New Zealand
      • 2    Norway
      • 2    Pakistan
      • 2    Finland
      • 2    Costa Rica
      • 2    Sweden
      • 2    Czech Republic
      • 2    South Africa
      • 2    Taiwan
      • 1    Tunisia
      • 1    Turkey
      • 1    United Arab Emirates
      • 1    Uruguay
      • 1    Vietnam
      • 1    Croatia
      • 1    Colombia
      • 1    Guatemala
      • 1    Hungary
      • 1    Bulgaria
      • 1    Chile
      • 1    Bosnia-Herzegovina
      • 1    Argentina
      • 1    Macedonia F.Y.R.O
      • 1    Malaysia
      • 1    Jordan
      • 1    Philippines
      • 1    Portugal
      • 1    Romania
      • 1    Russia
      • 1    Singapore
      • 1    Slovenia

      New MVPs (within last year):

      • Adnan    Amin
      • Albert-Jan    Schot (Albert-Jan Schot)
      • Amit    Vasu
      • Bijaya    Kumar Sahoo (Bijay Kumar)
      • Bin    Wang
      • David    Amenda
      • Dinusha    Kumarasiri
      • Erdem    Avni SELÇUK
      • Inderjeet    Singh Jaggi
      • Jan    Vanek
      • Jussi    Roine (Jussi Roine)
      • Lakshmanan    sethu (Lakshmanan Sethu)
      • Marco    Rizzi
      • Michael    Nokhamzon
      • Mike    Maadarani
      • Prasath    Chellappan
      • Rodrigo    Romano (Rodrigo Romano)

      Longest running\most awarded SharePoint MVPs:

      • Michael    Greth    17
      • Daniel    Wessels    12
      • Robert    L. Bogue    12
      • Spencer    J Harbar    12
      • John    Timney    12
      • Rob    Windsor    12
      • Fabrice    Romelard (Fabrice Romelard)    12
      • Fumio    Mizobata (?? ???)    12
      • Pierre    Erol GIRAUDY (Erol GIRAUDY)    12
      • Ai    Yamasaki (?? ? (?? ?))    11
      • Haarón    González (Haarón González)    11
      • Adams    Chao    11
      • Ted    Pattison    11
      • Andrew    Connell    11
      • Sahil    Malik    11
      • Eli    Z. Robillard    11
      • Ed    Musters    11
      • Shane    Young    10
      • Joris    Poelmans    10
      • Hilton    Giesenow    10

      The list (data comes from your MVP profile, you don't see it, go update it):

      "Michelle" Caldwell (Michelle Caldwell)Blog
      Adams ChaoBlog
      Adis JugoBlogadisjugo
      Adnan AminBlogadnan_amin
      Adrián Diaz CerveraBlogAdrianDiaz81
      Ai Yamasaki (?? ? (?? ?))Blogai_yamasaki
      Alan MarshallBlog
      Albert-Jan Schot (Albert-Jan Schot)Blog
      Alberto Diaz MartinBlogadiazcan
      Alexey SadomovBlogsadomovalex
      Amanda PerranBlog
      Amit VasuBlog
      Anders DissingBlogandersdissing
      Andre LageBlogaaclage
      Andres Felipe Rojas ParraBlogarojaspa
      Andrew ConnellBlogandrewconnell
      Andrey MarkeevBlogamarkeev
      Antonio Maio (Antonio Maio)Blog
      Ashutosh SinghBlogashutosh80
      Asif RehmaniBlogasifrehmani
      Atsuo Yamasaki (?? ??)BlogSharePointIssue
      Becky BertramBlogbeckybertram
      Ben RobbBlogbenrobb
      Benoît JesterBlogSPAsipe
      Bijaya Kumar Sahoo (Bijay Kumar)Blogfewlines4biju
      Bin WangBlog
      Bjoern H Rapp (Bjoern H Rapp)Blogbjoern_rapp
      Brandon AtkinsonBlog
      Carlos CitranguloBlogcarlocitrangulo
      Cathy DewBlogcatpaint1
      Cheng Cheng (??)Blog
      Chris GivensBloggivenscj
      Chris O'BrienBlogChrisO_Brien
      Chris McNultyBlogcmcnulty2000
      Christian GlessnerBlog
      Christopher ClementBlogClemChristopher
      Chuantao DuanBlog
      Claudio BrottoBlog
      Colin PhillipsBlogitgroove_colin
      Corey RothBlogcoreyroth
      Dan UsherBlog
      Daniel McPherson (Daniel McPherson)Blogdanmc
      Daniel WesselsBlogmosslive
      Darko MilevskiBlog
      David MannBlog
      David Sánchez AguilarBlogdavidsancheza
      David AmendaBlog
      Debbie IrelandBlogdebbieireland
      Destin N JoyBlog
      Devendra VelegandlaBlog
      Dinusha KumarasiriBlog
      Dmitri PlotnikovBlogdmiplo
      Doug WareBlog
      Doug Hemminger (Doug Hemminger)Blog
      Dux Raymond SyBlogmeetdux
      Ed MustersBlog
      Edin KapicBlogekapic
      Elaine van BergenBloglaneyvb
      Eli Z. RobillardBlog
      Erdem Avni SELÇUKBlogeravse
      Eric Alan Shupps (Eric Shupps)Blogeshupps
      Eric RizBlogrizinsights
      Fabian ImazBlogFabianImaz
      Fabian MoritzBlogFabianMoritz
      Fabian G WilliamsBlogfabianwilliams
      Fabio FranziniBlogfranzinifabio
      Fabrice Romelard (Fabrice Romelard)Blogfromelard
      Fumio Mizobata (?? ???)Blog
      Gaetan BouveretBloggbouveret
      Gavin BarronBloggavinbarron
      Giuseppe MarchiBlogPeppeDotNet
      Gokan OzcifciBlogGokanOzcifci
      Guillaume Meyer (Guillaume Meyer)Blogguillaumemeyer
      Gustavo Adolfo Velez DuqueBlog
      Haarón González (Haarón González)Bloghaarongonzalez
      Hans Brender (Hans Brender)BlogHansBrender
      Heber LopesBlogheberolopes
      Hemendra Agrawal (Hemendra Agrawal)Blog
      Hilary StoupaBlog
      Hilton GiesenowBlogthemossshow
      Hiroaki Oikawa (?? ??)BlogHiroakiOikawa
      Hirofumi OtaBloghrfmjp
      Igor Macori (Igor Macori)Blogimacori
      Inderjeet Singh JaggiBlog
      Isha KapoorBlog
      Ivan SandersBlogiasanders
      Ivan Padabed (???? ???????)Blogsharepointby
      Jake Dan Attis (J. Dan Attis)Blogjdattis
      James MilneBlogJamesMilne
      Jamie McAllisterBlog
      Jan VanekBlog
      Jason WarrenBlogjaspnwarren
      Jason HimmelsteinBlogsharepointlhorn
      Jason Kaczor (Jason Kaczor)Blogjjkaczor
      Jean PaulBlogjeanpaulmvp
      Jennifer Ann MasonBlogjennifermason
      JeongWoo ChoiBlog
      Jianyu Yang (???)Blog
      John TimneyBlog
      John D. RossBlogjohnrossjr
      John P White (John P White)Blogdiverdown1964
      John Liu (John Liu)Blogjohnnliu
      Joris PoelmansBlog
      Joseph Tu (???)Blog
      Juan Pablo Pussacq LabordeBlogjpussacq
      Juan Manuel (Manolo) Herrera (Juan Manuel Herrera Ocheita)Blogjmhogua
      Juan Andrés Valenzuela (Juan Andrés Valenzuela)Blogjandresval
      Julien ChableBlog
      Jussi Roine (Jussi Roine)Blogjussiroine
      Jussi MoriBlogJussiMori
      Justin Liu (???)BlogFoxdaveJustin
      Kamil JurikBlogKamilJurik
      Keith TuomiBlogkeithtuomi
      Kevin Trelohan (Kevin TRELOHAN)Blogktrelohan
      Kris WagnerBlogSharePointKris
      Lakshmanan sethu (Lakshmanan Sethu)Blog
      Laura Derbes Rogers (Laura Rogers)Blogwonderlaura
      Liam ClearyBloghelloitsliam
      Lionel LimozinBloglimozinlionel
      Mahmoud CHALLOUFBlog
      Marat Bakirov (????? ???????)Blog
      Marc D AndersonBlog
      Marco RizziBlogmarcorizzi
      Margriet BruggemanBlogmargrietvuur
      Marianne van WanrooijBlogmariannerd
      Marius ConstantinescuBlogc_marius
      Mark RhodesBlog
      Mark StokesBlogMarkStokes
      Martin HarwarBlogpoint8020
      Masaki NishiokaBlog
      Matthew McDermottBlogMatthewMcD
      Matthias EinigBlogmattein
      Melick Rajee BaranasooriyaBlogMelickRajee
      Michael NokhamzonBlogmickey75019
      Michael GrethBlogmysharepoint
      Michael NoelBlogmichaeltnoel
      Michal PisarekBlog
      Miguel Tabera (Miguel Tabera)Blogmigueltabera
      Mikael Svenson (Mikael Svenson)Blog
      Mike MaadaraniBlog
      Mike SmithBlogTechTrainNotes
      Mirjam van OlstBlogmirjamvanolst
      Mohammed A. SalehBlogmohkanaan
      Muhammad Imran KhawarBlogmsdev_Pakstatus571218277298348033
      Nabil BabaciBlognabilbabaci
      Nguyen Hoang Nhut (Nguyen Hoang Nhut)Blognhutcmos
      Nick KellettBlog
      Nicki BorellBlogNickiBorell
      Nicolas GeorgeaultBlogngeorgeault
      Noorez KhamisBlognkhamis
      Patrick YongBlog
      Paul OlenickBlog
      Paul Papanek StorkBlogpstork
      Penelope CoventryBlogpjcov
      Peter HolparBlog
      Peter CarsonBlogcarsonpeter
      Pierre Vivier-MerleBlog
      Pierre Erol GIRAUDY (Erol GIRAUDY)BlogEROL_MVP
      Prasath ChellappanBlog
      Radi AtanassovBlog
      Randy DrisgillBlog
      Reza AlirezaeiBlog
      Ricardo Jose MunozBlogrmunozcr
      Riwut LibinukoBlogcakriwut
      Rob FosterBlog
      Rob WindsorBlogrobwindsor
      Robert VoncinaBlogR0b3r70SP
      Robert L. BogueBlog
      Rodrigo PintoBlogScoutmanPt
      Rodrigo Romano (Rodrigo Romano)Blog
      Roger HaueterBlogtechtask
      Romeo Donca (Romeo Donca)Blogromeodonca
      Ruven GotzBlog
      Sahil MalikBlog
      Samuel ZuercherBlogsharepointszu
      Sangha BaekBlogSanghaBaek
      Scott JamisonBlog
      Sean WallbridgeBlogitgroove
      Seokhyi HanBlog
      Serge LucaBlog
      Serge TremblayBlogSergepoint
      Seung-Jin KimBlogjincrom
      Sezai KomurBlogsezai
      Shai PetelBlogshaibs
      Shane YoungBlog
      Shuguang TuBlog
      Sohel RanaBlog
      Sonja MadsenBlog
      Spencer J HarbarBlogharbars
      Stanislav VyschepanBloggandjustas
      Stéphane EyskensBlogstephaneeyskens
      Steve SmithBlog
      Steve CurranBlogspsteve
      Susitha Prabath FonsekaBlog
      Symon GarfieldBlogsymon_garfield
      Ted PattisonBlog
      Thomas VochtenBlogThomasVochten
      Thorsten HansBlogThorstenHans
      Thuan NguyenBlognnthuan
      Tobias ZimmergrenBlogzimmergren
      Todd KlindtBlog
      Todd S BaginskiBlogtoddbaginski
      Toni FrankolaBlogtonifrankola
      Trevor SewardBlogNaupliusTrevor
      Usama Wahab Khan (Usama Wahab Khan)Blogusamawahabkhan
      Valy GreavuBlogvalygreavu
      Veronique PalmerBlogveroniquepalmer
      Vielka RojasBlogvkrojas
      Vijai Anand Ramalingam (Vijai Anand Ramalingam)Blog
      Vincent BiretBlogbaywet
      Vlad CatrinescuBlog
      Waldek MastykarzBlogwaldekm
      Wei DuBlog
      Wes PrestonBlogidubbs
      Wesley HackettBlogweshackett
      Wictor WilenBlogwictor
      Wonbae KimBlog
      Yaroslav PentsarskyyBlogspentsarsky
      Yasir AttiqBlog
      Posted Wednesday, June 10, 2015 10:55 PM by cjg | 1 Comments
      Filed under:

    • Subnet masks are important...SharePoint Is Up...err Down

      We had this awesome situation the past 5 days.  Another team wanted to use ElasticSearch to index SharePoint.  They would attempt to connect to SharePoint, but were not able to.  Of course, the SharePoint Servers were in fact up as demonstrated by my ability to connect to them from my laptop and from other servers in the farm.  I therefore wrote them off as crazy and put down as a firewall/F5/Linux issue.  But they kept nagging at me and eventually escalated to the higher powers that be and I was forced to deal with it.  Here's how it played out:

      Quick Facts:

      • ElasticSearch on its own /28 subnet
      • SharePoint on its own /28 subnet (more on this later)
      • F5 VIPs for load balancing on both sides (both SP WFEs and ElasticSearch queries)
      • Both subnets part of a larger /24 subnet allocation pool

      The process (after 5 days of back and forth):

      • Can you ping our server IPs?  Yes
      • Can you hit our SP URLs?  No
      • What happens when you ping via DNS?  We see the F5 VIP IP
      • Change your hosts file to point to a WFE directly, can you hit our server?  Yes
      • Oh, we need a bounceback iRule for the SP servers to talk to each other, let's add that now
      • Maybe we need a reverse proxy on the VIP?  Let's add that?
      • Remove your hosts file, can you hit our servers?  No
      • Fire up wireshark on all the servers, do logging on the F5
      • Traffic flows from the ElasticSearch, through the F5 and does arrive at our SP WFE however the WFE kills the TCP connection and no IIS request is logged - WTF...
      • Chris - "OK guys, let's start at the bottom and work our way up the OSI layers..."
        • Ethernet adapters good? - Yup
        • Level 2 ok?  Yup
        • Level 3 - got IPs? Yup - Chris - "Hey, what is your guys subnet?".  Them - "".  Chris - "Ours is ""....***

      5 hours over 5 days wasted, frustrated, starting to think they were crazy F5 guys...all because the network guys didn't setup our subnet properly.  What was happening is the SharePoint servers had a huge subnet configured.  This caused the SP servers to think that the ElasticSearch servers were on the same subnet but weren't.  Therefore when it couldn't connect to them using layer 2, it would kill the TCP layer.  Awesome.


    • Building Your Own Push API for O365 (Ingesting Twitter)

      Yes, it can be done.  You have to play by the O365 system's rules, but you can do it.  Here's how it can be done...

      The high level steps:

      • Find a data source (Twitter, Facebook, Instagram, whatever)
      • Create\configure an O365 account with access to Azure AD instance for your tenant
      • Ingest the data, transform to format that O365 will accept (Word, PPT, Excel, PDF)
      • Upload the data into O365 (document library)
      • Update the metadata on the doc/item after upload, this includes:
        • Create necessary user
        • Tag the user
        • Create hashtags
        • Share with those users involved
      • Wait up to 15 minutes for your results to display

      So let's walk through these steps in a bit more detail shall we?

      First Step - get twitter data

      This is done by simply using the HttpWebRequest class of .NET and getting the html of a user's feed (provided they have not locked it down, in my case...Christophe ain't indexable when logged in...LOL).  This is a GET request to{username

      Parse the HTML - I have provided a Util class to help you with this.  ParseValue is super me king of html parsing if you will...

      You can then use the twitter html response to parse out the tweet feed of the user.  This would include for each tweet:

      • Mentions
      • Text
      • Hashtags

      Great, now you have the tweet data into some class structure (such as a hashtable).  Next is to grab a screen shot of all the tweets.  This can be done using the IE Browser control of .NET: 

      Bitmap docImage = new Bitmap(width, height);
      webBrowser1.DrawToBitmap(docImage, new Rectangle(webBrowser1.Location.X, webBrowser1.Location.Y, width, height));
      docImage.Save("c:\\temp\\" + + ".png");

      You can now take that tweet image and import it into a word document using the System.IO.Packaging namespace.

      From there, you now need to upload the word document with the tweet image to your O365 instance.  This can be done using the CSOM libraries.

      Now that the word doc with the twitter image is loaded, you now need to update the metadata using the CSOM api.  Now this is a bit more advanced in the fact that hashtags become MMS terms and mentions become sharing links:

      Sharing an item can be done via some hidden HTML post apis...this ensure that the shared item shows on the other user's feed.

      However, if the users doesn't need to add them to your Azure AD tenant...this can be done by calling an obscure undocumented api...check out the "CreateUser" method.

      If you wait a while...UPS will pick up this new Azure AD user and you will be able to tag the user as the creator and modifier of the new word document...errr..umm...tweet.  Which means you might have to run this more than once for each tweet (ah...the life of a lazy Saas app).

      In 15 minutes...the document will be indexed properly, the users will see it on their feed and the users' that it is shared with will see it too...Office Graph at its finest...

      The code is now posted to codeplex...@williambaer rejoice...however I did not publish the Word doc generation project (OfficeXml) for patent reasons, so you'll have to figure out that part, its not hard, but also not easy:

      Easy breezy...MVP for another year...boom




    • Stop Killing Yourself Drop Kerberos - Go Claims!

      Why...why put yourself through the agony?  To be fair and relatively speaking, kerberos is easy to setup and manage, but its old and stupid.  The whole design is to keep you from tagging the auth controllers each time you login and be able to "delegate" your credentials to some other system so it can do something "on your behalf". 

      Hmm...that sounds based auth with auth tokens anyone?  Not a single Saas App uses why are you still using it?  Its just stupid.  If you have a product that relies on Kerberos, then you are living in 1999.  Fast forward 16 years later....


      Drop those old apps that you don't need anymore for ones that support claims auth and have so much more functionality than the old ones you have.  It's time.  Really.  You can let go now.


      Well...time to drop that vendor's software.  Yeah...tell the Microsoft SQL Server team (isn't that the only reason you still use Kerberos?) to get with the times.  Its ridiculous that they don't support claims based auth and delegated auth based on Claims based tokens. 

      Time for software vendors and engineering teams to step up.  It's freakin 2015...I want my sharks with lasers damn it.




    • Wait What?!? Chris is Joining ShareSquared as CTO?

      Yeah, personally, its a bit hard to believe, but I'm going to work for a company again.  It has been a very long time since I have actually reported to someone other than my customers!  To be more specific, since my Avanade and startup days in Seattle back in 2004!  So why do it now?  Quite a few reasons...

      #1 - David Kruglov, Jim Duncan, John Honeycutt/Jeff Gunn and the crew

      I have know David for over 8 years now.  I have watched him through his ups and downs, MVP after MVP and intimately know the details of every person that walked through his company.  Through it all, he has maintained a level of energy and integrity that I have not seen in any other owner of a company that I have met in our little consulting space.  David works hard and plays hard, but not as crazy as some of the other CEO's I know out there (especially you ones from down under)!  David has worked his ass off to get to a point where he has learned how to play this game.  It has definitely not been without some missteps that he undoubtedly learned from.  He has some pretty amazing things in the pipeline and he did a great job selling me on what he has going on.  Right now, everything is going to plan and I will be calling some of you to see how happy you are where you are Big Smile

      Jim Duncan is a just simply a rock star. It has truly been a pleasure watching him work for the past two weeks.  He's technical, he's a great manager and leader...and he just simply does an amazing job at managing the projects.  I'm looking forward to continue to work with him and hopefully automate many of the tasks that are...less than pleasurable!

      John Honeycutt and Jeff Gunn are on it. It is simply amazing to watch them close deals.  They have some insane close rate that even the guys and gals at IBM would be envious of!  They will be keeping Jim and I busy for a few years to come!

      So far, the guys are awesome.  They work hard, they want to do good and they ask questions.  Everything you'd want from a team. We will be bringing on two more people in the coming weeks and I'll let them announce their "move".

      #2 - Envisioning My Product Ideas

      It is very difficult to make time to build products that you know the world needs without other people helping you (albeit, new technologies help alleviate a lot of the time and effort that is used to take). There are several options to accomplish building your personal product idea such as:

      • Hire people (contractors, employees)
      • Get industry friends to help you build it combining our spare time in exchange for equity
      • Sell the idea to someone so they can build it

      Each of these have advantages and disadvantages:

      • Taxes, Health Insurance, Disability...(although you can outsources all this admin stuff these days)
      • Capital to invest 
      • Trust
      • Loss of full potential earnings

      ShareSquared offers a set of people that can provide some of the extra oompfh that I need to get some of these ideas out into the wild.  They also have a couple of products that have some potential with some real-world tender love and care put into them.

      #3 - Location, location, location

      Southern California (SoCal) is my home.  I love it and I hate being away from our lovely home in the "Ranch".  Lidiya and I have built quite the setup in San Diego.  The kids are awesome.  We have super smart, successful friends such that we all feed of each other to make and drive us to do bigger and better things.  Staying home or being able to hop on the train to LA, do a meeting or two and be back in my own bed the same day is priceless.  A laser focus on SoCal (the 8th largest economy in the world) is enough to keep me busy for quite some time.   So fret not if you live outside SoCal, but you should take notice now that we are coming after you if you are doing business in SoCal.  But no matter what the consulting and product battlefield brings, your always welcome in our house!

      #4 - Equity

      I know my value.  Let me throw some names out there...IBM, Avanade, Microsoft, eBay, Intel, PayPal, Subway, General Atomics.  Those are big names.  I rocked all of them.  And that was all in a few years.  I have since had my own company for the last 10+ years working with people all over the world.  I have done very well (at least, I have kept the wife happy so that must equate to some level of success)!  You will have to strive to find a person that has been in these types of big companies, had their own company, built products and achieved everything they have ever put their mind too.  They do exist (and you guys and gals know who you are), but you'll have a hard time getting them and keeping them without keeping us occupied with taking over the world or justifying why we make you 100s or 1000s of thousands of dollars and we don't get a significant cut.

      I have a rule that I won't work anywhere where I don't have skin in the game with a huge payout involved.  I talked to several other companies exploring the possibility of working for them, and the salary offers were quite large, but with no possibility of a big payout in exchange for building them something amazing. 

      A don't get anywhere significant in this world by working solely for a salary. 

      #5 - Customers, Money & Value

      I want to rule over SoCal with all my other SoCal CEO's and deliver solutions that just rock it.  I want to drive the best solutions that focus on the equation that drives everything I do personally........

      P = R - C (Profit = Revenue - Cost)

      I only enjoy talking to executives, I get them after being one for 10+ years.  I want to make them tons of cash (and myself in the process).  I want to save them money in hard times. You may not like it, but the world we live in is all about money (<<<insert wife side remark here>>>).  I'm incredibly excited about the productivity "signals" that are about to be released to the world via Office 365.  You will be able to see exactly who is working and who is not.  Office is all about productivity (saving money).  I'm going to be focused like a hawk on value based solutions around the "C" part of the equation.  I'm not going to do any projects that are simply a "Cost" line item, I'm happy to pass those on to my competitors to bloody their name instead.

       #6 - Software Partnerships

      ShareSquared has some incredibly strong software ISV relationships.  Some of these companies I have not been that close too, but have watched from afar as they have penetrated tons of accounts and made serious money for themselves and their partners.  A big part of our strategy will be to continue to focus on those partnerships.  Personally I am very excited to be able to implement some of the newer partner product offerings that ShareSqaured is selling.

      #7 - M&A (Mergers and Acquisitions) and Big Partnerships

      Ruling SoCal will take some serious wheeling and dealing.  You can't fill up the CRM database by solely making cold calls. To be able to scale and grow the company means making some big moves.  I'll be involved in a lot of the growth and partnership strategy for ShareSquared and how we will make it to our "magic" number.  I can't share exactly how that will be done, but I definitely have quite a few things in the pipeline that I hope will get me that much closer to making my personal goals related to ShareSquared's future.


      Starting a new company is not easy.  Growing a company is not easy.   Nothing you do in this world is easy.  I'm looking forward to the challenges that ShareSquared and David Kruglov is presenting me. 

      I'm going to go at it just like I have everything else, hard and strong.  Just like my win tonight in my soccer feels great to be number one!  See you on the SoCal battlefield...


    • Workflow Associations lost in migration

      Ran into this interesting problem today.  It is related to this long running workflow bug from this post.  As part of the eBay/PayPal split, we are creating a new domain and moving the users.  Of course, some users still exist, some do not.  No matter what, the workflow user will not exist in the target domain.  So the previous bug occurs.

      But we ran into another issue.  All the list\site workflow associations disappeared for those "User not found" workflows. Took a couple of hours, but finally figured it out.

      If you run the SPFarm.MigrateUserAccount method before updating the non-existing workflow owner to an existing will LOSE ALL ASSOCIATIONS for all the workflows across the farm that the previously migrated user owned!  Ouch...

      Lesson sure to update the workflow modifiedby first, then migrate your users!


    • Delve vs Box : What the heck is Delve? Don't baby me...don't tech me...give it to me straight! -

      At @MS_Ignite I had a very fun, cool, awesome session that we affectionately called "Battle of the Office Graph".  Can you tell from the pic?

      Huh, you said Delve in the blog title, why now are you saying "Office Graph"?  Well, that's what this blog post is here to enlighten you about!  So let me explain...the "Office Graph" is the basis for a series of "signals" or "events" that occur in the O365 eco-system that are fed into the SharePoint Search index.  These signals can be a myriad of different things such as "Create", "Update", "Email", blah blah (you can learn all about it here).  These events also have properties that are indexed such that you can "query" them via the SharePoint Search APIs.  So...back to the question that was asked over and over again at the Delve booth at @MS_Ignite...

      What is Delve? 

      This O365 page tries to tell you, but kinda fails miserably.  Delve, my friends, is simply a UI on top of the SharePoint Search index (yeah...that awesome Ceres code built by the amazingly cool and crazy smart Norwegians that I love to hang out with!) that shows you these various events that you or other people have generated in a "meaningful" way.  At least...that's how it started out anyway.  as some other people have started to notice, the page is taking on the new persona of the "My Profile" page, only rebranded as "Delve". The "meaningful" way is simply a basic set of queries that the Search team put together that they think makes the most sense for a majority of people and organizations on the planet.  Will it work for you? it optimal for you?  Maybe not. If you check out has a horrible definition that is not even close!  Does it use machine learning and artificial intelligence...ummm no.  As a computer scientist, I can safely say that simple algorithms and data queries don't qualify for machine learning or even come close to AI.  The marketing guys did a really good job and they let the media spin this out of control! It also does not let you manage your emails or pretty much anything else that the page says (as of 5/20/2015)!

      Since it is just a simple one page app that makes Ajax calls to the Search API...this is where the ability to make your own "Delve" page (or App) comes into play.  You can create your own pages in O365 that makes calls to the Search API and build your own Delve interface(s).  Currently the default Delve UI page is not extensible unless you highjack the CDN, which you can do inside your network, but not outside it (which of course would make for a terrible user experience). Wait a few more months and you should get the ability to do some customization (although we are not sure exactly what they will entail just yet)!

      In addition, the widely awaited and anticipated "Push API" is coming very soon (likely end of 2015).  This will allow you to pump your own "signals" into the SharePoint Search index aka Office Graph aka Delve.  This will kick the crap out of Box and all the other online storage companies and anyone else that is even thinking about entering the online storage market!'s this future ability to create your own UI based off the internal and external indexed signals that makes the future of the O365 platform so exciting!  Which brings me to the second part of this blog post...comparing Delve and O365 (OneDrive) to something like Box.  Ok so yeah, they had an IPO recently.  The stock has tanked horribly...why?  Cuz Microsoft is about to destroy them.  If you are stockholder...well...I'm sorry for you.  Get out now!  I'll give them the benefit of the doubt and say its possible that they may use some of that cash to catchup, however, if they simply use it to do Merger and Acquisitions of simple disk drives...well...your screwed.

      Real life example: 

      eBay has a fairly huge presence on Box but does not use their internal OneDrive (My Site) or their O365 tenant.  Box currently provides a seamless single sign on experience that gains eBay access to cloud hosted corporate data (can you say "I don't trust internal IT"?).  However, it is missing some key features that exist in Office 365 that should make you pause and reconsider your usage of Box.  This is the current experience with eBay Box:

      eBay Box: 

      Open the Box url, type your ebay email (do NOT type your password)...


      Home Realm Discovery takes you to the eBay SSO (this is similar with Yammer and O365 solutions)


      You are presented with your eBay Box application:


      As you can see, not much going on.  Its just a web UI on top of some storage.  Very lame, very boring.  You don't get anything close to what Office 365 gives you!  But Box does have a couple of nice simple features that O365 does not have, keep reading...

      O365 OneDrive:

      Open the O365 login page ( - maybe one day they will change this pic of Santa Monica to something else, been this same image for like 4 years now!

      Enter your email and again, Home Realm Discovery takes you to the eBay SSO (this is similar with Yammer and O365 solutions)


      Once logged in (and if you have a license assigned), you are presented with your O365 tenant.  

      At this point, without saying anything...its pretty obvious who the winner is between O365 and Box. But let's do the apples to apples thing shall we?  Clicking on OneDrive, we get the following:


      Both (OneDrive and Box) are similar when compared to each other directly.  But its the indirect comparisons (pick your poison, apple vs orange, which ever is better is O365) where O365 starts to kick the **** out of Box.  However, Box does have some things that OneDrive does not have...

      Box is good at:

      • Notifications (although O365 "My Site" aka OneDrive has it, it is buried and not as friendly as Box):

      • Logging - I know where I logged in from and when.  Try to find that in your O365 UI!:

      O365 is good at...everything else!

      Look at all the stuff you get with O365...seriously?!?  Box thinks they can compete?  Not even close.  Narrow-minded silicon valley hippies that just managed to pull off getting an IPO for a set of managed disks (aka hard drives).

      O365 is bad at...everything Box is good at.

      Just look at the simple design of the administration pages above.  OneDrive is a My Site hence, you go to the Settings cog->Site  This equates to you need special training to learn to manage your "My Site" aka OneDrive.  People don't give a flying flip about a "My Site" or "Site Settings".  They want the simplicity of Box in terms of the admin.  The day the O365 team makes OneDrive simple to use with these types of admin UIs is the day the damn thing will rule the world.  Until then...its not even close.  The tech is there, but the UI is not. 


      That all being said.  It is the ability for your OneDrive to be fed into the Office Graph and the Delve UI that makes it so exciting.  In the "OneDrive" image above, you will notice the "Delve Test" word document in my OneDrive.  In the image below (along with injected Twitter data), you will see the document has in fact been inserted into my Office Graph! 


      Box doesn't have this, it's a simple web UI on top of some disk drives with Federated Auth ability...LAME!  Get off Box and go O365!


    • The eBay and PayPal Split

      *Posting this now, as our part of the split is pretty much done even though we still have a few more weeks before the final split of the two companies*

      As many of you know, I was asked to return as the architect to help split eBay and PayPal into two separate companies.  It was the first time I had ever been involved in "splitting" a public company into two parts.  I have been involved in merging companies, but splitting was a whole new ball game.  eBay had acquired Deloitte to advise on the regulatory rules around the split and thus-ly, they naturally would oversee all of our data split activities and approve my split plans.  Before the serious bout some pictures of the team?


      eBay Team (Vijiya, Surjan, Venu, Sukanya, Lavanya, Harika, Shanti, Asijit and some hidden faces) - I did not take this pic btw!


      SPS Sillion Valley and Meeting the "Gordon" himself of "Gordon Biersh" (happened whilst at eBay):


      Teaching the team how to play flip cup!


      Of course I owned pretty much everything, so "Tell Chris Everything" was burned into everyone's psych...


      And now the good stuff that will help the tech world....

      Active Directory
      • Users, DLs - Another team built this strategy out.  A very talented team from COO (aka Michael Noel's company).  They used custom built scripts and the expensive yet super shitty Quest Tool (now Dell) to migrate users and then keep the password in Sync.
      • Names that change and those that don't  - DL names did not get updated from "ebay" to "paypal".  As you can imagine, that would have caused a massive workload on all Applications involved.  There was however a filtering process for accounts and DLs that did not need to come over.
      • Email addresses - PayPal went to Office 365/Exchange online.  Until the very last second, eBay maintained the MX records for the "Paypal" domain.  Once the user migration started to occur (laptops to the new paypal domain), the user's email address in the ebay system would be removed.  Of course you just can't flip a switch and automatically everyone is migrated and moved.  It took about a week for single users to really start seeing the migration of the MX and Mail box to occur.
        • Tackling migrated user emails - As you can imagine, workflows and other things that relied on the User Info table for email would show the old "" alias, but of course, many users moved to "PayPal".  I decided that rather than leak any future data between the companies via workflows or alerts (and keep with SEC and other rules), I updated all users to "".  So users that stay at ebay will not receive an email from the PayPal system.
      • The infamous lost of certain attributes - at some point, someone did something not so bright and annihilated two of the most important AD attributes for roughly half the migrated users.  This of course caused havoc throughout the system once the changes were replicated (SharePoint solutions and 3rd party apps use these properties once replicated via FIM to the user profile).  I was on top of it and made sure the AD guys heard from the SP team before anyone else.  It took 2 days to re-replicate all the properties for 25K users, ouch.


      Permissions were a pain in the ass.  The AD guys setup a trust so anyone could login from either domain.  Obviously this is a bad thing cuz then you start seeing the UserInfo table fill up with odd ball stuff.  We had some test trust splits, but I made it a point to cut the ties completely after iteration #3.  I did this by doing the following:

      • Deny the old domain - Add the web app policy that denies any old domain users from logging into the new domain and then update the access denied page to remind them to use their new domain credentials
      • Set the People Picker OU - People would see two of each other when assigned permissions or testing things, of course I would get a defect assigned from every person that thought the migration didn't happen until I got fed up and locked it down to only pull from the local site collection user info list and the new domain.

      3rd party apps

      • Vast amount of apps that must split like a cell.  Just to give you an idea:
        • Workday
        • SAP
        • SharePoint
        • Active Directory
        • Exchange
        • Human Resource systems
        • IT Ticketing (Remedy, home built)
        • Video solutions
        • File shares
        • SSO (Ping Identity)
      • Every one of these had to have a project team with PMO, architects, developers and business resources to split them off.  Super expensive and a massive undertaking!

      Content - What goes, what stays?
      The SEC and other regulatory bodies has some pretty strict rules around what could go and stay with each company.  There were several options one could have used to decide what content stayed and went:

      • Let the users tell us #1 (no guidance) - This requires user's to know what sites they use and what content is important.  Ha...I laughed my ass off at this option.  User's can never find or remember where and what they use everyday.  This would be a failure rigth off the bat
      • Let the users tell us #2 (with guidance) - build a tool that shows user's the sites they have viewed, edited whatever in the last 6 months/year. I built it, but they did not come (or rather, we didn't promote it).  User's never would have taken the time, and the business killed it as we didn't want liability for some reason.
      • Tell them what is going - We chose this option.  We did the migration about four times.  Each time we added more sites to the list of "should go".  At some point, no one complained about data missing.  See the next set of data points...

       What we used...

      • My algo ruled - We ended up using an Algorithm I built to decide what should go and what should stay.  It went something like this:  If the site used the "PayPal" master page, its good.  If the site had an owner\creater with a "" email address, its good.  If the site title had the name "PayPal", its good.  If the site didn't meet the first set of criteria, but had a document with the doc name having "PayPal", is was called "Mixed", it also got to go.  Legal loved the algo, signed off, and away we went.
      • Have a process - As much as the algo proved its value, there were still a set of sites that had to go no matter what.  The main intranet site was not tagged as "PayPal", but still had to go.  Shared resource sites managed by "eBay", had to go.  We put these in a special category and user's had to tell us they wanted them or they would get deleted.

      IRM - Information Rights Management

      • IRM Enabled Docs - Turns out when you migrate from one domain to another, you lose access to all IRM enabled documents.  Huh...who would have thunk it?

      Branding and MasterPages

      • 2007 strikes back! - 2007 had some weird crap in it.  My domain knowledge from the last upgrade helped me to "fix" some SP Hive files to support weird things like missing web part zones and other oddities
      • Lucky lucky - Our site creation process from 3 years ago helped us so much.  All the sites would get tagged based on the user and the templates they selected.  It made it super easy to find the PayPal sites (based on the algo above).
      • PayPal Branding - All migrated sites got PayPal branding, period.  No other companies, no eBay, therefore all master pages and other images were moved to PayPal.  It caused a bit of grief for some sites, but minor.

      Single Sign On

      • SSO to SSO - all those apps above...yep...SSO\claims enabled.  eBay has a mandate that *all* new applications much support claims based Auth.  If not, you won't sell it or install it!  This meant migrating every new PayPal instance to the new PayPal SSO.  Not an easy or quick process of course.  I have another post about using the old Kerberos shite coming soon.

      URL Migration

      • SystemUpdate - when updating listitems and files, make sure you use SystemUpdate.  It just looks tacky having a bunch of updates for URLs as people find others that have to be updated.
      • Keywords  and Best Bets - ensure that you remove old best bets (ones that point to sites that were deleted) and also make sure that you update the best bet urls so that they point to the new urls
      • InfoPath forms - forms that submit data to lists or other libraries must be updated.  I have a post from the last migration that details the hidden awesome code for in-memory InfoPath updating here
      • Title column and 255 chars - some URLs will get bigger when you replace them. Which means if the users decided to use the damn "Title" column, you will know that you can't change its type from Single Line of Text to Multi-line.  Those items are a lost cause and must be written off as much.  For the other columns, I could easily change the type to multiple lines of text and then update the URL.
      • Crawl Rules  - be sure you update your crawl rules to exclude those really dumb emails from customers that have weird stuff in them that should not show up in search results.  And all the unaccetable keywords that are not allowed in ebay and paypal systems.
      • Profile Properties - make sure you update User Profile properties (such as PictureUrl) that point to the old system to point to the new system
      • Code and Layouts files - Yeah, if you code has static AD domain references, you will have to update that.  And make sure that weird statically coded URLs in layout files are also updated.  This is super bad practice to statically code your absolute urls in your freakin layouts file.

      List template and User Solutions

      • List Templates - Just blow that shite away...its ridiculous to try to create something and see 100s of weird list templates showing up
      • User Solutions - I blew all these away, totally worthless

      Code, maintaining two code bases

      • TFS - yeah, you have to create new branches to support the changes in each company.  And at some point, they must break the link completely.  It required some serious refactoring in some cases to support both companies with one codebase.  I learned a ton of lessons around when you should put a company name in and when you should not.  In a majority of cases, NEVER put the name of the company somewhere in code.  Horrible, just horrible.
      • Company Names - and speaking about company names.  Never create columns on your lists that have the company name, especially if they will be used as refiners in your search center!  PayPal will forever more have the name "eBay" in the search results.  Bummer...

      Testing, testing, testing

      • Have a tool that doesn't suck - When browsing, editing and doing reporting, don't use HP ALM.  It is a horrible piece of junk.  That being said, find one that at least:
        • Allows users\departments to enter defects
        • Allows you to easily find defects (assigned to you or the project)
        • Ensure user's don't add to a defect rather than creating new defects (this drove me crazy and I went off on a couple of people).
        • Set priorities for resolution
        • Set Severity and resolution times
        • Make sure people know that a defect will roll to the next migration attempt (deferrable)
      • Have a killer defect manager - we had an awesome lady running our defect management, Sukanya Samal.  Very knowledgeable and very to task, just amazing.  You never know when you might have some jokers like these fellows...
      • Have some great tools - I created several tools three years ago that help with checking the health of the migrated farm.  You should too:
        • Link Checker - checks all the links across the farm recording what pages have what links.  This allows you to go back in and query the pages that didn't get all the links updated.  You can then dynamically run your Url Updater to target just these pages after you have made modifications for the outlier cases
        • Error Check - a tool I have had for a while that checks all SharePoint pages for error conditions (correlation errors, web part error, error).  Every time this would tell me if someone forgot to install a 3rd party product or some other dependent assembly somewhere.  I would then be able to fix all the pages.  It was also useful for determining pages that were also broken in production that we didn't need to fix in the migration (don't get blamed for someone elses problem!)

      Scripts, scripts and more scripts

      • Script everything! - I had over 85+ scripts for migrating the environment.  We could do a full rebuild in about 3 days.  Examples:
        • Install Farm\Add servers to farm
        • Install solutions
        • Create app pools, web apps and service apps
        • Start WFE and App services
        • Add web config entries
        • Attach CDBs
        • Create your web app policies - to add all your testers and admins
        • Create AD and BDC connections, map UPS properties
        • Deploy solutions
        • Update workflows
        • Migrate Users and Groups
        • Create Content Sources
        • Setup Best Bets (Fast and SP)
        • Delete Sites
        • Find and Replace URLs
        • Enable Full Auditing across sites
        • Setup Trusts with certs
        • Set and unghost master pages
        • etc, etc....
      • Utilize script references - I had several scripts that held our common functions and variables This allowed us to modify one file and have all the other scripts target our environments (Staging, QA, dev, production) with no changes.
      • Order Matters - don't just fire off scripts at random.  They must follow a logical order.  Take for instance...update the workflows to an existing user, then fire the MigrateUsers command.
      • Table locks matter - Same reason your OneDrive doesn't sync more than 5000 items, watch for when your scripts query over 5000 items in the DB, this causes a table lock and will stop all other scripts.

      Of course, my scripts became famous:

       Migrating Users and Groups

      • Migrate cmds -  If you have ever done a domain to domain migration, you will know the pain involved.  How do you find all the users to call the migration user\group command on?  How long does it take, and how should I execute it?  Well, turns out that you have to query *every* content database and the UserInfo table to get *every* user and group out.  You could then feed that to a PowerShell script that would update them.  But running that script as a single thread will take DAYS!  Especially with 60K+ users.  You need to create a dynamic script that queries the UserInfo table and then takes an input *char* such as "a".  You can then fire off 26 individual PowerShell scripts that cut the time rough by 26.  This runs so much faster.  Oh, and that same pattern, you do for EVERYTHING involving users.  Make a script that takes a "char" parameter and get it done oh so much faster!

      Firewalls and proxy filters 
      PayPal went security crazy.  They locked down everything.  Waaayyyy more than eBay.  You couldn't do anything without getting flagged for it in some way or another.  And just about every subnet was isolated from every other subnet.  Ouch.  Some tips...

      • F5 VIPs - ensure that your servers can use the same VIP for load balancing from inside the subnet!  This drove me crazy until I figured out what was going on.  Ensure the F5 guys add the right iRules to the VIP!
      • Outbound proxy filter - damn, when you block your own web properties and wonder why things don't work?  I find it funny that a company will lock down the outbound internet traffic to their own sites, didn't make for a very workable "crawl" system for those sites! 
      • Teams that just can't do it by themselves - eBay is going to Node.JS and Druple with ElasticSearch.  PayPal is going *ALL* Microsoft.  The new intranet team that run the eBay side were not network guys.  And they kept driving me crazy because they couldn't connect to SharePoint and saying it was my responsibility to fix it.  Bullshit.  They just needed to quit being lazy and go talk to the network guys.  Just stupid that "architects" don't know how to diagnose and resolve network issues.
      • FIPS policy - they tried to apply it, but I caught them when they tried it.  SharePoint don't work with FIPS.  It's not that SharePoint isn't secure, its just that it used some non-FIPS algos for hashing some things for speed.  Of course, enabling FIBS causes .NET to exception out anytime a piece of code uses it.  They dropped that pretty fast when I told them how bad it would be for SharePoint and all the other .NET apps on the network.  Reference this


      • IPs, subnets and VIPs - oh my!  Make sure your subnets are setup property...reference this


      • The infamous workflow error I surfaced years ago (on top of many others) - This kept bitting me in the ass.  Every migration, every time, without fail.  Some workflows would update fine, some, not at all.  Some would update, but one file would remain.  Retarded.  I eventually had to manually fix association and workflow instances.  Not for the faint of heart.  Reference this post.
      • MigrateUsers and workflow associations - And just if injury and insult wasn't enough...death ensued.  If you run the MigrateUser command and the workflow has an invalid user on and file.Properties["vti_modified" property, you will lose those associations.  Reference ths post.


      • We created the UPS from scratch.  Which means all things related to it were re-created, including audiences.  This meant that all audiences got new IDs.  These new IDs did not map to the audience settings across the list items and pages of the farm.  Ouch.  We had to update all those (but with a script of course).

      Notable Twitter Handles:


      Splitting a company cost a lot of money, time and resources.  I feel sorry for all the people that will have to find something to do (if their sales team doesn't close some deals and find them work) after we are completely done. We are talking 1000s of people to split eBay and PayPal.  They gotta go somewhere, the world keeps spinning and other companies have cash to burn so I guess they'll take some of this knowledge and find another project.  I know that I increased my intrinsic value from this project.  If anything, I now have a new monkier..."Chris Baba".  And some followers:

      It seems to be incredibly rare that you get asked to come back and do a project at a company almost fours years later.  Especially of the size and important of this.  Just as it was 4 years ago, this has been an incredibly exciting and amazing experience that I'll cherish as a major accomplishment to add to the many I have worked so hard for.

      Hope you learned something to support the migrations you are doing or are thinking about doing, especially those that are about splitting a company off from another!

      CJG aka "Chris Baba"

    More Posts Next page »

    This Blog


    Powered by Community Server, by Telligent Systems