Error al realizar conexiones SSL, TLS y HTTPS en Mono


Mono, la implementación libre de .NET Framwork, no permite por defecto realizar conexiones que requieran el uso de SSL o TLS. Esto impide, por ejemplo, comunicarse con direcciones https vía código; lanzando una excepción como esta:

Security.Protocol.Tls.TlsException: Invalid certificate received form server.

Este comportamiento no es un bug, es un sistema de seguridad.

Las conexiones seguras, para que realmente lo sean para los usuarios, necesitan que el cliente pueda verificar la legitimidad del servidor remoto. Para ello existen entidades que expiden certificados para asegurar que el interlocutores quien dice ser.

Mensaje de Firefox indicando una conexion segura

Los navegadores web suelen incluir los certificados de varias entidades de confianza. Sin embargo, Mono no lo hace. Prefiere que cada usuario decida en quien quiere confiar.

Para resolver este problema existen dos soluciones sencillas y seguras:

Importar los certificados de Firefox

Este método tiene la ventaja de instalar los certificados de todas las entidades de confianza mas habituales sin tener que buscar la concreta necesaria:

mozroots --import --ask-remove

Importar un certificado concreto

Si no tenemos Firefox, el que necesitamos no viene incluido o solo queremos uno concreto; existe la posibilidad de importar un fichero de certificado:

Como ejemplo, vamos a instalar un certificado de GoDaddy.

  1. Descargamos el archivo gd-class2-root.crt desde https://certs.godaddy.com/anonymous/repository.seam a una carpeta de nuestro ordenador (p. ej.: /home/usuario)
  2. Ejecutamos el siguiente comando en nuestra terminal
certmgr -add -c Trust /home/usuario/gd-class2-root.crt

Una vez completado alguno de los dos métodos podremos escribir código en Mono que se comunique vía SSL o TLS.

Para mas información, se puede consultar http://www.mono-project.com/FAQ:_Security

Buscaminas en C#


Buscaminas (Minesweeper en inglés) es un juego para un jugador cuyo objetivo es descubrir toda una cuadrícula sin destapar las minas. El mapa proporciona información sobre que casillas no se deben destapar mediante números que indican la cantidad de bombas cercanas. Este videojuego es muy conocido ya que viene incluido en todas las versiones del sistema operativo Windows desde su versión 3.0 (1990)

Recientemente he desarrollado una version de este juego en c# y he decido ponerla a disposición de todos los lectores de Informatica En Red. Este clon del buscaminas no está diseñado para ser ni muy eficiente, ni muy bonito, pero cumple su cometido a la perfección: entretener.

Buscaminas

Para aquellos con conocimientos de programación que estén interesados en su funcionamiento, el código fuente está disponible libremente

Descargar juego (.zip, 8 kB)

Descargar código fuente (.zip, 20 kB)

Inserta caracteres acentuados en un BATCH


A pesar de no ser tan necesaria la consola de Windows como lo es en sistemas basados en Linux, si nos puede ser de gran utilidad a la hora de realizar tareas comunes mediante scripts batch.

El problema se nos plantea con los caracteres que no incluye el alfabeto inglés. La consola de Windows lee los archivos con codificación ANSI que difiere con la codificación que guardan la mayoría de los editores de texto como Notepad (incluso especificando la codificación ANSI) o Worpad que guardan con ASCII o una mezcla de ambas. Entonces, ¿cómo se podría mostrar por ejemplo la palabra “Canción” mediante un bat? La solución pasa por hacer desde la consola un archivo de texto donde estén guardados estos caracteres especiales, así siempre que necesitemos utilizar alguno con un simple copiar y pegar los tendremos listos. Para conseguirlo seguimos estos pasos:

  • Abrimos una consola (Inicio->Todos los programas->Accesorios->Símbolo del sistema) y escribimos lo siguiente:

echo á é í ó ú ¡ ¿ > conf.txt
notepad conf.txt

  • El archivo generado (conf.txt) se abrirá mostrandonos unos símbolos extraños, incluso invisibles, no importa, esa es su traducción a ASCII, ahora que ya los tenemos podemos comprobar el resultando creando un archivo bat tan simple como:

echo ¨Canci¢n?
pause

  • Al ejecutarlo veremos el texto ¿Canción?. En la siguiente imagen se muestra como conseguir lo mismo con otro comando:

Descargar ayuda local en Visual Studio 2010


Hace relativamente poco (5 meses…) salió la nueva versión 2010 del tan conocido y necesitado IDE Microsoft Visual Studio. Esta nueva actualización de su entorno de desarrollo ha traído también la versión 4 de .NET el framework de Microsoft.

La integración de las aplicaciones en Windows 7 ha sido mejorada junto a su interfaz, pero algo que sin lugar a dudas muchos programadores echaran en falta, sobre todo los iniciados, es su nuevo forma de proporcionar la ayuda, on-line. Cuando utilizamos el famoso método de pulsar F1 nos encontramos con que nos redirige al MSDN, un método con el que se cuenta con la ventaja de tener siempre la ayuda más actualizada sin ocupar espacio en nuestro disco, sin embargo, puede que en momentos determinados no tengamos disponible una conexión a Internet y tengamos que dejar apartado nuestro proyecto, para ello podemos indicarle que descargue esta ayuda a nuestro ordenador y así la poderla consultar de forma local:

  1. Abre Visual Studio 2010, en cualquier edición, y pulsa en el menú de Ayuda -> Administrar opciones de ayuda como se ve en la imagen.
  2. Desde esta nueva ventana podremos hacer múltiples operaciones como son: Seleccionar entre visualizar ayuda online u offline, instalar la ayuda de forma online, actualizarla desde internet…. Elegiremos la opción de Instalar contenido desde Internet.
  3. A continuación aparecerán los diferentes contenidos que están disponibles para descargar e instalar, seleccionamos los que más necesitamos en función de nuestros programas y necesidades y los instalamos.
  4. En cualquier momento podemos actualizarlos, descargar o eliminar nuevas partes de esta fantástica ayuda que disponemos gratuita.

NOTA: Los contenidos de ayuda de NET Framework 4, Visual Studio C# y Ayuda en Ayuda, ocupan según los datos que tengo en estos momentos 1,4 GB, así que cada cual seleccione los que necesita y pueda guardar.

Visual Studio 2010. F#, un nuevo lenguaje para .NET


Tras hablaros el otro día sobre lo nuevo en C# 4.0 hoy quiero hablaros de otra de las interesantes incorporaciones en .NET Framework 4:  F#, un nuevo lenguaje de programación.

F#, a diferencia de los otros lenguajes para .NET, es un lenguaje funcional. Este paradigma, muy utilizado con propósitos académicos, es muy diferente al orientado a objetos y es quizás la causa de que no se usen este tipo de lenguajes en el ámbito comercial.

Sin embargo en F#, que lleva desarrollandose en Microsoft Research desde hace bastantes años, se ha sabido crear una estupenda interoperabilidad con los otros lenguajes del .NET (C#, VB.NET y C++/CLR).

Esta fuerte influencia nos permite utilizar todas las clases del framework y trabajar con ellas como si lo hiciéramos en C# o VB.NET con absoluta transparencia. De hecho, incluso se pueden crear  aplicaciones de Silverlight usando este estupendo lenguaje

En el ejemplo siguiente se puede ver como podemos crear un formulario de Windows Forms usando F#:
#light
open System.Drawing
open System.Windows.Forms
let form = new Form(BackColor = Color.Purple, Text = "Introducing WinForms")
Application.Run(form)

Otra función que se incluye es la consola interactiva de F# (fsi.exe), un interprete en el que podemos programar de forma dinámica, es decir, conforme vamos programando ir obteniendo los resultados.

Un ejemplo que ilustra bastante bien la utilidad del intérprete de F# es crear un formulario al cual podemos cambiar las propiedades cuando queramos.

> #light
open System.Drawing
open System.Windows.Forms
let form = new Form(BackColor=Color.Purple, Text="Introducing WinForms", Visible=true);;

Con este código crearíamos un formulario, pero si quisiéramos modificar por ejemplo el título pondríamos lo siguiente:

> form.Text <- "Un nuevo título!";;

También se podría, por poner otro ejemplo, modificar el color de fondo:

> form.BackColor <- Color.Red;;

Si estáis interesados en utilizar este F#  hay dos opciones: usando Visual Studio o si no tenéis acceso a él, (no sirven las versiones express) podeis descargar el compilador y el intérprte desde la web de Microsoft Research: research.microsoft.com/en-us/um/cambridge/projects/fsharp/release.aspx. También se puede descargar desde ese mismo sitio una versión para Mac y Linux a través de Mono, la implementación libre de .NET Framework.

Si no conocéis el lenguaje, que es lo más seguro, (yo estoy intentando todavía aprenderlo…) existe un tutorial de básico en español que podéis consultar en esta web o descargaros un libro en inglés y mucho mas completo tiutlado “Foundations of F#” desde aqui.

Visual Studio 2010: C# 4.0


Recientemente ha salido Visual Studio 2010, la última versión de la suite de programación de microsoft. Entre las novedades están las novedades están: un IDE mejorado con soporte para varios monitores, mejoras en el lenguaje C#, que alcanza su 4ª edición; y un nuevo lenguaje para .NET Framework: F#, que trataremos en un artículo próximo.

Una de las característica más comentadas de C# 4.0 son los “Parámetros Opcionales”, que ya estaban presentes en Visual Basic y que por fín llegan a C#.

En C# 3.0 y los anteriores si queríamos, por ejemplo, un método para sumar un distinto número de sumandos, era necesario sobrecargarlo como se muestra en el siguiente ejemplo:

int Sumar() { return Sumar(0, 0, 0, 0); }
int Sumar(int a) { return Sumar(a, 0, 0, 0); }
int Sumar(int a, int b) { return Sumar(a, b, 0, 0); }
int Sumar(int a, int b, int c) { return Sumar(a, b, c, 0); }
int Sumar(int a, int b, int c, int d) { return a + b + c + d; }

En C# 4 esto sería mucho más simple pues tan solo hace falta escribier un solo método con parámetros opcionales, a los que les indicamos sus valores predeterminados:

int Sumar(int a = 0, int b = 0, int c = 0, int d = 0) { return a + b + c + d; }

Si ahora quisiéramos utilizar esta función tendríamos varias posibilidades

int x = Util.Sumar();
int y = Util.Sumar(4, 3);
int z = Util.Sumar(b: 5, c: 7);

Como vemos, tenemos control total en los parámetros pudiendo omitir los que queramos de manera sencilla.

Ejemplos sacados de la web esasp.net

Small Basic: El lenguaje perfecto para introducirse en la programación


Small Basic es un lenguaje de programación muy parecido al Basic pero mucho más simple y a al vez potente, pues permite hacer pequeñas aplicaciones sin necesidad de tener grandes conocimientos de programación.

Es el lenguaje idoneo para los que quieren iniciarse en la programación desde cero pues viene con guías en español muy completas  que nos ayudarán a realizar programas y juegos bastante interesantes fácilmente.

Lo que más llama la atención es su interfaz de desarrollo muy sencilla, que nos va diciendo los procedimientos disponibles conforme vamos escribiendo. En la barra lateral también aparecen la descripción y la sintaxis.

Una característica  muy interesante que tiene Small Basic es que podemos subir con un golpe de click nuestras creaciones a internet para compartirlas con quien que queramos. Una vez en la web, podemos jugarlos sin necesidad de descargar nada pues se ejecutan automáticamente en el navegador con la tecnología Silverlight (algo parecido a Flash)

Por último, en la última versión, la 0.8, se ha añadido una nueva función para promocionar nuesto programa de Small Basic a Visual Basic.NET. De esta forma cuando hayamos aprendido lo suficiente, podemos compilar estos juegos en Visual Studio.

Como curiosidad, existe una clase para manejar una “tortuguita” de la misma forma que se hace en LOGO, lo que facilita la conversión de proyectos de un lenguaje a otro.