It has already been two months since I had the opportunity to become a member of Codesai and I cannot express with words how happy and grateful I am after joining this incredible group. I have always considered myself as an optimist and nonconformist person, continuously looking ahead and being...

El pasado 7 y 8 de marzo de 2017 estuvimos Manuel Rivero y yo, impartiendo un curso de JavaScript para la empresa Velneo, en sus oficinas de Gijón. Estuvimos 10 personas tanto de Velneo, como de otras empresas del grupo. Este post no sería más que una nota de nuestro...

El equipo de Codesai asistió el pasado 11 de Marzo al Women Tech Makers (WTM) Madrid 2017. Women Techmakers es una iniciativa liderada por Google, que se está expandiendo a un programa a nivel mundial. Con motivo del Día Internacional de la Mujer, se promueven diferentes eventos alrededor del mundo...

In the previous post there was a bunch of tests but not the code that make them pass. In the way we’re building apps with Redux, there are different kinds of actions and creators injected in the components. We usually talk just about actions without distinction. These are the various...

In the previous post I explained how to test-drive a Redux app from the outside-in with an example of a coarse-grained test integrating most of the frontend layers. That was just one case but there are more cases, more kind of tests. These are the common things I like to...

I like starting every new feature with a failing coarse-grained test that exercises most of the layers I’ll have to cross in order to get the feature done. During that cycle I may write smaller tests to get faster feedback. Pretty much anytime I feel the need to debug my...

Redux provides a function called connect that binds the component to the store. This is the place where state and actions are map to component properties and also where the component subscribes to changes in the store. Well, the subscription happens as long as React’s Provider is in place: We...

I started learning React and Redux about two months ago. Following the recommendation of my colleagues Dani, Miguel & Ronny, I went to Pluralsight to study from the great training courses carefully crafted by Cory House. We first watched the introduction to React and Flux. I did not practice with...

Hace algunas semanas estuve impartiendo el curso de TDD de Codesai en las oficinas de Biosystems en Barcelona. Se trata de una empresa que lleva más de 30 años investigando, desarrollando y fabricando sistemas analíticos de diagnóstico clínico y agroalimentario para laboratorios de todo el mundo. Les visité en época...

Para comenzar 2017 con buen pie varios miembros de Codesai estuvimos en el DeveloperOS, un Open Space centrado en tecnologías .Net que organizó la comunidad .Net de Madrid el pasado 28 de Enero y del que fuimos uno de los patrocinadores. Aunque era la primera edición de este evento las...

Ayer grabamos nuestro tercera charla remota sobre Clojure como parte de las actividades que hacemos en nuestro pequeño grupo de estudio de Clojure/ClojureScript. El tema de esta charla fue las sequence comprehensions usando for. Aquí les comparto la grabación de la charla: y aquí pueden encontrar los ejemplos que usamos....

El pasado 25 de Enero tuve la suerte de formar parte de Test Academy en Barcelona, dirigiendo y facilitando una conversación sobre Behavior-driven development (BDD). El objetivo de Test Academy es reunir a profesionales y expertos de la comunidad de testing y desarrollo de software durante un día para aprender,...

La semana pasada Carlos y yo impartimos un curso de TDD en Barcelona en formato abierto. Los cursos en abierto son siempre muy gratificantes porque los asistentes vienen con muchísimas ganas de trabajar y de aprender. De hecho, varios de ellos pagaron el curso de su propio bolsillo e incluso...

Lately at Codesai we’ve been studying and applying the concept of connascence in our code and even have done an introductory talk about it. We’d like this post to be the first of a series of posts about connascence. 1. Origin. The concept of connascence is not new at all....

Todo el mundo está a la búsqueda de desarrolladores, todos al grito de “we’re hiring!”. Quizás estemos viviendo otra gran burbuja del sector TIC. A las empresas les está costando encontrar y retener talento. Sobre todo, les está costando ensamblar equipos. El desarrollo de software es un deporte de equipo....

En la pasada CAS 2016 di un charla sobre aprender a distinguir entre el problema y solución. Esta distinción es importante porque uno de los motivos por los que más se desperdicia código, tiempo y dinero, es que confundimos la solución con el problema. No entendemos bien el problema del...

En una profesión como la nuestra en la que cada mes tenemos nuevas tecnologías, metodologías, prácticas… sería un grave error caer en el conformismo o pensar que hemos llegado a la cima de nuestro aprendizaje. Tal y como plantea el libro Apprenticeship Patterns, el camino del aprendizaje es infinito. Como...

Hace unas semanas hicimos nuestro segunda charla remota sobre Clojure como parte de las actividades que hacemos en nuestro pequeño grupo de estudio de Clojure/ClojureScript. Esta vez profundizamos en las diferentes maneras de definir funciones. Aquí les comparto la grabación de la charla: y aquí pueden encontrar los ejemplos que...

El pasado 30 de noviembre cogí un avión a las 7 de la mañana para ir a Vitoria. Pocas veces me costó tan poco madrugar porque sabía que me esperaba un evento delicioso. Las expectativas eran altas sabiendo que detrás estaban los de Agile Norte. Y se cumplieron. Agradezco enormemente...

Estás últimas semanas he estado aprendiendo React para un pet project que estoy haciendo con mis compañeros Ronny y Modesto. Tiramos lo que teníamos de nuestra interfaz hecha con Polymer (que no era mucho tampoco) puesto que nos veíamos incapaces de avanzar de una forma constante ya que nos encontrábamos...

Symmetry is a subtle concept that may seem only related to code aesthetics. However, as Kent Beck states in Implementation Patterns, "...finding and expressing symmetry is a preliminary step to removing duplication. If a similar thought exists in several places in the code, making them symmetrical to each other is...

La semana pasada Luis Rovirosa y yo impartimos una formación de TDD en las oficinas de Gradiant en Vigo. Gradiant es el acrónimo en inglés del Centro Tecnolóxico de Telecomunicacións de Galicia (Galician Research and Development Center in Advanced Telecomunications) y utilizan los conocimientos y experiencia de sus profesionales de...

El pasado Octubre Fran y yo preparamos una charla para la Software Craftsmanship Barcelona 2016 explicando el concepto de connascence. Podemos entender connascence como la relación entre N componentes de software que implica que cuando se cambia uno de esos N componentes los N-1 componentes restantes se tienen que cambiar...

Recientemente me uní a Codesai , y como muchos saben por mi blog personal estoy encantado con Clojure. Como algunos miembros de Codesai querían aprender Clojure/ClojureScript, decidimos empezar un pequeño grupo de estudio en remoto (Codesai es un equipo distribuido) contando conmigo como mentor. Para ello creamos un slack, clojuresai,...

Hace unas semanas Luis Rovirosa y yo impartimos una formación de TDD en las oficinas de Ve Interactive en Bilbao. Luis lleva bastante tiempo impartiendo el curso de TDD de Codesai, tanto en solitario como junto con Carlos Blé, pero para mi era la privera vez. Me gustó mucho la...

Nada más terminar CAS2015 teníamos muy claro que queríamos estar en CAS2016, entre otras cosas por el cariño que tenemos a los organizadores, nuestros buenos amigos del norte, que yo considero referentes en muchos aspectos. Teníamos las expectativas muy altas con respecto a la organización y no solo las han...

Para mí el primer Codemotion y ha sido impactante, un eventazo de lo mejor. No me explico cómo es que no había estado antes. Me lo he pasado bomba, he aprendido mucho, me he encontrado con muchísimos amigos, desvirtualizado a mucha gente y me he sentido en un ambiente acogedor...

In re-frame, we'd like to use pure event handlers because they provide some important advantages, (mentioned in a previous post about coeffects in re-frame): local reasoning, easier testing, and events replay-ability. However, as we said, to build a program that does anything useful, it's inevitable to have some side-effects and/or...

En Codesai somos un equipo distribuido. Actualmente trabajamos desde Gran Canaria, Tenerife, Barcelona, Madrid y Oviedo. Hacemos pair programming remoto, mob programming y videoconferencias semanales pero aún es muy importante reunirnos fisicamente un par de veces al año. La primera reunión fue en Las Palmas en Marzo de 2016. Nos...

Menudo notición! Manuel Rivero se une al equipo Codesai! Fue algo antes de Software Craftsmanship Barcelona 2016 cuando Manuel me escribió expresando su intención de venir. La verdad es que no estabamos buscando crecer en número, pero a todo el equipo le encantó la idea. La mayoría le conocíamos y...

Descripción del evento Este año varios miembros de Codesai estuvimos en la Software Craftsmanship de Barcelona. Todo un logro viendo que las primeras entradas fueron arrasadas, algo que habla muy bien de un evento que plantea dudas sobre si debería crecer más. Por fortuna, aunque las entradas se hayan vendido...

Event handlers, collectively, provide the control logic in a re-frame application. Since the mutation of the application state is taken care of by re-frame, these event handlers can be pure functions that given the current value of the application state as first argument and the event (with its payload) as...

Using literals in your tests can have some advantages, such as, readability and traceability. While this is true when the data are simple, it's less so when the data are nested, complex structures. In that case, using literals can hinder refactoring and thus become an obstacle to adapting to changes....

Hace unas semanas recibimos una noticia con sabor agridulce. Nuestro gran compañero y mejor profesional, Modesto, se marcha de Codesai. No resulta fácil perder a un compañero del que todos aprendemos muchísimo y que siempre está apoyando al equipo ante cualquier dificultad. Pero la verdad es que nos alegramos de...

Gracias a Pablo Bernardo y Jordi Llull de Habitissimo, pudimos disfrutar de tres días de trabajo y conferencias en Palma de Mallorca, en el ParcBit. Fuimos Luis Rovirosa y yo a impartir una formación de TDD y Clean Code para 15 developers entusiasmados con aprender. Nos sorprendió gratamente el ambientazo...

Hace tiempo que vengo queriendo reescribir nuestro libro de TDD para mejorarlo con todo lo que hemos aprendido en estos 7 años y todo el feedback que hemos recibiendo por parte de los lectores, a los cuales estamos muy agradecidos. Pero no se cuándo me podré sentar durante un puñado...

¿Qué es la Tarugoconf? El viernes pasado, 16 de septiembre de 2016, asistí como orgulloso representante de Codesai, al mejor evento posible que cupiese en la imaginación de David Bonilla: la Tarugoconf. Un evento que nunca hubiese existido si no le hubiesen dicho las tres palabras mágicas "No hay huevos"...

Kata del Juego de la Vida de Conway En mis primeras semanas en Codesai he hecho la kata del Juego de la Vida de Conway como parte de mi formación para empaparme de la cultura y valores de la empresa. La hice dos veces: la primera ha sido TDD inside-out en...

No long ago, we had to write a function that takes an object and returns a string to be sent as part of the query string in the request. This was because the communication mechanism was JSONP that works via the GET method. The server was already expecting the specific...

Miguel, Antonio, Carlos, Jose - Tenerife, Julio 2016 Estamos de celebración, super Antonio de la Torre forma parte del equipo Codesai desde esta misma semana. Antonio ya había decidido que se volvía a su tierra (Oviedo) con la familia cuando nos encontramos en JSDayEs 2016 y estuvimos charlando. Me contó...

Hace unos días Pablo Iglesias tuiteó una pregunta de Stack Exchange en la que hablaban sobre la inmutabilidad de las claves primarias. Se generó un debate bastante interesante en Twitter que se extendió más allá de la cuestión de la inmutabilidad. Este es un intento de recopilar y explicar algunos de los conceptos que...

Los días 1 y 2 de Julio de 2016, la mitad del equipo Codesai estuvimos en el Open Space de la comunidad Agile Spain, el AOS. Un evento brillantemente organizado por el capítulo gallego de la comunidad y celebrado en Santiago de Compostela. Enhorabuena a todos los organizadores por una...

Notición! Nos asociamos con Kairós! Estamos de enhorabuena, el equipazo de Kairós DS se convierte en partner de Codesai adquiriendo una parte de la empresa. En los últimos meses nos habíamos cruzado por múltiples caminos. A nosotros nos hablaban muy bien de Kairós y teníamos buenos amigos allí como Helder...

Gorka, Pablo e Iker en la apertura El pasado fin de semana, 17 y 18 de Junio, buena parte del equipo Codesai estuvo en Pamplona Software Craftsmanship 2016. Eventazo de categoría. Este evento fue organizado por Iker, Gorka y Pablo, los artesanos de 540deg. Ellos se inspiraron en Socrates Canaries...

Hace unos meses tuvimos la suerte de ser contratados por Fon para impartir un curso de TDD a uno de sus equipos de desarrollo en Madrid. Una oficina chulísima y un equipo entregado que prestó atención máxima desdel el minuto 1. Fon es una empresa de la que he oído...

Después de dos años trabajando bajo la marca de CB&A (Carlos Blé y Asociados) ha llegado el momento de crear algo más grande, una marca que proporcione a nuestros clientes la confianza de que puede funcionar sin Carlos, cuando haga falta. Una marca donde el interés del grupo y de...

How to propagate an event from a low level class to a top level one: Events can only be raised from within the declaring type. Unfortunately they can’t be be passed in as arguments to methods. Only += and -= operators are allowed out of the declaring type. One way...

I don’t really know whether they are the best practices to be honest, and certainly there is a lot for me to learn but these are principles and practices that work well for us in the development of a complex native Windows App (Windows 8.1+) using C# and the MVVM...

In my experience a code review must have a goal. Some common goals are: Telling others how you solved a common problem. Warning others about certain perils (i.e race conditions, coupling…) Asking concrete questions. Implementation or design questions. When you expose some code to your colleagues in a meeting room, you...

In October 2015, just two months before the Spanish elections I was lucky to visit Scytl and work there as a consultant for a week. Thanks to my good friends Manu Martin and Alvaro Garcia who are currently working in there as agile coach and developer respectively. I met a...

We had a kind of duplication in our tests that we didn’t know how to deal with. The refactoring Introduce Polymorphic Creation with Factory Method explained by Joshua Kerievsky in his brilliant book “Refactoring to Patterns” gave us the solution to avoid duplicated tests. These tests are very similar, the...

Hace unos días, empecé un proyecto personal para mejorar algunas tecnologías, como por ejemplo, conexión con bases de datos o trabajar con Spark para hacer un servicio Rest. Empecé con una idea muy sencilla, ya que lo que quería era empezar cuanto antes y, más adelante, ir incorporando nuevas features...

So your pair is proposing a route or plan that you don’t agree on. Am talking about a refactoring, a redesign or just the way to test drive the next feature. You have told him your reasons no to agree with him and there is no way to get to...

C#, Java and other languages have the same behaviour when it comes to reference types. The dot symbol after the variable name (instance1 or instance2) accesses the actual object referenced by that variable. So before the dot, we have a variable referencing an object, and after the dot we have...

Hoy traigo una serie de ejemplos de refactorización a modo de introducción a las nuevas características funcionales de Java 8. Así que, si tenías curiosidad y no te habías atrevido a experimentar con ellas, ¡te animo a que pruebes! Empezamos definiendo una clase Person básica con un nombre y una...

Let the team walk its path Every team walks at its own pace and I haven’t found a way to speed it up myself, I don’t think there is one regardless of whether you are an external coach or a regular member of the team. Trying to push the team...

During Socrates Conference 2015 we decided that it’s the right time to jump in ES6 to develop a green field project that our customer is starting. Given that ES6 is already the stable and latest version of JavaScript, it does not make any sense to start a new project with...

Cuanto más uso PowerShell más convencido estoy de lo importante que es tipar las variables y los parámetros de las funciones. Debido a la forma en que trabaja PowerShell, especificar los tipos me ayuda a evitar comportamientos indeseados. Por ejemplo, dado este script: Set-StrictMode -Version 2 $items = Get-ChildItem if...

En PowerShell es muy común usar parámetros de tipo switch. La peculiaridad de estos parámetros es que al usarlos, se especifica el nombre del parámetro pero no se proporciona ningún valor, ya que se asume que al usarlo su valor será $true y $false si no se especifica. Ejemplos típicos...

There are many ways to work with collections. We are following Microsoft Guidelines for Collections plus some ideas that Kent Beck explains in Implementation Patterns. I’ve created a repository with code examples so that anyone can play with them. All the unit tests in the project are green except for two, which...

Este es uno de esos ejemplos en los que es importante intentar documentarse todo lo posible al desarrollar en un lenguaje/plataforma que no conocemos. Es frecuente asumir conceptos basados en nuestros conocimientos previos de otros lenguajes, pero en ocasiones nos puede jugar malas pasadas. En este caso voy a mostrar...

Cuando empecé a programar scripts en PowerShell, cometía muchísimos fallos fruto de mi intoxicación con otros lenguajes, especialmente C#, con el que trabajo habitualmente. Después de un tiempo, me di cuenta que PowerShell tiene muchas más similitudes con JavaScript que con C# ya que es un lenguaje interpretado y de...

Among other qualities good tests should be easy to read, quick to understand. When the test requires complex data structures to be sent to the SUT or to be part of a stubbed answer, it takes longer to read. Moreover those structures use to evolve as the production code does...

The title of this post is redundant, pair programming is already a productivity technique. That’s my understanding or pair programming not just two people sitting together. Two people may code together for learning or mentoring purposes, however we pair for productivity reasons - productivity in the long term. Like any...

Esto es un truco sencillo y muy básico de PowerShell, pero puede desconcertar bastante a quien está empezando o utiliza PowerShell de forma esporádica. En PowerShell existen los llamados “terminating errors” y los “non-terminating errors”. Como su nombre permite intuir, unos finalizan la ejecución del script en curso cuando se...

The default generation of Equality members provided by Resharper let you choose three different implementations when overriding the “Equals” method in a class (Alt+Insert -> Equality Members): The default choice is “Exactly the same type as ‘this’” which IS NOT polymorphic. I mean, subtypes of that class will be considered...

Programar un servicio para Windows suele ser una tarea engorrosa y Topshelf proporciona una alternativa bastante interesante y muchísimo menos engorrosa que la plantilla por defecto que incorpora Visual Studio. Aunque podría enumerar bastantes aspectos interesantes de Topshelf, me quedo con uno que para mi es fundamental, permite que una...

Cada vez que abordo un nuevo desarrollo, considero que la generación de trazas es una parte vital ya que es uno de los mecanismos que nos va a permitir diagnosticar e identificar cualquier tipo de problema cuando estemos en producción, en ocasiones incluso antes de que los propios usuarios lleguen...

In order for a native desktop application to be responsive, I mean, not to freeze while sending a request over the network or processing a heavy CPU operation, these operations have to run in a separate thread. .Net 4.0 introduced promises (a well-known concept for JavaScript developers), the Task object...

Cuando trabajamos con aplicaciones para la tienda de Windows, hay escenarios en los que necesitamos hacer Sideloading. Básicamente el Sideloading nos permite instalar una aplicación de la tienda de Windows, sin utilizar la tienda de Windows. Las razones para querer hacer Sideloading pueden ser muchas: probar la aplicación en local...

.Net 4.5 came out with a really handy built-in asynchronous mechanism, async and await. However the method signature of a void method is a bit strange: It is possible to use async void but it’s not recommended unless we are talking about event handlers. It’s also a bit strange the fact...

In the past edition of Socrates UK, I met Gianfranco Alongi who told us about his team’s experience with Mob Programming. It was the first time I heard about it. As the site says, Mob programming is people working at the same time, in the same space, at the same...

Sequence Comprehensions en Clojure
Manuel Rivero
Aprender a distinguir el problema de las soluciones
Carlos Blé
El camino del aprendizaje
Modesto San Juan y Ronny Ancorini
Funciones en Clojure
Manuel Rivero
Comunidades de necesidad vs comunidades de soluciones
Antonio de la Torre
OOP & Connascence
Alfredo Casado
Destructuring en Clojure
Manuel Rivero
Refactoring C# sequences: Safe Unwrap
Carlos Blé
Refactoring JavaScript orientado a objetos
Carlos Blé
Refactoring JavaScript con estilo funcional
Carlos Blé
Kata de las Cartas en JavaScript
Carlos Blé
Transformation Priority Premise with JavaScript
Carlos Blé
Refactoring to functional style JavaScript
Carlos Blé
Cards Kata in JavaScript
Carlos Blé
Implementando algoritmos con TDD
Carlos Blé
Apertura Mejorando Software CAS 2015
Carlos Blé
Entrevistas AprendiendoTDD: Carlos Blé
Carlos Blé
TDD Concretar en lugar de abstraer
Carlos Blé