Despedida del programa Microsoft MVP

Después de 13 años como Microsoft MVP, este año me despido del programa. Y quiero hacerlo dando las gracias a todos, a la propia Microsoft y -sobre todo- a la gente que he conocido en este periodo: empleados de la propia Microsoft, toda la gente del programa MVP o de las comunidades, etc.

Al fin y al cabo, dejando a un lado los reconocimientos, conocer a toda esta gente ha sido lo mejor y más importante de este periodo, hasta el punto de poder decir que a algunos de mis mejores amigos los he conocido aquí. Y eso es mucho decir.

A decir verdad desde hace un par de años ya le había comentado a mamá Cristina (la gran madre de todos los MVP) mi intención de dejar el programa por diversos motivos, pero al final siempre me terminaba convenciendo para seguir por un tiempo…  que grande eres Cris y que razón tenías, muchas gracias por todo!

Entre estos motivos, destacaría el hecho de que hace tiempo que: ya no creo que por méritos propios merezca estar entre los reconocidos. Y esto es básicamente porque yo mismo elegí cambiar y hacer menos pequeñas contribuciones diarias (o casi) y centrarme en hacer dos o tres más grandes al año.

Ya no tengo ni el mismo tiempo ni -porque no decirlo- las mismas ganas que hace unos años… y sinceramente, hay gente que contribuye de ese modo mucho mejor que yo. Así que decidí que donde puedo aportar más, es por ejemplo en los eventos grandes tipo DotNetConference o organizando el GAPAND anual, que de momento seguirá.

Claro que no es el único motivo, siempre hay cosas en las que uno no está 100% de acuerdo, pero ahora no es el momento ni el lugar para hablar de ello. En este post sólo quiero, como he dicho al principio, dar las gracias a todos y decir que me lo he pasado pipa durante este tiempo. Siempre recordaré este periodo con muchísimo cariño!

Yo por mi parte bajaré el próximo día 5/6 de Octubre al Tech Summit en Madrid y aprovecharé para despedirme de todos los que me encuentre, ya que aprovecharé la excusa y me pillaré un tiempo sabático de todo esto, que ya me toca :P

Gracias a todos y ahora que sigan otros tirando del carro :D #NewBlood

L

Había pensado en esperar al 1 de Octubre para escribir esto, pero al final he decidido hacerlo ahora para no coincidir con la alegría de todos los nuevos (o renovados) MVP. Buen trabajo y felicidades, chicos! :D

ends

 

HowTo: Redeploy CLR assemblies to SQL Server (Newtonsoft.Json version issue)

 

sr

The Story

Hi again,

Some time ago I published a post about how to send notifications from SQL Server using SignalR. We are using SignalR self-hosted in a Windows Service in a separated server, and it had been running fine until now.

This week I had to set up a new SQL server which will replace the old one, which will replace the current ‘preprod’ one, and (entering recursive mode…).

After configuring the new SQL Server settings, I tried to update the previously imported assemblies to the database to the latest versions I’m currently using in the .NET project (Newtonsoft.Json & Microsoft.AspNet.SignalR.Client).

References map:

  • MyAssembly
    • Microsoft.AspNet.SignalR.Client
      • Newtonsoft.Json

As you can see, the app references the SignalR client, which references Newtonsoft dll.

So, in order to redeploy the assemblies it’s necessary to:

  • Remove all the CLR Stored Procedures that are using these assemblies, otherwise you cannot delete the assemblies.
  • Remove the main assembly and then all its dependencies in the correct order (Note: It’s not necessary to remove Framework assemblies if it’s not changed).
  • At this point you’ll be able to create the assembly again via CREATE ASSEMBLY
CREATE ASSEMBLY Falcon_SqlProxy FROM
'C:\Falcon\SqlServerAssemblies\Falcon.NotificationsClient.SqlProxy.dll'
WITH PERMISSION_SET = UNSAFE

All dependent assemblies will be created again in the database (in this case Newtonsoft.Json & Microsoft.AspNet.SignalR.Client). Easy…

BOOM!

However, when tried to import the assembly to SQL Server I’ve got this error:

“Assembly ‘Microsoft.AspNet.SignalR.Client’ references assembly ‘newtonsoft.json, version=6.0.0.0, culture=neutral, publickeytoken=XXXXXXXXX.’, which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request.”

I decided to import the assemblies one by one, from down to top.

Firstly I imported Newtonsoft.Json with no problems, but when I tried to import the SignalR client I received this error:

ie1

It seems a versions issue, because I’ve imported Newtonsoft.Json version 9, not 6! Let’s see what’s in the assemblies view:

select * from sys.assemblies

ie2

It’s correct. I’ve imported version 9 of the library… so why the hell SQL is looking for version 6? Well, if you inspect Microsoft.AspNet.SignalR.Client you’ll see that this library has a reference to Newtonsoft.Json version 6.0.0.0 :S

ie3

This version number is used to determine the minimum version number (the library won’t work with previous versions), but it seems SQL Server is trying to match this version number with the assembly version number in its catalog, and if the number is different is unable to import the assembly.

If I’m wrong, please correct me! Thx :)

Solution?

After spending some hours trying different solutions , the only way to solve that -at this time- is register a previous version of Newtonsoft.Json instead of the latest one.

Any version? Nope.

The only version it worked for me is 6.0.8, previous ‘6’ versions didn’t work because of this error:

“‘Method not found: ‘Newtonsoft.Json.Linq.JValue Newtonsoft.Json.Linq.JValue.CreateNull()’.'”

Finally, once I’ve copied the 6.0.8 version of the Newtonsoft.Json to the server path the import process has worked like a charm.

ie4

Now I’m looking for a better solution, because I don’t like using old versions of assemblies. I will update this post with a better solution as soon as possible :D

In the meanwhile, hope this helps.

GAPAND 2016 is over

IMG_20160702_140840

BUENO…

Otro año ha pasado, y otra edición más del GAPAND a la saca. No, si al final esto va a convertirse en un clásico y todo… bueno, el tiempo lo dirá. Lo que si os puedo asegurar es que ha sido la mejor edición hasta la fecha, ya que el feedback de la gente (que al fin y al cabo es la única métrica que me interesa) es, a falta de una palabra más ‘fisna’: COJONUDO :D

Y eso no se paga con nada, sabéis? Porque vale, si, seguro que ya os imagináis que organizar un evento como este es un currazo. Y vaya si lo es! Lleva meses de trabajo duro, de coordinarse con mucha gente, de lidiar con 1000 temas distintos, de solucionar un montón de problemillas sobre la marcha, y todo por un día… un mísero día al año. Como nos gusta complicarnos la vida, eh? ;)

Pero es que todo eso no es nada cuando ves el ambientazo que se respira ese día. Cuando tienes la oportunidad de volver a ver a viejos amigos, y de hacer otros nuevos. Porque lo bueno del GAPAND (como en tantos otros eventos 100% comunidad) no está sólo en las sesiones, está en el contacto con la gente, y en el buen ambiente que se respira.

 

GRACIAS

Así que desde aquí quiero daros las gracias a todos los que en mayor o menos medida habéis ayudado a que este evento hay sido posible: GRACIAS! GRACIAS! Y MUCHAS GRACIAS! :D

A todos, a los colaboradores porque sin ellos no tendríamos un sitio en el que hacer el evento (Universitat d’Andorra), ni desayuno (Sant Eloi), ni comida (DevsDNA), ni camisetas para los ponentes (Eset) y para la gente del staff (Semic), ni camisetas de regalo (Microsoft), ni cervezas (Hack & Beers), ni cosas para sortear (Caldea, Andorra Turisme, etc.).

A los ponentes, porque además de ser unos cracks hacen el esfuerzo de prepararse contenido súper interesante para crear una agenda de los más chula. Y todo eso lo hacen sin recibir nada a cambio… es más, incluso tienen que costearse su hotel! Así que imaginaros su compromiso con la comunidad! Si eso no es amor y pasíon por lo que te gusta, no se qué puede serlo. Un aplauso enorme… sois muy grandes!

Y cómo no, a todos los que habéis asistido al evento… sin vosotros esto no tendría sentido. Me alegra especialmente haber visto este año a bastante gente joven (venga, que los viejos necesitaremos el relevo, más pronto que tarde :D), estudiantes de la propia universidad, y gente que ha venido de bastante lejos a pasar un día con nosotros en este pequeño país… GRACIAS!

Mención aparte para mi colega Jordi, que ha tenido la paciencia de aguantarme otro año, y de tirar del carro cuando era menester. Ah! Y de buscarse la vida como nadie, y hasta de hacer de Community Manager. Thx mate! ;)

Os dejo con algunas fotos del evento. Si tenéis algunas fotos chulas por favor contactad con nosotros para ampliar el álbum de recuerdos… gracias! :)

 

Y un resumen en forma de Timeline, con algunos tweets del #gapand2016 :D

https://twitter.com/eltitular_es/status/749158636593750017

Video de mi charla en la #dotNetSpain2016

Hola de nuevo,

Lo prometido es deuda, he subido a Channel9 un video sobre mi sesión de ‘async Best practices’ de la pasada #DotNetSpain2016 :)

https://channel9.msdn.com/Blogs/channel9spain/Async-best-practices-por-Llus-Franco

s1

El vídeo dura una hora y veinte minutos aproximadamente y trata todos los contenidos de la sesión y la última demo con un poco más de profundidad.

Espero que os guste. Lo podéis ver online o descargar para más tarde.

Muchas gracias Isa por haber insistido, y al resto por el buen feedback! ;)

Materiales++ de mi sesión ‘async best practices’

Hola de nuevo,

Durante los últimos días me ha contactado bastante gente haciéndome preguntas sobre mi sesión de la pasada DotNet Spain Conference.

Aquí van un par de ellas con sus respuestas, por si son de vuestro interés ;)

“Las demos eran un proyecto de consola, pero qué consola era esa? No es el clásico cmd de Windows, verdad?”

Pues no, desde hace tiempo he sustituido el cmd por la estupenda ConEmu, que permite abrir distintos shells (PowerShell, PuTTY, mintty, GViM, etc) y distribuirlos como tabs o mosaicos.

Podéis descargarla desde: https://conemu.github.io/

m1

En lugar de partir de cero para configurarla, os paso también mis settings por si queréis utilizarlas de punto de partida. Basta con ir a ‘Settings’/’Import’ y posteriormente ‘Save’ :)

ConEmu Settings (XML): http://1drv.ms/1VV4cwp

Y si no os gustan siempre podéis hacer un ‘Reset’ y empezar de cero :P

“En la última demo (la de cancelaciones a la BD) mostraste trazas en el SQL Profiler. Dijiste que tenías una plantilla creada para eso? La podrías compartir si no te importa?”

Of course! Esta plantilla básicamente muestra los eventos Starting y Completed de cada vez que se ejecuta un SQL statement (en este caso un Stored Procedure que tarda unos 5 segundos en completarse). Lo más interesante es que gracias a esta plantilla podemos ver si las peticiones terminan con éxito o han sido canceladas por el usuario, amén de la duración, que también nos puede indicar si ha terminado con éxito o no.

m2

SQL Profiler template: http://1drv.ms/1p43ti6

Para instalar la plantilla en tu SQL Profiler basta con descargarla y hacer doble click. Se abrirá el profiler y os informarà de que la plantila se ha importado con éxito.

A partir de aquí, cada vez que queráis usar esta plantilla de traza, basta con usarla como las que vienen ‘out of the box’:

m3

Intentaré ir ampliando este post con aquellas que crea que pueden ser de interés general. Si tenéis alguna pregunta, ya sabéis :)

Nos vemos,

 

DotNet Spain Conference 2016… I was there!

_1

El pasado miércoles se celebró en Madrid el mayor evento del año en tecnologías de desarrollo Microsoft. Un evento al que han asistido más de 1700 personas de forma presencial y unos cuantos miles más en streaming por Internet.

Y sólo puedo decir una cosa: ha sido una experiencia cojonuda a todos los niveles.

Me he rencontrado con viejos amigos y he conocido otros nuevos, he podido asistir a algunas sesiones ‘pata negra’ de otros colegas, he visto y oído al gran jefe Satya Nadella, y para rematarlo he tenido la oportunidad de poner mi granito de arena con una sesión sobre ‘async best practices’ la cual, por el feedback recibido parece ser que ha gustado a mucha gente, así pues… ¿qué más se puede pedir?

Como bastante gente me ha preguntado, aquí os dejo las slides de mi sesión, así como el código con las demos y la demo sorpresa final:

Slides on Slideshare

Code on GitHub

https://github.com/lluisfranco/AsyncBestPracticesDemos2016

_b

https://github.com/lluisfranco/AsyncDatabaseCancellationDemo

La verdad es que hacía bastantes años que no hacía una sesión para tanta gente, y os tengo que confesar que los 5 minutos antes de empezar fueron ‘complicadillos’. La ventaja es que al fin y al cabo todos los frikis somos como una gran familia, de modo que al empezar la sesión y empezar a hablar de nuestras cositas los nervios desaparecieron desde el minuto cero y todo fue como una seda.

Felicitaciones

Un 10 para la organización. Después de haber podido organizar unos cuantos eventos por mi cuenta y saber lo complicado que es, no quiero ni imaginarme lo que tiene que ser montar un evento de este calibre… chavales, lo habéis bordado. Os podéis tomar unos días de merecidas vacaciones :D

Creo poder decir sin lugar a dudas que ha sido el mejor evento al cual he asistido en España. Felicidades a todos!

Y como al fin y al cabo este es mi blog, me voy a dar un poco de autobombo, que coño! ;)

Aquí van algunos tuits, gracias a todos por el buen feedback!