Contiene todos los artículos del sitio
-
28/05/2016
Uno de los controles del GUI (interfaz gráfico de usuario) más versátiles que nos ofrece la plataforma .NET es el control PropertyGrid. Se trata de un componente mediante el cual el usuario puede editar todas las propiedades de un determinado objeto que el desarrollador haya configurado para ello, permitiendo estructurarlas en categorías y ordenarlas por orden alfabético. Además, proporciona muchas opciones para personalizar tanto la presentación como la edición de las propiedades y muestra al usuario un texto de ayuda sobre cada una de ellas. En esta serie vamos a ver un tutorial completo sobre el uso de este control y sus características principales, empezando por este artículo sobre su uso básico.
[Leer Mas...] -
04/06/2016
En el anterior artículo de la serie vimos cómo utilizar las funcionalidades básicas del control PropertyGrid para editar las propiedades de un determinado objeto o colección de objetos. En este artículo os voy a mostrar los eventos más importantes de este control, así como la implementación de editores personalizados que permiten la edición de propiedades de tipos para los que no existe un editor por defecto, como pueden ser las clases desarrolladas por nosotros mismos en nuestro programa.
[Leer Mas...] -
10/06/2016
Para terminar esta serie sobre el control PropertyGrid vamos a ver cómo utilizar los diferentes conversores de tipo derivados de la clase TypeConverter para personalizar la forma en que se muestran o editan las propiedades. El .NET framework proporciona conversores para bastantes tipos de propiedades, pero, además, podemos implementar fácilmente nuestros propios conversores, derivando una clase de TypeConverter o de algún conversor especializado y sobrecargando unas pocas funciones.
[Leer Mas...] -
14/06/2016
Cuando estamos trabajando con funciones matemáticas, resulta muy conveniente disponer de un parser, o analizador de expresiones, que nos permita escribir e interpretar diferentes versiones de las ecuaciones que deben ser procesadas por el programa, en lugar de tener que modificar y recompilar el código para adaptarlo a dichos cambios cada vez. En esta serie de artículos voy a mostrar cómo construir un sencillo pero potente analizador, que puede ser extendido fácilmente para tratar con expresiones más sofisticadas, empezando por definir en este artículo la teoría básica necesaria para encarar con éxito este tipo de desarrollos.
[Leer Mas...] -
17/06/2016
En el artículo anterior de esta serie hice un repaso de las principales cuestiones acerca del diseño de la gramática para construir un analizador o parser para expresiones aritméticas. En este artículo voy a mostrar la primera parte de su implementación a partir de las reglas BNF de la gramática, convirtiendo la expresión de entrada, en forma de cadena de texto, en una serie de objetos que podremos utilizar para evaluarla, pudiendo dar diferentes valores a las constantes y variables que la componen.
[Leer Mas...] -
18/06/2016
En el anterior artículo de la serie comencé a mostrar cómo implementar un analizador de expresiones aritméticas o parser a partir de las reglas de la gramática en notación BNF, con las clases encargadas de extraer los números, variables y constantes. En este artículo voy a terminar la serie con la clase encargada de analizar la regla principal, que analiza las expresiones en sí. También mostraré una pequeña aplicación de ejemplo que dibuja la gráfica correspondiente a la expresión a partir del objeto generado por el compilador.
[Leer Mas...] -
25/06/2016
Cuando se seleccionan varias filas en un control DataGridView y se pulsa Ctrl+C para copiar su contenido, el comportamiento por defecto copia los valores de las celdas en formato de texto plano separado por tabuladores. Con esto solo ya se pueden pegar los datos en una hoja Excel, pero podemos implementar este comportamiento de una forma más sofisticada de manera que apliquemos un formato personalizado a las columnas en función del tipo de los datos de cada celda.
[Leer Mas...] -
26/06/2016
Cuando se diseña una base de datos, se pueden cometer una serie de errores u olvidos que, posteriormente, nos pueden causar bastantes quebraderos de cabeza, o se puede dejar de utilizar algún recurso útil simplemente por desconocimiento. En este artículo os daré una serie de consejos que os pueden ayudar a diseñar y gestionar mejor vuestros datos y las aplicaciones que los manejan, sobre todo si sois principiantes.
[Leer Mas...] -
03/07/2016
Axis es una marca sueca, uno de los líderes mundiales en el mercado de cámaras IP para video vigilancia, que cuenta con un extenso catálogo de modelos de cámara que permiten cubrir prácticamente cualquier necesidad. Todos sus productos cuentan con un protocolo de acceso común vía HTTP, el protocolo VAPIX, basado en comandos CGI, lo que hace especialmente interesante conocerlo.
[Leer Mas...] -
09/07/2016
En algunas ocasiones, resulta necesario imprimir un código de barras en algún documento o etiqueta. Existen numerosos formatos y codificaciones, en una o dos dimensiones, dependiendo de la cantidad de información que deba ser leída por el terminal. En este artículo voy a mostrar tres de los formatos más comunes para códigos de una dimensión, así como proporcionar código en csharp para codificarlos.
[Leer Mas...] -
16/07/2016
Las placas Arduino, con una gran cantidad de salidas y entradas analógicas y digitales, nos permiten controlar dispositivos electrónicos desde un ordenador a través de un interfaz USB con una programación muy sencilla utilizando un lenguaje similar al C. Existen gran cantidad de módulos prefabricados para controlar motores, relés y todo tipo de sensores, pero, si te gusta la electrónica como a mí, también puedes diseñar y conectar tus propios circuitos analógicos o digitales.
[Leer Mas...] -
23/07/2016
Existe un problema muy común en programación lineal que consiste en hallar los valores que hacen máxima o mínima una función lineal, dadas una serie de restricciones para dichos valores. Por ejemplo, puede tratarse de hallar una función de coste mínimo o de máxima producción. Para ello, existe un algoritmo desarrollado en 1947 por George Dantzig, llamado Simplex, que permite realizar dichos cálculos de una forma simple y efectiva.
[Leer Mas...] -
31/07/2016
El Tableaux es una herramienta de cálculo lógico que resulta muy útil para demostrar una conclusión a partir de una serie de premisas, encontrar contraejemplos o modelos de un conjunto de fórmulas lógicas o demostrar que una fórmula es una tautología, es decir, que es verdadera en todos los casos posibles. Se pueden utilizar en inteligencia artificial como base para implementar demostradores automáticos de teoremas.
[Leer Mas...] -
19/08/2016
El Tableaux es una herramienta de cálculo lógico que permite comprobar la validez de una conclusión a partir de una serie de premisas. En el artículo anterior he explicado brevemente los fundamentos del cálculo con Tableaux para lógica de predicados, en este artículo voy a extender el programa a la lógica de primer orden, que tiene mucha más capacidad expresiva que la lógica de predicados, aunque esto también hace mucho más difícil el cálculo automático.
[Leer Mas...] -
02/09/2016
Muchos de los conjuntos de datos con los que solemos trabajar se presentan en forma de series temporales. Una serie temporal se puede ver como la evolución de un sistema dinámico, caracterizado por una serie de variables y parámetros. Dependiendo del tipo de dinámica que presente el sistema, las series pueden ser estacionarias, periódicas, cuasiperiódicas, caóticas o aleatorias. En esta serie de artículos, me centraré en la caracterización de la dinámica caótica, que es la que presentan los sistemas complejos, utilizando métodos gráficos.
[Leer Mas...] -
10/09/2016
Continuamos con la serie sobre caracterización gráfica de la complejidad en series temporales utilizando la aplicación auxiliar GraphStudy. En este artículo voy a mostrar cómo construir un gráfico con el que podemos distinguir de manera sencilla si una determinada función iterada genera series con una dinámica caótica, el diagrama de recurrencia.
[Leer Mas...] -
17/09/2016
En este nuevo artículo de la serie sobre caracterización gráfica de series temporales procedentes de sistemas dinámicos con dinámica caótica, voy a hablar de una forma de representar dichos sistemas en el dominio del espacio, de forma independiente del tiempo, el diagrama de fases. Con este tipo de diagramas, se pueden observar los atractores del sistema. Un atractor es un punto, una curva, en general, un conjunto de puntos al que convergen las ecuaciones del sistema, que nos permite hacernos una idea del comportamiento típico del mismo.
[Leer Mas...] -
24/09/2016
En este nuevo artículo de la serie dedicada a la caracterización gráfica de series temporales complejas voy a hablar de otras dos herramientas gráficas que pueden resultar útiles, el espectro de potencia de la señal, que obtendremos mediante la transformada de Fourier, y la gráfica con la distribución de valores de la serie, un simple histograma con la frecuencia de los diferentes valores que también nos puede ofrecer información sobre la dinámica de la serie.
[Leer Mas...] -
02/10/2016
Las redes neuronales recurrentes constituyen una herramienta muy apropiada para modelar series temporales. Se trata de un tipo de redes con una arquitectura que implementa una cierta memoria y, por lo tanto, un sentido temporal. Esto se consigue implementando algunas neuronas que reciben como entrada la salida de una de las capas e inyectan su salida en una de las capas de un nivel anterior a ella. En este artículo voy a mostrar cómo utilizar de una forma sencilla dos redes neuronales de este tipo, las de Elman y las de Jordan, utilizando el programa R.
[Leer Mas...] -
08/10/2016
En este nuevo artículo de la serie sobre series temporales con dinámica compleja, voy a mostrar un procedimiento para reconstruir aproximadamente la información de un sistema dinámico de dos o más variables a partir de una única serie, es decir, de un conjunto de datos en una sola dimensión. Lo que haremos será obtener a partir de esta única serie una nueva serie para cada una de las dimensiones con las que pretendemos extender el modelo.
[Leer Mas...]