JASoft.org

Registro automático de cambios en una tabla desconectada

Registro automático de cambios en una tabla desconectada
Como es bien sabido la clase DataSet de .NET (dentro del espacio de nombres System.Data), permite utilizar de manera sencilla y potente un pequeño gestor de datos en memoria, sin necesidad de haber obtenido por fuerza los datos a partir de un gestor de datos convencional. El objeto DataSet puede haber sido creado dinámicamente por nosotros o se puede haber generado para trabajar en memoria con tablas y relaciones obtenidos de una fuente de datos relacional, por ejemplo. Un DataSet contiene, entre otras cosas, una colección de objetos DataTable que, como puede imaginar, son equivalentes conceptualmente a las tablas o relaciones en una base de datos relacional. No voy a entrar aquí a explicar todas las características de este tipo de objetos, pero sí me gustaría recordar que generan dos eventos con el fin de notificar de los cambios que sufren. Estos eventos son RowChanged y RowDeleted, y se lanzan cuando se cambia algún valor  o cuando se elimina una fila de la tabla respectivamente. ... [Más]

Cómo saltarse la protección de los cortafuegos por software

Cómo saltarse la protección de los cortafuegos por software
Me ha llamado poderosamente la atención este artículo del reciente número 62 de Phrack Magazine. En él se estudian los fundamentos del funcionamiento de los cortafuegos por software en el sistema operativo Windows. Después se ilustran dos métodos que un virus o programa mailintencionado podría emplear para comunicarse con el exterior de un sistema protegido, anulando el cortafuegos. Aunque no seas un programador de virus seguro que puedes aprender algo nuevo con él (te advierto es algo "espeso").

Cómo generar identificadores (GUID) en .NET

Cómo generar identificadores (GUID) en .NET
Un GUID es un conjunto de números que constituyen un identificador único (Global Unique IDentifier), es decir, que tiene la particularidad de que es imposible (al menos en teoría) generar otro idéntico aunque usemos el mismo algoritmo. Sus utilidades son muchas pero obviamente todas se refieren a la necesidad de identificar de manera úica alguna entidad, dato u objeto, de forma que lo podamos distinguir de cualquier otro independientemente de cómo, cuándo y dónde haya sido generado. Es especialmente útil en aplicaciones de bases de datos para identificar de manera única registros de diversas tablas (o de una sola si no usamos autonuméricos). Antes de .NET, sobre todo si programabas con Visual Basic, un truco muy socorrido para generar este tipo de GUID era utilizar SQL Server para generarlos, empleando la siguiente consulta: SELECT NEWID() que devuelve expresiones similares a esta: 9035DEC7-A6C2-4B1B-AA99-37401965E7C0 Lo malo es que si no teníamos SQL Server no nos servía el tru... [Más]

Modelado de amenazas: herramientas y referencias

Modelado de amenazas: herramientas y referencias
El modelado de amenazas es el proceso de análisis de las aplicaciones, previo a su desarrrollo, que nos permite diseñar nuestras aplicaciones desde el punto de vista de la seguridad. A pesar de su importancia un gran porcentaje de los programadores no tienen en cuenta la seguridad de las aplicaciones cuando programan, y los arquitectos de soluciones tampoco suelen hacer un análisis formal de este aspecto. Se tiende a pensar que la seguridad es un problema de los administradores de sistemas, cuando en realidad una aplicación mal desarrollada puede ser el mayor problema de seguridad existente en una empresa por muy bien protegidos que se encuentren los sistemas y las comunicaciones. El libro Writing Secure Code 2nd Edition (de lectura obligatoria en Microsoft), en su capítulo 4 introduce la importante técnica llamada "Modelado de amenazas" que persigue minimizar los riesgos inherentes a la falta de seguridad atajándola desde el propio diseño de las aplicaciones. Ahora acaba de aparece... [Más]

Snippet Compiler: se acabó abrir Visual Studio para cualquier tontería

Snippet Compiler: se acabó abrir Visual Studio para cualquier tontería
Este programita me lo recomendó el otro día un amigo y la verdad es que me pareció estupendo. Situación típica de programador: te surge una duda de programación y quieres hacer una pruebecilla tonta de código para comprobar cómo funciona algo, probar una función o una clase .NET. ¿Qué haces?: o eres de esos "machotes" que programa directamente en la línea de comandos y usa los compiladores con todas las opciones, o si eres un vago como yo abres Visual Studio .NET, creas un proyecto del tipo adecuado y pruebas el código con toda la comodidad del entorno: depuración, ayuda contextual, etc.. ¿verdad? El problema es que haciéndolo así creas un montón de proyectos tontos que no valen para nada después de usarlos, que se quedan en el disco duro, crean directorios virtuales en IIS (en el caso de aplicaciones ASP.NET) y aparecen después en la página principal cada vez que abres el entorno. A lo mejor piensas que soy un maniático, pero a mi me molesta un montón. La solución: Snippet Compil... [Más]

Cómo conectarse a un archivo de texto CSV con ADO/OLEDB

Cómo conectarse a un archivo de texto CSV con ADO/OLEDB
Últimamente me encontré con este problema en una integración y, aunque parece un tontería, lo cierto es que tiene más miga de la que parece... Tras haber investigado un poco y a base de prueba y error llegué a las siguientes conclusiones que considero bastante interesantes. Para conectarse a un archivo de texto CSV desde ADO/OLEDB como si se tratase de una base de datos se debe utilizar una cadena de conexión especial. Si se trata de un archivo CSV con encabezados, es decir, que lleva en su primera fila los nombres de los campos la cadena de conexión a utilizar es la siguiente: "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=Ruta_a_la_carpeta_contenedora_del archivo;Extensions=asc,csv,tab,txt;HDR=NO;Persist Security Info=False" Si, por el contrario, el archivo de texto no tiene cabeceras con nombres de columnas la cadena de conexión adecuada es la siguiente: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Ruta_a_la_carpeta_contenedora_del archivo;Extended Properties='text;HDR... [Más]

Resolución de problemas de comunicación con Oracle desde ADO/OLEDB

Resolución de problemas de comunicación con Oracle desde ADO/OLEDB
Cuando se intenta conectar mediante ADO/OLEDB con una base de datos Oracle 9i utilizando los componentes de cliente de esta versión del gestor de datos, se obtiene continuamente un error que dice que las bibliotecas de red y comunicación de oracle no están instaladas. Se trata de un problema bastante desesperante porque no hay pistas de porqué se produce y todo parece estar bien instalado.El mensaje de error que obtenemos dice: "The Oracle(tm) client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3 (or greater) client software installation." El problema se debe a que, tanto las bibliotecas de cliente de Oracle (las que vienen en el CD o el Instant Client que se puede descargar desde la Web de Oracle) como el propio MDAC introducen mal en el registro las entradas que indican al controlador OLEDB qué bibliotecas de Oracle debe utilizar. Lo que está en el registro se corresponde siempre con una versión a... [Más]

Cómo capturar el error 'ASP 0113': Script Timed Out

Cómo capturar el error 'ASP 0113': Script Timed Out
El error de "tiempo de ejecución de Script superado" es el único que no se puede capturar en una página Web debido a que, si el Script tarda mucho, IIS termina su ejecución y por lo tanto, por definición, no podemos capturarlo desde nuestro propio Script.Sin embargo existe un truco muy interesante que nos permitirá hacerlo sin problemas. Se trata de utilizar el modo transaccional de las páginas Web ASP. En este modo, si el script falla por cualquier razón (incluyendo la de que tarde mucho en ejecutarse), el sistema revoca la transacción y llama siempre a la función OnTransactionAbort(), que debe existir en la página. Esto lo podemos aprovechar para hacer lo que queramos tras el error. Por ejemplo, el siguiente código captura el error y muestra un mensaje cuando se produce un "Script timeout": <%@ TRANSACTION=Required LANGUAGE="VBScript" %> 'Esto la convierte en transaccional <HTML> <BODY BGCOLOR="White" topmargin="10" leftmargin="10"> <font size="4" ... [Más]

Implementación sencilla de una interfaz con C# en VS 2003

Implementación sencilla de una interfaz con C# en VS 2003
Esto es un truco bastante útil para ahorrar tiempo programando en C# si usas Visual Studio .NET 2003 y necesitas implementar interfaces en tus objetos. Cuando vas a crear una clase que implementa una o más interfaces, deberás obviamente generar todos los métodos de éstas en la nueva clase. Es esta una tarea muy tediosa si la interfaz en cuestión tiene muchos métodos puesto que tienes que escribirlos a mano. Visual Studio 2003 tiene una característica nueva que es muy fácil que se nos pase por alto y es que, cuando escribes el nombre de la interfaz en la lista de derivación de la clase ( o sea, después de los consabidos dos puntos) basta con presionar la tecla TAB para que se genere el esqueleto de la interfaz automáticamente por nosotros y dentro de una región ya "encogida": Pulsa sobre la figura para ampliarla Aunque te lo indica el entorno mediante un "Tooltip" es bastante fácil pasarlo por alto y hacer lo mismo de siempre. Esto puede ahorrarte mucho tiempo.

Nueva e interesante aplicación de ejemplo - FotoVision

Nueva e interesante aplicación de ejemplo - FotoVision
Microsoft acaba de medio-publicar un nuevo ejemplo que es realmente interesante. Y digo medio publicar porque en el momento de escribir esto todavía no es oficial y de hecho los enlaces de la portada no funcionan bien. Sin embargo es fácil conseguir acceder a los archivos y bajarse la aplicación. Se trata de un ejemplo bastante extenso de un servicio a priori simple: la construcción de una galería de fotos e imágenes en Internet. Sin embargo han construido un ejemplo con vocación empresarial y nada básico que conlleva la programación de aplicaciones de escritorio, aplicaciones Web, aplicaciones para la Compact framework y por supuesto servicios Web. En la siguiente figura podéis ver algunas capturas. El ejemplo está lleno de detalles de calidad y código interesante (por ejemplo código para manipulación de imágenes o código para evitar los SPAM-Bots). La aplicación de Pocket PC sincroniza y guarda para visualizar off-line las imágenes e incluso permite hacer anotaciones sobre ellas... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico