Inspirado por el artículo Peter Bright sobre WinRT

microsoft-_net-framework-4

 

En mi caso todo empezó con MS-DOS 3.0 pero esa es otra historia. Yo tomé el barco de Microsoft desde 1997, como programador inicié con Visual Basic 5, tuve la oportunidad de utilizar la suite de Office 97 y experimentar lo que fue OLE 2.0, ya como programador Visual Basic 6 construí aplicaciones profesionales que hacían uso de componentes COM construidos por mí y también tuve la oportunidad de compartir con PowerBuilder funcionalidad gracias a COM. El primer libro de programación que compré fue Developing COM/ActiveX Components With Visual Basic 6 de Dan Appleman. Ya durante los cursos oficiales de Visual Basic 6 pude conocer lo que fue Distributed COM (DCOM) y Microsoft Transaction Server (MTS).  A la par HTML y lo que Microsoft llamó DHTML también eran parte de las técnicas de programación que tuve que aprender y dominar, en particular ASP y VBScript fueron para mí una gran oportunidad profesional, en la universidad pude construir aplicaciones web para procesos escolares, así que mí experiencia en ASP mejoró mucho. Después de durar un tiempo construyendo aplicaciones Windows y Web tanto para empresas como para los últimos semestres de pronto escuchamos del Beta de .NET en MSDN, un buen amigo mío lo descargó no sé de dónde y pudimos ver en primer instancia lo que significó el nuevo modelo e acceso a datos, la evolución de DAO por ADO y de ADO a ADO.NET. Recuerdo que el simple el hecho de tener DataSets y DataTables con respecto a Recordsets fue increíble. La posibilidad de trabajar Offline y usar DataSet.WriteXml() para llevarnos los datos en XML y poder trabajar fuera de línea nos dio una y refrescante alternativa. El poder serializar objetos para persistirlos también fue algo emocionante. Tratar de asimilar los tipos de datos por valor y por referencia también fue retador. El 13 de Febrero de 2002 se liberó Visual Studio .NET 2002 en San Francisco, CA donde Bill Gates presidio el lanzamiento y dejó ver la visión que ha venido empujando a Microsoft desde ya hace mucho tiempo "La información disponible a cualquier hora, en cualquier lugar y desde cualquier dispositivo". En ese lanzamiento Grady Booch tuvo una participación durante una demostración justamente hablando de modelado y de ahí conocí el mundo de UML, Design Patterns, etc. También a Tim Huckaby fue parte del Iron Developer contest con quien después tuve la oportunidad de trabajar aquí y algunos otros Speakers en especial a Ari Bixhorn y Chris de DPE de Microsoft. Increíble el lanzamiento y dejó ver todo una nueva visión. En aquel entonces los recursos de capacitación disponibles eran pocos, el .NET Show con Robert Hess y Erica Wiechers, LearVisualStudio.NET con Bob Tabor que después lo hicieron MVP, también me fascinó el concepto del programa VBTV Cheap Show de Chris and Ari donde de una manera muy cómica y relajada dieron a conocer Visual Basic .NET. Tuve la oportunidad de hacer un proyecto en ASP.NET usando Visual Studio .NET 2003 para un evento nacional de la universidad, ahí fue mi primer presentación técnica ante ejecutivos y director nacional de la institución, toda una experiencia nueva pero tan familiar a la vez. Estuve trabajando por un tiempo como programador ASP y de pronto llegó la oportunidad para ser programador .NET de una empresa de software para gobierno importante en mi ciudad. Inicie con Visual Studio .NET 2003 creando aplicaciones ASP.NET 1.1. En ese entonces surge Pattern & Practices y pude conocer el podcast de .NET Rocks de Carl Franklin. Los blogs empezaron a ser más populares. Trabaje bastante con Visual Studio .NET 2003, recibí el nombramiento MVP en el 2004, tome el riesgo y me fui a la ciudad de México a trabajar como instructor y conferencista, surgió Visual Studio 2005 y tuve la oportunidad de participar en el lanzamiento del producto dando platica de ASP.NET 2.0 y conociendo a personas con las sigo frecuentando y que también son MVPs. Lo que más me llamó la atención en aquel entonces fue el modelo proveedor de ASP.NET para soportar la extensibilidad y la implementación de mecanismos muy interesantes para fortalecer la integración. Una vez más Visual Studio 2005 y .NET Framework 2.0 introdujeron muchas mejoras para los programadores en especial el modelo proveedor y sin duda el uso de Generics como parte del modelo de programación y en el caso de Windows Forms el Clickonce Deployment, de hecho .NET Framework 2.0 fue la base de otras versiones de .NET Framework, básicamente se han ido apilando nueva funcionalidad. A mediados entre 2005 y 2008 Microsoft busca unificar los paradigmas de desarrollo y crea WCF, WF, WPF y CardSpace como parte del .NET Framework 3.0. Cabe mencionar que SharePoint 2007 fue construido sobre .NET Framework 2.0 y 3.0. Un cambio radical de nuevo en el modelo de programación y en la forma de construir soluciones conectadas, visualmente atractivas y procesos de negocio. En el 2008 se liberó Visual Studio 2008 con el .NET Framework 3.5 donde por fin LINQ pudo florecer y posicionarse como la respuesta para abstraer el lenguaje que normalmente usamos para manipular una base de datos. LINQ nos dio la posibilidad de seguir usando el lenguaje de programación que conocemos para expresar de forma unificada consultas a bases de datos, colecciones de objetos, archivos XML y cualquier otra fuente de datos para la cual existiera un proveedor, adicional fue la base de Entity Framework como el ORM de Microsoft. Sin duda .NET Data Services (la implementación RESTFull) fue otro nuevo y refrescante enfoque para facilitarnos la construcción de aplicaciones conectadas. También .NET Framework 3.5 y Visual Studio 2008 han sido críticos para la evolución de la plataforma .NET ya que se introdujo de forma muy básica la posibilidad del paralelismo y la noción de facilitarnos la escritura de programas capaces tomar ventaja de los diferentes procesadores y núcleos que el hardware tiene. Se introdujo extensiones para trabajar con patrones como MVC y MVVM para web como para cliente. Ya en la versión .NET Framework 4.0 y Visual Studio 2010 florecieron los patrones con nuevas plantillas de proyecto, pudimos tener integrado en el lenguaje una serie de clases para facilitarnos la escritora y uso de aplicaciones paralelas y asíncronas. Y sin duda Visual Studio fue re construido ofreciendo una UI basada en WPF con un bonche de mejoras para depuración, visualización de código, documentación, análisis, diagramas etc. Visual Studio 2012 también ya fue liberado y sus características a la par del sistema operativo han venido a revolucionar la forma en que construimos aplicaciones así como también el ecosistema para distribuirlas.

Todo este texto ha sido inspirado por un artículo que leí hace un par de días y que quiero recomendar ampliamente para aquel programador avanzado y principiante. Este artículo se llama "Turning to the past to power Windows’ future: An in-depth look at WinRT" y da una explicación del pasado para entender mejor el presente y sin duda el futuro. Si realmente estas interesado en el mundo Microsoft tienes que leerlo.

Originalmente publicado en msmvps.com

Copiando objetos de SharePoint entre ambientes y versiones, incluido Flujos de Trabajo del bien conocido SharePoint Designer 2010

Una de las contradictorias situaciones que los profesionales SharePoint hemos tenido que enfrentar en algún momento de nuestra carrera es justamente el cómo tolerar la frustración inversamente proporcional al nivel de emoción que nos da ver la simplicidad de creación de un flujo de trabajo de SharePoint Designer 2010. En cualquier sitio web, demostración, articulo, ejemplo y blog post en línea te encontrarás las maravillas de usar SharePoint Designer 2010 como una primer opción de personalización del comportamiento de listas y bibliotecas de usuario, lo que rara vez encuentras publicado en la web es como tomar ese flujo de trabajo personalizado, empaquetarlo e implementarlo en un sitio SharePoint distinto de donde fue creado e incluso en un ambiente alterno.

Desde la liberación de SharePoint 2010 se nos dio la opción de exportar como paquete WSP un flujo de trabajo usando justamente SharePoint Designer 2010 bajo el concepto de Reusable workflows, esta opción si nos da posibilidades de portabilidad, sin embargo, sigue enfrentando escenarios no cubiertos como cuando tenemos un flujo de trabajo que tiene que utilizar columnas de sitio que tienen dependencia a otro servicio como el gestor de metadatos, entre otros escenarios, aunque he de decir que Resusable workflows es la onda como una primer opción de portabilidad.

Bueno, para escenarios de portabilidad más complicados tenemos aplicaciones de terceros como la empresa Sharegate tiene un conjunto de productos de software que facilitan enormemente el copiado de objetos entre sitios “incluido flujos de trabajo”. Si alguna vez te has enfrentado a como replicar permisos, documentos, contenido, funcionalidad y configuración en la empresa este producto es una alternativa confiable para lograrlo. Adicional a copiar contenido entre ambientes también ofrece la misma experiencia para copiar contenido entre versiones de SharePoint, desde 2003, 2007, 2010, 2013 y Office 365 SharePoint Online.

 

Originalmente publicado en msmvps.com

Programador sorprendete con STSDev viendo como crear un paquete WSP para aprovisionar logotipos en SharePoint

Durante una implementación donde se estima la creación inicial de unas 220 colecciones de sitio nuestro flamante administrador de la granja creó unas plantillas de sitio para las diferentes necesidades de colaboración y comunicación que la plataforma SharePoint estará soportando. Lo hizo mediante SharePoint Designer 2010 exportando como WSP la plantilla. Todo bien, pero al revisar las plantillas encontré buenas y no tan buenas ideas. Me concentraré en las no tan buenas, sucede que el logotipo de esta empresa lo estaba almacenando dentro de la biblioteca de activos “Assest Library” y después referenciando en las opciones de Title, Description and Icon donde podemos poner el nombre del sitio, la descripción y la imagen, nuestro amigo incluso ya había probado que al usar la plantillas para crear un nuevo sitio la URL automáticamente se estaba actualizando y siempre apuntaba a la URL del sitio recién creado haciendo referencia al logotipo almacenado en la librería de activos.

Todo bien, pero no!. Le ayudé a crear 5 sitios más y le pedí que corriera un crawl incremental. Posteriormente al terminar de ejecutase hicimos una búsqueda como la siguiente pollolocologo.jpg ¿qué cree usted mi estimado lector que nuestra página de resultados mostró? Pues sí, un bonche de resultados haciendo referencia a la imagen almacenada en cada uno de los sitios creados y si multiplicas eso por las 220 colecciones de sitios planeadas pues nada más imagine usted los resultados de las búsquedas cuando el término de búsqueda incluya la palabra “polloloco”.

Rápidamente di la sugerencia que deberíamos de encontrar un lugar donde almacenar esta imágenes o recursos institucionales de propósito general y la respuesta de nuestro amigo fue la correcta, sugirió el 14 hive o más bien dicho la ruta SharePoint “C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14TEMPLATEIMAGES” , así que para pronto sugirió copiar manualmente los archivos en la ruta previamente mencionada lo cual en mi cabeza sonó una campana de alerta como si estuviera en un concurso de la televisión tipo “100 mexicanos dijeron” respondiendo erróneamente.

Procedí a comentar que manualmente no deberíamos de moverle a esta importante ruta de archivos, que existían mecanismos para hacer llegar los archivos a la ruta correspondiente de forma segura, en todos los servidores de la granja y además sin intervención manual. La respuesta fue construir una característica “feature” empaquetado en un WSP para el aprovisionamiento de estos archivos.

Solución? Descargué el instalador de la utilería STSDev versión 1.4 creada por colegas MVPs en SharePoint. Esta utilería te permite elegir el tipo de proyecto SharePoint que quieres crear con la finalidad de generarte un proyecto de Visual Studio con las utilerías, carpetas y archivos necesarios para generar un paquete WSP de SharePoint, lindo no? Claro que ocuparemos Visual Studio para generar el WSP y en ese sentido cualquier versión express arriba de 2008 puede servir ya que STSDev genera un proyecto de tipo Class Library capaz de funcionar incluso fuera de un servidor Windows Sever 2008 R2 con SharePoint instalado, o yeah!

Como vemos en STSDev seleccionamos las distintas plantillas de solución existentes, la versión de Visual Studio, te auto genera el archivo .snk y al dar clic en el botón Create Solution te crea una carpeta donde deposita la solución y los archivos. Después usando Visual Studio abres la solución y a partir de ahí sigues trabajando. En mi caso, use Visual Studio 2012 Express for Windows Desktop el cual tuvo que hacer un proceso de migración de mi solución recién creada.

Ya dentro de Visual Studio simplemente agregamos las imágenes o recursos que consideramos de propósito general que queremos poner en SharePoint , hay que ser cuidadosos con los archivos manifest.xml y solutionpackage.ddf asegurándonos que los nombres de nuestros archivos depositados en la carpeta RootFileTEMPLATEIMAGESPOLLOLOCOBranding sean los mismos a los que hacen referencia .

Al terminar complemente seleccionamos BUILD y RE BUILD SOLUTION del menú principal, si analizamos el Output Windows encontramos lo que realmente sucedió.

1>—— Rebuild All started: Project: POLLOLOCOBranding, Configuration: DebugBuild Any CPU ——

1>C:windowsMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.targets(1578,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly “Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL”. Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

1> POLLOLOCOBranding -> C:UsersC04125DownloadsPOLLOLOCOBrandingPOLLOLOCOBrandingbinDebugPOLLOLOCOBranding.dll

1> Refreshing Deployment Files…

1>

1> STSDEV – Simple Tools for SharePoint Developers

1> Version: 1.4.0.0

1> Refreshing Solution Package Files

1> Current Solution Name:

1> Current Solution Directory:

1> Refreshing deployment files…

1> Rebuilding DeploymentFilesmanifest.xml

1> Rebuilding DeploymentFilesSolutionPackage.ddf

1> Deleting Solution Package File…

1> Building Solution Package (Debug Version)

1> Cabinet Maker – Lossless Data Compression Tool

1>

1> Parsing directives

1> Parsing directives (DeploymentFilesSolutionPackage.ddf: 1 lines)

1> 3,355 bytes in 3 files

1> Executing directives

1> 0.00% – manifest.xml (1 of 3)

1> 0.00% – IMAGESPOLLOLOCOBrandingBinoculars32.gif (2 of 3)

1> 0.00% – IMAGESPOLLOLOCOBrandingCantine32.gif (3 of 3)

1> 100.00% – IMAGESPOLLOLOCOBrandingCantine32.gif (3 of 3)

1> 0.00% [flushing current folder]

1> 94.33% [flushing current folder]

1> 4.20% [flushing current folder]

1> 100.00% [flushing current folder]

1> Total files: 3

1> Bytes before: 3,355

1> Bytes after: 3,227

1> After/Before: 96.18% compression

1> Time: 0.03 seconds ( 0 hr 0 min 0.03 sec)

1> Throughput: 112.98 Kb/second

1> Copying WSP file to CAB

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

 

Y pues el resultado es nuestro flamante WSP el cual podemos implementar en SharePoint.

Copiamos nuestro WSP y dentro de algún servidor de la granja corremos el SharePoint 2010 Management Shell y ejecutamos el siguiente comando de powershell:

Add-SPSolution –LiteralPath d:scriptssolutionsPOLLOLOCOBranding.wsp

Ya dentro del Central Administration dentro de System Settings y despues Manage Farm Solution encontramos nuestro WSP listo para deployarse. Damos clic y seleccionamos Deploy, esto aprovisiona en todos los servidores de la grana los archivos de nuestro WSP en la ruta “C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14TEMPLATEIMAGESPOLLOLOCOBranding”.

Ahora si en nuestros sitios en vez agregamos la URL /layouts/images/pollo/pollologo.jpg

 

 

 

 

 

 

 

Originalmente publicado en msmvps.com

Validando la contraseña de las cuentas de una implementación SharePoint

Me pidieron que validara las cuentas que utilizamos para instalar SharePoint en un ambiente de producción y pues la gente de la mesa de soporte al ver que mi petición no tiene tanta urgencia “según ellos” y  conforme a sus acuerdos de niveles de servicio me informaron que en una semana me tendrían la respuesta a mi solicitud. El problema a solucionar es que no se sabía si la contraseña X era la misma que se usó en todas las cuentas de SharePoint, en total fueron 9 cuentas y dado que en una semana ni siquiera estaré aquí físicamente me vi en la necesidad de encontrar una solución alterna rápidamente.

Las cuentas a validar fueron:

POLLOLOCOSP_farm
POLLOLOCOSP_services
POLLOLOCOSP_web
POLLOLOCOSP_search
POLLOLOCOSP_sync
POLLOLOCOSP_superuser
POLLOLOCOSP_superreader
POLLOLOCOSP_crawl
POLLOLOCOSP_unattended

Estimado lector, para solucionar tu problema, ¿qué harías si en algún momento de tu vida fuiste un apasionado programador .NET y sabes que puedes hacer al respecto?, ¿Te esperarías a que la gente de mesa de soporte de acuerdo a sus prioridades te responda?, ¿serias un radical y con el poder que el conocimiento te da resolverías tú mismo tus problemas, claro sin que muera nadie?

En mi caso decidí bajar Visual Studio 2012 Express for Windows Desktop y escribir una aplicación de consola que utilizando el namespace de System.DirectoryServices pudiese consultar el active directory en cuestión y validar las credenciales que necesito validar. En tan solo 12 minutos ya tenía mi instancia de Visual Studio 2012 Express for Windows Desktop instalada, durante la descarga busqué en internet y encontré que desde la versión 3.5 del .NET Framework se incluyó una nueva funcionalidad para gestión de active directory la cual se encuentra en System.DirectoryServices.AccountManagement y pues utilizando la clase PrincipalContext pude invocar el método ValidateCredentials con el cual sabría si la cuenta X o Y era válida.

El código lo comparto aquí:

using System;
using System.Text;
using System.DirectoryServices.AccountManagement;

namespace TestAccount
{

    class Program
    {

        static void Main(string[] args)
        {

            bool isValidAccount = false;

            Console.WriteLine("Domain Name (NetBios):");
            string domainName = Console.ReadLine();

            Console.WriteLine("User account:");
            string accountName = Console.ReadLine();

            Console.WriteLine("Password:");
            string accountPassword = Console.ReadLine();

            try
            {

                if (string.IsNullOrEmpty(domainName) || string.IsNullOrEmpty(accountName) || string.IsNullOrEmpty(accountPassword))
                    throw new ArgumentNullException();

                using (PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName))
                {                    
                    isValidAccount = context.ValidateCredentials(accountName, accountPassword);
                }

                Console.WriteLine("{0}\{1} - {2}",domainName, accountName, isValidAccount.ValidNotValidString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}",ex.Message);
            }
            finally
            { 
                Console.ReadKey(); 
            }       
            
        }
    }

    public static class BooleanExtensions
    {
        public static string ValidNotValidString(this bool value)
        {
            return value ? "Valid account" : "Not Valid account, check username or password!";
        }
    }
}

 

Y la solución aquí también la puedes encontrar en el attachment, dentro esta el ejecutable compilado.

PD. Cuando el equipo de la mesa de ayuda me contacte de 5 días, que le debería de decir en respuesta?

Saludos

Originalmente publicado en msmvps.com

Instalacion, Configuracion y Optimizacion de SQL Server 2008 R2 para SharePoint

Como parte de un esfuerzo de capacitación virtual que he venido realizando aquí público el contenido de una de las sesiones ya que por alguna extraña razón no pude producir correctamente el video de la sesión pasada , creo que no se grabó bien en primer instancia, en fin, el caso es que en 55 minutos pude reducir lo que en 4 horas estuvimos compartiendo con calma ese día los asistentes y tu servidor.

Aprovechando quiero invitarte a que te suscribas a mi canal de Youtube.

Originalmente publicado en msmvps.com

Activando la licencia de un servidor Windows Server 2012 para ambiente SharePoint

Continuando con la serie de videos relacionados con la configuración de un ambiente piloto o de demostración SharePoint llego el día donde tenía que activar mi producto, el video se llama “Activando la licencia de un servidor Windows Server 2012 para ambiente SharePoint” y puedes ver el proceso de activación de un producto Microsoft usando la línea telefónica. Sucede que muchas empresas no necesariamente tienen activado en los servidores de una granja SharePoint el internet por diferentes razones que se mencionan justamente en este video.

Sé que esta operación no necesariamente resulta valiosa pero sí creo conveniente compartir cada paso del proceso.

Saludos

 

 

Originalmente publicado en msmvps.com

Configurando un Servicio de Certificados en Windows Server 2012 para ambiente SharePoint

Continuando con la configuración del ambiente piloto de demostración que estoy construyendo, un nuevo video se ha publicado bajo el nombre de “Configurando un Servicio de Certificados en Windows Sever 2012 para ambiente SharePoint“. Este video habla de cómo configurar un servicio de certificados “Certificate Authority” en Windows Server 2012 para soportar firma electrónica dentro de la empresa mediante Office y claro SharePoint. La descripción del video dice: “En esta demostración vemos como configurar el servicio de certificados digitales de Windows Server 2012 para permitirnos generar certificados para nuestros servidores WFE de SharePoint que más adelante estaremos configurando. También se muestra como configurar el servicio y configurar la aplicación web de enrollment y generación de certificados”. Espero que sea de utilidad y brinde un norte en el tema.

 

Así mismo dejo unas referencias un tanto pasadas (que siguen siendo vigentes) sobre cómo utilizar los certificados en un entorno SharePoint:

 

Originalmente publicado en msmvps.com

Configurando un Controlador de Dominio en Windows Server 2012 para ambiente SharePoint

Como parte de un ambiente piloto y de demostración que estoy creando he decidido grabar cada paso del proceso y en ese sentido el fin de semana pasado subí a mi canal de Youtube los primeros videos sobre el tema. Iniciamos con un video llamado “Configurando un Controlador de Dominio en Windows Server 2012 para ambiente SharePoint” donde se pueden ver los pasos necesarios para aprovisionar este tipo de servicio sobre un servidor Windows Server 2012. Realmente muy sencillo y sin tanta planeación pero lo suficientemente robusto como para un entorno de pruebas o demostración.

 

Espero que esta serie les sea de utilidad en algo. Muchas Gracias.

 

Originalmente publicado en msmvps.com

Ejecutando PowerShell 2.0 para comandos SharePoint 2010

Te ha pasado que de pronto en tu servidor SharePoint al cargar el SharePoint 2010 Management Shell te sale un error como este Microsoft SharePoint is not supported with version 4.0.30319.296 of the Microsoft .Net Runtime. Aun no estoy totalmente seguro de la causa pero algunos blogs dicen que hay que desinstalar los KB como KB2506143 y KB2506146, al parecer las actualizaciones de Microsoft Management Framework 3.0 son las que están causando este problema. También he de mencionar que Microsoft Management Framework 3.0 es un componente esencial para poder administrar SharePoint Online de Office 365 usando PowerShell así que cuidado como lo mencioné aquí.

Entonces, debido a que reiniciar el servidor después de desinstalar una actualización es algo requerido para resolver este problema, no es una opción viable en mi muy particular escenario. Además remover el KB solo causara que de nuevo se vuelva a descargar de forma automática.

Así que me di a la tarea de buscar como ejecutar PowerShell usando la versión 2.0 la cual es la soportada por SharePoint 2010 y el resultado fue el siguiente script, cargamos powershell.exe como administrador local y ejecutamos:

 cd
cd windows
cd system32
cd windowspowershell
cd v1.0
powershell.exe -v 2
Add-PSSnapin Microsoft.SharePoint.PowerShell
 

Y listo! Ahora puedo ejecutar mis comandos de SharePoint. Ahora, en mí casi cuento con ciertas tareas del Windows Task Scheduler que ejecutan comandos PowerShell y también tuve que editarlos para usar la versión soportada como se muestra a continuación:

 

 

Originalmente publicado en msmvps.com

.NET Rocks SharePoint Episodes

 

Enjoy!

Originalmente publicado en msmvps.com