¿Cómo me mantengo al día de la información técnica?

Mucha gente me ha preguntado como consigo estar al día de las novedades tecnológicas del mundillo SharePoint/NET/Web/JS sin morir en el intento. En este post intentaré resumir lo que hago yo.

information-overload[1]

Ojo, no sugiero que lo que me funciona a mí te va a funcionar a ti también, pero por intentar que no quede, ¿verdad?

Fuente de información #1: Twitter

Uso Twitter para filtrar las noticias importantes. La lógica es la siguiente: si sigo a la gente que más o menos son de mi perfil tecnológico, es muy probable que twiteen o retwiteen noticias o contenido interesante para mí. En este sentido, mi red de contactos actúa como una caja de resonancia de lo verdaderamente importante.

Fuente de información #2: Newsletters

Para la información más detallada y “asíncrona”, estoy suscrito a varias newsletters que me envían periódicamente noticias de interés sin demasiada “paja” de relleno. Os pongo aquí las que me llegan:

  • InfoQ – Si tuviera que recalcar una publicación, sería esta. Son los organizadores de la QCon, la conferencia de desarrollo que se celebra en varias ciudades cada año. Principalmente me interesan las noticias de .NET, arquitectura y de prácticas de equipo.
  • Simple Talk – El newsletter de la gente de Red Gate. Un poco orientado a sus productos de profiling y de gestión de BBDD, pero con el contenido bastante útil al final.
  • DZone – Noticias de desarrollo, arquitectura y un poco de gestión de proyectos infomáticos. No tan útil para mí como InfoQ, pero de vez en cuando hay algo interesante como este artículo.
  • Methods & Tools – Es una publicación un poco “retro” orientada a desarrolladores y arquitectos. Publican una revista PDF cada 6 meses con artículos interesantes.
  • SharePoint Community – Noticias y novedades del mundillo SharePoint y Office 365.
  • Technically Speaking – Es el newsletter más personal que recibo. Lo edita Chiu-Ki Chan, una desarrolladora ex-Google que vive en EEUU. Los temas que cubre son básicamente “call for speakers”, organizar conferencias y charlas, hablar en público y la igualdad de género en la informática. Me va muy bien para mi “trabajo” en SUG.CAT.

Fuente de información #3: Revistas

Las revistas (en PDF y en papel) siguen siendo mi fuente de información “en profundidad”. Me inspiran para probar cosas nuevas y me dan ese conocimiento previo a meterse a trastear con algo nuevo.

Me suscribo para que me lleguen a mi buzón cuando haya un nuevo número.

  • MSDN Magazine – La revista “oficial” de .NET, con artículos de calidad (aunque a veces demasiado alejados del día a día) y temas en el “cutting edge” como dirían los anglosajones. Disponible en papel, en PDF y online.
  • DotNetCurry – La revista india de .NET. Artículos más asequibles, aunque la maquetación es a veces demasiado “Bollywood”. Hacen entrevistas a gente destacada del mundillo .NET.
  • Compartimoss – “LA” revista de SharePoint de habla hispana. Si eres SharePointero (o Office 365ero) la debes seguir. Punto.
  • DIWUG eMagazine – Revista en inglés de SharePoint, editada por el grupo de usuarios de SharePoint de Países Bajos. Artículos de mucha calidad. A veces está disponible en papel, en eventos europeos de SharePoint.

Fuente de información #4: Blogs

Siguiendo con la información en profundidad, sigo usando un agregador de blogs (ahora mismo Feedly). Allí tengo una colección de blogs de NET, de SharePoint, de otros hobbies y de compañeros como Robert Bermejo, que está que se sale con su blog de Azure.

Otro tipo de blogs que sigo son los de agregación de novedades, como Variable Not Found y This Week in .NET.

¿Cómo gestiono todo esto?

Aquí está la proverbial “madre del cordero”. Con el tiempo que tengo al día, ¿cómo gestiono todas estas fuentes de información?

Lo que hago es aprovechar el viaje en metro de cada día para ponerme echar un vistazo a Twitter y a Feedly. Si hay algo que merece una lectura más profunda, me lo apunto en OneNote.

Los newsletters y las revistas llegan cuando llegan. Lo que hago es programarme su lectura: un ratito el fin de semana, en el descanso, en un viaje… Lo mismo hago con las cosas apuntadas en OneNote: me programo su lectura.

Al mediodía, después de comer, echo otra batida por Twitter a ver si hay algo nuevo. Igual que por la mañana, apunto en OneNote cosas de interés para leérmelas con más detalle.

Supongo que mi flujo de información no es todo lo óptimo que podría ser, pero de momento me da buenos resultados. Al final, creo que es responsabilidad personal de cada profesional estar al día de su ámbito de acción.

Y vosotros, ¿qué pensáis?

 

UpdatePanel Troubles with SharePoint 2013

Few weeks ago I had a nasty bug on customer premises where a combination of SharePoint 2013 and ASP.NET UpdatePanel control resulted in some very weird behaviour.

THE SYMPTOMS

Our project consisted of several full-trust code ASPX pages, dutifully placed in _layouts folder. Two of these pages had ASP.NET AJAX UpdatePanel controls to give “a kind of” smooth user interaction experience. The reason to use it was the simplicity of wrapping the existing SharePoint server controls such as grids and buttons in the update panel to prevent page reloads on postbacks. (Yes, I know it’s legacy technology but still, sometimes it’s the best and simplest solution for a given problem).

However, these pages gave random errors as if their event was somehow lost between the UpdatePanel client-side code and the server-side postback. Randomly, we had errors in our pages, with no discernible pattern. The only clue was in the ULS logs, where there were no user claims associated with the request, as if it were a non-authenticated call. What’s worse, as it had no clear cause, our reproduction procedure was to mindlessly click the buttons in the hope of a random error. Needless to say, it was way too inefficient.

Googling around, I found a way to reproduce the errors using Fiddler HTTP debugging tool. The sequence of steps is to make the first page load with Fiddler running in the background. Then, I deleted all the captured traces in Fiddler and clicked the button inside UpdatePanel. Immediately, the UpdatePanel threw the dreaded error.

THE CAUSE

According to the Microsoft KB3062825 article, the cause is the mismatch between the HTTP protocol implementation in UpdatePanel and SharePoint 2013, where instead of returning a 401 code in the handshake, SharePoint returns 200 with the login redirect and the UpdatePanel loses its changes. It only applied to a certain combination of SharePoint 2013 and .NET Framework, and even in these combination it wasn’t certain that the error would happen.

Unfortunately, we were in that situation, with the right combination of SharePoint and .NET versions.

THE SOLUTION

The solution is simple: applying a specific .NET Framework hotfix (for Windows Server 2012 R2, for Windows Server 2012) that’s meant to patch the HTTP protocol handling causing the error. The patch is available via Microsoft support, but it’s not publicly available. I think that it’s because the error isn’t deterministic enough to be included in a regular cumulative update or service pack.

You also have to install SharePoint 2013 SP1, together with a Cumulative Update from December 2014 (or later).

“Jotasón” y la (mala) pronunciación de términos informáticos

Los que me conocen saben que soy un poco Grammar Nazi. Lo reconozco, me gusta corregir la ortografía o la pronunciación en inglés cuando se trata de gente a la que aprecio, como amigos o compañeros. No hace falta añadir que no lo hago por fastidiar sino siempre con el afán de que mejoren su expresión oral en inglés, lo que abre muchísimas puertas en el mundo profesional y sobre todo en el de la informática.

A lo largo de los años he ido guardando mentalmente las pronunciaciones de palabras técnicas más frecuentes. Aquí os presento la lista, con la pronunciación aproximada mala y la buena.

(Agradecimientos a Robert Bermejo por ser el artífice de alguna palabra de la lista. Os recomiendo su blog por si tenéis algún interés en Azure)

Término Pronunciación incorrecta aproximada
Pronunciación correcta con enlace al audio
SharePoint chárpoin
charpóin
sarepóin
sárapoint
serpóin
shérpoint
(share + point)
feature fítur
fiture
feature
fícher
premises premáises prémises
event receiver event risáiver ivén risíver
Azure éishur áshur
Xamarin shámarin
chámarin
sámarin
JSON jotasón
jasón
yéison
(como el protagonista del Viernes 13)
Bootstrap botestrap bútstrap
XAML chámel sáml
Microsoft Microsof Máicrosof
Git “yit” (como George) guit
LINQ línquiu link

Ya puestos, pongo también como se pronuncia mi nombre: Édin (con la “i” un poco más larga de lo normal) y no Edín.

¿Tenéis algunos ejemplos de vuestra propia experiencia?

Speaking at SharePoint Konferenz Erding 2016

Last week I was in Germany, in the little village of Erding (near Munich), delivering two sessions at SharePoint Konferenz 2016. It was a very good event with fantastic speaker lineup and nice environment.

SPKonferenz banner

My two sessions were Extending Authentication and Authorization and High-Trust SharePoint Add-Ins for On-Premises Development.

SPKonferenz Keynote
SPKonferenz Keynote Speakers

Extending Authentication and Authorization

In this talk I focused on explaining the architecture of claims identity in SharePoint. From there I went to explain how to extend the claims with custom claim providers, together with the explanation on how to use other identity providers such as ADFS or Thinktecture Identity Server with SharePoint. I had a fairly good Q&A session after my talk.

You can find the sample claim provider code at http://bcned.in/ClaimProvider.

High-Trust SharePoint Add-Ins for On-Premises Development

My second session was focused on how to build on-premises apps/add-ins (high-trust or S2S) using certificate authentication instead of OAuth-brokered authentication. I highlighted some of the challenges and also some of the extensibility points that we don’t have in low-trust apps. Again, I had nice Q&A time after my talk.

Hablando de Reactive Extension en DotNetSpain 2016

La semana pasada estuve participando en la mayor conferencia de .NET que se hace en España: la DotNetSpain Conference 2016. Este año se celebró en las instalaciones de Kinépolis, en Ciudad de la Imagen (Pozuelo de Alarcón). La zona me la conozco muy bien porque estuve “viviendo” allí durante unos meses para un proyecto de Microsoft Consulting Services.

WP_20160224_001

Más de 1700 personas asistieron al evento, entre los cuales unos cuantos compañeros de Sogeti España. Como muchos sabéis, soy un firme defensor de la comunidad técnica como una fuente de conocimiento, de inspiración y de contactos. Por ello animo siempre a mis compañeros a asistir y a ayudar en medida de lo posible.

Las charlas de la DotNetSpain 2016 fueron muy interesantes desde el punto de vista técnico. Además, pudimos disfrutar de la visita del mismísimo Satya Nadella, el CEO de Microsoft. Para mí, la conferencia fue un día para aprender, conocer gente nueva y reencontrarse con los conocidos.

Twitterebc5a75

En DotNetSpain 2016 hablé de Reactive Extensions (Rx), una librería de Microsoft poco conocida en el mundo “mainstream” de .NET pero que es muy potente para modelar aplicaciones que tienen que gestionar eventos o flujos asíncronos de datos. Afortunadamente, pude grabar la sesión usando un jueguete nuevo que tenemos en SUG.CAT y el video ya está colgado en Channel9.

La presentación está en SlideShare y el código fuente utilizado está disponible en GitHub.

Espero vuestros comentarios.

Creative Uses of IDisposable

We all know IDisposable interface in NET Framework. It is used to signal to any object with dependencies to other objects when should it dispose of them. IDisposable is a very handy feature together with the using statement, when IDisposable is called automatically when we exit a using code block.

I was reading the Introduction to Rx by Lee Campbell, in preparation of my session for DotNetSpain conference in February. There, I’ve found some creative uses of IDisposable.

Basically, it leverages the fact that Dispose method is called after “using” statement code block exits. So, we can use it to do some wrapping around that code block.

Before the code in the block is executed, the IDisposable constructor will be invoked. After the code is executed, the Dispose method will be invoked. In effect, our code will be surrounded by “Pre” and “Post” actions in an elegant way.

In Campbell’s exemple, a console app can leverage IDisposable to print text in different color inside a code block.

The “wrapper” is a short class named ConsoleColor that implements IDisposable. It remembers the previous console foreground color by saving it in the constructor and restoring it in the Dispose method.

The calling code just decorates Console.WriteLine code blocks with custom ConsoleColor instances, and voilà, we have a multi-color console application.

2016-01-30_13-31-52

Book Review of “Debugging Teams” and “Exercises for Programmers”

In the last couple of weeks I’ve been reading two books that I hoped would help me with my role as a practice lead.

debugging teams cover page

One of them is “Debugging Teams” by Brian Fitzpatrick and Ben Collins-Sussman published by O’Reilly. It is a small book of around 150 pages, filled with practical advice on how to make successful teams that work and collaborate together. When I started reading it, it reminded me of a book I read a year back called “Team Geek”. Of course, I missed the clue that “Debugging Teams” is a rewrite of “Team Geek”, expanded to include feedback from the first book.

The main advice of Debugging Teams is a simple idea of practicing HRT (Humility, Respect and Trust). It permeates the whole book as a effective acronym to remember during your team leadership work. The rest of practical advices in the book include how to manage conflict, how to make a strong team ethos, how to navigate the organizational hierarchies and so on.

Debugging Teams, in essence, is a great update to an already great book. I’d rate it with 5 stars, wholeheartedly.

exercises for programmers cover pageexercises for programmers cover page

The second book is even smaller, but equally useful. It is called “Exercises for Programmers” by Brian P. Hogan, published under the umbrella of Pragmatic Programmers brand. With the subtitle of “57 challenges to develop your coding skills”, it is an exercise book that begins with “Hello, world” challenges and ends with complete small projects such as to-do lists or URL shorteners.

I use it now to send bi-weekly code challenges to my team. We then sit together to do a joint code review of each individual solution, in order to learn from it how to improve the code legibility and mantainability. It is equally suitable to use it as a source for code katas, test-driven development (TDD) assignments or self-study challenges when learning a new programming language.

My review of the “Exercises for Programmers” is 4 out of 5, just because many programs are very simplistic and also because several examples in it are maybe too US-centric (use of imperial units and USA-specific jargon) for a universally applicable book. Having said that, it is also a must-have if you want to challenge your (or your team’s) programming skills.

 

Talking about Claims and Claim Providers at ESPC15 in Stockholm

Last week I was in Stockholm for the annual European SharePoint Conference 2015. A little bit tired after being in USA for MVP Summit the previous week, but happy to meet my dear SharePointers and get to know some new ones.

Me at ESPC15
Me at ESPC15

My talk was about “Extending Authentication and Authorization”. I talked about claims, the underpinning of all thinks AuthN and AuthZ in SharePoint 2013. My demo was a custom claims provider that exposed dummy claims in People Picker that were used to protect confidential document from normal users.

I also demoed the federated authentication with SharePoint and ADFS.

My Session announced at ESPC15
My Session announced at ESPC15

You can find my slides on the ESPC15 website or on SlideShare. The demo claims provider code is also available on my OneDrive.

Special thanks to Spencer Harbar for coming with the claims as boarding pass analogy in the first place. It’s a great explanation tool.

Learn Building Highly Scalable Applications in Azure

In the first half of this year I’ve been busy producing a new course for Pluralsight, called “Building Highly Scalable Web Applications in Azure”. It is a course about making a normal web applications scalable to thousands and millions of users.

In my opinion, the majority of the development tutorials that show you how to make a web application do just that: they show you how to make a demo application. This demo application isn’t supposed to be production-ready nor should support high user loads. But, what happens when you need a scalable application? This is the missing piece I thought I could provide with my course.

Slide from my Pluralsight course

The course takes a simple web application named Ticketer, a simple-but-complete event and ticketing MVC 5 application, and refactors it into a scalable, redundant version of itself using a variety of techniques such as storage locking removal, caching, asynchronous calls or non-relational data storage.

In the following clip you can see the load test of the application before and after the scalability improvements.

Questions? Leave a comment and I’ll do my best to answer it.

 

SharePoint 2016 y las expectativas

Como ya muchos sabéis, SharePoint 2016 IT Preview está disponible para descarga desde ayer, 24 de agosto de 2015. Con ello, han empezado a proliferar posts sobre la instalación, las mejoras y en general lo que se espera de SharePoint 2016.

Mi post no pretende repetir nada de esto, sino a aclarar lo que pretende conseguir Microsoft con esta versión beta IT Preview. Sólo ha pasado un día y ya he oído comentarios como “vaya SharePoint 2016, que pobre de funcionalidades que viene” o “si está clavado al 2013, si lo se no me lo instalo”, que van muy desencaminados.

SharePoint 2016 Preview Tilt

Si Windows 8 y Windows 10 han mostrado algo, es que Microsoft ha cambiado su estrategia de “betas” de software.

Antes, uno tenía que esperar hasta la Beta 1 para ver algo del nuevo software, pero ese software internamente ya estaba bastante maduro y lo que buscaba la beta es detectar las cosas . La Beta 2 y la Release Candidate o Technical Refresh (o cualquier otro nombre comercial bonito) servían para refinar esos errores minoritarios que siempre hay.

Ahora, la idea es que tengamos la beta Preview muy básica y mucho más “verde” pero mucho antes de lo que habitualmente se tenía. El objetivo es tener feedback real lo antes posible para ver como se comporta el nuevo producto en el “mundo real” y fuera de los laboratorios de Redmond. La primera Preview tosca muy pronto (en un par de meses) se sustituye por una Preview más refinada y así hasta la “beta final”: RTM. Con Windows 8 se siguió este patrón: primero la “Developer Preview” y luego la “Consumer Preview”, es decir los cambios más de back-end y la API primero y luego la interfaz de usuario y el pulido final. Con Windows 10 lo mismo: Preview con un ciclo más lento de cara al usuario final y otro más rápido (Fast Track) de cara al desarrollador/administrador.

Entonces, lo que tenemos entre manos es un SharePoint 2016 en el que la API y el back-end han sido cambiados por dentro de manera muy exhaustiva, pero donde la interfaz de usuario y la cara pública de la API es prácticamente la misma que en SharePoint 2013. De allí el nombre de SharePoint 2016 “IT Preview”. Con ello Microsoft pretende, en mi opinión, validar los cambios tan críticos como los MinRoles, búsqueda híbrida y los nuevos límites de escalabilidad.

Entonces, en una “IT Preview” es normal que no se vean grandes mejoras “a simple vista” ya que son más bien refactorings y reingeniería para poder habilitar esas grandes mejoras en los builds siguientes.

Yo esperaría una “Developer Preview” entre octubre y noviembre, y otra “Consumer Preview” en enero/febrero. La Developer Preview traería las mejoras de API de SharePoint cliente CSOM, el modelo de Apps y a saber que cosas más, con el objetivo de tener el feedback real de esos nuevos cambios para poder pulirlos lo antes posible. La Consumer Preview sería ya una fiel imagen del SharePoint 2016 tal como saldría acabado, con todas las mejoras de funcionalidad ya de cara al usuario y al administrador de sitios de SharePoint.

Entonces…paciencia, “pequeños saltamontes”. Esta IT Preview es sólo la punta del iceberg de las mejoras de SharePoint 2016.