El Libro del Día: 2016-07-15
Titulo: Crypto 101
Autor: Laurens Van Houtven
Editorial: Independent
Nro Paginas: 246
Capítulos:
I Foreword
1 About this book
2 Advanced sections
3 Development
4 Acknowledgments
II Building blocks
5 Exclusive or
6 Block ciphers
7 Stream ciphers
8 Key exchange
9 Public-key encryption
10 Hash functions
11 Message authentication codes
12 Signature algorithms
13 Key derivation functions
14 Random number generators
III Complete cryptosystems
15 SSL and TLS
16 OpenPGP and GPG
17 Off-The-Record Messaging (OTR)
IV Appendices
A Modular arithmetic
B Elliptic curves
C Side-channel attacks
Descarga:
Crypto_101
Blog de Luis Dueñas dedicado a la difusión del Desarrollo en Microsoft .NET, Visual Studio, WinForms, WebForms, MVC, ASP .NET, jQuery, AJAX, HTML5, JavaScript, Móviles, etc. Encontrarás Libros, Demos, Artículos Técnicos, Entrenamiento.
Mostrando las entradas con la etiqueta Random. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Random. Mostrar todas las entradas
viernes, 15 de julio de 2016
El Libro del Día: Crypto 101
Etiquetas:
Algorithms,
Authentication,
Block,
Ciphers,
Crypto 101,
Encryption,
Exclusive Or,
GPG,
Hash,
Keys,
Laurens Van Houtven,
Libros,
Message,
OpenPGP,
OTR,
Random,
Signature,
SSL,
Stream,
TLS
jueves, 2 de octubre de 2014
El Demo del Día: Gráficos de Lineas y Curvas en WinForms
Gráficos de Lineas y Curvas en WinForms
Hoy veremos como crear gráficos en .NET dinamicamente usando la clase Graphics del espacio de Nombres System.Drawing, la cual tiene métodos que permiten dibujar textos, lineas, curvas, etc.
Para el ejemplo lo haremos mediante un Timer que genera números al azar con los cuales se crearan los puntos a graficar, pero en un caso real, en vez del Timer podemos leer de una base de datos una serie de datos o también recibir por el puerto serial o via sockets leer el valor de un dispositivo conectado a la computadora, por ejemplo un termómetro, balanza electrónica, medición de latidos del corazón, pulsos, etc.
Crear la Aplicación Windows Forms
En el Visual Studio crear una aplicación en C# llamada: "GraficoLineasCurvas" y renombrar el formulario a "frmGrafico". Arrastrar solo un control Timer y llamarlo: "tmrGrafico" configurando sus propiedad Enabled en True, para que se habilite cada 100 milisegundos el gráfico.
El diseño del formulario debe quedar como se muestra en la figura:
Escribir el siguiente código en el formulario, sobre todo la función "graficarSeries" que esta asociado al evento "Tick" del timer "tmrGrafico":
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GraficoLineasCurvas
{
/*Creado por Luis Dueñas para el Blog*/
public partial class frmGrafico : Form
{
private int x = 0;
private int n = 40;
private Point punto1Linea;
private Point punto1Curva;
public frmGrafico()
{
InitializeComponent();
}
private void graficarSeries(object sender, EventArgs e)
{
Random oAzar = new Random();
int yLinea = oAzar.Next(this.Height-200) + 100;
int yCurva = oAzar.Next(this.Height-200) + 100;
if (x == 0)
{
punto1Linea = new Point(x,yLinea);
punto1Curva = new Point(x, yCurva);
}
Point punto2Linea = new Point(x, yLinea);
Point punto4Curva = new Point(x, yCurva);
Graphics grafico = this.CreateGraphics();
grafico.DrawString("Gráficos Dinámicos en .NET (Por Lduenas)",
new Font("Arial",40),Brushes.Green,100,20);
grafico.DrawLine(new Pen(Brushes.Red, 4), punto1Linea, punto2Linea);
Point punto2Curva;
Point punto3Curva;
int c = (int)((x/n)-1)*n;
if (punto1Curva.Y >= punto4Curva.Y)
{
punto2Curva = new Point(c + (n/4), punto4Curva.Y);
punto3Curva = new Point(c+((3*n) / 4), punto1Curva.Y);
}
else
{
punto2Curva = new Point(c+ (n / 4), punto1Curva.Y);
punto3Curva = new Point(c+ ((3 *n) / 4), punto4Curva.Y);
}
grafico.DrawBezier(new Pen(Brushes.Blue, 4), punto1Curva, punto2Curva,
punto3Curva, punto4Curva);
x += n;
punto1Linea = punto2Linea;
punto1Curva = punto4Curva;
if (x >= this.Width)
{
x = 0;
grafico.Clear(this.BackColor);
}
}
}
}
Nota: Se crea la variable x para la posición de la columna y la variable y para la fila, ademas 2 variables punto1Linea y punto1Curva para guardar el punto anterior desde donde se iniciara el gráfico.
Para las lineas solo necesitamos 2 puntos: inicio (punto1Linea) y fin (punto2Linea), pero para la curva de Bézier necesitamos 4 puntos: punto de anclaje de inicio (punto1Curva), punto de control 1 (punto2Curva), punto de control 2 (punto3Curva), y punto de anclaje final (punto4Curva).
La variable n (por defecto 40) indica el intervalo en que aumenta las columnas o posición x.
Probar la Aplicación Creada
Grabar el proyecto y ejecutarlo con F5. Aparece una ventana maximizada como en la siguiente figura:
El texto con el título se mostrará de color verde, el gráfico de Lineas se mostrará en color rojo y el gráfico de Curvas en color azul.
Cuando llegue al final del ancho se borrará el dibujo y se creará nuevamente. Puedes experimentar modificando el tamaño del intervalo n de 40 a mas o menos.
Comentario Final
Es muy fácil crear gráficos dinámicos en .NET, ya sea de lineas o curvas, sin necesidad de recurrir a ningún Control, ya que estos solo se utilizan para graficar datos históricos (existentes den bases de datos, archivos de textos, xml, etc), pero, si deseamos graficar en tiempo real mejor es crear nuestro gráfico dinámicamente usando la clase Graphics de System.Drawing.
Descarga
Demo20_GraficoLineasCurvas
Hoy veremos como crear gráficos en .NET dinamicamente usando la clase Graphics del espacio de Nombres System.Drawing, la cual tiene métodos que permiten dibujar textos, lineas, curvas, etc.
Para el ejemplo lo haremos mediante un Timer que genera números al azar con los cuales se crearan los puntos a graficar, pero en un caso real, en vez del Timer podemos leer de una base de datos una serie de datos o también recibir por el puerto serial o via sockets leer el valor de un dispositivo conectado a la computadora, por ejemplo un termómetro, balanza electrónica, medición de latidos del corazón, pulsos, etc.
Crear la Aplicación Windows Forms
En el Visual Studio crear una aplicación en C# llamada: "GraficoLineasCurvas" y renombrar el formulario a "frmGrafico". Arrastrar solo un control Timer y llamarlo: "tmrGrafico" configurando sus propiedad Enabled en True, para que se habilite cada 100 milisegundos el gráfico.
El diseño del formulario debe quedar como se muestra en la figura:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GraficoLineasCurvas
{
/*Creado por Luis Dueñas para el Blog*/
public partial class frmGrafico : Form
{
private int x = 0;
private int n = 40;
private Point punto1Linea;
private Point punto1Curva;
public frmGrafico()
{
InitializeComponent();
}
private void graficarSeries(object sender, EventArgs e)
{
Random oAzar = new Random();
int yLinea = oAzar.Next(this.Height-200) + 100;
int yCurva = oAzar.Next(this.Height-200) + 100;
if (x == 0)
{
punto1Linea = new Point(x,yLinea);
punto1Curva = new Point(x, yCurva);
}
Point punto2Linea = new Point(x, yLinea);
Point punto4Curva = new Point(x, yCurva);
Graphics grafico = this.CreateGraphics();
grafico.DrawString("Gráficos Dinámicos en .NET (Por Lduenas)",
new Font("Arial",40),Brushes.Green,100,20);
grafico.DrawLine(new Pen(Brushes.Red, 4), punto1Linea, punto2Linea);
Point punto2Curva;
Point punto3Curva;
int c = (int)((x/n)-1)*n;
if (punto1Curva.Y >= punto4Curva.Y)
{
punto2Curva = new Point(c + (n/4), punto4Curva.Y);
punto3Curva = new Point(c+((3*n) / 4), punto1Curva.Y);
}
else
{
punto2Curva = new Point(c+ (n / 4), punto1Curva.Y);
punto3Curva = new Point(c+ ((3 *n) / 4), punto4Curva.Y);
}
grafico.DrawBezier(new Pen(Brushes.Blue, 4), punto1Curva, punto2Curva,
punto3Curva, punto4Curva);
x += n;
punto1Linea = punto2Linea;
punto1Curva = punto4Curva;
if (x >= this.Width)
{
x = 0;
grafico.Clear(this.BackColor);
}
}
}
}
Nota: Se crea la variable x para la posición de la columna y la variable y para la fila, ademas 2 variables punto1Linea y punto1Curva para guardar el punto anterior desde donde se iniciara el gráfico.
Para las lineas solo necesitamos 2 puntos: inicio (punto1Linea) y fin (punto2Linea), pero para la curva de Bézier necesitamos 4 puntos: punto de anclaje de inicio (punto1Curva), punto de control 1 (punto2Curva), punto de control 2 (punto3Curva), y punto de anclaje final (punto4Curva).
La variable n (por defecto 40) indica el intervalo en que aumenta las columnas o posición x.
Probar la Aplicación Creada
Grabar el proyecto y ejecutarlo con F5. Aparece una ventana maximizada como en la siguiente figura:
El texto con el título se mostrará de color verde, el gráfico de Lineas se mostrará en color rojo y el gráfico de Curvas en color azul.
Cuando llegue al final del ancho se borrará el dibujo y se creará nuevamente. Puedes experimentar modificando el tamaño del intervalo n de 40 a mas o menos.
Comentario Final
Es muy fácil crear gráficos dinámicos en .NET, ya sea de lineas o curvas, sin necesidad de recurrir a ningún Control, ya que estos solo se utilizan para graficar datos históricos (existentes den bases de datos, archivos de textos, xml, etc), pero, si deseamos graficar en tiempo real mejor es crear nuestro gráfico dinámicamente usando la clase Graphics de System.Drawing.
Descarga
Demo20_GraficoLineasCurvas
jueves, 18 de septiembre de 2014
El Demo del Día: Copiar Datos de Excel en el DataGridView de WinForms
Copiar Datos de Excel en el DataGridView de WinForms
Después de un tiempo, volvemos a publicar un nuevo Demo, esta vez a pedido de un alumno, que desea copiar que su aplicación tenga la funcionalidad de copiar datos de la Grilla (DataGridView) a Excel (esto es automático, no es necesario programar nada) y desde Excel hacia la aplicación (esto si requiere de programar usando el objeto Clipboard de WinForms).
Como siempre nuestro desarrollo lo haremos con Listas de Objetos (como debe ser para ahorrar memoria y no con DataSet), ademas usaremos Reflection para convertir los datos que vienen como cadenas desde Excel al tipo de datos adecuado del objeto.
Crear una Aplicación Windows Forms en C#
Crear un nuevo proyecto de tipo Windows Forms y llamarle "CopiarExcel". Cambiarle de nombre al formulario por el de "frmProducto".
Crear la clase: "beProducto" para la lista de objetos
using System;
namespace CopiarExcel
{
public class beProducto
{
public int IdProducto { get; set; }
public string Nombre { get; set; }
public decimal Precio { get; set; }
public short Stock { get; set; }
}
}
Después de un tiempo, volvemos a publicar un nuevo Demo, esta vez a pedido de un alumno, que desea copiar que su aplicación tenga la funcionalidad de copiar datos de la Grilla (DataGridView) a Excel (esto es automático, no es necesario programar nada) y desde Excel hacia la aplicación (esto si requiere de programar usando el objeto Clipboard de WinForms).
Como siempre nuestro desarrollo lo haremos con Listas de Objetos (como debe ser para ahorrar memoria y no con DataSet), ademas usaremos Reflection para convertir los datos que vienen como cadenas desde Excel al tipo de datos adecuado del objeto.
Crear una Aplicación Windows Forms en C#
Crear un nuevo proyecto de tipo Windows Forms y llamarle "CopiarExcel". Cambiarle de nombre al formulario por el de "frmProducto".
Crear la clase: "beProducto" para la lista de objetos
using System;
namespace CopiarExcel
{
public class beProducto
{
public int IdProducto { get; set; }
public string Nombre { get; set; }
public decimal Precio { get; set; }
public short Stock { get; set; }
}
}
Agregar un control DataGridView sobre el formulario, cambiarle al nombre de "dgvProducto" y acoplarlo para que se vea similar a la siguiente figura:
Escribir el siguiente código en el formulario:
using System.IO;
using System.Reflection;
namespace CopiarExcel
{
public partial class frmProducto : Form
{
private List<beProducto> lbeProducto;
public frmProducto()
{
InitializeComponent();
}
private void cargarProductos(object sender, EventArgs e)
{
lbeProducto = new List<beProducto>();
Random oRandom = new Random();
beProducto obeProducto;
for(int i=1;i<=10;i++)
{
obeProducto = new beProducto();
obeProducto.IdProducto = i;
obeProducto.Nombre = String.Format("Producto {0}", i);
obeProducto.Precio = oRandom.Next(100)+10;
obeProducto.Stock = (short)(oRandom.Next(10) + 1);
lbeProducto.Add(obeProducto);
}
dgvProducto.DataSource = lbeProducto;
}
private void pegarExcel(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
string formato = DataFormats.CommaSeparatedValue;
object contenido = Clipboard.GetData(formato);
if (contenido != null && contenido is MemoryStream)
{
byte[] buffer;
using (MemoryStream ms = (MemoryStream)contenido) buffer = ms.ToArray();
string lista = Encoding.UTF8.GetString(buffer).Replace("\r\n", ",");
string[] data = lista.Split(',');
PropertyInfo[] propiedades = lbeProducto[0].GetType().GetProperties();
if ((data.Length - 1) % propiedades.Length == 0)
{
beProducto obeProducto = null;
PropertyInfo propiedad;
int c = 0;
Type tipo = null;
while (c < data.Length - 1)
{
for (int i = 0; i < propiedades.Length; i++)
{
if (i == 0) obeProducto = new beProducto();
propiedad = obeProducto.GetType().GetProperty(propiedades[i].Name);
tipo = propiedad.PropertyType;
propiedad.SetValue(obeProducto, Convert.ChangeType(data[c], tipo));
if (i == propiedades.Length - 1) lbeProducto.Add(obeProducto);
c++;
}
}
dgvProducto.DataSource = null;
dgvProducto.DataSource = lbeProducto;
}
else MessageBox.Show
("Numero de columnas a copiar del Excel y la Grilla deben ser iguales");
}
else MessageBox.Show("No hay un rango de celdas a copiar");
}
}
}
}
Nota: Para copiar desde Excel a la grilla se debe pulsar la tecla Ctrl + V y la cantidad de columnas debe ser la misma que la de la grilla (en realidad la de las propiedades de la clase beProducto o la que fuera).
Probar la Aplicación Creada
Grabar el proyecto y ejecutarlo con F5. Se mostrará la siguiente ventana con los datos de los productos creados en el evento Load del formulario:
Crear un archivo de Excel con la misma estructura de los Productos, tal como se muestra a continuación:
Copiar (Ctrl + C) el rango de celdas que se desea llevar a la aplicación (sin incluir las cabeceras) y en cualquier celda de la grilla Pegar (Ctrl + V), y se copiaran los registros seleccionados en Excel, tal como se muestra a continuación:
Si desean se puede ir copiando por partes (filas) pero si es necesario seleccionar todas las columnas, ya que el objeto necesita de valores.
Nota: El procedimiento contrario, es decir desde la Aplicación (DataGridView) a Excel es automatico, solo hay que marcar el rango de celdas del DataGridView, Ctrl + C y luego en Excel Ctrl + V.
Comentario Final
En este post hemos visto como agregar la funcionalidad de Copiar Datos Externos a la aplicación, en este caso desde Excel, pero el procedimiento sera similar desde cualquier origen. Para ello hemos usado el objeto ClipBoard y para trabajar con objetos hemos usado Reflection, lo que quiere decir que el demo lo puedes probar con cualquier objeto que definan.
Saludos a todos los visitantes asiduos del Blog y ya saben que pueden hacer sus pedidos en los comentarios.
Descarga:
Etiquetas:
.NET,
C#,
ChangeType,
Clipboard,
Convert,
Copiar,
DataGridView,
Demos,
Encoding,
Excel,
KeyDown,
Lduenas,
Listas de Objetos,
MemoryStream,
Random,
Reflection,
WinForms
Suscribirse a:
Entradas (Atom)






