sábado, 30 de enero de 2016

nunca es demasiado tarde para empezar


nunca es demasiado tarde para empezar


viernes, 8 de enero de 2016

2014 Projects

Client/Company : Avianca/Avanade
  Project                 : Migracion, SharePoint, SQL, MVC
  Project Duration : June  2014 -  Present  
  Assigned Role    : Application Lead

Liderando un equipo 5 personas con alta exposición al cliente y frecuentes viajes, desarrollando tareas de líder técnico, PM, generación de estimaciones y propuestas, ventas y consultoría. primeramente comenzamos con un fix and Tuning SharePoint 2007 para dos portales internos, split de base de datos SharePoint 2007 para cumplir con recomendaciones del fabricantes, desarrollo custom para el copiado de Workflows y Migración de SharePoint 2007 a SharePoint 2010 en Azure. Migración de SQL 2000, 2005, 2008 a 2012. ASP.net y ASP MVC para desarrollar nuevas funcionalidades en el portal www.avianca.com. 


  Client/Company : Dyson / Avanade
  Project                 : eShop/Sitecore MVP
  Project Duration : February  2014 - May 2014  
  Assigned Role    : Application Lead 


Leadering this project, taking decision about technical implantations and manage 3 development, 1 tester and 2 graphic design resource. The project is an application development in SiteCore using asp.net implementing MVP and Interfaces. The application is www.dyson.com, acting as the primary point of contact. 

miércoles, 12 de marzo de 2014

2013 Projects




 Client/Company : Avanade
  Project                 : Latam Demand for RRHH
  Project Duration : July  2013 - February 2014  
  Assigned Role    : Technical Architect
Project & Role Description
Developing one InfoPath forms to load request for new resources for Brazil and developing a SharePoint site with other form for Latam. We are using following technologies: SharePoint 2010, Web Services e InfoPath 2010. Leathering one resources.

Supervisor
Natalia Sanchez
Client/Company : Related Companies, Inc.
  Project                 : Avanade/Related
  Project Duration : August  2013 - December 2013  
  Assigned Role    : Application Lead
Project & Role Description
Leathering this project, taking decision about technical implantations and manage 4 development, 1 tester and 3 graphic design resource. The project is a application development in asp.Net MVC 4 with Responsive design, jQuery, KO, google api for localization and Foundation. The application is for rentals sales.




Client/Company : Avanade
  Project                 : GBS- HVC Project Tool
  Project Duration : July  2013 - September 2013  
  Assigned Role    : Technical Architect
Project & Role Description
Developing a web application to import data from excel and generate different reports. We are using following technologies: ASP.NET 4.5, NPOI, EF, SQL 2008, IIS 7, Html, jquery, javascript.
Leathering two resources, one developer and one graphical design resource.
Client/Company : Avanade
  Project                 : Aetna
  Project Duration : February  2013 - June 2013  
  Assigned Role    : Application Technical Architect
Project & Role Description
Leathering technically this project, taking decision about technical implantations and manage 7 development resource. The project is a application development in MVC 4 with jQuery, Ajax, Entity Framework, Workflows and notification. The application is one shopping cart to manage software request into the company.



jueves, 20 de junio de 2013

Principles

Interface Segregation Principle (ISP)
Many client specific interfaces are
better than one general purpose
interface.
Liskov Substitution Principle (LSP)
Functions that use references to
base class must be able to use
objects of derived classes without
knowing it.
Open Close Principle (OCP)
A software entity (classes,
modules, functions) should be
open for extensions, but should
be closed for modifications.
Single Responsibility Principle (SRP)
Ther should never be more then
one reason for a class to change.

domingo, 3 de marzo de 2013

2012 Projects


 

Client/Company : AVANADE
Project :
eForms-Philips Morris International
Project Duration :
August  2012 -  Jan. 2013
Standard Role :
Technical Architect
Project & Role Description :
Leadering technically this project, taking decision about technical implantations and manage five development resource and 2 test resources. The project is a application migration form SharePoint 2007 to SharePoint 2010 with custom Activities, custom Workflows and custom forms.
Client/Company : AVANADE
Project :
NOVO NORDISK eLCMS
Project Duration : February  2012 - July 2012  
Standard Role :
Technical Architect
Project & Role Description :
Leadering technically this project, taking decision about technical implantations and manage two resource.
SharePoint 2010 with custom Workflows in Visual Studio 2010 and custom forms with InfoPath 2010.
The overall objective of the Product Portfolio Optimization Project is to ensure a continuously streamlined product portfolio characterized by low complexity, strategic alignment and reduced costs.

Estás en el 10% de perfiles de LinkedIn más vistos en 2012

domingo, 24 de febrero de 2013

Por: Lucas E. Luna

Introducción

Estamos trabajando en AVANADE participando de un proyecto de desarrollo para una compañía farmacéutica. Estamos realizando un sitio web basado en SharePoint 2010 que utilizaran los empleados para gestionar el ciclos de vida de los productos, mediante unos formularios InfoPath que tendrán proceso de aprobación o rechazo que determinaran la ejecución del Workflow.

Necesidad
                Necesitamos que los Workflows se detengan hasta que haya un nuevo cambio determinado por el usuario. El problema fue no tener en cuenta el CorreletionToken

Solución
                Agregar un control de InitializeWorkflow y Sequence para crear un nuevo Token.

Para explicar crearemos un nuevo proyecto y armaremos un Workflow con algunos controles. El Workflow debería detenerse antes OnWorkflowItemChanged esperando seguir cuando haya un cambio en el ítem.

Todo Workflow empieza con OnWorkflowActivated y tiene asociado un Correlation Token.
·         Un Correletion Token se puede considerar como un identificador único, que serviría para que el flujo se comunique. Este toquen se le asocia a un control.
Este Correlation Token se genere en el Designer.cs del Workflow, como todo control que se agrega.

Y algunos controles tiene un Correlation Token asociado, como es el onWorkflowsActivated.

NOTA: Los componentes de Designer.cs se general automáticamente al agregar controles, mover, eliminar o cambiando propiedades. Es recomendante tratar de no mover controles del Worflow porque quedan “residuos” en ese archivo que puede dar un mal funcionamiento. Lo ideal es que si se quiere mover un control es eliminarlo y volverlo a agregar desde la Toolbox.
Diseñaremos un Workflow básico que se deploya en una List de SharePoint, en donde este se debería detenerse en cada control OnWorkflowItemChange (cada vez que el Ítem cambie el valor en algún campo) sin usar el control InitializeWorkflow para generar un Token nuevo.

Al agregar un Ítem el Workflow se activa, muestra un mensaje “Primero” en el Workflow History y queda detenido hasta que un cambio se produzca.


Hasta ahora el Workflow funciona como lo diseñamos. Cuando vamos a modificar algún campo del Workflow, ese continuara su ejecución. Deteniéndose en el próximo control OnWorkflowItemChange.


Al observar el ítem el estado del Workflow aparece Completed, y si vemos el History podemos notar por el historial que no se debuto en el control OnWorkflowItemChange y el Workflow finalizo.
Esto pasa porque al tener el mismo token el evento ejecuta todos los eventos ya que no tienen forma de diferenciar a que actividad corresponde.
La solución es generar un nuevo Token cada vez que se va a utilizar algún control como ese. Y para diseñarlo debemos usar el control InitializeWorkflow, que se encuentra en la Toolbox, también podemos usar el control Sequence, que se usa como contenedor.


Para generar un nuevo Token, primero agregamos el control Sequence. Y ahí adentro vamos a poner el InitializeWorkflow.

Y en las propiedades del InitializeWorkflow podemos genererar el nuevo Token, asociado a nuestra Sequence. En CorrelationToken ingresamos un nombre, “Token1”, y en OwnerActivityName la Sequence, en este caso el nombre del control, “sequenceActivity1”.

Y luego asociamos a nuestro control OnWorkflowItemChange el Token que creamos. También a todos los controles que estén en esta Sequence asociarle el Token creado, si lo requiere.

Así nuestro flujo no se finalizara sin esperar algún control.


Este es un pequeño ejemplo de como hicimos uso de este control teniendo un perfecto funcionamiento del Workflow.

Si dentro del Workflow tenemos código que modifican el ítem, es posible que disparen otros eventos y entre en un bucle no deseado. Para eso lo ideal es congelar los eventos y hacer las modificaciones al ítem y luego activar los eventos con esta Clase.
Creamos una instancia a la clase y utilizamos el método DisableHandleEventFiring() para desactivarlo y el método EnableHandleEventFiring() para volver a activar los eventos.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace SharePoint.Core
{
        public class HandleEventFiring : SPItemEventReceiver
        {
            public void DisableHandleEventFiring()
            {
                //obsolete  
                //this.DisableEventFiring();  
                this.EventFiringEnabled = false;
            }
            public void EnableHandleEventFiring()
            {
                //obsotete  
                //this.EnableEventFiring();  
                this.EventFiringEnabled = true;
            }
        } 
}
 Hola Gaston,

El equipo de Microsoft Argentina y Uruguay reconoce una vez más tu constante esfuerzo por participar activamente de nuestros programas de entrenamiento y estar en contacto con los avances de tecnologías Microsoft desde hace ya más de un año.

Como aval de este reconocimiento te acercamos tu diploma [Microsoft Active Professional 2013]* (MAP) con tu número de membresía. Tu constante compromiso por mantenerte actualizado y formar parte del top 5% de una de las comunidades técnicas más importantes a nivel mundial, le da valor a nuestro trabajo diario. Es un orgullo tenerte entre nosotros.

El programa cumple 5 años y vamos a celebrarlo con importantes anuncios, sumate al grupo exclusivo en LInkedIn para MAP y accedé a las novedades en tecnología, interacción con colegas, difusión de tu actividad , un contacto directo con nosotros y la comunidad y enterate lo que se viene para festejar estos 5 años!

Felicitaciones es un orgullo trabajar junto a vos.
 
 
 
        
 
 
 
 *Este link es personal e intransferible, al acceder a la herramienta podrás ver cómo compartir el diploma. 
 

martes, 21 de agosto de 2012

ASP.NET - Encriptando y Desencriptando el web.Config


ASP.NET - Encriptando y Desencriptando el web.Config
con Sebastian Zangaro
Aumentar la seguridad del archivo web.Config cifrando secciones del mismo utilizando el proveedor de configuración protegida RSA y la herramienta Aspnet_regiis, y así dificultar el acceso a la información almacenada en el mismo.
Procedimiento
Una vez que tenemos identificada la sección o secciones que vamos a cifrar, y que tenemos el proveedor de configuración, podemos proceder con el primer paso. Es recomendable encriptar la sección de connection string o cualquiera que contenga datos sensibles como passwords.
Recomendaciones
Antes de realizar alguna operación, y periódicamente es recomendable realizar un backup del archivo encriptado.

Como obtener el ID del Site:

                Antes de cualquier operación es recomendable obtener el ID del Site al que le queremos cifrar el archivo web.config, machine.config, etc. Este ID se puede obtener de varias maneras como por ejemplo desde el archivo log.
En lo personal el método más fácil y rápido es el siguiente:

a-Abrir el IIS Manager:

Puede encontrarse dentro de “Administrative Tools”

b-Abrir la Configuración Avanzada:

Expandir “Sites”, ubicar el Site del cual se va a obtener el ID, en este caso “Newsletter – 1337”, click derecho, buscar la opción dentro de “Manage Web Site” y hacer click en “Advanced Settings…”.

Copiar ID:

Dentro de “(General)”, se podrá observar el ID.

Encriptar archivo web.config:

Ejecutar Command Prompt:

Ejecutamos con privilegios elevados (Como administrador) el Command Prompt de Visual Studio. Si no aparece dicha opción, manteniendo apretada la tecla “Shift”, hay que darle clic derecho al Command Prompt”.

Escribir la siguiente línea de comando:

aspnet_regiis -pe "appSettings" -app "/" -site "SITE_ID" -prov "RsaProtectedConfigurationProvider"
NOTA: Remplazar SITE_ID por el ID obtenido en el punto 1.3.
Explicación sobre los parámetros:
·         -pe/-pd es el comando para encriptar o desencriptar respectivamente.
·         Lo que le sigue a la acción que se va a hacer es la sección, en este caso es “appSettings”. Vale aclarar que es otros casos tal ves es necesario ingresar la ruta completa, como por ejemplo “system.web/pages”.
·         El parámetro -app es para identificar la Aplicación de la cual se va a encriptar el web.Config. Lo siguiente a este parámetro debe ser una barra seguida del nombre de la aplicación.
·         El parámetro -site es para decirle a que Site corresponde. Hay que ponerle el id, que se puede obtener desde distintas maneras como por ejemplo desde el log. Para más información click aquí.
·         El parámetro -prov corresponde al Provider o proveedor de configuración utilizado para cifrar. En el caso de desencriptar no hace falta especificarlo. Este provider se puede cambiar, o se puede crear uno custom.

Excepciones en cuanto a secciones:

Para las secciones a encriptar existen algunas excepciones como por ejemplo:
·         <processModel>
·         <runtime>
·         <mscorlib>
·         <startup>
·         <system.runtime.remoting>
·         <configProtectedData>
·         <satelliteassemblies>
·         <cryptographySettings>
·         <cryptoNameMapping>
·         <cryptoClasses>
Para encriptar estas secciones hay que usar la herramienta aspnet_setreg.exe (Microsoft Knowledge Base articulo 329290).

Que hacer con una solución local:

Los pasos son muy parecidos a los especificados en el punto 2, con la diferencia que en lugar de utilizar -pe/-pd, los comandos a utilizar deben ser -pef/-pdf respectivamente.

¿Pero entonces hay que modificar la programación para adaptarla a este cambio?

La respuesta es no, ASP.Net internamente se encarga de desencriptar automáticamente el contenido del web.config. Se puede realizar una prueba con la siguiente línea:
Response.Write(ConfigurationManager.ConnectionStrings["cn1"].ConnectionString);

Errores generales con los que me encontré:

·         RSA key container could not be opened.
Esto ocurre cuando el usuario no tiene los permisos necesarios para acceder al key container. Para solucionar este error, hay que ejecutar alguna de las siguientes instrucciones:
o   aspnet_regiis -pc "NetFrameworkConfigurationKey" -exp
o   aspnet_regiis -pa "NetFrameworkConfigurationKey" "ASPNET"
o   aspnet_regiis -pa "NetFrameworkConfigurationKey" "NETWORK SERVICE"
o   aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
Donde “NetFrameworkConfigurationKey” es la RSA key que se puede obtener en el machine.config, ubicado como por ejemplo en la ruta “%WinDir%\Microsoft.Net\Framework\v2.0\Config”, bajo la sección configProtectedData; y el ultimo parámetro es la cuenta donde se está ejecutando el servicio asp.net, es decir la cuenta a la cual se le desea asignarle permisos.
Cabe aclarar que dependiendo el caso puede ser necesario especificar el domain.

Para obtener la identidad bajo la cual se ejecuta la aplicación, se puede utilizar la siguiente línea:
Response.Write(WindowsIdentity.GetCurrent().Name);

Referencias