JASoft.org

J-Integra for .NET: el puente entre dos mundos

J-Integra for .NET: el puente entre dos mundos
La empresa Intrinsyc, especialista en soluciones de interoperabilidad, ha presentado la nueva versión de su producto J-Integra for .NET. J-Integra for .NET Se trata de una tecnología que permite tender puentes entre los desarrollos de nuestra empresa escritos en Java y los realizados con .NET. Al contrario que otros productos de esta índole, no se limita a habilitar las comunicaciones entre aplicaciones basadas en estas tecnologías (cosa relativamente fácil de conseguir hoy en día gracias a los Servicios Web), sino que realmente permite reutilizar los componentes de ambas indistintamente. Así nuestras bibliotecas escritas en Java se pueden utilizar directamente desde código escrito para la plataforma .NET (C#, VB.NET, etc...) como si fueran componentes nativos para esta tecnología e incluso desde Visual Studio. Al revés la afirmación es también cierta ya que permite usar cualquier componente .NET desde código Java como si se tratase de componentes nativos de este lenguaje ... [Más]

Cómo impedir que una aplicación se ejecute más de una vez

Cómo impedir que una aplicación se ejecute más de una vez
La mejor manera de conseguir que sólo pueda existir una copia de una determinada aplicación ejecutándose en cada instante en un equipo es mediante el uso de Mutexes. Los Mutexes son objetos del sistema operativo pensados para sincronizar procesos y subprocesos. La siguiente función permite averiguar mediante el uso de un Mutex si la aplicación se está ejecutando o no: public bool EnEjecucion(){   Mutex miMutex = new Mutex(false, "NombreÚnicoDeMiAplicación");   return = !miMutex.WaitOne(0, false);} Su funcionamiento se basa en establecer un Mutex con un nombre único y dependiente de nuestra aplicación, y posteriormente en la segunda línea, solicitar su propiedad con la función WaitOne. Este método devuelve true si el proceso se ha apoderado con éxito de él y false si no es así. Dado que la primera instancia de la aplicación se apodera de él ya no está disponible para las siguientes hasta que ésta primera termine, por lo que las siguientes obtendrán un false al usar WaitOne. Sencil... [Más]

Una diferencia importante entre los Bucles 'for' en C# y VB.NET

Una diferencia importante entre los Bucles 'for' en C# y VB.NET
Consideremos el sigueinte bucle 'for' escrito en C#: int n = 10;   for (int i=0; i < n; i++)  {   Console.WriteLine(i.ToString());   n--;  } Muy sencillo. La pregunta es: dado que dentro del bucle modificamos el valor de la variable "límite" (n), ¿cuántas veces se ejecutará? ¿10 o 5? Parece una pregunta tonta pero no lo es tanto. Depende de cómo se haya implementado internamente el bucle en el compilador de C#. Es posible que se ejecute 10 veces si el bucle almacena el valor al principio y en cada vuelta compara con este valor incial (esto puede ser más eficiente en muchos casos). Por otra parte si se compara el valor real en cada vuelta en realidad el bucle se ejecutará sólo 5 veces. La respuesta a la pregunta es la siguiente: en C# el valor real se compara en cada vuelta por lo que el bucle se ejecutará sólo 5 veces. Si por el contrario consideramos el mismo bucle escrito en VB.NET (o, para el caso VB Clásico o VBScript): Dim n As Integer = 10  Dim i As Integer  For i = ... [Más]

Transferencia de información entre páginas llamadas en secuencia

Transferencia de información entre páginas llamadas en secuencia
Un problema que se plantea muchas veces a los programadores de ASP.NET y que, normalmente, les cuesta solucionar es el siguente: Disponemos de una página que realiza determinadas consultas a una base de datos o recopila un volumen relativamente grande de información en su código. Tras procesarla (o en un PostBack) debemos llamar a otra página ASPX que debe utilizar la misma información costosa de obtener. ¿Qué hacemos? Existen muchas posibles soluciones, sólo que la mayoría no nos sirven de mucho o presentan muchos problemas. Entre otras tenemos las siguientes, que seguramente serían las que intentaría un programador de ASP clásico: Hacemos que la segunda página vuelva a recuperar los mismos datos. En fin, no arreglamos nada así. Metemos la información en un campo oculto de un formulario y lo enviamos por POST a la siguiente página. Esto es aún peor. Tiene un costo alto de ancho de banda y velocidad de descarga, es muy propenso a errores y problemas de seguridad y no es adecuad... [Más]

Diferencias al usar Clases y Estructuras en matrices

Diferencias al usar Clases y Estructuras en matrices
No voy a entrar aquí a explicar las diferencias "de bulto" entre clases y estructuras en .NET. Todo programador de la plataforma debería conocerlas pues es lo primero que se aprende. Sin embargo sí me gustaría resaltar una cuestión simple consecuencia de sus diferencias y que a muchos les puede pasar inadvertida. Se trata del comportamiento obtenido al instanciar una matriz. Imaginemos que tenemos una sencilla estructura como esta: struct Usuario{   public string Nombre;   public string Apellidos;} Si creamos una matriz de estructuras de este tipo así: Usuario[] usuarios = new Usuario[10]; podremos inmediatamente asignar valores a cada elemento de la matriz, ya que la estrucutra al ser un tipo por valor está disponible para que la usemos: usuarios[0].Nombre = "Pepe"; //No fallará Sin embargo si cambiamos la definición de Usuario conviertiéndola en una clase: class Usuario{   public string Nombre;   public string Apellidos;} El código de asignación anterior fallará deb... [Más]

Kit de desarrollo gratuito para TabletPC

Kit de desarrollo gratuito para TabletPC
El SDK para TabletPC que proporciona Microsoft está muy bien y comenzar a desarrollar aplicaciones con él no es complicado. Sin embargo hay ciertas cosas que no son tan fáciles de hacer como debería ser. Por ejemplo, si tienes un TabletPC o has jugado con alguno conocerás y amarás la aplicación Journal (o si tienes Office pues entonces OneNote). Intenta meter toda la funcionalidad de Journal en una de tus aplicaciones. Te reto ;-) La cosa ya no es tan fácil ¿verdad? Pues para ponértelo liso y llano la empresa Agilix ofrece su producto InfiNotes para Visual Studio. Lo que hace es incluir unos espectaculares controles que sólo con arrastraR y soltar ofrecen todo tipo de impresionantes características para hacer aplicaciones para TabletPC. Hacer una réplica de Journal es casi inmediato. El producto tiene dos versiones, la Standard y la Professional. La Standard es gratuita y la puedes descargar desde su página inmediatamente. En realidad la paga Microsoft para facilitarte que crees ... [Más]

Windows Scripting Host para .NET

Windows Scripting Host para .NET
No sé hasta que punto es conocido por los programadores (no así para los administradores de sistemas) esa pequeña joya del sistema operativo llamada Windows Scripting Host (WSH). WSH permite ejecutar directamente con un doble-click código escrito en un lenguaje de script tradicional (VBScript y JScript sobre todo) y llevar a cabo así multitud de tareas automatizadas, no relacionadas a la fuerza con la administración de sistemas. De hecho yo lo uso a menudo para probar código de todo tipo, hacer prototipos rápidos de algoritmos, automatizar muchas cosas (desde cargas de datos hasta procesamiento de directorios o cifrado de archivos pasando por monitorización de servidores). Es realmente útil porque permite el uso de cualquier objeto COM automatizable, lo cual incluye ADO o incluso aplicaciones como Excel o Word. Como también se pueden usar sus archivos (con extensión .vbs, .js o .wsh) en el administrador de tareas programadas sirve incluso para realizar tareas periódicas (mis copias de... [Más]

En todas partes se hacen chapucillas de vez en cuando...

En todas partes se hacen chapucillas de vez en cuando...
Brad Adams es uno de los que estuvo en el desarrollo de la plataforma .NET desde el principio, en 1998, y que también ha participado en el desarrollo de Longhorn. Me ha llamado la anteción leer en su Blog personal un post que habla del porqué de la existencia de un método DontTouchThis() en la clase Int32 y en otras similares dentro del código fuente de Rotor (la implementación de código abierto de la plataforma .NET). Parece ser que lo hacen exclusivamente para que el compilador no les lance una advertencia por tener un miembro privado que aparentemente no se usa y que en realidad sirve para almacenar el valor asociado a la clase. Es una tontería pero me ha parecido curioso comprobar cómo incluso en productos tan trabajados como .NET sus experimentados programadores hacen chapucillas como esta de vez en cuando. Yo os aseguro que si tengo que hacer algo similar para salir del paso acabaría pensando que seguro que hay una forma mejor (o correcta) de hacerlo y que se me está escapando ... [Más]

Cambiar el propietario de una tabla de SQL Server

Cambiar el propietario de una tabla de SQL Server
Cuando restauramos una copia de seguridad de una base de datos de SQL Server desde un servidor a otro diferente es posible que los propietarios de las tablas de la base de datos recién restaurada no coincidan con el propietario que tenemos en el resto de bases de datos o con el de las tablas del sistema. Si deseamos establecer de forma manual el propietario de una tabla (o en general de cualqueier objeto) de SQL Server podemos recurrir al procedimiento almacenado sp_changeobjectowner. Basta con abrir el analizador de consultas y escribir: sp_changeobjectowner 'propietario.tabla', 'nuevo_propietario' para cambiarlo. Por ejemplo: sp_changeobjectowner 'usuario.Articulos', 'dbo' cambiaría el propietario a 'dbo', es decir, el propietario por defecto de los objetos de una base de datos y el que normalmente se utiliza.

Cortocircuito de expresiones y su importancia

Cortocircuito de expresiones y su importancia
Se trata esta de una observación que, aunque obvia, en muchos casos puede pasar inadvertida y me parece por tanto interesante destacarla aquí. Las expresiones condicionales en C# se cortocircuitan. Esto quiere decir que se detienen las comprobaciones en cuanto no es necesario comprobar el resto de condiciones por haber hecho suficientes pruebas para determinar el resultado. Me explico. Todo el mundo sabe que para que una condición AND proporcione un valor positivo (true) ambas condiciones que se comprueban deben ser positivas (true). Por ello, cuando C# encuentra una condición AND, y verifica que la primera de las dos condiciones que se comparan es falsa, automáticamente deja de comprobar la que falta, puesto que aunque fuese cierta el resultado será falso al serlo ya la primera y, entonces, ¿para qué seguir perdiendo el tiempo?. Lo mismo ocurre con los otros tipos de operadores booleanos. Por ejemplo, en una expresión O... [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