sábado, 10 de septiembre de 2016

Nueva caracteristica en SharePoint 2016 MinRole

El equipo de SharePoint de Microsoft nos ha entregado una funcionalidad que pienso va hacer la diferencia en el rendimiento de SharePoint aunque hay que tomar en cuenta algunos otros aspectos como el licenciamiento ya que requeriremos para optimizar y aprovechar esta nueva  funcionalidad de SharePoint 2016 por lo menos 5 servidores.


MinRole es la respuesta de Microsoft para asegurar el mejor rendimiento posible según el Role que cada servidor pueda ejecutar.

Los Roles MinRole disponibles en SharePoint 2016 son:

1) Front End  - Servicios y Aplicaciones de servicios que se encargan de las solicitudes de los usuarios (optimizado para minimizar la latencia)
2) Application Server - Servicios y Aplicaciones de servicios que se encargas de las solicitudes hacia el back-end o trabajos de lado del servidor (optimizado para alto rendimiento)
3) Distriubute Cache - Servicios y Aplicaciones de servicios  relacionados al Distribute Cache
4) Search Server - Servicios y Aplicaciones de servicios  relacionados con el Search

Para cualquier otro Role o servicio y Aplicación de Servicio que no encaje en los MinRole se puede utilizar el Rol Custom o Legacy Role pero no estará garantizada su optimización como MinRole.

No me malinterprete esto no quiere decir que necesitemos como mínimo 5 o 6 Servidores ya que deberíamos incluir un servidor de base de datos Sql Server y un custom Role para el resto de servicios que no se ejecutan en los Roles incluidos en MinRole.  Sino que esta sería la configuración más optima garantizada por Microsoft 6 servidores para la granja.

Pero podemos iniciar con por lo menos:

2 servidores para ambientes de desarrollo y demostración:

1 Servidor Custom Role
1 Servidor de base de datos.

3 Servidores para ambientes de producción mínimo recomendado optimizando las solicitudes de los usuarios:

1 Min Role Front End
1 Custom Role para el resto de servicios
1 Servidor de base de datos

4 Servidores para optimizar las solicitudes del usuario y los trabajos del servidor:

1 Min Role Front End
1 Min Role Application Server
1 Custom Role para el resto de servicios
1 Servidor de base de datos

5 Servidores para mejorar el rendimiento de la granja

1 Min Role Front End
1 Min Role Application Server
1 Min Role para Distribute Cache
1 Custom Role para el resto de servicios
1 Servidor de base de datos

Las áreas done Distribute Cache mejora son:
  1. Claims-based authentication
  2. Newsfeeds, micro blogging and conversations
  3. OneNote client access
  4. Security trimming
  5. Page load performance
Y por último podriamos optimizar la búsqueda y toda la granja implementando cada Role de MinRole.

1 Min Role Front End
1 Min Role Application Server
1 Min Role para Distribute Cache
1 Min Role para Search
1 Custom Role para el resto de servicios
1 Servidor de base de datos

Algunas notas importantes que debes saber en SharePoint 2016 son las siguientes:

1) No hay edición Foundation o gratuita en SharePoint 2016
2) SharePoint 2016 no se puede instalar sobre SQL Server Expresss
3) No esta diseñado para instalarse en un solo servidor aunque sea para desarrollo


Al configurar el MinRole a nivel de servicios del servidor luce así, lo cual no permite configurar otros servicio garantizando que se respete la configuración optima para este Role.


En cualquier momento puede modificarse el Role de cada servidor a través de la opción Role Conversion


Referencia: https://technet.microsoft.com/en-us/library/mt667910(v=office.16).aspx

Bueno así que a planificar mejor las granjas de SharePoint 2016 y tomar en cuenta que si deseamos garantizar en optimo rendimiento de la granja tendrá que invertirse en mas servidores para aprovechar la opción MinRole que Microsoft nos entrega en esta nueva versión de SharePoint Server 2016.

Hasta la próxima SharePoint4Fun!,



Juan Manuel Herrera Ocheita

lunes, 29 de agosto de 2016

Hoy tuve un sueño tecnologico

Soñe que me habia reunido con Bill Gates, Steve Jobs y el hijo de Seve Jobs que se parecia a Ashton Cutcher. Yo se que Jobs solo tuvo una hija unica y q Ashton que hizo el papale de Jobs fue que lo asocie en mi sueño.

Entonces lo que paso es q Bill G le estaba enseñando un codigo al hijo de Jobs que habian hecho un pacto de caballeros de no revelar el codigo que Gates habia hecho a Jobs para la Mac hasta q el muriera. Y entonces como legado de Jobs era q le iba a revelar su secreto a su hijo porque iba a lanzar a fin de este año un producto inovador y esa pieza de codigo era clave para el producto.

El producto

El producto se trataba de un dispositivo Usb como los modems usb de ese tamaño mas o menos negro con una franja que atravesaba a lo largo perpe dicularmente a un lado led color amarillo y que la gracia era q se giraba y que al girar se encendia la computadora que desplegaba un mapa de la ubicacion actual o sea que tenia gps y la persona q me lo demostraba era una americana algo gordita rubia y simpatica que me daba la demostracion y nos ubico en africa. Entonces la gracia de todo era que giraba y que era una computadora q corria a traves de otra computadora o cualquier dispositivo que tuviera un display una television un monitor un hub de usb que estuviera contectado a perifericos de entrada y salida.



Actualmente hay dispositivos pequeños como Raspberry Pihttps://www.raspberrypi.org/ o Arduino. Pero estos son cuadrados y la imagen q tube era largo del ancho se una palma de la mano yel grueso de 2 dedos gordos. Asi q no se parece a ningun producto del mercado actual. y creo q tendria q cambiar el diseño y ajustarlo a ese tamaño creo q es posible. El tema es tenia su propia memoria de almacenamiento xq corria una virtual alli cpu, gps, ram, suficientemente poderosa para realizar el trabajo de una portatil. Al ver los telefonos inteligentes veo q no estamos muy lejos de q eso sea realidad. En mi sueño a fin de año sucedia




Algo similar a la imagen de arriba.

Dream4Fun

Juan Manuel Herrera

martes, 16 de agosto de 2016

Documentación sobre las base de datos de SharePoint y Ambites de Recuperación en Caso de desastres en Azure

Me ha preguntado donde pueden encontrar información de lo que hace cada base de datos de SharePoint y para que sirven.   Bueno buscando otros temas encontré el siguiente enlace de Microsoft que responderá esa solicitud.


En la actualidad SharePoint esta migrándose ambientes virtuales en la nube con Azure por lo que conocer sobre temas de DR o Recuperación de Datos y Alta Disponibilidad es un tema importante.


Pensar estos ambientes en casa es extremadamente costosos, es una buena posibilidad tener un ambiente por lo menos de DR listo en la nube en caso de desastres por lo que los invito a que investiguen los costos de una granja para DR que puedes mantener apagada y solo la enciendes para pruebas de aplicación de Parches o pruebas de desastres, no es tan difícil ni tan costos como si pensáramos en invertir en fierros costosos solo para tener un ambiente  en caso de desastre.

Cuatro pasos para crear el ambiente de Recuperación de Datos de una granja de SharePoint son:

2) Establece una VPN Sitio a Sitio con tu red local desde Azure
3) Crea las VMs en Azure que desees replicar en Azure con la configuración similar a tu ambiente local
4) Establece un RPO y un RTO y así define el procedimiento para recuperación de tu granja de SharePoint en Azure

Bueno esto es todo por el momento continuaré escribiendo sobre este tema más adelante.

SharePoint4Fun!,

Juan Manuel Herrera

miércoles, 20 de julio de 2016

Error Attempted to perform an unauthorized operation al intentar obtener el nombre de un grupo de SharePoint 2010

Este error da porque se esta ejecutando una operación no autorizada y a pesar que utilizamos el método RunWithElevatedPrivileges de la clase SPSecurity ya que  invocamos la propiedad RoleAssigments de la biblioteca.  Este código esta corriendo sobre un EventReceiver a través de la clase SPItemEventReceiver que tiene sus peculiaridades a comparación del desarrollo de elementos Web en SharePoint.
 
 
 
Veamos el siguiente código:
 
 
 
 
Fue reemplazado por el siguiente código:
 
 

 
Aunque el código no reemplaza totalmente la lógica anterior si obtiene de forma directa el nombre del grupo que en el caso de la solución aplicaba efectivamente lo que se deseaba.
 
Lo que se hizo en el código es obtener los grupos del usuario actual a los cuales pertenece y que tiene la palabra lector. Que era fundamentalmente lo que se requería en la aplicación.
 
Así que ojo no den por sentado cuando utilizan SPSecurity.RunWithPriviliges(); que todo se ejecuta con el usuario administrador dentro del código primordialmente en un entorno como El EventReceiver.
 
 Así que Code4Fun!,
 
Juan Manuel Herrera Ocheita
 

jueves, 30 de junio de 2016

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Studio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita 

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Stuidio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita 

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Stuidio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita