Blog

Abanico, a few hours with Xamarin.Forms and SkiaSharp

It’s been a month and a half since I started to dig into the world of Graphic Design. The first module introduced, among other things, the notion of color wheel. And I felt the need to make my-self one of those 🙂

I’ve always kept an eye into SkiaSharp, a cross-platform 2D library to make fast vector graphics. By one side the need, by other the opportunity to play with new stuff. And a few hours later, I have a hue color wheel to discover new palettes, introduce your children into the world of color or simply enjoy the “superb” opening animation:

jun-21-2017 22-47-38
Abanico in action (Mac OS)

I considered from the beginning uploading it to the stores, iOS initially; then I noticed it fit better for desktops; then I realized didn’t have time for that. So I’ve published it at GitHub.

Wrapping views in Xamarin.iOS

Current sprint, which ends just tomorrow, is being thrilling. Wonderful. We’re crafting a beautiful app which goes beyond pixel respect, but content flow. I [think] can’t say anything about it, our customer, but our skills developing apps are taking a level which I’ve always dreamed with, and that definitely makes me super happy. 🙂

Last week we eventually needed a wrap view for a few pieces of the design. Wrap view here means an UIView which horizontally adds some other views until the max width it’s allowed, and then keeps stacking things in a new row just below. It’s a well-known control in Windows world, but didn’t find anything similar in iOS.

As always, I look for what the community has achieved with Objective-C/Swift, and came up into this beautiful implementation of a wrapping UIView: MyWrappingView. I say beautiful not for my idealistic view of the world but due to the actual implementation of the wrapping thing, mainly focused into this method (how layoutSubviews() calls “recursively” on every subview).

What does a Xamarin guy when finds a ruby like this one? Yes, do port it to C#. And that I’ve done. I still have had no time to make a fork-alike project in GitHub, but I’m making public the important bits, MyWrappingView.cs, hoping anyone in the Internet will find it useful as well and, who knows, could build a small sample (replicating the original one, for instance) to make it faster to anyone else understand quickly how things go.

xtka03mbiynp0rvsrc
First thought when you port a control and consider sharing it

I’ve tried to make the code C#-friendly, so anyone with knowledge on this last one will feel at home digging into it:

MyWrappingView

One more thing! In order to make these things work fine with AutoLayout, if you want your view to dynamically grow in height (for instance, a cell in an UICollectionView), don’t forget to set MyWrappingView’s preferred max layout width.

My UICollectionView doesn’t refresh on new items

Last week I was struggling with an UICollectionView -MvxCollectionView actually- which was not reacting to new items coming in the DataSource. For more turns I took, I didn’t found the answer.

I double checked the property I was binding in my ViewModel was an ObservableCollection<T>, also that modifying its content was firing anything in the DataSource but, in this last, it was just returning 0 sections for the very first time, which was correct by that one, and that was all.

Between disassembling MvvmCross’ MvxCollectionViewSource and looking through the source code at GitHub I noticed every time its ItemsSource prop. was set a new call to UICollectionView.ReloadData() was done as well.

So, if new items arrive into the DataSource, and this reacts “refreshing” the collection, why I keep seing it empty? I don’t remember currently if I found this at StackOverflow -Gosh bless it- or in iOS official API, but in iOS 10 ReloadData() must be done from the UI thread, otherwise it can’t assure the refresh to happen. From Xamarin perspective, something like:

UIApplication.SharedApplication.InvokeOnMainThread(() => ReloadData());

And, magic, there were the items I was looking for 🙂

Para los que nacimos en los 80, y para los que no

Nací en 1984. Octubre. Hace 32 años. He entendido siempre la treintena como asentamiento, y me ha tocado -está tocando- seguir aprendiendo. Pero no en plan víctima eh; todo lo contrario, de buen rollo 🙂 Hemos escuchado que la vida es un aprendizaje continuo pero, aquí, me refiero a cosas básicas. Disfruto siempre leyendo frases de Mr. Wonderful, reflexionando sobre ellas, y escuchando a Elsa Punset sobre Inteligencia emocional, pero no ha sido tanto el impacto que esto tenía en mí como hacerme una pregunta.

Una pauta que yo mismo he tenido, y también he visto mucho a mi alrededor, es el no tener tiempo ni de pensar. Es la versión mejorada de cuando tus padres te llamaban para comer y gritabas desde tu habitación ¡ahora voy! Solo que aquí, ahora, probablemente nadie te lo recuerde una segunda vez. Ir por la vida sin pensar hace que encajes en casi todo. Además, si te pasa como a mí, que me cuesta decir NO, la cosa empeora. Te vuelves líquido: fluyes bien, pero vas donde la marea va.

Con los 30 comencé a preocuparme de cuál quería que fuese mi papel en esta vida. Probé nuevas cosas en el trabajo, estuve en una relación que me enseñó mucho, viajé más de lo que tenía por costumbre, etc. Pero los años pasan y, en el fondo, sentía que todavía no sabía lo que quería. Me suele calmar mucho cuando me encuentro en una situación así acudir a los libros, y recordé que en la Universidad leí uno sobre productividad personal, Organízate con eficacia (de David Allen), que intentaba dar una respuesta a ese “saber lo que uno quiere”.

De forma muy resumida, porque hay literatura en Internet que lo explica mucho mejor que yo, es trazar una línea que una lo que haces hoy con lo que quieres hacer en la vida. Parecerá una estupidez, pero cuántas cosas hacemos hoy que no tienen nada que ver con lo que queremos en la vida… Un ejemplo: yo antes nadaba. Comencé porque iba acompañado y además recibíamos clases, y ambas eran una motivación para mí. Cuando decidí seguir por libre comencé a escaquearme: ¡ahora voy! Pasé al grupo de los que financiamos los gimnasios sin pisarlos. Entonces me pregunté ¿para qué c***jo voy yo a nadar? En esas fechas había comenzado a coger la rutina de pararme a pensar sobre qué quería hacer en la vida, y ya había descubierto algunos de mis propósitos y principios; comenzaba a tener una visión clara de por dónde ir los próximos años, y un pequeño conjunto de metas y objetivos. Y podía ver cómo conectaban desde un punto a otro.

Yo quiero a largo plazo estar sano. Me gustaría ser mayor pero con una calidad de vida buena. Para mi buena es poder llevarme a mis nietos en una furgoneta a pasar el día, y no morir en el trayecto de ida. Pero no quiero estar cuadrado por otro lado. Quiero estar normal. Por mi trabajo paso muchas horas sentado y la espalda a veces me molesta, cosa que la natación fortalece, pero también paso tiempo físicamente solo y la natación en cambio poco ayuda ahí. Si he hablado de tener nietos, es porque me encantaría tener hijos (plural); y compartir lo que nadie sabe con una pareja que lo sepa todo. ¿Pero cómo voy a encontrar una pareja si no conozco gente nueva? ¿Y ahora te preguntarás tú: qué tiene que ver esto con nadar? Y yo me dije, ¿y no hay algo que una todo: practicar deporte, conocer gente y pasar un buen rato? Pues para mí eso está siendo bailar salsa (y bachata). Del gimnasio me di de baja.

16373930560_74d67e2aa1_b

Oportunidades de probar la salsa antes había tenido varias, incluso fui a una clase para probar hace unos años. Pero no sabía por qué iba. Porque estaba de moda quizá. Solo al pararme a pensar, un poco (tampoco nos obsesionemos), vi que esto podía encajar muy bien con lo que yo necesitaba.

Preguntarte ¿para qué? está siendo para mí una herramienta muy poderosa. Cuesta muchísimo responderte con honestidad a ti mismo, y decirte las cosas no como quieres que sean sino como son. Pero cada uno de nosotros sabe perfectamente qué queremos y qué no, y no a todos nos funciona lo mismo. No es inocente tampoco que haya escrito esto, ni que tú lo estés leyendo; de nuevo, en mi caso, es algo que me acerca un poco más al papel que quiero jugar en la vida. Ésto, y confiar siempre en que al final todo va a salir bien, que no sé cómo me las apaño pero siempre tengo la sensación de tener buena suerte.

Ahora tú: ¿para qué has leído esto?


Fotografía original de COD Newsroom.

Introducing Xamarin.iOS to Objective-C/Swift developers

A few months ago I had the chance to showcase Xamarin.iOS to pure Objective-C/Swift developers, within a local group called NSCoder Sevilla.

Instead of making slides I thought it’d be more interesting to build a small app which’d do the same, as well as serving as a playground to showcase some topics: managed vs. native call stacks, Xamarin.Forms, Xamarin Workbooks (Inspector mode), etc. I think the most interesting piece for them was inspecting the app in real time with this last one.

AppetizeNSCoderSevilla
Microsoft/Xamarin ❤ iOS demo app. Tap the image to play with it!

The full codebase can be found here. It may be interesting as well for anyone who’s invited to a similar scenario 🙂

PS: Thanks Diego Freniche for inviting me to this! 😉

Me gusta, no me gusta, me gusta…

DSC_0001
Thinking

Hace poco más de un mes tuve la oportunidad de asistir a un evento de desarrollo de software donde me llamó mucho la atención una charla que mencionaba en su título “soft skills”. ¿Se podría traducir como habilidades sociales? El resto de ponencias trataban sobre tecnología pero en ésta era lo último que importaba: importaban las personas.

Me resulta curioso, y a veces desconcertante, que con el paso de los años la informática, mi pasión desde que soy chico, tiene más sentido para mí si lo que haga en relación involucra a las personas. Hoy en día, en mi trabajo, disfruto mucho yendo a la mesa de un compañero y preguntándole ¿te puedo ayudar en algo? Si tiene un problema, algo que le atasca, si puedo lo cojo para que él avance, e intento resolverlo. No me genera tanta ilusión el coger un problema técnico y enfangarme hasta los codos (que un poco también), como hacer que ésa persona tenga un momento de tranquilidad, pueda enfocarse en otro tema y, si he tenido “suerte”, volver al día siguiente con una solución a nuestro problema. Porque los problema en los equipos son tuyos y míos, de los dos. Esto lo aprendí de mi primer trabajo en Microsoft y me ha acompañado ya más de diez años…

Volviendo al tema, soft skills, “capacidades suaves” (qué romántico ¿no?), habilidades sociales. De todo lo que John Sonmez, la persona que lo impartía, habló, me dejó clavado en el asiento la siguiente afirmación:

Todo lo que te gusta en la vida dejará de gustarte

Quizá para ti que leas esto es de cajón, lo has pensado 1.000.000 de veces, o no te mueve nada por dentro. Para mí fue entre revelador y doloroso. ¿Cómo que todo lo que me gusta en mi vida dejará de gustarme? ¿Que la informática dejará de gustarme? ¿Que dejará de gustarme leer sobre Steve Jobs? ¿Incluso una pareja? Vamos no me jodas, pensé.

Lo siguiente que se me vino a la cabeza fue: ¿si todo lo que me gusta me puede dejar de gustar, por qué entonces me esforcé tanto en ser un buen novio, en hacer mi trabajo de puta madre, por qué he decidido levantarme todos los días a las 6 de la mañana para dedicar 1 hora a mis proyectos personales? Si todo me puede dejar de gustar, quizá no merezca tanto la pena el esfuerzo…

Digamos que aún, un mes y pico después, no tengo una estrategia clara para mí mismo respecto a esto. En 2015 conocí a un amigo de un amigo, una persona que me saca como unos veinte años que, en un momento hablando en privado, me regaló una joyita:

Marcos, ¿tú sabes qué he aprendido en la vida con mi edad? Que el truco está en el movimiento

Yo a veces tengo tantas cosas que me gustaría hacer que, todavía a veces me ocurre, acabo por no hacer ninguna de ellas, sólo porque no me decido, no las sé priorizar. Sin darme cuenta las ordeno por la vinculación emocional que me generan y, a veces, es mejor dejar las emociones a un lado. Últimamente estoy poniendo en práctica una técnica súper sencilla: cuando no sé que hacer, hago cualquier cosa. (La madre que me trajo porque la conozco hace años, pero la he usado más bien poco…) Paso de la ansiedad de no saber escoger, al disfrute de hacer algo. Sea cocinar, escribir esto que lees, u ordenar una estantería.

Cuando no sabes que todo te puede dejar de gustar, y algo te deja de gustar, le puedes coger hasta asco. A mí me ha pasado en algún momento con la informática. De tanto que me gustaba, de tanto tiempo que le dedicada, le cogí asco. Simplemente me vino bien entrelazarla con otras cosas, otros hobbies por ejemplo. Y me volvió a gustar. 🙂

Por último, cuando estás en un momento en el que algo no te gusta, te estás dando cuenta además, y se genera una situación incómoda, lo mejor que me ha funcionado hasta el día de hoy es tirar de disciplina. Si tengo que seguir haciéndolo, el componente de disfrute, que está bajo mínimos, lo voy cambiando por el “hacerlo porque sí”, con la consciencia de que esto que me está pasando es normal, nos ocurre a todas las personas, y sigo con ello porque en el fondo sé que es algo bueno en mi vida. John Sonmez, además, es el consejo que dio en su charla: ser disciplinado.

Si eres capaz de aquello que te gusta vivirlo gota a gota quizá no te ocurra jamás todo esto. O quizá sí pero en cosas muy puntuales. Sea como sea, recuerda que todo aquello que te gusta hoy, te dejará de gustar en algún momento. Depende de ti, de mí, qué hagamos entonces. Si sigue teniendo sentido, sigue haciéndolo, y busca el disfrute en otra cosa. Lo que sea: vete a lavar el coche, que seguro tiene más polvo que la tele por detrás.

PD: Siempre que escribo estas cosas me imagino que habrá alguien que lo lea y se sentirá identificada/o. Si es tu caso, ¿eras consciente de esto, cómo lo gestionas? ¡Muchas gracias de antemano!