Knowledge sharing to the extreme

0 comentarios

Recently I met the people and movement behind LinkyBrains and I have to say I feel very identified with what they say. After first weeks with LinkyBrains in my head some crazy or "LinkyBrainy" things have come to my mind and I would like to write down the first one (I hope not the last one).

I am a lover and a very active promoter of knowledge sharing both professionally and personally, I believe people sharing the knowledge contribute to continuous improve the world we live, it is a simple way to get more than one brain building solutions.

As part of my job I constantly think and apply exercises to get my team and myself sharing the knowledge, and we are getting good results in some the exercises we apply and not so good in others. If we would like to move the knowledge sharing to the next level, a possible a potential way would be sharing the knowledge between companies.

There are several ways this can be done, meetups run by different individuals working in different companies help to share the technologies used and how to apply them, but that's not really enough. If we could find a way where developers can work in a different office and see how others apply a technology to develop a solution. And it is not just technologies, it is about how to be organized, how other teams communicate, and so on.

Of course, there are some security and risks companies in the same sector sharing sensible information but it could be run by companies working in different sectors. I think it is time to remove all the barriers have been there such lot of years where software development companies don't talk and don't want to know about others.
Read On

Leadership vs Leadersheep

0 comentarios

I wrote this article in a plane while traveling to UK, it took me few minutes to write the essential idea although I’ve been thinking on it for few weeks before I wrote done the lines below. I have to say when I read them again to publish in the blog the look like a draft but I want to publish them now and decorate the text in the future. In other words, take the lines below as notes for a draft but describing the essential.

There are a lot of books, articles, videos and tweets about Leadership where you can find lot of information and advices to improve your skills as a leader, but I have just found few of references to the people who makes a leader a much better leader, leader’s teams.

I have to say when I started professionally I expected my boss to give me all instructions to follow and all the details I need to complete my work, but I didn’t realise my boss and the rest of the team expected me to ask the right questions and add a value to the work done by the team.

With the years one of the biggest lessons I’ve learnt: collaboration and cooperation between leaders and teams make a better and faster success. It is not only about a great leader leading sheeps, it works but giving as a result an average success, it is about the balance of a great leader leading a great team, then the success will be brilliant.


A team following and accepting all instructions and details given by their leaders is an easy work for the leader and does not allow an environment for a continuous improvement. Otherwise, a team which is able to challenge their leaders and help to build an environment where collaboration is the key will help to grow both leaders and teams.

Read On

Developer cross training

0 comentarios

​It was several years ago first time I read about cross training concept, I was back to practice running after few years stopped and no sport practicing in my life. I understood in that moment, some professional dedicated to sports practice other sport or sports as part of their training to improve their metrics.

I've been practicing in the people working with me and myself the concept in Software Development, and it is a fact Developers Cross Training improves developers skills. As the most basic example, if a developer understands how internally web server (IIS, JBoss, Tomcat, Apache or any other web server solution) will identify faster any bug or problem in their code as well as make better decisions to develop a feature in the current software.

Another good example I've seen in he last few years is closer to communications, a developer could be working for a period more closer to the customer, like being part of es features being presented to a customer, it will help developers to deliver a software closer to customer expectations.
I know this has been told in many places and it is part of popular methodologies, but until you don't practice for a period of time you don't see how good is the idea and how good result could be.

Here is where team rotations is a good tool to apply developers cross training concept, a developer could rotate to be a product owner assistant for a period of time or a product owner could rotate to a customer service role. It is not just the benefit to improve people skills as Cross Training improves in people what day by day work don't, and also, it helps developers and others to know and discover what they really watt for their professional careers.
Read On

Android Maps Utils : Markers in the same location

0 comentarios

Recently, I came across with a request in the library Android Maps Utils which requested a fix for a problem when the markers have exact the same location. As this is a library I used recently and I was reading the code when I was integrating in an Android App, I just decided to implement the feature and here you can find the experience. All the details regarding the changes can be found in this pull request.

In case you want to include this functionality in your app, until the pull request is not accepted you would need to generate the library file including the pull request and then include it in your project through Gradle. After that, you can include to your map as shown in the code below:

mClusterManager = new ClusterManager<>(this, getMap()); 
getMap().setOnMarkerClickListener(mClusterManager);
getMap().setOnCameraMoveListener(mClusterManager);

mClusterManager.cluster();

The default implementation will distribute the markers with the same location around the real lat/long value following a circle when the user tap on the marker containing all the markers in the same location. To distribute the markers, the zoom level shown has to be the maximum zoom level, and once the user makes a zoom out all the markers distributed will be relocated to the original cluster.

Of course, this could be implemented in many ways and with different approaches, this is just an example of a way to get the feature implemented, I just wanted to get fun implementing and sharing with the world. It is important to mention a change needed in the ClusterItem interface could produce a backward compatibility problem as a copy has been added.

/**  * Produces a copy of the same object but setting the given location.
 *
 * @return The new object copied.
 */
ClusterItem copy(double lat, double lng);
As you can see in the first code block, cluster manager needs to be set up to listen camera moves actions on the map, if you also need to listen to the same events in your app or code just do as the code below:

mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            mClusterManager.onCameraMove(); 
            // your onCameraMove code
        }
});
 You can place your code also before call mClusterManager.onCameraMove(); or even call mClusterManager.onCameraMove(); only when you need to distribute the markers of the cluster, it will depend in your app needs.

As mentioned, the default distributor for a cluster with all the markers in the same location distributes them in a circle, and it can be replaced just calling to mClusterManager setClusterItemsDistributor(mYourDistributorImplementation);. In case you need to implement your own distributor you need to implement the interface ClusterItemDistributor.

/**  * It distributes the items in a cluster.
 */
public interface ClusterItemsDistributor {

    /**
     * Proceed with the distribution of the items in a cluster.
     */
    void distribute(Cluster cluster);

    /**
     * Proceed to collect the items back to their previous state.
     */
    void collect();
}
Just take into account distribute(Cluster cluster); needs to distribute all the items in the cluster and collect(); needs to get the markers to their original state and cluster, see DefaultClusterItemsDistributor as an example.

Please, if you use this feature or you implement your own distributor let me know, or if you have any feedback or question I will be more than happy to listen and improve what I've done, helping others and getting help from others is the way to learn something new every day.
Read On

Mobile and beyond

0 comentarios

I want to begin this article mentioning it is a suggestion made by a teammate 1 or 2 months ago, a teammate who moving to do his dream and do what he likes and enjoys, this is a bitter-sweet feeling although I am always happy when people find their dreams and passions, anyway this is a different history.

My goal with this article is to share my thoughts and the journey in the team I work with in terms of which is the best approach in terms of technology for a mobile App development, it is a no easy decision to be made,

I've started in Mobile Development around 2005 when J2ME promised to develop an App in Java with to ability to run in many devices, but the reality was that lot of specific configurations, images and even code was needed depending on the device. Also, I remember we had many mobiles to tes same App in maximum variants as possible. This changed massively when Android and iOS came on board, I remembered my first iPhone Dev Conf in Madrid around 2009 where everything looked very promising to develop nice Apps although the programming language looked very odd to me. With Android and iOS a big step was made, they helped developers to don't get disturbed about screens sizes and different behaviors for device features like GPS, camera and others.

We can say after this new era with Android and iOS, hybrid solutions like PhoneGapp, Ionic and others appeared, but I've tried for a couple of times and they didn't convinced me for high performance Apps managing a certain amount of data, although for small Apps and for quick prototyping is probably the best choice. I've discovered those options around 2013, a bit late maybe but I've released at that moment 10 Android and iOS Apps, my bet at that moment and know is to develop Android and iOS Apps instead of use Hybrid options, maybe because I was more use to those platforms and it would be faster.

The next big step in Mobile Development is happening now from my point of view, where new "Hybrid" solutions are getting more popular in the market, we are talking about Xamarin and others. I came across Xamarin few years ago and I've recognized I've started to investigate more once Microsoft bought it. More and more Apps are being developed in Xamarin and from my point of view the key point of this is because the user interface can be defined once and it looks like the same App not just in mobiles and tablets running the same Operating System, it looks like the same in different operating systems, although my view is that a particular feature in the mobile is needed (let's say gyroscope) could be a big challenge for the Developers, needed a particular implement in each OS and imported as external library in Xamarin, probably acceptable in most of the cases.

Xamarin has let me discover other option in this Mobile Development World, its name is flutter (it seems supported by Google) and it promises one development for several platforms, although it is in a early stage and looks very young yet, but it will be good to see how it progresses.

I want to make clear I'm writing about my opinion and experience, which could be wrong but it will be nice to write a new article in the future if things change or my view is different cause I collect ore information and experience. It is a reality people in the street is very familiar with Android and iOS devices and I don't think it will change in the recent future although businesses are b coming more Microsoft friendly in terms of devices, it seems because security reasons. That means if you want to develop an App for people my bet would be for both Android and iOS Development, and if you want to develop an App for private businesses yes should probably go for Xamarin which will let you run your App in Microsoft devices but also in Android and iOS in case some businesses want to use other devices with your App.


It is very difficult to see really the next big step after the current one happening, I would say there are few questions to be answered like which is the roadmap of Xamarin to be followed by Microsoft I the next few years? Will Google introduce Flutter as one single solution to develop Apps in Android removing Java as an option? Apple see,s to be also in the same "Hybrid" way with one solution to develop Apps for mobiles, tablets, laptops, etc running OS X or iOS, will be iOS a substitution of OS X? Probably functional programming will be also an important variable in the equation of the next step in Mobile Development tale, it looks a very good language for UI, another chapter or spin-off in the history of Mobile Development would be.
Read On