Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
sábado, 20 de mayo de 2006
En mi habitual ronda por la web de Microsoft para desarrolladores, MSDN, he encontrado en portada una serie de artículos sobre lo que se anda cociendo para la próxima versión de Visual Studio, nombre de batalla "Orcas"... ¡y eso que todavía estamos intentando digerir el VS 2005!

Una de las novedades más llamativas, o al menos ellos deben entenderlo así, pues aparece en portada, es la incorporación de LINQ (Language Integrated Query) al .Net Framework, que permitirá la extensión de los lenguajes disponibles para la plataforma con nuevas construcciones que permitan realizar consultas y actualizaciones sobre conjuntos de datos de una forma estándar y, como no podía ser menos, orientada a objeto.

El objetivo de este nuevo invento es facilitar al desarrollador, utilizando un lenguaje común (bastante parecido a SQL, por cierto), la realización de consultas sobre cualquier tipo de almacén. Hasta aquí, no hay nada nuevo. La novedad reside, en primer lugar, en que el almacén puede ser un vector, una colección, XML o una base de datos; además, el hecho de poder indicar de forma directa las instrucciones de consulta facilita enormente la programación, pues las comprobaciones sintácticas se harán en tiempo de edición y compilación, bastante mejor que con SQL hospedado, donde normalmente los errores se producen en ejecución. Interesante, ¿no?

Pero veámoslo con un ejemplo, en C# (aunque también podría ser en VB), tomado de la misma web. Supongamos que tenemos definido un array de strings de la siguiente manera:

string[] names = { "Burke", "Connor", "Frank",
"Everett","Albert", "George",
"Harris", "David" };

Podemos hacer una consulta sobre este almacén de esta forma tan sencilla:

IEnumerable<string> expr =
from s in names
where s.Length == 5
orderby s
select s.ToUpper();


Se entiende a primera vista: al ejecutar esta sentencia, expr contendrá una enumeración de strings con los nombres de cinco caracteres, ordenados alfabéticamente, y pasados a mayúsculas del almacén names. Antes de LINQ, o sea, en este momento, sólo podríamos hacerlo iterando sobre el array original, enviando a una nueva colección los elementos que cumplieran el criterio, y ordenar los resultados. Un tostón, vaya.

Aparte de los aspectos sintácticos, bastante diferentes a lo conocido hasta el momento, esta sentencia incluye los siguientes puntos:

  • "from s in names", estamos creando una variable local a la consulta, s, que representará a cada elemento en el array names. Bueno, esto es bastante similar a lo que estamos acostumbrados a utilizar en bucles foreach.
  • "where s.length==5", ¡podemos utilizar cualquier tipo de expresión booleana como criterio de filtro! Fijaos que en este caso estamos usando la propiedad length de la clase string, pero podría ser cualquier cosa.
  • "orderby s", podemos ordenarlas como creamos conveniente. Seguro, aunque no he podido comprobarlo, que la única limitación es que la expresión elegida implemente IComparable, para que el sistema pueda comparar valores.
  • "select s.ToUpper()", indica lo que queremos obtener en la enumeración final.
  • Bueno, aunque no aparezcan en el ejemplo anterior, es interesante saber que se pueden utilizar muchas más funcionalidades, ordenaciones inversas, agrupar los resultados, utilizar funciones de agregado, etc.

Ah, por cierto, no lo he comentado, pero se usa un generic para indicar el tipo contenido en la enumeración... de ahí el IEnumerable<string> del principio. Esto ha sido una de las grandes (y utilísimas) novedades del Framework 2.0, todavía reciente. Otro día hablaré de ellos, si me acuerdo.

Al comenzar este texto, hablaba de almacenes como una forma genérica de denominar a los contenedores de información sobre los que se pueden realizar queries, sin embargo el ejemplo sólo muestra cómo hacerlo sobre un array. ¿Y qué ocurre con los almacenes tradicionales, XML y bases de datos? Para ellos, se han creado XLinq y DLinq, implementaciones de LINQ destinadas a realizar consultas sobre estos dos tipos de fuente de datos, y siempre integrado en el lenguaje (nada de SQL o DOM), y de una forma muy parecida a lo visto con anterioridad.

LINQ está construido utilizando novedades que estarán presentes en C# 3.0 y VB.Net 9.0, como las expresiones lambda, árboles de expresiones, métodos de extensión, inicializaciones compuestas... todas ellas de entidad suficiente como para dedicarles un monográfico.

Desde luego, si hay algo que no se puede negar de estos muchachos de Microsoft es lo rápido que van. Y precisamente el problema es que, a veces, van demasiado rápido.

martes, 16 de mayo de 2006
De vez en cuando surge algo que hace cambiar tu vida, tu forma de trabajar y de ver las cosas.

Casi me cuestra trabajo recordar cómo se trabajaba con MS-DOS, con una matriz de 80x25 caracteres chillones sobre fondo negro, interactuando sólo a base de pulsar teclas y (secretas) combinaciones de éstas. Existe un antes y un después de la llegada de los entornos gráficos, y más concretamente, de Windows como impulsor de este cambio.

También recuerdo la llegada de la revolución internet. Los que estábamos enganchados a las comunicaciones a través de las BBS y Fidonet (¡qué tiempos!) mirábamos recelosos esa nueva tecnología que prometía acceso instantáneo a casi ilimitada información, independientemente de la ubicación de ésta, servicios interactivos (chats), correo electrónico también casi instantáneo... Se puede imaginar la revolución que esto significaba en un mundo donde, a modo informativo, un mensaje personal enviado a través de Fidonet (netmails) podía tardar días, incluso semanas, en llegar a su destino; y por supuesto, nada de webs ni información hipertexto: los servicios se limitaban a foros y envío o recepción de archivos a servidores.

¡Y para qué hablar de la banda ancha! Es increíble cómo el mismo cable que conectábamos al flamante módem de 2400bps es capaz de mover ahora casi mil veces más información en el mismo tiempo, con un coste bastante razonable. ¡Esto sí que ha sido una revolución!

Y ahora que lo pienso, estos tres temas que he comentado se han producido cada cinco años, aproximadamente. Veamos... si partimos de que el paso de MS-DOS a Windows se produjo en la primera mitad de los noventa, la popularización de Internet en la segunda, y la de la banda ancha durante los años del nuevo siglo, podemos conjeturar que:

"Cada cinco años se produce la llegada de una tecnología, producto o filosofía de trabajo que revoluciona nuestras vidas"

Vale, admito que es un poco arriesgado. Pero hagamos una apuesta: si antes de finalizar el 2009 no ha surgido nada revolucionario en los términos que estoy describiendo, tenéis mi bendición para venir aquí y reventarme el buzón de correo a base de comentarios insultantes.

Ahí queda eso.
sábado, 13 de mayo de 2006
No puede negarse que el spam es una lacra. Los que tenemos la misma dirección de correo desde hace algunos años sufrimos diariamente la recepción de decenas de mensajes publicitarios que nos hace perder tiempo y espacio de almacenamiento para nada.

Está claro, nuestras direcciones de e-mail forman parte de enormes listas que son compartidas (o vendidas) entre los spammers, y difícilmente podemos salir de ellas. O mejor dicho, es imposible salir de ellas.

Desde luego, de nada vale devolverles el mensaje escribiéndoles inocentemente "Porfa, no me envíes más correos". Peor aún, de esta forma estamos confirmándoles que la dirección que tienen es buena, y podrán ponerle una marca como indicando "dirección pata negra". Y eso suponiendo que el mensaje les llegara, puesto que normalmente los envían desde direcciones inexistentes, debido a la falta de seguridad inherente al protocolo SMTP.

Hay sistemas, a veces implementados en los clientes de correo y otras en los servidores, que son capaces de analizar los mensajes entrantes y, a base de reglas, listas negras y reconocimiento de palabras o patrones, pueden apartar (o marcar) mensajes que consideran spam, de forma que molesten algo menos. Otro día, si me acuerdo, comentaré distintas técnicas que he visto que usan los spammers para evitar ser detectados.

Aparte de utilizar estas herramientas, he encontrado algo que, aunque no ayuda a evitarlo, por lo menos puede contribuir a que no siga creciendo.

Se trata de servicios gratuitos de buzones temporales, como el disponible en esta dirección. Se trata de buzones que se generan de forma automática al recibir un mensaje y que es posible consultar desde la propia web sin necesidad de clave ni nada parecido. Por ejemplo, en el caso del servicio Mailinator, puedo asumir que dispongo de un buzón llamado loqueyoquiera@mailinator.com y consultar si tiene mensajes en cualquier momento. Por ejemplo, si pulsas aquí, tú mismo podrás ver si ese buzón ha recibido algún e-mail.

Obviamente, no es conveniente utilizarlo para recibir secretos de estado, pues cualquiera puede verlos. Sin embargo, lo he visto muy útil para registrarse en páginas web y probar servicios on-line a los que hay que suministrar una dirección de correo (por ejemplo para recibir las claves).
jueves, 11 de mayo de 2006
Hoy me ha sorprendido el descubrimiendo de XFN (XHTML Friends Network), un mecanismo realmente simple que permite añadir a los enlaces (normalmente entre weblogs) pinceladas semánticas que expresan la relación (personal) con el autor de la página destinataria de los mismos.

El truco consiste en añadir a los enlaces (tags <A> de HTML) el atributo REL, indicando la relación que tiene el blogger con el destinatario del link. Así, si en mi blog enlazo con el blog de un amigo, puedo indicarlo estableciendo el REL="friend". De la misma forma es posible indicar relaciones de amistad, físicas (si nos conocemos en persona), geográficas (vecino), de parentesco, o incluso románticas, mediante el uso de palabras clave definidas por XFN.

Por curiosidad he visitado la página de la W3C a ver qué opinaba del tema, es decir, si esto rompe de alguna forma los estándares, y he encontrado que, desde luego, la especificación HTML 4.01 permite la extensión de los tipos de relación estándar. Eso sí, dice que de extenderla, las convenciones utilizadas deberían quedar reflejadas en un profile, algo así como un documento de directivas, pero en el caso de XFN eso no es un problema, pues existe y debe reflejarse en el encabezado del documento.

Para más información y detalles, se puede consultar http://www.gmpg.org/xfn/.
miércoles, 10 de mayo de 2006
Hoy he estado probando WordPress, una de las muchas plataformas de publicación de blogs open source. Como dicen en su página web http://www.wordpress.org, tiene una estética muy cuidada, y se tienen muy en cuenta aspectos como la usabilidad y el cumplimiento de los estándares W3C.

A primera vista, la verdad es que no tiene mala pinta. Pero comencemos por donde hay que hacerlo normalmente, por el principio.

Se instala en un plis. Tengo una distribución guadalinex (=Ubuntu), con Apache y MySQL, y sólo ha sido necesario descargar los archivos desde la home, extraerlos en el directorio raíz de publicación en web y crear en MySQL una base de datos y un usuario con permisos sobre ella. Hasta aquí, bien sencillo.

Después es necesario crear el archivo de configuración (wp-config.php), para lo que suministran una plantilla. Sobre este archivo, se modifica el nombre de la base de datos, el usuario y su contraseña, y voilá, listo para echarlo a andar.

El siguiente paso es preparar el entorno, llamando desde el navegador a la página install.php, que mediante un sencillo asistente, dejará el sistema preparado para empezar a publicar inmediatamente. El tiempo aproximado de instalación ha sido de unos diez minutos, descarga incluida, aunque, en cualquier caso y si surge algún problema, en la web existe mucha información sobre el procedimiento de instalación.

A partir de ese momento, ya se puede usar la aplicación. En mi caso, el primer paso ha sido acceder a la administración del sistema para modificar títulos, estética, contenidos, etc. La verdad es que el interfaz es muy intuitivo, y en pocos minutos lo utilizas como si lo conocieras de toda la vida (conclusión: pues sí que era cierto eso de la usabilidad que decían en la web).

Y ahora es el momento de escribir. El sistema incorpora un pequeño editor de textos que permite realizar formateo visual, soporta inclusión de imágenes, categorización de contenidos, y diversas opciones relacionadas con los comentarios... en fin, que da bastante juego.

En general, y para no extenderme más, la plataforma WordPress me ha sorprendido gratamente en todos los sentidos. Altamente recomendable para administradores por su sencillez de instalación y configuración, y para usuarios por su excepcional usabilidad.

lunes, 8 de mayo de 2006
No se puede decir otra cosa... ¡ya era hora! Hace tiempo que observo desde mi atalaya cómo la forma de difusión de información a través de Internet ha ido evolucionando hasta llegar a este fenómeno que llamamos blog.

Y no puedo negar que siempre he sentido cierta envidia (sana, entiéndase) de aquellos que han tenido talento y tiempo suficiente para subirse al tren conforme éste iba comenzando a partir de la estación.

En cualquier caso, aunque ya en marcha, he decidido subirme al tren, y espero que el viaje sea largo. Pretendo firmemente, y suelo ser bastante tenaz en mis propósitos, que este diario recoja todo aquello que me llame la atención y mis reflexiones relativas a la tecnología en general, y al mundo del desarrollo de software en particular.

Nos vemos por aquí.