.Net

Mi maquina – Ubuntu Desktop 10.04

Estoy preparandome para mi nueva etapa de programador freelance y aparte de las ganas, se necesita un buen equipo con el que poder trabajar. Tengo varias opciones, pero me he decantado por instalar un Ubuntu en el pc. Por que un Ubuntu? sencillo, Ubuntu es una distribución libre de Linux, algunos dicen que es el el Windows de Linux. La realidad es que Ubuntu es, creo yo, es la distribución mas utilizada de Linux, esta basada en Debian y tiene una alta cantidad de paquetes de aplicaciones, de drivers, documentación, soporte, etc. aparte de todo esto, me permite trabajar con infinidad de tecnologías, que en principio son comunes, por ejemplo puedo trabajar con .net, php y java, que vienen siendo las mas utilizadas.

Para poder trabajar en el desarrollo web son necesarios 4 programas esenciales:

  • Monodevelop: ide de desarrollo para .net en general, tanto de aplicaciones de escritorio con gtksharp, como de asp.net
  • Chrome: navegador rápido, seguro y el inspector me gusta mas (que no digo que sea mejor) que el firebug de firefox
  • Firework: programa de edición gráfica vectorial, ideal para dar esos arreglillos a la web con 4 imágenes rápidas
  • Netbeans: por ser el ultimo no es el menos importante. Este ide es muy potente y permite trabajar con proyectos en c, c++, java, php, python, ruby, cosa me deja casi todo cubierto menos .net que lo cubre monodevelop

Con esto se puede trabajar perfectamente para realizar casi cualquier web en casi cualquier lenguaje y situación y realizar algún apaño rápido. Ademas de esto, le sumamos a Ubuntu configurado con Compiz, con los 4 escritorios en cubo, con buenísimos efectos 3d y cairo-dock para que funcione de manera similar a mac, tenemos un gran equipo de trabajo, liviano pero bonito, potente y gratuito y lo mejor de todo, compatible con tecnologías de Windows y Mac.

Os dejo unas capturas de pantalla de como se ve, aunque no han salido muy bien.

Char curiosidad de IsLetter e IsDigit

El otro día, nos disponíamos mi jefe y yo a realizar un control sobre un campo de texto de una aplicación web. La idea era que en este campo solo se pudiera incluir texto o números, pero en ningún caso debería de poderse incluir caracteres raros. Seamos sinceros y siempre que hemos necesitado usar esto en lenguajes donde su framework no estaba preparado para diferenciar que tipo de carácter era, acabamos o bien creando un array diccionario y comparando los caracteres o bien usando expresiones regulares. Como no, desde el salto a tecnología de Microsoft (en este caso Visual Basic .Net) me propuse buscar alguna clase o método que hiciera solo lo que quería hacer, y la encontré.

En .Net existe la clase Char, que tiene el método Char.IsLetterOrDigit (boleano) donde le indicas un char o carácter y este te devuelve true o false si es un número o letra y false si no lo es. Monto una función para recorrer carácter a carácter del campo de texto comprobando si es alfanumérico o no, con la idea de borrar los caracteres que no sean alfanuméricos. Una vez montada la función, la pruebo unas cuantas veces y todo funciona estupendamente. Cuando nos vamos a disponer a subir a producción… sorpresa, la última prueba a fallado (pero es imposible), se nos deslizo el dedo y por poner un «1», pusimos un «º». Cuando nos ponemos a investigar (ha probar con jabatos) nos damos cuenta de que esta función, establece que los caracteres «º» y «ª» son alfanuméricos, vamos que son letras, supongo que la «o» y la «a».

Por supuesto esto lo controlamos y listo, pero si alguien se encuentra en nuestra misma situación y conoce alguna función que si trabaje correctamente que lo comente. Y si alguien buscando por internet se encuentra bloqueado y se ve encuentra con este post, ya puede respirar tranquilo, porque no es que funcione mal, es que no funciona del todo bien. (Si, ya se que para algunos «º» y «ª» son letras, pero realmente son caracteres especiales)

Bucle do-while en VisualBasic

Llevo tiempo currando con Visual Basic .Net, pero como persona formada desde hace años en lenguajes tipo C (C, C++, Java, C#, PHP, etc) el paso a programar en Visual Basic, cuesta mucho y cosas tan cotidianas como hacer un bucle, un switch o similares pueden convertirse en una peligrosa trampa que nos consumira muchos minutos muy valiosos.

La ultima que me he topado ha sido el bucle do while. En cualquier lenguaje tipo C, practicamente independiente del lenguaje estos bucles son iguales:

  do {
    sentencias
  } while(condicion);

Pero como no, estamos con Visual Basic y aqui todo funciona de manera diferente, es como nuestro tipico amigo que siempre lleva la contraria a todo. Por ejemplo para hacer un bucle do-while (me sorprende que en 9 meses sea la primera vez que me vea obligado a hacerlo, el bucle es do-loop-while, siendo su sintaxis

  Do
    sentencias
  Loop While condicionn

Puede que la gente que conozca o programe en Visual Basic lo vea una tonteria, pero para gente como yo que por razones laborales se ven obligadas a programar en dicho lenguaje y que por muchos meses se que lleve sigan prefiriendo C# a VB.Net, cosas tan cotidianas pueden convertirse en un minimundo.

Ya de paso y para aprovechar el post, explico que los bucles do while, son bucles que se recorreran igual que los while, en funcion de una condicion que de ser cierta dara una vuelta mas al bucle y que la principal diferencia entre los bucles while y do while, radica en que el while, primero comprueba la condicion antes de hacer una iteracion al bucle, mientras que los do while primero dara una iteracion al bucle y al final comprobara si debe de seguir haciendo iteraciones. Dicho de otro modo, el el while, primero comprobamos que debemos entrar al bucle y de ser cierto, entramos, en los do while, primero entramos al bucle y al final de este comprobamos si debemos dar una vuelta mas.

Controlar eventos de Windows en C#

En .Net hay una clase que dispone de una serie de eventos propios del sistema operativo, que nos permite manejar o ser advertidos de ciertas modificaciones en el mismo, como podría ser el caso de modificaciones de hora, pantalla, etc. De esta forma podremos aplicarlas sobre la aplicación y que esta no haga extraños cuando se modifica algo en el sistema.

La clase encargada de eventualizar ciertas acciones del sistema operativo se encuentra dentro del espacio de nombres Microsoft.Win32 y se trata de la clase abstracta y no heredable SystemEvents. Esta clase provee de los diferentes tipos de eventos que listo a continuación con una breve descripción.

  • DisplaySettingsChanged: se produce cuando el usuario cambia la configuración de pantalla.
  • DisplaySettingsChanging: se produce cuando la configuración de pantalla esta cambiando.
  • EventsThreadShutdown: se produce antes de que finalice el subproceso que escucha los subprocesos del sistema.
  • InstalledFontsChanged: se produce cuando el usuario agrega o quita fuentes del sistema.
  • LowMemory: se produce cuando el sistema se queda sin memoria RAM disponible.
  • PaletteChanged: se produce cuando el usuario cambia a una aplicación que utiliza una paleta diferente.
  • PowerModeChanged: se produce cuando el usuario suspende o reanuda el sistema.
  • SessionEnded: se produce cuando el usuario cierra sesión o apaga el sistema.
  • SessionEnding: se produce cuando el usuario intenta cerrar sesión o apagar el sistema.
  • SessionSwitch: se produce cuando se cambia la sesión entre usuarios.
  • TimeChanged: se produce cuando se cambia la hora del sistema.
  • TimerElapsed: se produce cuando ha transcurrido el intervalo de un temporizador de Windows.
  • UserPreferenceChanged: se produce cuando cambian las preferencias del usuario.
  • UserPreferenceChanging: se produce cuando van a cambiar las preferencias del usuario.

De esta pequeña lista no he probado todas, pero si algunas con un correcto funcionamiento. Hay muchos eventos que pueden ser utilizados como el hecho de la memoria baja para lanzar el recolector de basura o el control de cierre de sistema para guardar los datos en memoria en un archivo.

Para utilizarlas se utilizaría el siguiente código:
[code language=»csharp»] using Microsoft.Win32;

//… LINEAS INTERMEDIAS

SystemEvents.TimeChanged += new System.EventHandler(this.message);

//… LINEAS INTERMEDIAS

public void message(object sender, EventArgs e) {
MessageBox.Show(«Han cambiado la hora del sistema.»);
}
[/code]

Conectar a una url, webservice o REST en C#

Hoy en día se necesita conectar con páginas web, bien sea para extraer información de una página o para conectar contra un WebService. DotNet o .Net, nos provee de una serie de herramientas para la conexión contra WebServices, pero hay casos excepcionales, en los que necesitaremos conectarnos de una manera más arcaica y tradicional, al estilo de la librería cURL por ejemplo. En este caso mostrare un ejemplo de como conectarnos a una url de un WebService ficticio y como recoger su contenido para luego ser tratado. En primer lugar crearemos un String donde poner la url de la conexión. Seguidamente conectaremos utilizando los objetos HttpWebRequest y HttpWebResponse y generaremos un StreamReader con la respuesta. El código quedaría así:

[code language=»csharp»] String baseUri = «http://rutaalwebserice»;
HttpWebRequest connection = (HttpWebRequest)HttpWebRequest.Create(baseUri);
connection.Method = «GET»;
HttpWebResponse response = (HttpWebResponse)connection.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
[/code]

Ya tenemos nuestra variable sr (StreamReader) para poder utilizarla para trabajar con el supuesto XML o HTML devuelto. Es importante apuntar, que para utilizar estas librerías, necesitamos incluir los siguientes nombres de espacio:

[code language=»csharp»] using System.Web;
using System.Net;
using System.IO;
using System.Text;
[/code]
Scroll al inicio