Interrogantes de C#
Hoy toca algo que muchos llevaréis usando desde hace años, pero quizá otros, especialmente si venís de otros lenguajes, ni sabéis que existe.
Entre las muchas cosas que C# heredó de Java y C está el operador ternario, que no es más que un atajo para poder asignar valores según una condición. Por ejemplo, si tienes:
if(a == 4)
sMsg = "Cuatro";
else
sMsg = "Otro";
Obtendrás el mismo resultado poniendo simplemente:
sMsg = a == 4 ? "Cuatro" : "Otro";
¿Y esto para qué sirve, si con un if de los de toda la vida tienes lo mismo y más claro? Para abreviar, y evitar largos tochos de código innavegables del tipo:
if(a == 4)
sMsg = "Cuatro";
else
sMsg = "Otro";
if(b == 7)
sMsg2 = "Verde";
else
sMsg2 = "Azul";
(…y así 200 líneas más…)
Queda mucho más manejable esto:
sMsg = a == 4 ? "Cuatro" : "Otro"; sMsg2 = b == 7 ? "Verde" : "Azul";
Así, por ejemplo, podríamos usarlo para sustituir esto:
int i; if (j == null) i = 0; else i = j;
Por esto otro:
int i = j == null ? 0 : j;
Pero mejor no, no lo hagas. Hay algo mejor para estos casos que un interrogante; en concreto, dos interrogantes:
int i = j ?? 0;
El operador ?? significa: “si el valor que te doy es null, olvídalo y dale este otro valor”. Su principal utilidad es cuando tenemos tipos nullables y no nullables, por ejemplo:
void funcion(int? valor)
{
int i = valor ?? -1
}
Es lo mismo que hacer:
void funcion(int? valor)
{
int i = -1;
if (valor != null)
i = valor;
}
Y queda mucho más claro y compacto. También lo puedes usar con objetos:
Bitmap imagen = foto ?? imagenPorDefecto
Para más información:
Simulando servicios web con soapUI
soapUI, aparte de poder hacer llamadas a un WS, también puede simular el propio WS; es lo que llaman un Mock Service. No esperes milagros, porque siempre te devuelve lo mismo (a menos que vayas más allá de lo que te cuento hoy), pero hay casos en los que con eso ya nos llega.
Para todo esto hay un tutorial en http://www.soapui.org/Getting-Started/mock-services/1-Creating-a-MockService.html, pero es un poco largo, en inglés, y quizá prefieras una versión más “para torpes”. Así que aquí os traigo la mía.
Guía paso a paso:
- Configura soapUI para llamar al WS en cuestión. Lo doy por sabido. Es lo más largo. Aprovecha y en el asistente márcale que cree el MockService, para no tener que hacerlo luego.
- Haz una llamada con soapUI al método que quieras simular, y cópiate todo el XML de la respuesta.
- Vete al MockService, al método a simular, y dale doble click a la respuesta. Borra lo que haya en el panel de la derecha, y pega lo que copiaste.
- En la esquina superior derecha verás estos botones:
- El primero es para poner el marcha el Mock, el segundo para pararlo, el tercero para ver el WSDL, y el cuarto para configurarlo. Dale al cuarto, para ver las propiedades. La más interesante es el path, porque es como construye la URL del WS simulado. Si pone /hola, tu WS estará en http://localhost:8088/hola. Cámbialo a tu gusto. En cualquier caso, si una vez todo en marcha quieres ver qué WS tienes, basta con meter la URL http://localhost:8088 en un navegador y te saldrá la lista.
- Dale al “Play” (el primer botón, vamos).
- Configura tu aplicación para que llame a la URL de este WS simulado en vez de la real.
Si por el motivo que sea no puedes o no quieres andar cambiando la URL y quieres usar la URL real, pero que ataque al simulado, puedes usar el siguiente truco:
- Abre el archivo HOSTS de tu equipo (situado en C:\WINDOWS\system32\drivers\etc).
- Agrega una entrada con el dominio del WS, pero indicando como IP 127.0.0.1. Por ejemplo, si el WS real está en http://prueba.com/miwebservice, agregarías la línea:
127.0.0.1 prueba.com
- A continuación, modifica la propiedad Path de tu MockService, dándole el valor “/miwebservice”, y ya lo tienes.
La pega de este truco, claro, es que todo lo que hagas a partir de entonces contra el dominio real irá ahora contra tu equipo, en vez de contra el servidor real, con lo que quizá no te sea viable. Para poder acceder al dominio real tendrás que andar quitando (o comentando) la entrada en el archivo HOSTS.
Llamar a un servicio web con soapUI
soapUI (sí, se escribe así, con las mayúsculas y minúsculas descogorciadas) es una herramienta la mar de útil para probar servicios web (abreviaremos como WS). Si no sabes lo que es un servicio web, léelo en Wikipedia (¡obsoleto, que eres un obsoleto!).
Hoy vamos a ver lo más básico: como llamar a un servicio web ya existente y obtener el XML de respuesta.
- Lo primero es lo primero: instálate el soapUI. ¿Ya? Seguimos entonces.
- Bajamos el archivo WSDL de tu WS. Normalmente, para ello basta con abrir un navegador, meter la URL del WS y buscar el enlace apropiado; también puede funcionar agregar “?wsdl” a la URL. Si no sabes cómo conseguirlo, consulta con quien lo hizo. Lo guardamos con la extensión wsdl.
- Abrimos SoapUI, y creamos un nuevo proyecto, pulsando con el botón derecho sobre Projects, y dándole a New SoapUI Project.
- Le damos un nombre, le indicamos donde está el archivo WSDL, marcamos las siguientes opciones y le damos a OK.
- Nos genera un XML, lo guardamos.
- En la siguiente ventana, marcamos la última opción para que nos genere un juego de ensayo y le damos a OK. Darle a todo a OK, hasta terminar.
- Para probar ahora un método del WS, recorremos el árbol de la izquierda hasta llegar al Request, le damos doble clic. Nos sale el XML de la petición; introducimos en él los parámetros de entrada del WS, sustituyendo los interrogantes por lo que sea necesario. Si no queremos dar valor a algún parámetro de entrada, quitamos el interrogante y listo.

- Ahora ya podemos darle a ejecutar (botón “Play”) y nos mostrará la respuesta del WS en formato XML.
Un detalle interesante es que podemos tener varios XML de petición, de tal forma que podemos tener varios casos de prueba, cada uno con un nombre y un XML de entrada.
Los peligros de vivir en una nube
En el futuro, viviremos en las nubes. O, al menos, nuestras aplicaciones lo harán. O eso dicen, que en informática nos encanta jugar a ser adivinos y luego pasa lo que pasa.
Lo primero: ¿qué es la nube? La nube es Internet. O no. Hay mucha gente que cuando te habla de poner una aplicación “en la nube”, está diciendo que en vez de ponerla como toda la vida en un equipo y luego obligar a los usuarios a ponerse delante de ese equipo para usarla, lo que va a hacer es ponerla en un servidor para que luego los usuarios se conecten a ella. ¿En qué se diferencia esto de una arquitectura cliente/servidor, o las terminales tontas de antaño? En lo más básico, quizá en nada; pero como ahora existe la web, los servidores virtualizados y todo lo demás, en la práctica es un mundo. En Wikipedia son más estrictos, y distinguen 4 tipos de nubes:
- Nube pública: un proveedor provee de servicios de computación a varios proveedores de aplicaciones. Es como un servidor virtualizado sobre muchísimos servidores físicos, que a su vez hace funcionar una instancia de máquina virtual para cada aplicación. Así, hay un servidor gigantesco con recursos casi inagotables que reparte entre sus maquinitas virtuales de tal forma que nunca ninguna se quede bloqueada por falta de ellos. De donde se deduce que, cuanto más grande la nube, mejor para cada uno de sus usuarios. Las de Amazon (AWS/EC2, VPC) y Microsoft son probablemente dos más conocidas.
- Nube comunitaria: una serie de organizaciones se juntan para armar una nube, que montan según sus necesidades. Un ejemplo es la que le ha montado Google al gobierno estadounidense.
- Nube híbrida: conjunto de nubes o servidores que se comunican a nivel de aplicación de tal forma que vienen a formar entre todos una nube. No es tan bueno como que todos estén en la misma, pero en la práctica no sueles poder tener la “nube pura”.
- Nube privada: es cuando te montas una nube en tu casa. Una organización monta un servidor o varios, y sobre él crea máquinas virtuales que actúan como servidores de sus propias aplicaciones.
El problema es que al usuario medio le importa un rábano qué tipo de nube uses, o si usas una nube. Él sólo ve una aplicación en Internet. Así que vemos a mucha gente hablando de que sus datos están “en la nube” refiriéndose a que están en una aplicación web (Google Docs, Youtube, Facebook, Yahoo! Mail…), independientemente de si hay una nube detrás o sólo un equipo del año de la tarara haciendo de servidor. A ellos les da igual, con lo que tenemos otro significado de la palabra. Y los proveedores les dan la razón; ahí tenemos a Microsoft, por ejemplo, que se apunta a todas las definiciones de nube considerando su Office Online como una nube, mientras ofrece su meganube para que pongas tus aplicaciones, y te ofrece Windows Azure para que te montes la tuya propia.
Como siempre que aparece una cosa nueva en el mundo de las cosas con teclas, al principio todos los expertos decían que la nube es el futuro, que todo lo tendremos ahí, que las aplicaciones nunca se caerán, que ya nunca tendremos que hacer copias de seguridad de nuestros datos porque la nube los mantendrá ahí eternamente, y que el mantenimiento de las aplicaciones será casi gratis. Y como siempre, algo de razón tienen, pero en el sentido estricto es mentira. Vayamos por partes:
- Las nubes se caen. Y si no que se lo pregunten a los clientes de Microsoft que sufrieron la caída de toda su nube en marzo de 2009 durante casi 24 horas.
- Las aplicaciones en la nube se caen. Obvio, ¿no? Si tu aplicación tiene un fallo gordo, cascará, como toda la vida. Ahí no hay servidor ni plataforma ni nada que pueda salvarte. Ahí está el caso del fallo de Google Docs que dejó a miles de usuarios sin poder acceder a sus documentos.
- La nube no nos libra de tener que hacer backups. Aparte de que pueden fallar y dejarnos sin acceso a nuestros datos de forma temporal, también puedes perder datos debido a errores humanos o a nivel de aplicación (tu proveedor puede hacer un “rollback” de tu aplicación, pero según el caso puede que el remedio sea peor que la enfermedad). Y, lo que es peor, las nubes y las aplicaciones en la nube son tan perecederas como las ganas de sus promotores de mantenerlas en marcha. Un buen ejemplo es Google Groups, que en febrero de 2011 desaparecerá para siempre, llevándose consigo los datos de mucha gente que fijo que no se habrá enterado del asunto.
- Tendrás que seguir manteniendo tus aplicaciones. Porque querrás hacerles mejoras, ¿no? Y tú no eres perfecto, así que tus aplicaciones tampoco, y tendrán fallos que corregir, ¿verdad? Y si tiene mucho éxito, habrá problemas de escalabilidad que no tendrán que ver con el tamaño del servidor. Por ejemplo, si usas como identificador un número de 5 cifras, vas a tener problemas con tu usuario 1 millón.
Lo que no quita que la/s nube/s es/son el futuro, y que resuelven muchísimos problemas, claro. Al César lo que es de César.
Hay muchísimo más que decir sobre todo esto; pero lo dejaremos como ejercicio para el lector.
Emuladores en HTML 5
Anuncios aparte, probablemente los usos que más se le dan a Flash en Internet son para ver vídeos y para videojuegos (en intranets la cosa cambia, claro).
A la hora de sustituir a Flash, HTML 5 tiene un tag enterito para ver vídeos (apropiadamente llamado <video>); pero, ¿qué ocurre con los juegos? ¿Realmente se pueden hacer cosas complejas? ¿Tendrán buen rendimiento?
La respuesta, aparentemente, es que sí. Un buen ejemplo es que existe un emulador realizado usando únicamente tecnologías HTML 5 (sólo JavaScript, CSS y HTML 5; no hay ni Flash ni Java ni nada por el estilo). Se trata de JSNES, un emulador online en el que, si sigues el enlace, podrás jugar a varios juegos de la Nintendo NES de toda la vida. El código se puede bajar de aquí, ocupa sólo 136 KB. Aún está algo verde y no se puede jugar a muchos juegos; pero, teniendo en cuenta que el proyecto acaba de empezar y que los navegadores aún están empezando a implementar estos estándares, el resultado es bastante impresionante.
Historia de la barra de tareas
Probablemente el invento que más éxito y que más ha sido imitado por Microsoft es la barra de tareas de Windows, incluyendo el menú Inicio, el reloj, y la bandeja del sistema. Ninguna de estas cosas existía como tal anteriormente (bueno, el reloj sí, pero…), y desde entonces han sido imitados hasta la saciedad.
¿Y cómo surgió esta idea? Según este artículo de Kent Sullivan (que fue uno de los que estuvieron en ello), surgió, como no podía ser de otra forma, a base de mucho trabajo, prototipos por un tubo, ni te cuento cuántas pruebas con usuarios reales, y una base de datos creada ex-profeso para problemas de usabilidad con los distintos diseños.
Para que os hagáis una idea, ahí van unas cuantas capturas de prototipos que se fueron quedando en la cuneta:



El artículo original (en inglés) lo tenéis en http://www.sigchi.org/chi96/proceedings/desbrief/Sullivan/kds_txt.htm
Cómo funcionan realmente los proyectos de software
Si queréis saber cómo funcionan realmente los proyectos de software, además en versión 1.5, aquí tenéis un gráfico explicativo.
La fuente es http://www.projectcartoon.com/, una curiosa página cuyo único objetivo es el desarrollo e internacionalización de este producto, y que te permite incluso crear tu propia versión.
La verdad más grande del mundo
Fijo que más de uno se siente identificado con al menos uno de los protagonistas de esta historia.
¡Clippy ha vuelto!
¿Creíais que nunca volveríais a ver al entrañable clip parlanchín de Office? ¿Sois de los que cada vez que abren el Word echan de menos sus sabios consejos?
Pues que sepáis que sois unos tipos muy raros.
Pero, en fin, todo sea por haceros felices: aquí lo tenéis. De nada.
Blogroll
Archivo
| L | M | X | J | V | S | D |
|---|---|---|---|---|---|---|
| « Mar | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||

J. C. R.
![[Facebook]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/facebook.png)
![[Google]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/google.png)
![[LinkedIn]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/linkedin.png)
![[Reddit]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/reddit.png)
![[Slashdot]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/slashdot.png)
![[Technorati]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/technorati.png)
![[Twitter]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/twitter.png)
![[Yahoo!]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/yahoo.png)
![[Email]](http://sanidad-bilbomatica.es/blogs/trasteando/wp-content/plugins/bookmarkify/email.png)
