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 ;)

18 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!
lunes, 30 de mayo de 2016
Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes :-)

.Net

miércoles, 25 de mayo de 2016
Promoción finalizada. Muchas gracias a los más de mil lectores que habéis participado!

¡Seguimos dándolo todo con motivo del décimo aniversario de Variable Not Found! Acabamos de finalizar el último sorteo y ya vamos a por lo siguiente, que os adelanto que os va a encantar :)

Seguro que no necesitáis que os presente a O'Reilly, pues se trata de una de las compañías de referencia en la difusión de contenidos para desarrolladores en forma de libros, eventos y cursos en vídeo desde hace más de veinte años.

Pues bien, O'Reilly ofrece a los lectores de Variable not found descuentos del 40% en libros en papel, y de 50% en libros electrónicos y vídeo cursos utilizando el código PCBW al realizar la compra. Interesante propuesta, ¿eh?

Pero no acaba ahí la cosa... :)
martes, 24 de mayo de 2016
ASP.NET Core RC2Como sabéis, hace unos días se lanzaron las respectivas versiones Release Candidate 2 de .NET Core y los frameworks ASP.NET Core y EF Core.

Los detalles ya los comentamos en un post anterior, ahora vamos a centrarnos en ver algunos cambios importantes que llaman la atención cuando empezamos a jugar con esta nueva entrega de ASP.NET Core.
lunes, 23 de mayo de 2016
domingo, 22 de mayo de 2016
Bien, pues mi generador de números seudoaleatorios ha hablado y ya tenemos los tres ganadores del sorteo de libros de SignalR:

image Programación con ASP.NET SignalR 2.0
Krasis Press
David Carrascosa
@carrascosad
Madrid
image Programación con ASP.NET SignalR 2.0
Krasis Press
Ellery Sammy Valest Torres
@ellerysammy
Barranquilla – Cartagena
image SignalR programming in Microsoft ASP.NET
Microsoft Press
Dachi Gogotchuri
@dachibox
Madrid
En breve me pondré en contacto con los afortunados para concretar los detalles del envío :)

¡Muchas gracias a todos por participar!  Y no os despistéis mucho, porque esto sólo acaba de comenzar y en breve vamos a lanzar nuevas oportunidades para que os llevéis regalos aún más sorprendentes.

Publicado en Variable not found
miércoles, 18 de mayo de 2016
Sorteo cerrado, ya tenemos los ganadores :) Muchas gracias a todos por participar!
Como os comenté hace unos días, vamos a celebrar el décimo aniversario de este blog con regalos para vosotros, que al fin y al cabo sois los que habéis hecho posible que hayamos llegado tan lejos en esta aventura.

También os adelanté que mi idea era organizar sorteos de productos y servicios proporcionados por los patrocinadores que se han sumado a este acontecimiento. Se trata de empresas que todos conocéis sobradamente y que han decidido donar productos y servicios de gran calidad (y habitualmente de un coste considerable) para vosotros.

Pero para inaugurar esta serie, quería empezar con una aportación personal que, por su significado, es para mi muy especial: sortearemos 3 ejemplares en papel de mi libro "Programación con ASP.NET SignalR".

martes, 17 de mayo de 2016
dotnet -helpComo adelantábamos hace unos días, ya tenemos entre nosotros la segunda Release Candidate de .NET Core y los frameworks ASP.NET Core y EF Core, versiones que llegan con bastante retraso sobre lo previsto pero con la intención de ser una propuesta sólida y casi definitiva antes de lanzarse las versiones finales a finales del próximo mes de junio.

Esta release viene cargada de novedades, comenzando por ser la primera en alinearse con el nombre "core" en los frameworks anunciado hace algunos meses, la migración desde DNX al nuevo .NET CLI (interfaz de línea de comandos de .NET), revisión profunda del modelo de hosting y arranque de aplicaciones, muchos cambios en los API (sí, no debería haber pasado desde la RC1, pero pasó...), mejoras espectaculares en rendimiento, centenares de bugs corregidos, etc.
lunes, 16 de mayo de 2016
Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)

.Net

miércoles, 11 de mayo de 2016
¡10 años de VariableNotFound!Pues sí, amigos, ¡diez añazos! Mucho más de lo que habría podido imaginar en aquellos tiempos en los que Windows XP era el rey del escritorio, nadie había oído hablar de Twitter o Facebook y no existían los smartphones tal y como hoy los conocemos. Tiempos en los que decidí subirme al tren y empezar a escribir sobre cosas que iba aprendiendo y que pensaba que podría ser de utilidad a más gente.

Diez años después, con más de ochocientas cincuenta entradas, cerca de 2.000 comentarios publicados, y acercándonos a los dos millones de páginas vistas, si hay algo que tengo claro es que esto no habría sido posible sin vosotros, queridos lectores y amigos de la Variable. Muchas gracias a todos por estar ahí durante todos estos años, por vuestras visitas, vuestras aportaciones y sugerencias, y por permitirme seguir aprendiendo de vosotros cada día.

Y como desde pequeñito me enseñaron que en este mundo hay que ser agradecido, lo mejor que puedo hacer es celebrar este grato acontecimiento con todos vosotros :)

Así que, contando con el increíble apoyo de compañías de primera línea que han decidido sumarse a esta fiesta de celebración, durante las próximas semanas vamos a realizar sorteos de productos y servicios que seguro os entusiasmarán :)

CampusMVP  JetBrains  Telerik  Grapecity 
O'Reilly Media  Microsoft
  DevExpress


[Actualizado: 3-Julio-2016] Hemos finalizado la ronda de sorteos y regalos, y ha sido un éxito. Regalos para todos, cientos de participantes en los sorteos de productazos increíbles, premios por valor de decenas de miles de dólares en total, y mucha diversión en los comentarios que hemos recibido:

El blog: las cifras del año pasado

Y dicho todo lo anterior, ya sabéis que me gusta siempre hacer un breve repaso de la evolución del blog durante el año pasado, así que, para los curiosos, ahí va.

Siguiendo en la tónica de los últimos años, continuamos lo que ya el año pasado denominé como una fase de leve crecimiento sostenido. Según las analíticas de Google, nos visitaron 150.000 usuarios (+6%), 272.000 páginas vistas (+0,64%), con un promedio de tiempo de estancia de 03m48s (+5%). En la página de Facebook superamos los 800 amigos (+7%), y en Twitter superamos los 1415 seguidores (+13%).

El oráculo de Google dice que la mayoría sois hombres (83%), aunque curiosamente este dato ha descendido un 7% en el último año, principalmente de entre 25 y 34 años (50%), profesionales de internet, tecnófilos, aficionados al cine y TV, entusiastas de los móviles y de los deportes (fútbol, principalmente).

BrowsersChrome sigue siendo el navegador más usado para acceder a los contenidos, con más del 73% de los usuarios. Respecto al año pasado, siguen cayendo Firefox (16%) y IE (6%). El nuevo Edge no supera el 1%. El 92% de vosotros usáis Windows, siendo Mac el segundo más utilizado con el 3%. Curiosamente, el 50% lo hacéis desde Windows 7, el 23% desde Windows 8.1, y algo más del 16% estáis ya utilizando Windows 10.

Tras varios años de incremento de visitas procedentes del otro lado del Atlántico, el origen de las visitas está prácticamente igualado ya entre España (22%) y Mexico (21%). Algo detrás, pero también in crescendo, tenemos Colombia (11%), Perú (8%), Argentina (7%) y Chile (6%).

Como es habitual, el 83% de las visitas proceden de los buscadores, Google en más del 99% de las ocasiones. El acceso directo, introduciendo la URL o desde favoritos, se utiliza el 10% de las ocasiones, y apenas un 4% de enlaces desde otros sitios web.

Y respecto a la pregunta que me han hecho tantas veces: "¿Y realmente te vale la pena? ¿Qué sacas tú de esto?" La respuesta sigue siendo una afirmación categórica, por supuesto que vale la pena. La satisfacción que supone escribir sobre lo que me gusta y pensar que esto puede ser útil a alguien es inigualable, y los grandes amigos que voy haciendo a lo largo de este camino no tienen precio. Sólo esto ya compensa al 100% el esfuerzo que supone mantener un blog tanto tiempo.

Pero dejando los intangibles aparte, también aporta otro tipo de beneficios más terrenales, aunque no por el lado de la publicidad, que es el que parecería obvio: Adsense sigue básicamente en su tónica; los ingresos me permiten invitar a mi familia a almorzar un par de veces al año, pero decididamente esto no va a ayudarme a liquidar la hipoteca ;D Ni rastro tampoco de los posts patrocinados de antaño, ni de anunciantes fijos que sí disfruté hace algunos años ya.

Los beneficios son indirectos y llegan en forma de visibilidad y oportunidades profesionales que de otra forma no habrían sido posibles. Por tanto, os puedo decir de primera mano que realmente un blog no sólo os podría ayudar a encontrar empleo; si prestáis servicios profesionales de cualquier tipo, vuestra bitácora puede seros incluso de más utilidad que contratar una valla publicitaria en vuestra autopista favorita ;D

Eso sí, también os puedo decir que en ningún caso, al menos de los que conozco, se trata de un retorno inmediato: se requieren años para llegar a este punto, y de hecho lo más habitual es que se caiga por el camino antes de conseguirlo. Pero sinceramente, no es nada que con un poco de paciencia y tesón no pueda conseguirse, así que os animo a lanzaros de forma decidida, que seguro que vuestro yo del futuro os lo agradecerá ;)

Y finalmente, aprovecho estas últimas líneas para agradeceros de nuevo vuestro incondicional apoyo durante todo este tiempo, y espero que sigáis por aquí muchos años más, ayudándome a buscar la Variable.

Publicado en Variable not found.
martes, 10 de mayo de 2016
lunes, 9 de mayo de 2016
ASP.NET Core
Hace un par de días, Scott Hunter, Program Manager de .NET en Microsoft, desvelaba las fechas de aparición y otros detalles sobre las próximas releases de ASP.NET Core, de las que no teníamos noticias desde el pasado mes de febrero, momento en que decidieron retrasar los lanzamientos previstos.

Veamos cómo queda ahora la cosa.
miércoles, 4 de mayo de 2016
ASP.NET Core
Nota: existe una actualización de este post a la RC2 de ASP.NET Core. Mejor que leas esa ;)
Uno de los requisitos más habituales que tenemos en cualquier aplicación medianamente compleja es la creación de logs donde guardar información cuando ocurran determinados eventos.

En ASP.NET "clásico" teníamos varias opciones, como utilizar las propias herramientas de tracing del framework o frameworks especializados de terceros como los célebres Log4Net, NLog o muchos otros, pero al final la idea era la misma, poder disponer de un componente en el que poder registrar sucesos como el siguiente:
public ActionResult RemoveInvoice(string id)
{
    ... // Remove the invoice  
    _logger.LogInformation($"Invoice {id} was removed by {User.Identity?.Name}");
    return RedirectToAction("Index");
}
El nuevo ASP.NET Core viene equipado de serie con un sistema de logging interno, integrado en el propio marco de trabajo, que proporciona funcionalidades básicas pero, sobre todo, los mimbres básicos sobre los que montar sistemas de trazas más complejos y personalizables.

Dedicaremos este post a ver cómo se configura y utiliza este mecanismo que, como otros aspectos del framework, está construido pensando en su extensibilidad, y hace uso intensivo del sistema de inyección de dependencias.

Nota: aunque este componente no es un gran candidato a cambiar dada las pocas actualizaciones que ha sufrido en los últimos meses, es bueno recordar que todavía estamos utilizando una release candidate de ASP.NET Core y, por tanto, algunos detalles aún podrían variar antes de que aparezca la versión final del producto.
martes, 3 de mayo de 2016
Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)

.Net

martes, 26 de abril de 2016
ASP.NET Core
Al hilo de lo tratado en el último post sobre la ramificación del pipeline de ASP.NET Core utilizando los extensores Map() y MapWhen(), el amigo Fernando V. dejaba una pregunta interesante en los comentarios del blog:
"[…] Igual que hemos visto cómo ramificar el pipeline, sería posible volver a unir las distintas ramas en una sola?"
Tampoco creo que sea muy habitual crear este tipo de estructuras en el pipeline, pero la verdad es que me ha parecido un reto muy interesante, lo suficiente como para dedicarle un post ;D
lunes, 25 de abril de 2016
martes, 19 de abril de 2016
ASP.NET Core pipeline
Al representar gráficamente el pipeline de ASP.NET Core, lo habitual es hacerlo como una tubería única en las que colocamos estratégicamente los middlewares que procesarán las peticiones que entrarán por ella.

Incluso a nivel de código, la inserción de middlewares se realiza normalmente invocando métodos del tipo UseXXX() sobre la instancia de IApplicationBuilder que recibimos en el método Configure() de la clase Startup de nuestras aplicaciones ASP.NET Core.

Esto parece dar a entender que el pipeline es lineal, y que todas las peticiones serán procesadas de la misma forma y por los mismos middlewares, salvo que alguno de ellos decida cortocircuitar la petición.

Ramas en el pipeline de ASP.NET CoreSin embargo, aunque eso será lo más frecuente, no es obligatoriamente así. Ya desde los tiempos de Katana tenemos la posibilidad de dividir el pipeline en branches o ramas en función de determinados criterios, permitiéndonos crear configuraciones mucho más complejas y potentes que las que habitualmente suelen mostrarse.

Como ejemplo, en el diagrama lateral podemos observar un pipeline en cuya entrada se encuentra un middleware de gestión de errores, y que a continuación se divide en función de la ruta de la petición de entrada. Así, las peticiones cuyas rutas comiencen por "/SignalR" serán procesadas por los middlewares configurados en la rama de la izquierda; las que comiencen por "/API" serán procesadas a lo largo de la rama derecha, y el resto continuará su proceso por la rama central.

Vamos a ver cómo conseguir crear estas estructuras, pero, como siempre, tened en cuenta que estamos aún trabajando con una versión preliminar de ASP.NET Core y hay detalles que podrían cambiar en la versión definitiva.
martes, 12 de abril de 2016
ASP.NET CoreFinalizamos ya la serie sobre el proceso de peticiones a contenidos estáticos en ASP.NET Core, donde hemos visto cómo gestionar peticiones directas a recursos estáticos utilizando el componente StaticFilesMiddleware y cómo permitir la navegación (o browsing) sobre directorios presentes en el sistema de archivos mediante DirectoryBrowerMiddleware.

Sin embargo, el paquete Nuget Microsoft.AspNetCore.StaticFiles aún contiene algunas perlas adicionales que es conveniente conocer para afinar aún más el comportamiento de nuestro servidor de archivos, e incluso para aumentar la productividad a la hora de implementarlo en nuestras aplicaciones.

Hey, pero como siempre, recordad que aún estamos jugando con una versión preliminar de ASP.NET Core, y hay detalles que podrían cambiar antes de alcanzar la versión final del producto.

lunes, 11 de abril de 2016
Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)

.Net

martes, 5 de abril de 2016
ASP.NET CoreEn la primera entrega de esta serie comentamos las diferencias que encontramos entre ASP.NET 4.x y ASP.NET Core a la hora de procesar peticiones dirigidas hacia recursos estáticos de nuestro sitio web, que pasaba de ser una funcionalidad integrada en IIS a convertirse en un módulo opcional que tenemos que incluir y configurar expresamente cuando necesitemos esta característica.

Para entrar en materia, en dicho post presentamos StaticFilesMiddleware, el componente proporcionado por ASP.NET Core que, insertado convenientemente en el pipeline, es capaz de capturar las peticiones cuya ruta coincide con un recurso estático presente en el sistema de archivos y retornar su contenido al cliente.

Sin embargo, el paquete Nuget Microsoft.AspNetCore.StaticFiles contiene otros middlewares que cubren necesidades que podemos encontrar con frecuencia cuando en nuestras aplicaciones necesitemos gestionar contenidos estáticos.

Y aún a riesgo de resultar cansino, antes de continuar os recuerdo que seguimos trabajando con versiones preliminares de ASP.NET Core, por lo que todavía podrían introducirse cambios en el producto.
lunes, 4 de abril de 2016
Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada, bastante salpicados de las novedades (y algunos bombazos) que cayeron durante el evento //Build 2016 celebrado San Francisco, y creo que sin mucho gazapo del April fools’ day. Espero que os resulten interesantes. :-)

Enlaces destacados de la semana (o del mes, o quizás del año ;))