Well, look no further! In this blog post, we will explore how to generate an interactive system architecture diagram using Graphviz and HTML. Get ready to bring your diagrams to life!
Continue reading]]>This quick little post will show you how to do that.
Continue reading]]>My website had three services integrated:
And while these services were adding some value to my website, they were doing so at the cost of your privacy. By default (!!!), they not only track your interaction with my website, but also detailed information about you (gender, age, approximate location,…) and they even track you across different websites.
But should I really be collecting all that data about you?
Should I really hand off all that data to those services?
Have I ever asked your consent about any of this?
Well, I no longer believe it is “normal” for websites or products to engage in these practices. That every experience needs to be personalized. Or that we should give away our privacy so easily.
Therefore I’ve decided to strip all such services. Now my website is a safe space where you can enjoy (hopefully) my content without worrying about advertisements or tracker blockers.
However, I do still care about your opinion!
So moving forward you can:
You’re in full control whether you decide to reach out or not!
I’ll keep doing my best to provide you with interesting content (which is a ton of work) and hence appreciate every single like or shoutout.
Continue reading]]>Here’s what I learned trying to pull ~170 Gb from my Pixel phone.
Continue reading]]>This post details how I made this work.
Continue reading]]>Read on to learn why and how to prevent this.
Continue reading]]>This post will detail when to craft a pull request and what pull requests require a code review.
Continue reading]]>This post will cover all steps required to migrate artifacts from JCenter to Maven Central. It will present a script to automatically perform such a migration so that it can be run on a CI and have the secrets injected.
Continue reading]]>Read on to learn how to share part of your code between Android and Java (Jvm), while still providing platform-specific implementations of some classes.
Continue reading]]>My first lucky break was that I started working remotely by choice! This privilege meant I was quite well equipped both practically and mentally for the challenges of remote work. And while not without its challenges, I haven’t been happier at my work.
The main work challenge was bridging the 9-hour timezone gap with my colleagues. And while I do work some evenings, I’ve never been more available for my kids. And I’ve grown really fond of:
Another highlight was the amazing time I was able to spend with my kids during the first Lockdown. I would work from 2pm to 10pm so me and the kids could do fun stuff in the mornings (fixing up the house, gardening, playgrounds,…). I recognize how extraordinary it was to have so much playtime with my kids and truly enjoyed it.
However, working such long days also meant I pushed myself beyond my limits and I had to take it a lot slower for several weeks before I felt better. A huge shoutout to Plaid and my manager Judd for the immense understanding they’ve shown for my situation.
Further, I’ve also built and designed my own custom Lego set: Radio-Controlled Flip Over Stunt Car:
Please give me a vote!!! If I make it to 10k supporters, Lego might actually make it into an official set. 🤞
Further 2020 highlights include:
To keep the best for last: we’re expecting a baby girl in March! 🍼👼
In 2021, I’m going to try and exercise twice a week, read 5 books, enjoy every little moment with the baby and double down on being an awesome father for all my kids.
I do want to pick up my community contributions again and maybe even venture into other areas beyond Android.
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>As a bonus, there will also be an open-source example showcasing all of this in action.
Continue reading]]>This post will cover how transitive dependencies of an Android library affect Apps integrating it.
Continue reading]]>This blog post is part of a series on Android libraries:
- Part 1: Getting started
- Part 2: Modularization
- Part 3: Transitive dependencies
This post will cover all things modularization for Android libraries.
Continue reading]]>This blog post is part of a series on Android libraries:
- Part 1: Getting started
- Part 2: Modularization
- Part 3: Transitive dependencies
This mini-series will cover the differences between SDK and App development, and explore some interesting challenges around SDK modularization and transitive dependencies.
Continue reading]]>This blog post is part of a series on Android libraries:
- Part 1: Getting started
- Part 2: Modularization
- Part 3: Transitive dependencies
This post will cover some challenges in configuring Dokka and explain some neat tricks to improve your documentation.
Continue reading]]>Without a doubt, 2019 was the highlight of my career!
However, not everything went according to plan: my new employer ran out of money and I found myself unemployed for the very first time in my life.
This caused quite a bit of anxiety and stress for my wife and I, especially given our mortgage and two kids…
And then something amazing happened:
Looking for a new job! 🚀
— Jeroen Mols (@molsjeroen) September 5, 2019
Due to a financial setback, my new employer cancelled my contract right before joining. Hence looking for a remote opportunity as #AndroidDev or Android lead, either employee or #freelancer.
My DM's are open, thanks for RT! 🙌https://t.co/HdVjotJalX pic.twitter.com/JSNX4rjNzf
I reached out for help on twitter and the response was so overwhelming… it really moved us.
So thanks to everyone for sharing the message, providing leads and support! 🙇
While all those job interviews were quite demanding, I ended up finding a stellar freelance gig at TransferWise and a very exciting new position at Plaid. I’m stoked to share more about those on my blog later this year.
Further 2019 highlights include:
In 2020, I’m going to focus on living a healthier lifestyle: exercise more, eat healthier and get better sleep. Further, I want to continue enjoying the little things in life and do silly stuff with my kids.
I don’t plan on increasing my community contributions, in fact, I might even do slightly less. However, I would also like to explore alternative ways to give back such as one-on-one mentoring or speaking at a remote conference.
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>This post will present a simple, powerful architecture to manage feature flags and comes with a full example on Github.
Continue reading]]>This blog post is part of a series on feature flags:
- Part 1: Why you should care
- Part 2: How to use
- Part 3: A successful architecture
This mini-series will explain the benefits of using feature flags and propose a handy architecture that enables local feature flag configuration, remote configuration, and easy testability.
Continue reading]]>This blog post is part of a series on feature flags:
- Part 1: Why you should care
- Part 2: How to use
- Part 3: A successful architecture
This mini-series will explain the benefits of using feature flags and propose a handy architecture that enables local feature flag configuration, remote configuration, and easy testability.
Continue reading]]>This blog post is part of a series on feature flags:
- Part 1: Why you should care
- Part 2: How to use
- Part 3: A successful architecture
In this non-tech post (for a change), I’d like to openly share my experiences being a team lead. It’s been a bumpy ride, but I came out with quite some new perspectives that make me a stronger lead and a better person.
To put my experiences into perspective, I think it’s important to first cover the team set up, my role and some of the project history.
Feel free to skip this part and jump to the learnings instead 👇!
Continue reading]]>In this blog post, we’ll look at a case study on how we added support for these back gestures in the Philips Hue app.
Continue reading]]>As various Android launchers, versions or devices might resize/reshape your icon to make them look consistent, you’ll need to be robust against this kind of changes. Learn how we did that at Philips Hue.
Continue reading]]>Part five of this series will share quite a few useful tips and tricks for modularizing apps.
Continue reading]]>This post is part of an in depth series on modularization:
Part four will dive deeper into how existing apps can be sliced and how you can gradually migrate to a fully modularized architecture.
Continue reading]]>This post is part of an in depth series on modularization:
We’ll discover how the architecture results in a clear application structure, how navigation is handled, how to use staged rollouts, how to test everything and even look at a production app that is using this architecture.
Continue reading]]>This post is part of an in depth series on modularization:
This second part will explore a simple, yet very effective approach to modularizing apps. It will cover in depth the different kinds of modules and present the benefits of this approach.
This post is part of an in depth series on modularization:
Part one of this blog post series will deep dive into the problems modularization solves and the unique opportunities it offers.
Continue reading]]>This post is part of an in depth series on modularization:
Unfortunately, most of us aren’t in this state. We have bugs that haunt us, crashes at inconvenient times and sometimes 💩 simply hits the fan… So how on earth do you get out of this mess?
Well, I’m glad you ask! Here are five tips to get started.
Continue reading]]>The past year was (hopefully) the busiest year of my entire life. In the midst of raising two amazing kids, a challenging full-time job and being an active GDE, we built our dream house!
Looking back I honestly don’t know how we managed to pull all of this off… Choosing everything for the house, selecting and planning all contractors and even doing some (a lot more than anticipated) work myself… Anyways, I won’t bother you with the details, but if not for my wife and kids I would have broken down completely. The goal justifies the means.
Also at work, it was a non-trivial and very demanding year. I used to pride myself for being great at keeping a work-life balance, but… being a responsible for a team of people can really be quite intense.
Our team had quite some challenges thrown at us, and we really made the best of it: sometimes massively successful, but we also struggled… All in all, we did get a tight grip on our regression, laid the groundwork to improve our architecture and migrated to continuous deployment. (talk coming 2019 ;) )
In 2018, I/we mostly invested in our family’s future and:
Looking forward to next year, I’m planning on living more! I’ve bought quite a few Lego’s I’d like to build, want to bring my kids to school by bike, spend more quality time with my wife and just professionally waste time on occasion. :)
I’m going to try and increase my community efforts back to 2017 level and maybe experiment with some new formats, such as my last blog post.
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>This post brings a fun little quiz for both testing gurus as novices, with a deep dive into the how and why of awesome tests.
Continue reading]]>READ_PHONE_STATE
, unintentionally sneaked into our app. Here’s how this could happen, how we debugged and finally how we solved it.
Continue reading]]>
To conclude this series, we will look at how you can control the interface, invoke every (!) action and point you to even more advanced features.
Continue reading]]>This post is part of a series with practical examples on how you to get the most out of Android Studio:
This post will zoom in on the most useful refactoring options of Android Studio. Enabling you to refactor more confidently, introduce fewer bugs and increase overall quality as also variables, documentation, etc. will be updated.
Continue reading]]>This post is part of a series with practical examples on how you to get the most out of Android Studio:
Being a skilled Android developer means getting the most out of the tools at your disposal. While there are plenty resources listing shortcuts, it’s often hard to make sense and master those.
Therefore this series aims to be a practical guide with clear examples on how to better navigate and refactor code. It will effectively cover how I personally use Android Studio.
Continue reading]]>This post is part of a series with practical examples on how you to get the most out of Android Studio:
year in review
ready in time.
I’m sure I’ll never forget 2017. Not only did we start building our dream house, but more importantly, our family grew to 4 people! Our baby girl Lene - ahum Toddler - became the big sister of our newborn son Wout. While having two kids is definitely very, very intense, it’s extraordinary to see them grow and a privilege to experience how fond they already are of each other.
For my career this was the most remarkable year so far as I:
Further, I’m super proud of all my community efforts:
But leave no mistake, my family is and will always be the most important thing in the world!
Looking forward to next year, stuff is going to be intense for sure! We’ll complete the construction of our house, our daughter will start going to school, our son will likely learn how to walk,… and I don’t want to miss a second of all that. Which means #latenightblogging. :)
So I’m not going to increase my community efforts, but instead, I’d like to experiment with data analytics to increase the impact of all my typical efforts.
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>Seemingly simple Fragment transactions can sometimes have unintended side effects. While investigating, we’ll learn how Fragment transactions actually work.
Continue reading]]>This post will deep dive in what code coverage actually means, detail why you should never set coverage goals and help you get the most value out of this concept.
Continue reading]]>In contrast, this post will talk career. How learning a new language makes you a better developer and ensures you stay relevant. And in that regards, Kotlin now presents a golden opportunity.
Continue reading]]>Finally, Android Studio 3.0 brings (backported!) support for most Java 8 features. Continue reading to learn how those work and why you should upgrade.
Continue reading]]>This blog post will detail all benefits of this change and guide you through the upgrade process.
Continue reading]]>This post won’t cover all big #io17 announcements, but instead tries to be an alternative, biased, inside scoop with my personal highlights.
Continue reading]]>In this post I’d like to share some general themes, my personal highlights and all of the slides I could gather from socials.
Continue reading]]>Actually, sometimes you want your app to crash. This post will explain why and give some practical tips.
Continue reading]]>This blogpost aims at providing three very simple rules that will significantly ramp up your testing game. Every rule is followed by pragmatic tips so you can easily start implementing.
Continue reading]]>Time to convert our Mockito 1.x projects to 2.x!
Continue reading]]>2016 passed by so quickly! I had a fantastic time playing around with (and taking care of) my wife and daughter. It’s really astonishing to see how much a baby can learn and grow in a year.
Being a father also helps putting things into perspective and rediscover the little pleasures in live. For example, there is literally no better cure for stress than coming home, being greeted by a happy smile and laying down on the floor playing with your own kid. :)
Besides that, I actually found more time than expected to grow technically. As such I:
Next year construction of our dream house will start, so time will once again be a scarce resource. And since I don’t want to give in on quality time with my daughter, I’ll just try to keep up my current blogging and speaking efforts. However, it would be really cool if I could speak at a conference outside Europe!
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>This blogpost will demonstrate the power of custom Mockito matchers.
Continue reading]]>This blogpost will detail why and offer an easy solution.
Continue reading]]>This blog post will explain what copyright is and why it’s so important. Further it’ll also show how to easily add/update copyright notices to your code base.
Continue reading]]>As I had an old Android device laying around, I decided to repurpose that and convert it into a GPS that:
This blogpost will detail how I use OsmAnd and Dropsync to create new tracks with minimal effort. Further I’ll also describe the gear I use in order to make this work.
Continue reading]]>As there were four different tracks, it was obviously not possible to attend every session. But I did notice some general themes and would like to share my personal highlights with you.
Continue reading]]>Today I would like to show how you can visualize your current method count and understand what libraries are eating up the largest part of that. Next it’s time to reduce said method count and remove that nasty multidex solution once and for all.
Continue reading]]>With over 770 attendees and four different tracks, it was obviously not possible to attend every session. But I did notice some general themes and would like to share my personal highlights with you.
Continue reading]]>strings.xml
to find the right String to use? Or that you manually had to go over all drawables to find the one you needed?
Whenever we start a new project, we take a lot of care in setting up our architecture, CI, build flavors,… But do you also have a strategy to name your resources?
You should! Because the lack of XML namespaces, makes managing Android resources tedious. And causes things to grow out of control easily, especially in large projects.
So let’s introduce a simple scheme that will solve your pains.
This blogpost will explain the mechanism, its advantages, limitations and provide an easy to use cheat sheet.
Continue reading]]>And Git implicitly solves both! :)
I’ll demonstrate how to configure Bitbucket as a free private remote Maven repository and automate everything in one simple Gradle script.
Continue reading]]>year in review
. #insomnia
2015 was a huge year for me! I even dare to say the biggest one of my life so far as I became a father of a lovely daughter Lene. Its really hard to over state how big of an impact that has on your life and how fantastic it is to see your own baby grow (and recognize parts of yourself in her). This obviously also explains my late year in review
post. #perfectexcuse
On a technical level I also fared well and I’m very happy with what I’ve been able to accomplish:
year in review
postNext year will be more challenging as my daughter has become a lot more effective at grabbing my attention than my laptop. However I want to increase my efforts contributing back to the community by speaking at more conferences and writing more blogposts. Finally I also want to visit Google IO, which is about time I got there, don’t you agree? ;)
As always you can reach me on Mastodon, or leave a comment below!
Continue reading]]>Actually, all of this a breeze to set up, once you understand what works and what doesn’t. It is even completely free for open source projects!
In less than half an hour, this blogpost will add CI and code coverage to your projects, just like I did for my own library LandscapeVideoCamera. While this article focusses on Android, the material presented here can quite easily be extended to a broader scope.
Continue reading]]>You will learn how to:
All source code is available on Github as usual.
Note that the material presented here can quite easily be extended to be applicable beyond Android.
Continue reading]]>In less than 30 minutes you will have a fully operational private Maven repository and have configured your Gradle buildscripts to upload your Android library artifacts.
Note that the material presented here can quite easily be extended to be applicable in a broader scope beyond Android.
Continue reading]]>Since I’m an Android and not a web developer, the first blogging subject wasn’t hard to find: challenges I came across in setting up this website and blog.
Continue reading]]>Disclaimer: Eventually I had to use a workaround - that’s why I don’t build websites professionally - but I strongly believe in a Just do It mentality and then learn/improve as you go.