JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

¿Qué es un deadlock o interbloqueo?

Cuando se trabaja en programación paralela o multisubproceso, una palabra que sale a colación cada dos por tres es "deadlock" (o un "interbloqueo" en castellano). Muchos porgramadores principiantes tienen dudas sobre qué son y cómo se pueden producir, por lo que, a raíz de la pregunta de un alumno de mi curso de fundamentos de C# y .NET, me he decidido a escribir algo que lo explique de manera simple pero efectiva. Un deadlock, es una situación difícil de reproducir, y se dará sólo en algunas circunstancias muy concretas, por eso son situaciones muy difíciles de prever y de depurar. Un ejemplo clásico de interbloqueo es el de una cuenta bancaria. Consideremos el caso de una clase para transferir dinero entre cuentas bancarias, algo así: class Cuenta { double saldo; void Retirar(double cantidad) { saldo -= cantidad; } void Ingresar(double cantidad) { saldo += cantidad; } void Transferir(Cuenta cuentaOr... [Más]

Efectuar la validación de varios formularios por separado en ASP.NET Web Forms

Hoy un truco rápido de principiante... Los grupos de validación surgen para suplir una limitación de los formularios HTML dentro de los formularios Web de ASP.NET. Y es que, por el propio modo de funcionar de los Web Forms, cada página ASPX sólo puede tener un único formulario (en el sentido de que no pueden disponer de más de una etiqueta <form> de HTML). Por ello, si realmente quieres tener en tu página un par de formularios colocados (por ejemplo, uno para darse de alta y otro para hacer login en tu sitio web), realmente sólo existe un único <form> por debajo. Lo normal es agrupar los controles dentro de un panel  para que visualmente se vean separados, y para que se comporten como si realmente fueran dos formularios independientes, las validaciones se hacen de forma separada también. Para conseguirlo se utiliza la propiedad ValidationGroup de los controles así como el control ValidationSummary. Ésta nos permite asociar la validación de un determinado control a un... [Más]

YouTube and Vimeo advanced viewer extensions for BlogEngine.NET

I was using the YouTubePlayer and VimeoPlayer extensions that come with BlogEngine.NET out of the box. They do a great work showing videos in desktop browsers, but I found some limitations that I wanted to overcome. So I decided to write my own extensions to substitute this two. The YoutubeViewer and VimeoViewer extensions that I've written offer the following features: Automatically embed a viewer for YouTube or Vimeo videos with a simple syntax. The basic syntax is and where XXXX is the video ID that you can get from the URL (squared in red in the images): The viewer adapt automatically to the capabilities of the browser used to browse your site. That means that they will be displayed correctly and full-featured even in mobile devices like iPhone, Android or iPad. From the Extensions tab of BlogEngine you can set the default values for the viewer's Width, Height, Border (Yes or No), Include related videos (YouTube only), Allow Full Screen (YouTube only), Title text ... [Más]

Cómo cambiar la clave del Key Ring por defecto en Ubuntu 10.10

Un fastidio en Ubuntu es que cuando cambias la clave de tu usuario, de repente empieza a pedirte que la introduzcas cada dos por tres cuando accedes a programas que almacenan claves en el sistema. Por ejemplo, yo utilizo Empathy como cliente de chat, y éste necesita la clave maestra del Key Ring por defecto para poder acceder a la información de las cuentas de chat y poder loguearse para ofrecer el servicio. Para cambiar la clave lo que hay que hacer es irse a “Sistema·Preferencias·Contraseñas y claves de encriptación” (yo uso todos mis sistemas en inglés, por eso la captura se ve en este idioma): Pulsa para aumentar Una vez abierto el programa nos vamos a la pestaña de contraseñas y en el nodo que hay ahí por defecto pulsamos con el botón derecho para elegir la opción de Cambiar la contraseña: Introducimos la clave vieja y dos veces la nueva haciéndola coincidir con la... [Más]

Simular notificaciones PUSH en una página Web

En mi último post describía la arquitectura que utilizan tanto iPhone como Windows Phone 7 para enviar notificaciones PUSH desde aplicaciones externas a los usuarios de los teléfonos. La comunicación entre el dispositivo y el servicio de notificaciones se basaba en una conexión “raw” permanentemente abierta entre ambos. Pero ¿cómo podemos simular algo así en una página Web? Hace poco un alumno de mi curso de preparación del examen 70-515 de desarrollo Web con tecnologías Microsoft, me preguntaba acerca de esta cuestión. En concreto la pregunta iba sobre sobre cómo conseguir el efecto de actualización automática de información que consiguen algunas páginas (como las de apuestas o de información bursátil) en las que el servidor envía información a los clientes sin que haya –aparentemente- una petición explícita... [Más]