JASoft.org

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

MENÚ - JASoft: JM Alarcón

Detectar si hay conectividad en el equipo (Método 3)

Siguiendo con esta serie vamos a ver el tercer método para conseguir detectar conectividad. Este es un poco rebuscado, y para ser franco no se me ocurrió a mi ni tampoco recuerdo ahora mismo en dónde lo aprendí o quién me lo contó :-( Pero bueno, ahí va... Este pasa por comprobar si hay resolución DNS, y parte de la base (deduzco) de que el equipo local no es un servidor DNS, claro. Entonces lo que se hace es comprobar si se puede hacer la resolución de la IP del equipo actual, ya que si hay conectividad se puede consultar el servidor DNS. El código sería el siguiente:    public static bool IsConnected3     {         get         {             try             {             &nb... [Más]

Detectar si hay conectividad en el equipo (Método 2)

En mi post anterior sobre este tema hablé de un primer método de detección basado en la APi de Windows. Hoy me toca hablar de otro similar, si bien usando una API completamente diferente. Los restantes métodos que veremos no necesitan ya el uso de la API. En esta ocasión usaremos la API del servicio de notificación de eventos del sistema, o sea, la System Event Notification Service (SENS) API. En concreto haremos uso de la función IsNetworkAlive, que se define así: [DllImport("sensapi.dll")]private static extern bool IsNetworkAlive(ref uint flags); Este método devuelve verdadero o falso en función de si hay o no conexión a la red. ¡Ojo!, a la red, no necesariamente a Internet, pero en muchas ocasiones lo que querremos es eso (si trabajamos sólo en una red local). Así, podemos definir nuestra propiedad IsConnected con esta función así: public static bool IsConnected2 {     get     {        &n... [Más]

Vídeo de campusMVP sobre las nuevas certificaciones de Visual Studio 2008

Hola holita vecinitos: Es posible que, ante la inminente aparición en el mercado español de Visual Studio 2008, si estás pensando en obtener una certificación te encuentres en un mar de dudas respecto a qué es mejor hacer, cómo va a afectar la nueva versión de la plataforma en las certificaciones, y muchas otras cuestiones por el estilo. Con el comienzo del año muchos han sido los alumnos de campusMVP que nos han llamado o escrito preguntándonos cosas como estas, pero no había apenas información pública al respecto por parte de Microsoft. Por fin, el pasado jueves por la tarde tuvimos la oportunidad de participar en una conferencia con los responsables de estas certificaciones en Redmond. Al día siguiente yo mismo ofrecí en Madrid una explicación sobre todas estas novedades, la cual se grabó en directo y desde campusMVP la hemos puesto a disposición de todos en Internet. En este (creo que) completo vídeo explico el estado actual de las certificaciones para desarrollad... [Más]

Detectar si hay conectividad en el equipo (Método 1)

Últimamente he estado trabajando bastante con la nueva API de Sincronización de Microsoft (Microsoft Sync Framework) que ahora mismo se encuentra en CTP (Community Technology Review), es decir, todavía no es la versión definitiva (pero casi). Esta plataforma te permite crear aplicaciones capaces de trabajar conectadas o desconectadas, y además sincronizar bases de datos, carpetas locales y remotas o información RSS se convierte en un trabajo sencillo. La API es bastante extensa y no voy a hablar de ella aquí (pronto leereis un artículo mío sobre el tema en DotNetMania). En lo que me quiero centrar es en el hecho de que, para trabajar desconectado, primero hay que saber qué realmente lo estamos ¿no? De hecho en la API no hay referencia alguna a esto, y muchos de los que la usen se preguntarán "vale, ya sé trabajar en local cuando no hayconexión y sé cómo sincronizarla con una remota (o con la de cualquier otro equipo en redes P2P también soportadas por la API) cuando recupere la conexi... [Más]

Novedades lenguaje C# 3.0 (III): Declaración implícita de tipos

En mi post anterior sobre novedades de C# 3.0 hablé sobre los tipos anónimos. En el ejemplo de código use una palabra clave nueva, 'var', cuyo significado dejé para hoy. Algún lector asiduo se adelantó ademas preguntando algo sobre cómo se determinaban los tipos de las propiedades de las clases anónimas así definidas. La nueva palabra clave 'var' sirve para declarar variables locales sin indicar su tipo. Así podemos escribir, por ejemplo: var i = 1; var nombre = "JM"; var personajillo = new PersonaHumana("Perico", "De los palotes", 42) Es muy parecido a la sintaxis de JavaScript, pero con una importante diferencia: el hecho de que no indiquemos el tipo no quiere decir que no lo tengan, ya que C# sigue siendo un lenguaje fuertemente tipado. Lo hace var no es declarar una variable sin tipo, sino que declara la variable con el tipo adecuado para contener el dato indicado, siendo dicho tipo deducido a partir del valor. Así en el código anterior 'i' será un entero, 'nombre' será una c... [Más]

Nuevos cursos de campusMVP y nuevas convocatorias de cursos de certificación

Hola a todos: Este mes tenemos varias novedades en campusMVP, como seguramente ya muchos habréis visto en el boletín, pero las reflejo aquí también... La primera es que hemos lanzado nueva convocatoria de nuestros cursos de certificación. Comienzan el día 1 de febrero. Disponemos del curso 70-536 de fundamentos, la base para todas las certificaciones de desarrollo (tanto en C# como en VB), el 70-528 de desarrollo Web, el 70-540 de aplicaciones móviles y el 70-431 de SQL Server. También como no, el exitoso 70-290 de Windows Server 2003. Más información sobre los cursos de certificación. La otra novedad es la disponibilidad de dos nuevos cursos on-line que estamos seguros de que van a gustar ya que son resultado directo de vuestras peticiones: · Desarrollo de aplicaciones Web mejoradas con AJAX. Podrás crear aplicaciones Web  con características avanzadas similares a las de escritorio: arrastrar y soltar, regiones desplegables, tareas asíncronas, interfaz rápida y sin... [Más]

Novedades lenguaje C# 3.0 (II): Tipos anónimos

Siguiendo con las serie de post sobre C# 3.0 y sus novedades hoy le toca el turno a los tipos anónimos. Los tipos anónimos nos permiten definir clases de un solo uso dinámicamente, lo cual tiene una importancia vital en el manejo de resultados de consultas LINQ. De hecho, si no me equivoco, se añadieron al lenguaje precisamente para ello. Una clase anónima se define con la palabra clave new, igual que una clase normal, pero no se le da nombre (de ahí lo de anónima) y se crea sobre la marcha a partir de los datos que se le pasen al constructor. Por ejemplo: var nuevoMVP = new { Nombre = "José Manuel Alarcón", Especialidad = "ASP.NET", PrimerAño = 2004 }; Ahora ya podemos usar la variable 'nuevoMVP' como si hubiésemos instanciado una clase definida en el código de manera normal, por ejemplo: Console.Write(nuevoMVP.Nombre); Esto permite manejar datos "sintetizados" dinámicamente como resultados de consultas LINQ que contengan campos arbitrarios obtenidos desde la fuente de datos sub... [Más]

AJAXInterceptor: convierte tus aplicaciones Web a AJAX sin escribir una sola línea de código

Estos días he estado trabajando unas cuantas horas de mi (poco) tiempo libre en una idea que tuve ya hace bastante tiempo. Se puede resumir con sólo una frase: crear una pequeña biblioteca JavaScript que, añadida a tu página Web (PHP, ASP, ASP.NET...) la dotará automáticamente de funcionalidad AJAX, sin que tengas que escribir ni una sola línea de código. Pensé que iba a resultarme mucho más dificil, pero lo cierto es que ha sido bastante fácil de conseguir. Ahora ya la puedo presentar para que el que quiera se descargue el resultado: AJAXInterceptor 0.5 Beta. Sólo con añadir este pequeño módulo JavaScript al final de tus páginas consigues que los envíos de tus formularios se intercepten (de ahí el nombre), y en lugar de enviarse la petición al servidor de la manera normal, se hacen de manera asíncrona y en un modo suave estilo AJAX. Dado que es una biblioteca de lado de cliente funcionará con cualquier tecnología de servidor: ASP.NET, PHP, JSP, Classic ASP... e incluso con archivo... [Más]

AJAXInterceptor: AJAX-enable your web apps without writing a single line of code

These last days I've been working a few hours of my spare time on a idea I had long time ago. It can be summed up in just one sentence: to write a small JavaScript library that added to your Web page (PHP, ASP, ASP.NET...) will enable it to be AJAX-enabled without you needing to write a single line of code. I thought that it would be more difficult, but the fact is that it's been quite easy to achieve. Now I can present it for you to freely download the result: AJAXInterceptor 0.5 Beta. Just by adding this small JavaScript module to the end of your web pages, you get your form's submissions intercepted and, instead of sending request to the server in the usual way, they are done asynchronously and in an AJAX-style smooth way. As long as it is a client-side library it will work with any server technology: ASP.NET, PHP, JSP, Classic ASP... and even with local HTM files. However I've only tested it against ASP.NET and ASP 3.0 applications (please, drop me a line if you test it with o... [Más]

Novedades lenguaje C# 3.0 (I): Propiedades automáticas

Tengo intención de repasar estos días brevemente algunas novedades que trae la versión 3.0 del lenguaje C#, que viene con .NET 3.5 y con Visual studio 2008. Hay un poco de todo: cosas sencillas y complejas pero todas interesantes. Las intercalaré con algunos otros posts normales que se me vayan ocurriendo. Hoy, como primer post sobre el tema, voy a describir algo muy sencillo pero de gran utilidad: las implementación automática de propiedades. Generalmente cuando definimos una propiedad de C# debemos declarar una variable privada para contener los valores, así como sus métodos set y get para asignarla y recuperarla. Si no necesitamos añadir lógica y la propiedad sólo es un envoltorio deuncampo privado (algo super-común) avabamos repitiendo todo el tiempo multitud de código como este: private string _nombre; public string Nombre { get { return _nombre; } set { _nombre = value; } } Un verdadero "peñazo" para hacer todo el tiempo lo mis... [Más]