miércoles, 19 de noviembre de 2014

Los 8 principios básicos de SOA

Según Thomas Erl, existe 8 principios básicos para la implementación de la arquitectura SOA. Estos son los siguientes.

  1. Carácter contractual de los servicios
  2. Bajo acoplamiento, 
  3. Abstracción de la implementación, 
  4. Reusabilidad, 
  5. Autonomía, 
  6. Carencia de estado (statelessness), 
  7. Capacidad de ser descubiertos 
  8. "Orquestabilidad” y susceptibilidad a composición. 
Los principios que influyen directamente en el Retorno de Inversión son: la Reusabilidad, la 
Capacidad de ser descubiertos y la Orquestabilidad.



miércoles, 24 de septiembre de 2014

Búsqueda de palabras dentro de todos los procedimientos almacenados

Les dejo una consulta muy útil para buscar palabras dentro de todos los procedimientos de la base de datos SQL. Esto es útil si requieren buscar todas las consultas que usan el comando DELETE y evitarías abrir una a una cada procedimiento para ver cual de todas usa este comando.

/*
Buscar en todos los procedimientos almacenados y 
listar el nombre del procedimiento y la fila donde se encuentra la palabra de la búsqueda
*/

SET NOCOUNT ON
 
DECLARE @ColumnName AS VARCHAR(255)
SET @ColumnName = 'DELETE'
 
IF OBJECT_ID('tempdb..#tmpOperacion') IS NOT NULL
        DROP TABLE #tmpOperacion
 
DECLARE @idSP AS INT

DECLARE @tmpTABLE AS TABLE(
  NombreSP NVARCHAR(255),
  TextoSP NVARCHAR(MAX))
 
SELECT @idSP = MIN(OBJECT_ID)
FROM sys.procedures
 
WHILE @idSP IS NOT NULL
BEGIN
    DECLARE @nameSP AS VARCHAR(255)
 
    SELECT TOP 1 @nameSP = RTRIM(LTRIM(name))
    FROM sys.procedures
    WHERE OBJECT_ID = @idSP
 
    IF OBJECT_ID('tempdb..#tmpText') IS NOT NULL
        DROP TABLE #tmpText
 
    CREATE TABLE #tmpText (idRow int identity(1,1), textRow NVARCHAR(MAX))
 
    INSERT INTO #tmpText(textRow) EXEC sp_helptext @nameSP
 
    DECLARE @idRow AS INT
    
    SELECT @idRow = MIN(idRow) FROM #tmpText
 
    WHILE @idRow IS NOT NULL
    BEGIN
 
        DECLARE @textRow AS NVARCHAR(MAX)
        
        BEGIN TRY
        
   SELECT TOP 1 @textRow = UPPER(textRow) FROM #tmpText WHERE idRow = @idRow
   
      IF (SELECT CHARINDEX(@ColumnName, @textRow)) > 0
   BEGIN
    INSERT INTO @tmpTABLE (NombreSP, TextoSP)
    VALUES (@nameSP, @textRow)
    BREAK
   END
  END TRY
  BEGIN CATCH
   --NO REGISTRA EL ERROR
  END CATCH

        SELECT @idRow = MIN(idRow)
        FROM #tmpText
        WHERE idRow > @idRow
    END
 
    IF OBJECT_ID('tempdb..#tmpText') IS NOT NULL
        DROP TABLE #tmpText
 
    SELECT @idSP = MIN(OBJECT_ID)
    FROM sys.procedures 
    WHERE OBJECT_ID > @idSP
    
END

SELECT NombreSP, TextoSP FROM @tmpTABLE ORDER BY NombreSP
 
SET NOCOUNT OFF

Espero que les sirva de ayuda y que le facilite la vida.

jueves, 31 de julio de 2014

Tipos Anónimos en .NET

Estuve probando lo útil que puede ser declarar tipos anónimos en .NET, ya que en otros lenguajes con javascript esto ya existe. Esto hace mas fluido el desarrollo y mas divertido, sin tener que preocuparnos en la declaración de la variable o subir y bajar el cursor de tu pantalla para ir a la parte declarativa (normalmente arriba del código) y bajar a la parte que se usará la variable.

A continuación, dejo 2 pequeñas pruebas para crear un objeto y un arreglo, muy útiles si es que se desea almacenar valores, definir alguna entidad o usar de repositorio temporal en el desarrollo.

Lo primero es una prueba donde declararemos y asignaremos valores al objeto anónimo.

var anonObject = new { name = "apple", diam = 4 };

Como se puede ver, se declaro un objeto con 2 atributos y en ese instante se le asigno valores. Con esto se obtuvo un objeto del tipo anónimo.


Ahora se declararemos un arreglo del tipo anónimo que contenga objetos de tipo anónimos.

var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};

Como se verá, se declaro un arreglo que contendrá 2 objetos anónimos iguales que el ejemplo anterior.


En conclusión, el uso de tipos anónimos mejora la fluidez del desarrollo y es una prueba que el lenguaje C#, como la plataforma .NET, sigue en constante evolución en beneficio de los desarrolladores, ya que desde mi punto de vista, facilita el desarrollo y aprendizaje de este lenguaje.



jueves, 5 de junio de 2014

Síntesis Perfecta


Caso 1: Urgente e Importante, se debe actuar 
Caso 2: Urgente y No Importante, se debe delegar
Caso 3: No Urgente e Importante, se debe planificar
Caso 4: No Urgente y No Importante, se debe posponer


martes, 27 de mayo de 2014

Instalar y Conectar el Visual Studio 2005 al Team Foundation Server 2010

Para integrar un proyecto desarrollado en VS 2005 con TFS 2010 se deberá tener en cuenta los siguientes pasos.

En primer lugar, se debe proceder a la instalación de las herramientas del VS 2005 y TFS 2010

Paso 1: Verificar la versión del VS ya que el detalle de este tutorial es usar VS 2005


Paso 2: Descargar los siguientes componentes antes de proceder con sus instalaciones, tener en cuenta que la versión de VS 2005 que uso esta en ingles y los componentes a descargar serán en ingles.


Paso 3: Instalar el "Visual Studio Team System 2005 Team Explorer"


Paso 4: Instalar el "Visual Studio 2005 Service Pack 1"


Paso 5: Instalar el "Visual Studio Team System 2005 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010 (Installer)"


En segundo lugar, procederemos a configurar el VS 2005 para que se pueda conectar al TFS 2010

Paso 1: Dar clic sobre la opción del menu "Tools" y seleccionar la opción "Connect to Team Foundation Server...".


Paso 2: Dar clic al boton "Servers...".


Paso 3: Dar clic al boton "Add..." .


Paso 4: Ingresar colocando la URL donde se aloja el proyecto. Ejm: https://tfsXX.discountasp.net:443/tfs/YourCollectionName


Paso 5: Dar clic al boton "Close".

Paso 6: Seleccionar el proyecto que desea acceder y dar clic el boton "OK"


viernes, 4 de abril de 2014

MONGOLAB con API REST - Parte 4

Ahora nos toca ver como eliminar un objeto de nuestra colección como parte de la continuación del paso 3. Donde ya se vio como actualizar un objecto en MongoLab usando REST API.

Para empezar, tenemos que obtener el "id" del objeto que se desea eliminar y con este "id" se procede a armar una URL compuesta, en donde se marca en color celeste el "id" tal como se ve a continuación. 


Con POSTMAN se ejecuta la URL con método DELETE para que elimine el registro que tenga dicho "id".


A continuación, se verifica que no exista el objeto en la colección "cambio". Para ello, accedemos a la pantalla principal de nuestra cuenta en MongoLab. Es allí que se puede constatar que ya no se tiene ningún objeto en la colección.


Si deseamos hacer la misma verificación pero usando REST API, se tendrá que usar la misma URL utilizada para eliminar.


Pero esta ves la URL usará el método GET como se ve a continuación.


 El resultado de esta consulta devolverá que no tiene ningún objecto en dicha colección, tal como se mostró desde la web MongoLab.


Con este procedimiento se puede eliminar objetos de una colección mediante la utilización del "id", ya que este es único y evita eliminar otros objetos que tengan valores similares.



MONGOLAB con API REST - Parte 3

Seguimos con tercera parte de las pruebas usando el API REST de MongoLab, antes de empezar debemos tener en cuenta todo lo explicado en la parte 2.

Ahora se procederá a actualizar los valores del objeto anteriormente creado y agregar un nuevo atributo. Para ello, es importante tener el "id" que se mostró anteriormente.

En primer lugar, con este "id" se procederá a construir una nueva URL, en donde se marca de color celeste el "id" que deberá estar dentro de esta URL.


Con la URL se ingresará en el POSTMAN usando el método GET para poder consultar los datos de dicho objeto.


Como resultado nos muestra los datos que actualmente tiene el objeto.


En segundo lugar, procederemos a agregarle un nuevo atributo al objeto, es decir, queremos que aparte se pueda almacenar una fecha. Para ello, utilizamos la misma URL compuesta del ejemplo anterior pero con la diferencia que el método será PUT y se agregará un mensaje en formato JSON que indica que se desea agregar dicho atributo y valor al objeto actual.


El resultado es el mismo objeto pero con un nuevo atributo de fecha.


Por último, procederemos ha actualizar el valor del atributo fecha para el mismo objeto. Para ello, utilizaremos el mismo URL compuesta con el método PUT y el mensaje JSON pero con un valor diferente.


El resultado es el mismo objeto pero con un nuevo valor en el atributo de fecha.

Con esto se puede demostrar lo fácil que es modificar un objeto mediante el API REST de MongoLab.

Seguimos con la parte 4

MONGOLAB con API REST - Parte 2

Seguimos con segunda parte de las pruebas usando el API REST de MongoLab, antes de empezar debemos instalar un complemento POSTMAN para en navegador Chrome y tener una cuenta y base de datos en MongoLab que se puede ver en la parte 1.

Ahora que tenemos el URL y el TOKEN para poder validar nuestro acceso a la cuenta de MongoLab mediante el API REST, procederemos a utilizar el complemento POSTMAN para poder validar nuestro acceso. Para ello, utilizamos la siguiente URL compuesta, donde se puede apreciar que se marco de color amarillo la URL y en color verde el TOKEN.


Con esta URL compuesta ingresada en POSTMAN se procederá a realizar la consultar mediante le método GET.


Como resultado de esta primera consulta se obtendrá la lista de base de datos que se tiene registradas. Para este caso solo devolverá "dbtipocambio" que es la única que se creo.


Como ya se pudo observar, la URL básica solo nos permite validar nuestro acceso y visualizar nuestras base de datos. Si se quiere ver las colecciones que se tiene en una base de datos se tendrá que modificar el URL compuesta y agregarle lo marcado en color azul, en donde se detalla el nombre de la base de datos.


Con esta nueva URL compuesta se realizará nuevamente la consulta en POSTMAN con el método GET.


Como resultado de esta segunda consulta se obtendrá la lista de objetos que se tiene registradas en la base de datos "dbtipocambio", que como se puede observar, solo tiene lo básico que son indices y usuarios. 


A continuación, procederemos a crear una nueva colección y registro a la vez. Para ello, se deberá modificar nuevamente la URL para indicarle la colección que se agregará y utilizará. Esto se puede ver marcado de color rojo, donde se coloco el nombre de la colección que será "cambio".


Con esta nueva URL compuesta se realizará nuevamente la consulta en POSTMAN pero con el método POST. Además, ingresaremos los datos del objeto que queremos registrar en dicha colección mediante un mensaje en formato JSON.


Como resultado de esta última consulta se obtendrá los datos del objecto creado en la colección "cambio" y se podrá apreciar que ademas de los datos ingresados, se agrego un "id" al objeto con un valor único en formato alfanumérico. Este "id" se debe tener en cuenta para poder usarlo como referencia al objeto.

Por último, para poder validar que se a creado la nueva colección "cambio" con su primer registro, se podrá acceder al panel administrativo de MongoLab y verificar que exista dicha colección tal como se muestra a continuación. 


Por otro lado, también se puede verificar que si se creo la colección "cambio" mediante la segunda consulta que se realizo anteriormente.

Seguimos con el paso 3.

MONGOLAB con API REST - Parte 1


Después de investigar un poco sobre servicios que brinden mongodb como en la nube, pude encontrar 2 opciones interesantes que eran:

MongoLab (https://mongolab.com)
MongoHq (https://www.mongohq.com)

La que elegí para este caso fue MongoLab,ya que me pareció la mejor por que brinda un servicio gratuito pero limitado para poder hacer pruebas, obvio que esto es escalabre si se paga otro tipo de plan que se diferencia solo en procesamiento y almacenamiento. Además, un API REST que permite realizar hacerle mantenimiento a sus datos y consultarlos a la vez.

Ahora si empecemos, para ello primero debes ingresar a la web de MongoLab y registrarte para poder acceder a las opciones que brinda este servicio. A continuación, dentro del panel principal empezaremos por crear una base de dato.


Nos aparecerá una menú de opciones para crear nuestra base de datos, y como comente anteriormente, vamos crear una base de datos gratuita. Para ello, debemos elegir las siguientes opciones que se muestra en la imagen e ingresar el nombre de la base de datos a crear que para este caso será "dbtipocambio". Cabe mencionar que si se quiere una mayor capacidad de almacenamiento y/o proceso se puede elegir una de todas las opciones de paga que te muestra esta pantalla. Por último, le damos clic para crear la nueva base de datos.


Después de crear la base de datos, se podrá apreciar que esta aparece en el panel de administración principal. Ahora continuaremos seleccionando la base de datos con clic para poder ver su detalle.


En esta pantalla se puede apreciar el detalle de la base de datos, el cual esta vació, pero podemos dar conformidad de que el proceso de creación de base de datos es correcto y no cuenta con ninguna coleccion (denominado a lo que seria una tabla en una base de datos tradicional).


Ahora que tenemos nuestra cuenta creada en MongoLab y nuestra base de datos "dbtipocambio". Procederemos a obtener nuestro TOKEN del usuario registrado, la cual nos servirá para poder autentificarnos y realizar consultar mediante API REST. Para ello, se dará clic sobre el usuario que se encuentra en la parte superior derecha del panel administrativo de la web MongoLab.


Después de acceder al mantenimiento del usuario, se podrá ver la URL para poder acceder al servicio del API REST, la cual utilizaremos para poder acceder a nuestra base de datos creada. Además, se puede ver el "Current Key" que es nuestro TOKEN para poder validarnos y acceder a la base de datos.


Este paso es importante, ya que sin este TOKEN no podremos acceder a nuestra base de datos por el método REST.

Seguimos con el paso 2

miércoles, 5 de febrero de 2014

Uso de log4net con C#


Este es un ejemplo de como usar la librería log4net dentro de nuestra aplicación escrita con C# y usando Visual Studio 2010. Esta librería es muy útil si se desea registrar un log de eventos en diferentes fuentes como archivos, base de datos o enviar correos, etc. Todo esto sin necesidad de crear rutinas de accesos a base de datos o control de escritura en algún archivo de texto.

Este ejemplo se enfocará en crear un archivo de log que registre los diferentes tipos de mensajes de alerta, informativos y errores.

En primer lugar, deberemos acceder a la pagina web del proyecto log4net y descargar la librería.
http://logging.apache.org/log4net/

Ahora crearemos un pequeño aplicativo de escritorio para poder realizar el ejemplo. Este aplicativo contendrá un texto que podemos personalizar el mensaje, un check para simular una excepción y 5 botones que simularán los 5 tipos de mensajes que puede soportar log4net.


Para empezar debemos referencia la librería que previamente descargamos de la pagina web oficial en nuestro proyecto.



Ahora procederemos a registrar la librería en el proyecto. Para ello, tenemos que ingresar al archivo AssemblyInfo.cs tal como se muestra en la imagen.


Agregamos la siguiente linea en el archivo AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Configuracion.log4net", Watch = true)]



Como detalle hay que verificar que se este usando el framework 4.0, ya que es la versión que se usará con la librería de log4net.



Ahora se deberá crear un archivo de configuración tal como se indico en la linea de que se agrego al archivo AssemblyInfo.cs y asegurarse que el archivo siempre se copie en el directorio del ejecutable.



En el archivo se tendrá que colocar la siguiente configuración que se encargará de realizar el registro de los mensajes dentro del archivo.



Con esto se logrará generar un archivo de log que contenga el mensaje que se le envié desde el aplicativo. Para realizar las pruebas se implementará el evento clic a cada botón 


Esta operación se repite por cada botón y solo se cambia el método de log por los siguientes:
- log.Debug
- log.Info
- log.Warn
- log.Error
- log.Fatal

Por ultimo, al ejecutar el aplicativo y darle clic a cada botón este registrará en el log que se configuro previamente.


Adjunto el código fuente como ejemplo en el siguiente link
private void btnDebug_Click(object sender, EventArgs e)
{
	try
	{
		if (this.chkError.Checked)
			try 
			{
				int iCero = 0;
				int iNum = 1 / iCero;
			}
			catch (Exception ex)
			{
				//Modo Nativo de LOG4NET
				//log.Debug(this.txtMessage.Text, ex);
				//Modo Personalizado
				log.Debug(string.Format("Objecto : {0} {1} Mensaje : {2} {3} Fuente  : {4}",
											ex.Source.ToString(),
											Environment.NewLine,
											ex.Message.ToString(),
											Environment.NewLine,
											ex.StackTrace.ToString()));
			}
			
		else
			log.Debug(this.txtMessage.Text);
	   
	}
	catch (Exception ex)
	{
		throw ex;
	}
}