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!
martes, 30 de mayo de 2006
A los que nos atrae la idea de probar nuevos sistemas operativos, plataformas o entornos de desarrollo, a veces nos supone un gran impedimento el no disponer de una máquina de pruebas que poder destrozar instalando-desinstalando-reinstalando aplicaciones, módulos, librerías, parches y todo tipo de artilugios software, que normalmente tienden a llenar los equipos de basura digital.

Hace tiempo encontré algunos productos basados en web como gestores de contenidos (CMS) y similares que se podían probar on-line, corriendo en servidores de los propios desarrolladores. La idea me pareció tan fantástica como osada: "si quieres probar mi producto, toma, ahí tienes las claves de superadministrador, entra y juega con él". Efectivamente, se podía entrar, crear usuarios, eliminarlos, modificar los contenidos y hacer todo tipo de operaciones (¿perrerías?), aunque cada media hora el sistema volvía a su estado inicial, eliminando todas las barbaridades introducidas por gente que, como el menda, no tenía otra cosa mejor que hacer.

De esta forma es posible probar un sistema completo sin necesidad de descargar ni instalar nada. Podemos olvidarnos de instalar un entorno LAMP (Linux+Apache+MySQL+PHP), algo bastante complejo para neófitos, para probar tal o cual plataforma de creación de Portales, Blogs (como WordPress, del que ya hablé hace un tiempo), u otros. Toda una idea feliz.

A modo de ejemplo, si os interesa ver el efecto sobre una plataforma eLearning, existe una demo on-line de Moodle, un famoso LMS (Learning Management System o Sistema de Gestión de Aprendizaje) Open source.

Pero, ¿y qué ocurre cuando lo que quiero probar no es una plataforma Web? ¿Y si se trata de un complejo y pesado entorno de desarrollo, o un gestor de bases de datos?

Eso mismo han debido preguntarse los tecnólogos de Microsoft, que desde hace ya algunos meses han puesto a disposición del público sus Laboratorios Virtuales. Un laboratorio virtual es un ordenador que es posible controlar de forma remota de la misma forma en que lo haríamos si estuviésemos sentados encima. Y como no podía ser de otra forma, este ordenador viene con todo el software que podamos necesitar para probar o aprender a manejar los productos que pretendemos. La captura de pantalla que adjunto muestra el armamento que trae de serie el Windows 2003 Server virtual que he estado probando un rato: Biztalk Server 2006, Visual Studio 2005, SQL Server 2005, .Net 2.0... vamos, una bonita colección.


Microsoft ofrece este servicio en dos modalidades. A una la llaman "express", cuyas sesiones de control de la máquina remota son de 30 minutos y simplemente es necesario suministrar el correo electrónico y algún dato básico sobre nuestro trabajo. La otra modalidad, con accesos de 90 minutos, sí requiere introducir más información personal, por lo que de momento voy a obviarla convenientemente. ;-)

Existen distintos laboratorios, en función del producto o tecnología que queremos probar: Visual Studio Team system, SQL Server 2005, Biztalk Server y ASP.NET 2.0. Al iniciar cualquiera de ellos, se creará el entorno software apropiado, y se nos facilitará un manual que nos servirá de guía de aprendizaje para que lo tengamos más fácil al principio.

En resumen, esta tecnología permite, en menos de un minuto, disponer de un sistema con software que tardaríamos varias horas en instalar en nuestros equipos, suponiendo, además, que pudiésemos conseguir estas aplicaciones.

Por poner alguna pega, el entorno, manuales, e incluso el software de la máquina remota está en inglés; pero no pasa nada, eso seguro que cambia en un futuro próximo. También puede resultar algo lento a veces, aunque la verdad es que, en general, funciona bastante bien.
lunes, 22 de mayo de 2006
Según la Wikipedia, el término Phishing viene del inglés Fish (pescar), debido a que precisamente se trata de las técnicas que usan los pobladores del lado oscuro de la red para pescar datos personales y confidenciales de incautos navegantes utilizando señuelos y trampas, a veces sofisticadas, a veces bastante inocentes.

Este es el mensaje que he recibido hoy de la dirección (falsa, por supuesto) support@cajamadrid.es, no os lo perdáis porque no tiene desperdicio:
Apreciado Cliente de Banca en Linea,

Caja Madrid siempre trata de encontrar sus expectativas mas altas. Por eso usamos la ultima tecnologia en seguridad para nuestros clientes.

Por lo tanto nuestro departamento de antifraude ha desarrollado un nuevo sistema de seguridad que elimine cualquier posibilidad del acceso de la tercera persona a sus datos, cuentas ni fondos.

Este sistema esta construido en la utilizacion de una pregunta secreta y respuesta.

Su respuesta secreta seria usada para confirmar su identidad cuando haga una operacion de pagos.

Es obligatorio para todos los clientes de Caja Madrid Banca en Linea usar este sistema de seguridad.

Nosotros consejo para usted es que introduzca su pregunta secreta y su respuesta de su cuenta cuanto antes.

Si el registro no es realizado dentro de 14 dias su cuenta sera suspendida temporalmente hasta que su registro sea completado.

Esto solo le va a costar unos minutos de su tiempo y va a tener una seguridad mucho mas elevadar.

Para comenzar el registro por favor pinche aqui : http://oi.bancamadrid.com/

Atentamente,
Luis Perez Monreal.
Departamento de seguridad y
asistencia al cliente.
Caja Madrid.

Bueno, si partimos de que Luis Perez Monreal (nombre inventado, con toda seguridad) no maneja muy bien el castellano, podremos entender cómo un señor designado por una prestigiosa institución financiera para informarnos sobre nuevas medidas de seguridad es capaz de cometer tal cantidad de atropellos a esta lengua en tan poco espacio. En cualquier caso, se trata de un experto en seguridad, no de García Márquez. ;-)

¿Y qué me dicen de basar el acceso a los datos, cuentas y fondos personales en una pregunta personal del tipo "Nombre de su primer colegio"? ¿Eso es lo que da de sí el departamento antifraude? :-D Es simplemente ridículo.

Desde luego esto debería ser suficiente para no creérselo. Si, además, sumamos la gran cantidad de apariciones en los medios y la propia difusión que hacen desde estas entidades de que no deben prestar atención a este tipo de mensajes, parece asombroso que todavía haya usuarios que piquen el anzuelo.

Pero no podía resistirme: cual cándido pececillo, he picado el enlace del mensaje y me he encontrado con una página impecablemente copiada de la original de Caja Madrid. Sólo he echado en falta el candado en el pie del navegador indicando que se trata de una página web segura. Por lo demás, tanto el interfaz visual como los mecanismos de interacción son idénticos (de hecho, copiados a nivel de código HTML) del original.

Una vez allí, el usuario es guiado por un asistente en el que se solicitan distintos datos de acceso: DNI, número de contrato, claves de acceso, y algunos datos más, aunque aparentemente inofensivos. Al finalizar, nos obsequian con un texto de agradecimiento (sincero, eso sí) y nos redireccionan a la página, esta vez real, de la Caja. Buen trabajo, sí señor.

Uno, que es curioso por naturaleza, ha ido a consultar el whois en un registrador de dominios, a ver qué se conoce de los propietarios de bancamadrid.com, al que hace referencia el mensaje, obteniendo:

domain: bancamadrid.com
owner: Iain Daws
organization: MapInfo Ltd
email: xprojectp6@yahoo.com
address: Minton Place
city: Windsor
state: --
postal-code: SL4 1EG
country: GB
phone: 01753848240
created: 2006-05-21 19:24:10
modified: 2006-05-21 21:35:04
expires: 2007-05-21 15:24:10


Obviamente, los datos de registro también son falsos... La empresa MapInfo existe, tiene una sede en Windsor, incluso Iain Daws es uno de sus directivos. Ahora bien, dudo mucho que se dedique a hacer estas cosas.

Destaca, además, la fecha de creación del dominio, el 21 de mayo, ¡ayer! Se ve que el organizador de esta fiesta no tenía otra cosa mejor que hacer un domingo por la tarde que registrar un dominio con un nombre comercial atractivo, bastante similar al de la entidad financiera, y ponerse a enviar correos a diestro y siniestro.

Como último dato, buscando la dirección IP en la que está montado el servicio web (69.248.133.121) en varios localizadores geográficos gratuitos, resulta que está en Estados Unidos, más concretamente en New Jersey o Virginia, según la fuente que consultemos. Como para ir a buscarlos, vaya.

En fin, valga todo esto para, una vez más, recordar que nunca debe prestársele atención a un correo procedente de una entidad bancaria que le solicite introducción o envío de datos personales o claves, por mucho que parezca haber sido remitido desde las mismas.

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í.