miércoles, 12 de marzo de 2025

Encritación

Recientemente estoy cursando un training asignado por la compañía. Y quiero compartir breves resumen de algunos tópicos. En esta ocasión hablaré brevemente sobre la Encriptación.

Que es la Encriptación?

Se puede definir como el cifrado o codificación de datos para que sólo las partes autorizadas puedan entender la información. El cifrado es el proceso de convertir texto sin formato legible por humanos en texto incomprensible, también conocido como texto cifrado.
El cifrado requiere el uso de una clave criptográfica: un conjunto de valores matemáticos que tanto el remitente como el destinatario acuerdan.




2 tipos de Encriptación

Los dos tipos principales de cifrado son el cifrado simétrico y el cifrado asimétrico. El cifrado asimétrico también se conoce como cifrado de clave pública.

Cifrado simétrico

En el cifrado simétrico, solo hay una clave y todas las partes que se comunican utilizan la misma clave (secreta) tanto para el cifrado como para el descifrado.


Cifrado asimétrico

En el cifrado asimétrico o de clave pública, hay dos claves: una clave se utiliza para el cifrado y una clave diferente para el descifrado. La clave de descifrado se mantiene privada, mientras que la clave de cifrado se comparte públicamente, para que cualquiera pueda usarla. El cifrado asimétrico es una tecnología fundamental para TLS.


¿Qué es una clave criptográfica?

En criptografía, una clave es una cadena de caracteres utilizada dentro de un algoritmo de cifrado para alterar datos para que parezcan aleatorios. Al igual que una clave física, bloquea (cifra) los datos para que sólo alguien con la clave correcta pueda desbloquearlos (descifrarlos). 


SSL/TLS requiere el uso de lo que se llama una clave pública y una clave privada, y en el caso de una empresa que utiliza el protocolo para proteger el tráfico hacia y desde su sitio web (consulte HTTPS), la clave privada normalmente permanece en posesión de la empresa. Pero cuando una empresa pasa a la nube y un proveedor proporciona cifrado TLS, el proveedor tiene la clave privada.

jueves, 2 de enero de 2025

¿Quién inventó los patrones de diseño?

Continuando con la saga de Patrones de diseño, hoy quiero contextualizar un poco y conversar del origen. Como había mencionado en post anterior, los patrones son soluciones a problemas habituales en el coding, y, cuando una solución se repite una y otra vez, este pasa a ser bautizado con un nombre y explicar su solución a detalle. De esta manera nace un patrón.

De acuerdo a la fuente estudiada,  en 1977 surge un libro llamado "A Pattern Language"/"El lenguaje de patrones". Su contenido es orientada a la arquitectura urbana escrito por Christopher Alexander.


Básicamente, contempla una seria de patrones para describir por ejemplo: alto y tipos de ventanas, niveles de un edicto, zonas verdes de un emplazamiento, etc.

En 1995, esta idea fue traslada a las diversas problemas y soluciones que se pueden tener a la hora de codificar un software. Los autores de esta genial idea son Eric Gamma, John Vlissides, Ralph Johnson y Richard Helm en su publicación "Patrones de diseño".



Este libro presenta 23 patrones que resuelven problemas de diseño orientado a objetos. Desde entonces, se han descubierto numeroso patrones de diseño.


martes, 31 de diciembre de 2024

Introducción a Patrones de Diseño

 Tal como hablé en otro post, tenemos 2 conceptos: Patrones Arquitectónicos y Patrones de Diseño de Software. Me enfocaré en este último en esta serie de post.

Los patrones de diseño son soluciones habituales a problemas frecuentes en el desarrollo de software. Siempre me ha encantado la analogía, el cual dice, que son como planos para construir un puente, en donde, se considera: 

  • El tráfico de personas o vehículos
  • condiciones climáticas
  • el entorno geográfico
  • etc.
Estos patrones no son porciones de código que puedan llegan a copiarse y pegar en nuestro proyecto, sino más bien, son conceptos que deben de entenderse, asimilarse y luego implementar en tu proyecto según la naturaleza de tu proyecto.



¿En qué consiste un patrón?

La gran mayoría son descritos para que puedan ser reproducidos en el contexto que a ti te envuelve. Y esta descripción contiene estas secciones:
  • Propósito: Explica el problema y la solución.
  • Motivación: Explica en detalle el problema y la solución brindada.
  • Estructura: Indica una estructura de clases y su relación.
  • Código:  Es un ejemplo  para facilitar la asimilación.

Clasificación de los patrones

Debido a que un patrón varía en su complejidad y el objetivo a resolver es que surgen 3 grupos:
  1. Patrones Creaciones: Ofrecen mecanismos para creación de objetos y facilitan la flexibilidad y reutilzación de código.
  2. Patrones Estructurales: Explican como se ensamblan los objetos y clases para mantener la flexibilidad y eficiencia
  3. Patrones de Comportamiento: Buscan una comunicación efectiva y la asignación de responsabilidades entre los objetos.

En otro post abordaré cada vez mas amplio estos conceptos. Nos vemos en el siguiente post.

PATRONES ARQUITECTÓNICOS y PATRONES DE DISEÑO. Es lo mismo?

Quiero compartir una pequeña introducción a este tema. Muchas veces se confunde patrones de diseño con patrones arquitectónicos.

Patrones de Diseño

Un patrón de diseño son soluciones habituales a problemas que ocurren con frecuencia en el diseño de piezas, módulos, etc. Estos patrones no son código que puedas llegar y copiar, más bien, es una conceptualización que tu podrás adaptar para encajar a la resolución que buscas en tu aplicación.   Acá voy a mencionar algunos que he tenido la oportunidad de usar: 

  • fachada, 
  • abstract factory,
  • singleton,
  • fábrica.
  • entre otros
Existen muchos más que te recomiendo revisar en el libro REFACTORING GURU (muy bueno). En otros post voy a ir desarrollando mas este tema, con su tipos y características.

PatronesArquitectónicos

Se enfocan en la resolución de problemas en aplicaciones completas a más alto nivel para obtener la mejor performance, asegurar que tenga escalabilidad, soporte latencia, tolerancia a fallos, etc. Aquí puedo mencionar algunos de estos patrones:
  • microservicios, 
  • EDA (Event Driven Architecture)
  • Capas, 
  • MVC, 
  • CQRS, 
  • entre otros.

Los patrones arquitectónicos pueden aplicar patrones de diseños para su implementación en sus piezas más pequeñas.
No confundir tampoco con las buenas prácticas de desarrollo como lo son SOLIC que quizás voy a compartir en otro post.



Este es un resumen muy breve, si quieres agregar más a esto: bienvenido y gracias. Espero tus comentarios 👇

lunes, 29 de diciembre de 2014

Generar Password Aleatoriamente

Si en alguna ocasión te has visto en la necesidad de generar password aleatoriamente, aquí les dejo un enlace muy bueno donde ejemplifican como realizar este método en nuestras aplicaciones.

Link: https://alskare.wordpress.com/2009/10/13/c-generador-de-passwords-aleatorios/

Espero les sirva

Gridview y RowEditing: Error ParameterCountException

Hola amigos, despues de tanto tiempo vuelvo a hacer entradas a mi blog. Bueno hoy me topé con un problemita en ASP.NET utilizando el Gridview dentro de un UpdatePanel. El grid ejecuta el evento RowEditing. Al ejecutarlo me daba el siguiente error: ParameterCountException!!!

Y googleando encontre la solución al problema: basta con declarar en el ScriptManager el atributo ScriptMode="Release"

Espero les sirva!!

Saludos.

miércoles, 9 de febrero de 2011

Acentos y Javascript Alert

Saludos amigos, un gran saludo después de tanto tiempo. El día de hoy me topé con el problema que en el proyecto que estoy desarrollando en ASP.NET, necesitaba enviar una serie de alert tras una serie de validaciones, el cual tengo un archivo *.js que contiene dichas funciones de validaciones. El caso es que dentro de los alert me topé con el problemas de los acentos y las Ñ/ñ, que no se mostraban correctamente al lado del cliente, en algunas ocaciones por el tema de codificación.


Navegando por ahi encontré la solución: Cuando requieras emplear acentos o la "Ñ/ñ" debes de reemplazarlas por unicode.

\u00e1 -> á
\u00e9 -> é
\u00ed -> í
\u00f3 -> ó
\u00fa -> ú
\u00c1 -> Á
\u00c9 -> É
\u00cd -> Í
\u00d3 -> Ó
\u00da -> Ú
\u00f1 -> ñ
\u00d1 -> Ñ



viernes, 12 de noviembre de 2010

Desarrollador 5 Estrellas - 4ta Estrella Cardspace

Hola amigo, para aquellos que están dando las pruebas de la certificación desarrollador 5 estrellas, y van por la 4ta en este momento, aqui les dejo el link de la prueba correspondiente a Cardspace, yo me base en esta y obtuve el 80%. http://ring0a.blogspot.com/2010/09/desarrollador-cinco-estrellas-4-1.html, en un proximo post les publicaré las respuestas.


Espero les sirva
Saludos.

miércoles, 10 de noviembre de 2010

Balsamiq Mockups:Creación de bosquejos sobre interfaces gráficas

Hola amigos, saben que hace unos meses atras necesitaba un software que me permitiera realizar bosquejos sobre interfaces gráficas de paginas web o de aplicaciones de escritorio que en mi trabajo me toca desarrollar.
Y por ahi encontré esta herramienta llamada Balsamiq Mockups
Bueno para poder instalar el programa (que es muy liviano) tenés que instalar el programa de Adobe Air. Está todo comprimido en el archivo Megaupload. Obviamente no es gratuito pero después de tanto buscar consegui el serial para que todos los T! lo puedan utilizar ilimitadamente...

http://www.megaupload.com/?d=142MQMNA

Organization name: leexij@gmail.com
Serial Key: eNrzzU/OLi0odswsqslJTa3IzHJIz03MzNFLzs+tMTQyNrcwsTQyAIEa5xpDAIFxDy8=


viernes, 5 de noviembre de 2010

BEGIN TRAN, COMMIT, ROLLBACK & GOTO

En muchas ocaciones tenemos que llevar un control sobre las transacciones que se realizan en la base de datos. Y TRAN nos permite poder ejecutar nuestras instrucciones SQL como una unica instrucción, donde todas fracasan o todas tienen exito y se completan.

Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ‘ROLLBACK TRAN’.

Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia ‘COMMIT TRAN’.

Otra sentencia muy útil es GOTO, el cual nos permite ejecutar un camino alternativo de existir un error o una condición no cumplida, en SQL Server 2005 existe una nueva funcion de TRY y CATCH (el cual trataremos en otro Post).

Bueno aqui les muestro un ejemplo de como utilizarla en SQL Server (en mi caso SQL Server 2000).

ALTER PROCEDURE [DBO].[SP_Biotoscana_PreAviso]
@ACCION INT = 0,
@ERRORID INT OUTPUT,
@MSGReturn INT OUTPUT,
---------------------------------------------------------
@IDLINEA CHAR(5) = '1',
@IDPROD CHAR(30) ='',
@DESTINO CHAR(10) = '',
@LOTE CHAR(25) = '',
@FECVENC SMALLDATETIME = NULL,
@NUMOC CHAR(10) = '',
@NUMIMP CHAR(10) = '',
@PAIS CHAR(3) = '',
@CANTIDAD FLOAT = 0,
@UNIDAD CHAR(10) = '',
@PRECUNIT FLOAT = 0,
@MONEDA CHAR(4) = '',
---------------------------------------------------------
@NUMREF CHAR(15) = '',
@TIPOCOMPRA VARCHAR(15) = '',
@RUTPROV VARCHAR(100) = ''
AS
BEGIN
DECLARE @CORR CHAR(10)
SET @CORR = ''

IF @ACCION = 1
BEGIN
BEGIN TRAN

SET @CORR = (SELECT Lastbatnbr7+1 from SETUPWEB)
SET @MSGReturn = CAST((SELECT Lastbatnbr7+1 from SETUPWEB) AS INT)

update SETUPWEB set Lastbatnbr7= @CORR

INSERT INTO PRE_WEBHEADER (
CodLab,Corr, Crtd_DateTime, Crtd_Prog, Crtd_User,
Lupd_DateTime,Lupd_Prog,Lupd_User,NoteId,
RefLab,Status,TranType,VendId
) VALUES (
'49', @CORR,GETDATE(),'INTZ', 'NFS',
GETDATE(),'INTZ', 'NFS', 0,
@NUMREF, 'H',@TIPOCOMPRA,@RUTPROV
)

INSERT INTO PRE_WEBLINE
(
Corr,Crtd_DateTime,Crtd_Prog, Crtd_User,
CuryId,ExpDate,InvtId, LineRef,
LotSerNbr, Lupd_DateTime, Lupd_Prog,Lupd_User,
OrdNbr,OpenLine,Pais,QtyOrig,RefNbr,SiteId,
ShipperId,Status_Muestreo,TranDate,Unid,UnitPrice, QtyRcvd
)
VALUES
(
@CORR, GETDATE(), 'INTZ', 'NFS',
@MONEDA,@FECVENC,@IDPROD,@IDLINEA,
@LOTE,GETDATE(), 'INTZ', 'NFS',
@NUMOC, 'A', @PAIS,@CANTIDAD,@NUMREF, @DESTINO,
@NUMIMP,0, GETDATE(), @UNIDAD,@PRECUNIT, 0
)

SELECT @ERRORID = @@ERROR
IF (@ERRORID <> 0) GOTO PROBLEM
COMMIT TRAN

PROBLEM:
IF (@ERRORID <> 0) BEGIN
ROLLBACK TRAN
END
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Espero que sea de ayuda. Saludos.

jueves, 4 de noviembre de 2010

Enviar Email con C# (C Sharp)

Hola amigos! Aqui publico el código que utilizé hace unos días para poder enviar e-mail desde mi aplicacion en C#.

Lo primero, tenemo

s que hacer la llamada a la librería:



using System.Net.Mail;

Una vez hecho esto, nos creamos el objeto que enviara el mail:


MailMessage objMail;

Ahora empezamos a rellenar los datos necesarios. Vamos a incorporar un destinatario del correo, la dirección desde la que se envía, un email en copia, otro en copia oculta y un fichero adjunto:


//'Creamos el objeto del correo
objMail = new MailMessage();
objMail.From = new MailAddress("direccion@origen.com");
//Remitente

objMail.To.Add("direccion@destino.com");
//Email a enviar
objMail.CC.Add("copia@destino.com");
//Email a enviar copia
objMail.Bcc.Add("oculto@destino.com");
//Email a enviar oculto

Indicamos un asunto:


objMail.Subject = "Asunto";

Y añadimos el contenido:


objMail.Body = "contenido";

Aquí podemos indicar si debe mantener un formato de HTML o no:


objMail.IsBodyHtml = true; //Formato Html del email

Le añadimos un adjunto


objMail.Attachments.Add(new Attachment(Adjunto));

OJO: tiene que ser la ruta absoluta del fichero, no la relativa.

Ahora que tenemos el contenido del mensaje, establecemos los datos del servidor de correo:


SmtpClient SmtpMail = new SmtpClient();
SmtpMail.Host = Servidor;
//el nombre del servidor de correo
SmtpMail.Port = Puerto;
//asignamos el numero de puerto

Añadimos las credenciales si hace falta:


SmtpMail.Credentials = 
new
System.Net.NetworkCredential(Usuario, Clave);

Y ya solo nos queda enviar el e-mail:


SmtpMail.Send(objMail); //Enviamos el correo

Y con eso estamos listos!!! espero les sirva.

Saludos.

Leer XML con Linq y C#

Ayer me encontre con la situación de leer la siguiente estructura de xml enviado por uno de nuestros clientes. Este XML debe ser cargado en nuestra Base de Datos SQL Server. Me topé con el problema de como recorrer el detalle de los artículos ya que cada artículo puede estar compuesto de uno a varios lotes. (ver figura).


Y encontre la solución con este fragmento de código:

Formatear Números en SQL Server

Una duda que suele tener la gente es como formatear los datos numéricos en SQL Server. A veces tenemos la necesidad de formatear números completando con ceros hasta un número determinado de posiciones. El siguiente script nos muestra la forma más eficiente de conseguir este resultado:

y el resultado de la operacion será: 0000002002