[Video Tip]Análisis estático con Sonar Lint y servidor privado Sonar en Azure App Service (Linux)

Muy buenas,

En esta ocasión veremos como realizar el análisis estático de nuestro código y como sacar mayor partido haciendo uso de Sonar como servidor, aunque también veremos que no es realmente necesario.

¿Quieres ver un vídeo explicativo a modo de DEMO? Si es así, puedes acceder directamente a partir de este enlace. En caso contrario, sigue leyendo para leer brevemente un resumen.

Sin usar un servidor sonar.

Para llevar a cabo el análisis estático de código en nuestra solución seguiremos los siguientes pasos:

1.- Añadir el paquete NuGet: SonarAnalyzer.CSharp.

image

2.- Incluir en nuestra solución un fichero Demo.RuleSet.

3.- Configurar las reglas, tanto las específicas de Microsoft, como hasta ahora hacemos en nuestros proyectos, así como las nuevas añadidas por sonar, que distinguiremos fácilmente dado que tienen la nomenclatura “Snnnn”.

image

4.- Finalmente, recompilar para analizar y posteriormente revisar el código.

image

Usando un servidor Sonar.

1.- Instalar la extensión “SonarLint for Visual Studio 2017”.

image

2.- Abrir la solución y realizar la conexión con el servidor Sonar.

image

3.- Tras la conexión, vincularemos la solución a proyecto Sonar previamente creado desde el propio servidor.

4.- Finalmente, el fichero de reglas “.ruleset”, se creará automáticamente.

image

5.- Al igual que para el caso anterior (sin servidor), configurar las reglas y compilar para comenzar a analizar y revisar el código.

Happy testing!

Un saludo
Juanlu, ElGuerre

¡Hasta luego Madrid. Hola Huelva-Sevilla !

Ya hace algo más de tres meses que abandone Madrid para venir al sur. Para estar más cerca cerca de mi tierra, la que me vio nacer. Durante este tiempo han transcurrido muchos cambios y aun a pesar de encontrarme en proceso de adaptación, creo que, sin duda, me siento en casa. 

Recuerdo lo difícil que me resultaron las despedidas a pesar de ser simplemente “hasta luegos”. No solo fueron momentos extraños para mi, momentos que aun pensando en ellos, siempre los vi lejos, momentos que parecían alejarse en el tiempo y que no querían llegar. ¿Miedo quizás? ¿Al cambio? ¿A lo desconocido tal vez? Sea como fuere,  la idea me rondaba la cabeza a cada instante. Una parte de mi, me animaba a dar el paso sin meditarlo mucho, mientras que la otra, el sentido de la razón, los años, el cuidado, la antigüedad, la estabilidad, me decían lo contrario.  Pero, por otro lado, si no daba el paso, algo parecía no tener sentido. ¿Qué pasaría si después de unos años miraba hacia atrás y me arrepentía de no haberlo intentado?

La mente iba y venía, un día y otro, hasta que al final, encaje todas las piezas en mi cabeza. Hice algunos números y aun a pesar de que el encaje fue difícil, me decidí a dar el paso. Ahora, aquí estoy, trabajando en Sevilla, comenzando una nueva vida y un nuevo reto personal y profesional. De momento vivo el Huelva, dado que aún quedan por hacer algunos ajustes. No me importa el vaivén, pues, aunque pueden parecer días largos y duros, nada queda más lejos de la realidad, los Podcasts, amenizan los 70 minutos de ida cada mañana, y, la música y la ordenación de pensamientos, los 50 minutos de vuelta. Al llegar, una recompensa, Eva me espera dándolo todo. ¡Así, da gusto. GRACIAS EVA!

Atrás quedan algunos momentos

Madrid

Avanade me ha tratado como un miembro más de su familia, entre ellos he crecido, he mejorado cada día, no solo como profesional sino también como persona, me han hecho sentirme valorado y gran profesional. Tener que estudiar y “frikear” para estar a la altura, charlas, eventos, clientes, fiestas y por supuesto, grandes amigos de los que no voy a olvidar algunas anécdotas y a los que tengo mucho que agradecer: @elbruno, que siempre me “metía en algún que otro fregao”, Edu por hacerme las cosas más fáciles como SME de Azure, Sergi, por dejarse “enmarronar”, David, Roberto, Víctor y muchos más con los que he compartido grandes y maravillosos momentos, GRACIAS CHICOS, ¡Seguiremos compartiendo…, :-D!

Rubén, Alerto, Teo y por supuesto, Mari, la guerrera (la sister), igual ya no coincido en los cumples para saborear las tartas de Ana Mari, pero, no os libraréis de mí tan fácilmente, ¡Seguimos al pie del cañón…!

Otros nuevos momentos están llegando…

Sevilla

Everis Center, en Sevilla (como “Innovation & .Net Expert”), aunque pudiese parecer algo muy distinto a mis andanzas anteriores, nada mas lejos de la realidad, otra gran familia, en la que seguir y de la que continuar aprendiendo. Una cálida bienvenida, grandes compañeros que te ayudan, te apoyan y te hacen sentir uno más. GRACIAS, y en particular a @jmfvarela, por que de alguna manera, ha apostado y ha sido partidario de mi decisión.

Después de estos tres meses,  lo mejor es que no me he equivocado en la decisión. Quizás pueda parecer que es pronto para estar totalmente convencido, pero, creo que hay cosas que hablan por si solas: la FAMILIA y los amigos de toda la vida a una hora de camino, Sonia y Pedro como hermanos, Lola y Paco como unos padres, las puestas de sol, la playa, “el paseo marítimo”, las cervecitas del sur y su gente, y, tantas otras situaciones de las que ahora veo difícil desprenderme. Por todo ello, y mucho más que seguramente me quedo en el tintero, puedo confirmar que la decisión ha sido acertada y no me arrepentiré!

¡Seguiré dando guerra, vaya por donde vaya. GRACIAS A TODOS POR HACÉRLO POSIBLE!

Un saludo
Juanlu, ElGuerre from @Huelva

[Podcast] Patrones de diseño para aplicaciones Cloud

Retry Pattern

Muy buenas,

Una vez más con @elbruno, en NTN compartiendo Podcast con Juan Carlos Quijano (@jc_quijano) y Sergio Navarro Pino (@snavarropino).

Hoy toca hablar de Azure. Principalmente sobre Cloud y, particularmente sobre patrones de diseño para aplicaciones.

¡Espero que os guste! Aquí os dejo el enlace al Podcast: http://www.ivoox.com/ntn-27-patrones-diseno-para-aplicaciones-audios-mp3_rf_16855511_1.html

 

Referencias:

 

Gracias @jc_quijano y @snavarropino por compartir este momento. Gracias @elbruno, como siempre, por hacerlo posible.

Un saludo
Juanlu @Madrid

Yo, Azure: Un paseo por la historia. Desde el IaaS sin persistencia hasta los Microservicios y Docker

azure-icon-250x250Hoy toca un poco de historia “Azurera” con @elbruno.  Si llevas ya tiempo embarcado en el mundo Cloud y en particular en Azure te sentirás identificado, si no es así, podrás conocer algunos aspectos, que actualmente, ya pasamos por alto, o damos por hecho.

Ya hace más de 6 años desde que di mis primeros pasos por la nube: “Azure: Desplegando y Depurando allí arriba en la nube”) y sin embargo, parece que fue ayer.

Recordar mis comienzos y mi paso por Azure durante todo este tiempo, ha sido un placer.  Además, gratificante e incluso hasta me ha hecho sentir un poco “Abuelo Cebolleta”, pero la verdad, ha merecido la pena el recuerdo.

Os invito a este tour junto con @elbruno a través de NTN, donde durante una hora damos un paseo por la historia y recordamos estos comienzos, recuerdos, anécdotas, algunas risas y por supuesto, un rato agradable.

¡Espero que os guste! Aquí os dejo el enlace al Podcast: https://elbruno.com/2016/11/01/podcast-un-poco-de-historia-sobre-azure-y-claro-terminamos-hablando-hablando-de-microservicios/

¡Si tienes tus propias anécdotas, compártelas! Winking smile

Happy listening !
Juanlu, ElGuerre

 

Algunos de mis recuerdos sobre Azure:

[Evento]Material sobre mi sesión: “Microsoft Azure. El camino hacia la elección de la Pastilla Roja”

Durante toda la mañana de este sábado 21 de mayo, ha tenido lugar el primer evento (“Microsoft Azure. El camino hacia la elección de la Pastilla Roja”), de un total de 6 que tendrán lugar durante Mayo y Junio, en el Tech Club de Tajamar.

Aquí os dejo la PPT que  seguimos durante la sesión.

Para teminar, agradecer  a Tajamar, y en especial a @Christiandgs esta oportunidad, a @adrían_arranz por la organización durante el evento y, por supuesto, gracías a @jc_quijano, por el empujoncito.

Nos vemos en el siguiente.

Saludos
Juanlu

Microsoft Azure. El camino hacia la elección de la Pastilla Roja.

Este próximo sábado día 21, estás invitado al evento de Azure que impartiremos durante toda la mañana en el “Tech Club de Tajamar.  Iniciamos una serie de eventos que tendrán lugar durante Mayo y Junio, con un total de 6 eventos muy interesantes:

  • Microsoft Azure. El camino hacia la elección de la pastilla roja
  • Aplicaciones de escritorio con WPF y MVVM
  • Azure ARM: Introducción, despliegue y recovery services
  • Todo en un día: desarrollo profesional con Visual Studio Team Services y Azure
  • Integración de datos con Microsoft SQL Server 2014 Integration Services
  • Inteligencia Operacional con Microsoft Operations Management Suite.

Tanto @raulgilabert como yo (@JuanluElGuerre) estaremos encantado de compartir toda la mañana contigo. Haremos una introducción al Cloud Computing, veremos que es Azure y la “tabla periódica” que componen sus elementos/sevicios. Realizaremos Demos de los principales de ellos, e incluso nos pondremos manos a la obra con algún que otro HOL. ¡Veremos si finalmente eliges la pastilla roja!

Todo el detalle del evento así como el registro, puedes encontrarlo aquí.

¡Ven con tu subscripción y saca el máximo partido. También estaremos encantados de aprender junto a todos vosotros!

¡Nos vemos el sábado!
Saludos
Juanlu

Visual Studio 15 Preview side by side Visual Studio 2015 Update 2. ¡Es un hecho!

image

Hoy es el día,

¿Convivirá Visual Studio 15 Preview y Visual Studio 2015 Update 2? Al igual que  en versiones anteriores, la convivencia no debería ser un problema, si bien, siempre queda alguna duda.  Así pues, si quieres saber cual es la respuesta, continua leyendo.

Antes de nada, echemos un vistazo a las novedades que incluye cada versión:

– Visual Studio 2015 Update 2: Página oficial

– Visual Studio 15 Preview (VS15): Página oficial o bien, en este otro link.

 

VS15 trae muchas novedades interesantes, pero lo que realmente ha hecho que no me lo piense mucho más, es que el desarrollo para Xamarin (Android e iOS) ya se encuentra incorporado de manera nativa en el IDE.

image

 

El proceso de instalación que he sido es el siguiente:

1) [Opcional]. Como paso inicial pero no necesario, he aprovechado para actualizar previamente el sistema con la versión “Windows 10 Insider Preview 14295  New!” sin problema de ningún tipo, no al menos hasta el momento. ¡Recordemos que se trata de una preview y todo lo que ello conlleva!

 

2) Actualización de Visual Studio 2015 al Update 2. Completada la instalación, me encuentro con que no puedo ejecutar mis desarrollos UWP. Concretamente, debido al error: “Cannot register the f756c511-bf45-40c2-b968-06659f6042e7_1.0.8.0_x86__8vrdchia8f0ps package because the following error was encountered while registering the windows.defaultPrograms ”.

Tras mucho “googlear” y poco resultado, finalmente revisando y analizando el fichero “Package.AppxManifest” encontré que todo se reducía a la eliminación de la siguiente entrada.

<uap:Extension Category=”windows.appointmentsProvider” EntryPoint=”ElGuerre.App1.Uwp.App”>
<uap:AppointmentsProvider />
</uap:Extension>

 

NOTA. Tras la eliminación manual de esta entrada, podemos volver añadirla desde el editor del manifiesto. Si tras ello editamos nuevamente el fichero, no la volveremos a encontrarla, pero seguirá apareciendo marcada en el editor. ¡Supongo que ha debido quedar obsoleta!

3) Instalación de VS15. Finalizada esta instalación podemos encontrarnos con algunos errores, quizás un poco habituales:

  1. Si se produce el error “[Critical] XDE Exit Code: InvalidArguments (3)”,
    • Reparar el SDK de Android (“Programs and Features > Microsoft Visual Studio Emulator for Android > Change”  y Reparar (“Repair”)
    • Eliminar de Hiper-V Manager todos los “Virtual Switch Manger”
    • Ejecutar XdeCleanup.exe “C:\Program Files (x86)\Microsoft XDE\10.0.10240.0”.
  2. Si seguimos teniendo el mismo problema, pasamos a modo manual:
    • Usar la herramienta “Visual Studio Emulator for Android” para desinstlar, descargar o iniciar emuladores. ¡Aseguremos de “matar” los procesos XDE si la desinstalación, descarga o inicio de un emulador nos advierte de no poder completar la acción!
    • Utilizar la consola de Hyper-V para ver el detalle de arranque y comporobar con más detalle lo que pueda estar ocurriendo.
    • Probar a deshabilitar la wifi y repetir el paso (2) conectados por cable a la red.
    • Si llegado este punto, los emuladores no se inician y observamos el error “init: Failed to read from /dev/hw_random: No such device”, entonces, eliminamos del fichero “C:\Program Files (x86)\Microsoft XDE\10.0.10240.0\SKUs\Android\xdesku.xml”, la entrada: GuestDisplayProvider=”VsEmulator.OpenGLGuestDisplay”.

Conclusión

  • Completadas las actualizaciones anteriores y, habiendo realizado el tour completo de errores y pasos, puedo concluir que una vez resueltos los conflictos, ambos productos pueden convivir.

Espero que este post sirva para despejar alguna que otra incertidumbre y para animar a alguien a dar el paso. Winking smile

Saludos
Juanlu

Referencias:

TIP: Error de ejecución en Windows 10 Mobile pero NO en Windows escritorio. Y únicamente en modo Debug

Resultado de imagen de

Muy buenas,

No podía pasar por alto compartir este error y su solución con vosotros después de haberme vuelto loco durante las últimas horas. La cuestión es que por alguna razón que desconozco tras actualizar Visual Studio Update 2, me he topado con este error: “Exception thrown: ‘System.Reflection.TargetInvocationException’ in mscorlib.ni.dll

Error, que puede desenvocar en los los siguientes:

1) Inner Exception:

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String key, Boolean cache)
   at GalaSoft.MvvmLight.Ioc.SimpleIoc.MakeInstance[TClass]()

2) Failed to assign to property ‘Windows.UI.Xaml.FrameworkElement.DataContext’

Lo que me parece más curioso es que sólo afecta a la aplicacion Windows 10 Mobile cuando es ejecutada en modo DEBUG. No ocurre así cuando es ejecutada en modo release ni en ninguno de los modos cuando es ejecutada como Windows10 Escritorio. El error se produce al intentar resolver la dependencia de una de las clases que hace uso de SQLite.

Solución:
Tras dar algunas idas y venidas revisando los últimos cambios realizados en el código, creo que el error puede deberse al uso con SQLLite, el cual parece hacer uso de la dependencia “Visual C++ 2015 Runtime for Universal Windows Platform Apps“. Tras añadir la misma el error deja de producirse y la aplicación vuelve a funcionar.

La pregunta que me sigo haciendo es ¿Por qué solo se produce este error para una circunstancia muy particular? ¿Quizas es un Bug? …

Espero que este pequeño TIP, sirva para evitar algun que otro dolor de cabeza.

Saludos y buen fin de semana
Juanlu

Template 10. Un nuevo camino para hacer aplicaciones UWP. ¡La churrera está en marcha!

Icon for package Template10

 

Template 10: “Una amplia biblioteca de helpers, servicios y clases para las aplicaciones UWP con el fin de maximizar la genialidad y minimizar lo repetitivo.”

UWP se encuentra entre nosotros y como sabemos, viene con muchas y nuevas caráctericticas: Device families, SplitView/Hamburger Menu, Relative Panel, StateTriggers/AdaptiveTrigger, etc. Si bien es cierto, la creacion de aplicaciones siguie siendo repetitiva teniendo que crear la estructura base o esqueleto de nuestra aplicación cada vez que comenzamos con una nueva. Es cierto que podemos crear una plantilla y guardarla para partir de ella. También es cierto que seguiremos teniendo que repetir código o pensar en la navegación, etc. Para evitar “todo” esto ¡llega TEMPLATE 10!

 

Con Template10 podremos comenzar a crear aplicaciones como UWP “churros” y disponer en ellas desde el momento cero, de “todo” lo imprescindible.

  • Controles
  • Behaviors
  • Services
  • Converters
  • MVVM y, ademas compatible con con MVVMLight (Galasoft) y IoC/DI.
  • etc.

Personalmente lo que mas me gusta de Template 10, es toda la funcionalidad que incluye Out-of-the-box:

  • Plantillas de projectos “Mínima” o “Básica”
  • BootStrapper. Menos eventos en nuestro “App.xaml.cs”. En lugar de: OnLaunched, OnActivated, OnFileActivated, OnCachedFileUpdaterActivated, etc. Unicamente necesitaremos dos: “ public override async Task OnInitializeAsync(IActivatedEventArgs args)” y “   public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)”
  • Menu Hamburger
  • Navegación y control del Menú, sin tener que codificar practicamente nada.
  • Adios a “Behaviors SDH (XAML)”. Referencia con advertendia de obsolescencia y Bienvenida: “Microsoft.Xaml.Behaviors.Uwp.Managed”, como Open Source.
  • El códio se encuentra en Gihub: https://github.com/Windows-XAML/Template10 y además, con algunos ejemplos para hacerlo aún más fácil.

Los pasos que seguiremos para la ejecución de una aplicación haciendo uso de Templat10 son los siguientes:

  1. Descargar el instalable (v1.5) para la plantilla de proyecto desde aquí.
  2. Crear un nuevo proyecto de tipo Template 10 (Minimal): image
  3. Actualizar desde NuGet el paquete “Template10” e incluir el paquete “Microsoft.Xaml.Behaviors.Uwp.Managed”
  4. En estos momento y hasta que sea actualizada la plantilla de proyecto, modificar el constructor de la clase Shell.xaml.cs, sustituyendo el parámetro “NavigationService” por su interfaz “INavigationService” tal y como puede verse en la siguiente image: image
  5. F5 y voilá…

imageimage image

Espero que haya sido de utilidad.

Gracias @jerrynixon, por ofrecernos tan apreciado trabajo y hacernos más facil la creación de nuestas aplicaciones. “Thanks so much”

Saludos
Juanlu, ElGuerre

[TIP Windows10 – x:Bind]: El fin de los parámetros <null> desde un “AppBarButton”

Muy buenas,

Al desarrollar aplicaciones Window Phone 8/8.1 con MVVM, el paso de parámetros desde un boton “AppBarButton” de una “CommandBar”,  siempre se convertía en una tarea un poco tediosa y, por consiguiente, teníamos que implementar algun tratamiento extra . Ahora, para las aplicaciones universales y gracias a “x:Bind”, ya no será necesario. Veamos como solucionarlo con un pequeño cambio.

Situación / Problema:

Enlazando el DataContext de una página con su ViewModel. Aunque podría se cualquiera, en en este ejemplo usamos el Contenedor de Unity (SimpleIoC) de MvvmLight de Galasoft.

image

A continuación, el enlazado con el “Comand” se hace a partir del DataContext antes definido. Sin embargo y, aunque debería ocurrir lo mismos para el “CommandParameter”, no es así. En el Comando (RelayCommand) implementado en el ViewModel, el parámetro recibido siempre tiene el valor nulo en lugar del objeto pasado “lvTasks” (ListView, en este caso).

image

Nota: Esto ocurre ya que el botón no es capaz de localizar el elemento “lvTasks” definido en la página, puesto que el enlazado lo está haciendo con el ViewModel. ¡Lo curioso es que esto es así para este tipo de botones pero nó para otros controles!

 

Solución:

Hasta ahora, para solucionar los inconvenientes anteriores, teníamos que crear una propiedad adicional en el ViewModel, cambiar los DataContext en el “CodeBehind” y otras alternativas que podemos ver buscando en Google. La cuestión es que supone ensuciar el código para hacer algo muy trivial.

Desde que contamos con “x:Bind” en Windows 10, la solucion es mucho más simple. Cambiamos “Binding ElementName=lvTasks” por “x:Bind lvTasks” y todo solucionado:

image

Como vemos, x:bind es capaz de localizar el control “lvTasks” en la página y por tanto nuestro RelayCommand deja de recibir parámetros nulo.

image 

Recordemos además, que el uso de x:Bind crea un enlace a datos fuertemente tipados y aporta mejoras de rendimiento.  Para más informació sobre x:Bind, podéis echar un vistazo a este post de nuestro compañero @JavierSuarezRuiz

Espero que sea util.

Salduos
Juanlu, ElGuerre