Archive for the ‘Other’ Category

Get know about my migration from WordPress to Hugo and the reasons behind it.

IMPORTANT. This blog has been archived. You may read an updated version of this post here.
Visit https://blog.solidsoft.pl/ to follow my new articles.

I started my technical blog at the end of 2010. The primary reason was a need to find a place to write about my tools, my ideas and spotted problems (or course with solutions to make life easier for others :-) ). I didn’t plan to write a lot and I accomplished that. By that 9+ years I published 61 posts – just ~6,5 per year, gaining popularity year by year.

The trends were changing over time. The number one for long time was posted in 2011 guide about improving the TestNG reporting with ReportNG. Next, it was Gradle and displaying dependencies in a multi-project build, followed by more compact Mockito with Java 8 and using Mockito with JUnit 5. I am also happy that people are looking for basic, but crutial topics such as importance of given-when-then in unit tests.

Coming back to the editorial things, initially, I chose WordPress as I was a popular FOSS solution with an ability to (optionally) make it self-hosted (as opposed to Blogger). It was possible to easily setup everything and to have a fully-fledged blog quickly. Thank you Automattic for that!

My blog has been always a side project to express myself and help others. As that, I would prefer to do not pay monthly subscription fee. In the free version wordpress.com has a few limitations. First of all, you cannot use your own domain. As a result even having redirects from your domain, most of the external sites link to wordpress.com and you do not fully control the content. Secondly, you are limited to the predefined themes and a level of its customization (e.g. CSS styles) is quite restricted. Thirdly, ads. Despite a clear “Occasionally, some of your visitors may see an advertisement here,” banner displayed to me, long time I wasn’t aware how it looks in practice (my hardened browser configuration limits it greatly). My visitors seeing that (different, possible targeted) ads on my blog could consider me as its source, which I didn’t like.

As hosting WordPress on my VPS could be challenging (I don’t know PHP, nor WP itself) and risky (it needs to be updated regularly due to detected security threats), I decided to go into static site generators (namely Hugo). Having initial configuration behind (which can take some time…, even with so nice and future rich theme as Zzo which in addition has a very friendly maintainer) it promises to be easy to maintain. In addition, it can be much easily hosted. Here, I chose Netlify which, in addition to a lot of interesting features, also provides great integration with the Git-based deployment workflow (blog as code). All at the cost of much harder integration with dynamic features (such as comments). There is a chance that I will write something some it in the future.

I have some ideas for (hopefully) interesting topics to cover. See you at my new blog!

P.S. As I don’t have an access to the list of subscribers, please subscribe to the new feed or the new email notifications in the new blog to get know what is going on here :-).

“Not only individuals and interactions, but also a community of professionals” – The Software Craftsmanship Manifesto, 2009

Beginning

A long time ago (still) in a world of the prevailing Waterfall, I was fascinated by how Agile can simplify and streamline the process of software development. However, after some time committed to implementing the new approach in my organization, I was hit by the fact that even with Scrum (and all its fancy ceremonies) we can still produce code that – to use a euphemism — leaves more to be desired.

I started looking for some techniques to improve the quality of the created code and — as a result — the quality of the forged products and solutions. Clean code, automatic code testing, and Test-Driven Development were the most important missing parts I discovered. It was somehow satisfying to realize, after a while, that Extreme Programming, the Software Craftsmanship movement, and me, all had a common goal :)

Community of professionals

Expansion

However, turning the ideas and theoretical knowledge into an efficiently working mechanism was not so easy. First, I needed to grasp (and preferably master) it on my own to be able to spread it successfully out into the company as a whole. In addition to literature and the Internet, I was lucky enough to encounter some fantastic people and interesting local initiatives which allowed me to meet other developers thinking the same way, exchange knowledge (and ideas), and practice using it in a safe environment (a number of Coding Dojo sessions with a lot of katas made on my own, in a pair or in a group). Being equipped with those (practical) skills, I had a solid foothold to now spread it within the company and pass it on to interested teammates. All with the ultimate goal in mind – to finally improve the quality of created solutions and to make customers and developers more satisfied. It was not hassle-free, to say the least, and in the end, not all of my goals were achieved, but sometime later – perusing my own path of a Software Craftsman – I moved on from that particular organization with the feeling that I had left some good things and ideas behind.

The main trigger for this — somehow personal — blog post is the fact that, in December, 10 years ago, I gave my first public speech at the Warszawa JUG meeting. It featured the power of the full-text search mechanism embedded into a custom application with the help of the Compass library (which later on became a foundation of Elastic Search). The talk wasn’t perfect but based on the feedback, some of the attendees definitely learned something new. In addition, what was also very important was that it showed me how much I can learn myself while preparing a presentation for others. So, I started to share the ideas in wider circles.

Stabilization

The topics covered quickly turned into my main specialization — code quality and automatic code testing (together with the related aspects such as Continuous Delivery) to show other people the way and encourage them to try it on their own. Since that time, I have given dozens of talks for local user groups, small closed events, and large international conferences, both in Poland and across Europe. I (co-)organized some local meetups and larger conferences. I also wrote a number of (educational) blog posts. While I was gradually reducing my active commitment in the community (after all, a day has only 24 hours), a while after my initial presentation, I also started to conduct training sessions for groups and organizations to spread (good) ideas and practical skills in depth. Being a trainer, in the process of time, turned into a regular part of my working life, but I still try to be on terms with current techniques and tools, working hands-on with real projects and solving real problems. It also helps me to enrich my training with anecdotage and real-world examples from my own experience. I really like to demonstrate to less experienced fellow developers how their solutions could be more readable, more bullet-proof, and easier to maintain.

The Future

Is it still needed in 2020+, one might ask? Based on my experience from all my activities, the situation in general has improved over time. Unfortunately, there is still a lot to do. Automatic code testing is still not properly covered during studies or is not presented to students at all. Large parts of commercially developed software cannot be truly named “high-quality” and solid automatic code testing (not to mention Test-Driven Development) is not considered to be a MUST HAVE in all projects. Therefore, I continue my mission to make the world a (slightly) better place, by preaching the ideas that are worth spreading, building a community of professionals, and paying back to people and communities who — at the beginning of my journey — were there to assist in my growth.

Are you able to change the world? Good point. The IT world is quite big, and I cannot reach everyone. However, I am not the only one. For instance, looking at my fellow trainers, I see a number of passionate professionals with various areas of expertise, caring – in different ways – about high levels of knowledge in the community, which makes the whole thing look (a little) less hopeless :).

Is it worth doing? Well, firstly, continuous learning — a requirement to be a good trainer (and speaker) — is definitely a benefit for me. Secondly, I want to work with sensible people on a daily basis. Therefore, the more of them, the better. Thirdly, occasionally there are people who encounter me in one or another way to say “Thank you” for the things I directly or indirectly did (which were somehow beneficial for them). It is really elevating to see that you were able to help someone in something. In those moments, I clearly see that my work did not go entirely down the drain :).

P.S. Recommended reading: “The Software Craftsman: Professionalism, Pragmatism, Pride” by Sandro Mancuso
(Please note, the link above is linked to my account at Amazon. Feel free to use this generic link instead if preferred)

The lead photo by Anemone123 obtained from Pixabay.

The Happiness Door is a great method of collecting instant feedback. I have used it successfully on my training sessions and recently had a first try to use it after my conference speech. In this post I present my case study and the reasons why I will definitely use it on upcoming events.

Part 1. From the beginning. It becomes a tradition to end Warszawa JUG’s meeting seasons at the edge of June and July in a great style – with Confitura – the largest free conference about Java and JVM in Poland. This year the seventh edition was planned for about 1000 people and it took less than 2 days to sold out all the tickets (including overbooking). 5 parallel tracks with 35 presentations on various topics. From tuning JVM, different languages on JVM and a lot of frameworks though Java Script, Android, databases, architecture and testing to motivating people, Gordon Ramsay and company management in the 21th century. Too much to embrace during a day, but fortunately all presentations were recorded and will be available online.

My presentation was about mutation testing in Java environment with PIT. I wrote a few posts on that topic already. In a nutshell – a nice way to check how good your test really are. Writing testable code had wide representation at Confitura – I counted four more testing-related presentations.

Part 2. The Happiness Door method (if you new to this method read my previous post first). Before my presentation the sticky notes were distributed across the room and 5 smiley faces put on the door. At the begging I explained to the audience what was going on in this method and why their feedback was so important for me. Leaving the room about 50% attendees gave numerical feedback. Almost half of them had some comments (from “nice talk” to an essay placed on both sides of a sticky note :) ). Some of them were very interesting. Thanks!

I’m very happy I used this method on my speech. First time just minutes after a presentation I knew what people thought about it. In my case it was: “quite good, but there is still a field for improvement”.

The Happiness Door (one leaf) after my speech at Confitura 2013

The Happiness Door (one leaf) after my speech at Confitura 2013

Here is a good place to thank Małgorzata Majewska and Anna Zajączkowska who helped me polish many aspects of my speech.

The interesting thing is that when I have got an email from the organizers with the feedback collected using the online survey the average score was very similar, just got a month later, so why should I wait? With The Happiness Door method it is possible to get it know immediately (and even with the larger test sample).

Btw, it is not easy to prepare to the presentation (there were as always some problems with a projector) and put a sticky note on every place in the audience room (~150 seats) in 15 minutes. Thanks to Edmund Fliski and Dominika Biel for their help with a distribution.

Btw2, after the talk I had very interesting conversations with the people wanting to use mutation testing in their projects, the people already experimenting with PIT and Konrad Hałas – the guy from Warsaw who wrote MutPy – a mutation testing tool for Python.

Part 3. The slides from my speeches evolves over time. 2 years ago my slides were full of the bullet lists – the feedback – boring, to much text. Recently I had some internal presentation with less than 10 slides with no text, just images – the feedback – hard to follow, to little text. In the mean time I did an experimented with a presentation based on a mind map – mixed feedback. This time I combined images and text – some people liked it some not :). Be the judge. The slides (in Polish) are available for download.

Appendix. Thanks to Chris Rimmer for the idea of presenting IT topics using a metaphor to non IT events and people.

I hope I encouraged you to give The Happiness Door method a try. Please share your experience in comments.

P.S. Good news for all the people who missed my presentation at Confitura. My proposal was by accepted by The Program Committee and I will be speaking in Kraków at JDD 2013 (October 14-15th).

jdd13-speaker

The Happiness Door is a method of collecting immediate feedback I have read about some time ago on the Jurgen Appelo’s blog. I used it this year during my training sessions and it worked very well. I would like to popularize it a little bit.

This method requires to select a strategically located place (like the second leaf of the exit door) with marked scale (I use 5 smileys from a very sad to a very happy one) and ask people to put distributed sticky notes on a level corresponding to their satisfaction of the session. They are encouraged to add a concrete comment(s) explaining given score (like “boring” or “too little practical exercises”), but it is completely valid to just attach an empty card in the selected place. The mentioned issues could be discussed with the whole group to determine how the given thing could be improved best. I start getting feedback before a lunch break on the first training day and gently remind about it on every following break.

Feedback after my testing training

After my ‘Effective code testing’ training. (Almost) all attendies were pleased again :-).

Update 2015: I decreased a frequency of obligatory opining to twice a day (after a lunch break and at the end of a day) to save some trees and give the attendees more time to consider the things.

The main advantage of using this method is to get both instant numerical feedback (how much people like it) and concrete comments (what exactly do they (dis)like). The feedback is gathered very fast when there is still a room for improvements (in contrast to the more formal survey at the end of the training). I have got numerous comments from attenders that they like this method as well and I plan to use it also in my further sessions.

On my courses I even introduced a small enhancement to the original method. Every day I give away sticky notes in a different color. It allows to easily distinguish feedback given on a particular day and identify a trend. On the photos bellow for example it is pretty visible that after a feedback I got on the first day (yellow cards) I was able to adapt my training to the group’s level and expectations (blue cards).

Feedback after my training - day 1 - The Happiness Door method

Day 1 – a moderate result – the attendees didn’t get a training program in their company and expected something completely different…

Feedback after my training - day 2 - The Happiness Door method

Day 2 – a visible uptrend – I heavily diverged from the program to follow people’s expectations. Day 3 was even better :-)



This spring was quite busy for me as a trainer. I was a mentor at Git Kata – a free Git workshop, gave a talk about asynchronous calls testing on “6 tastes of testing – flashtalks” and recently did a short workshop about Mockito at Test Kata. In the meantime I conducted two 3-day training sessions about writing “good code” and plan one more Test Driven Development session at the end of June. Everything together with my main occupation – writing good software and help team members to do the same. What is more recently I’ve got very pleasant information that my presentation proposal about Mutation Testing was accepted and at the beginning of July I will close this training season speaking at Confitura 2013 (which nota bene was sold out (1200 tickets!) in less than 2 days). See you at Confitura.

Confitura 2013 - Speaker

Confitura 2013 – Speaker

Recently there was an interesting and unusual event in Warsaw for all enthusiasts of testing – “6 tastes of testing – flashtalks“. Instead of one long presentation common for WJUG meetings 6 guys gave 6 flashtalks (~15 minutes long presentations) about different aspects of testing.

The audience could listen about:

  • Fest Assertions – a set of assertions with fluent API for TestNG and JUnit by Michał Lewandowski,
  • JUnitPrams – a better way to write parameterized tests with JUnit by Paweł Lipiński,
  • Spock – a setting new standards testing framework for Java and Groovy code by Jakub Nabrdalik,
  • Geb – a Groovy way for acceptance testing with Web Driver and Page Object Pattern by Tomasz Kalkosiński,
  • asynchronous calls testing with Awaitility by Marcin Zajączkowski (a.k.a. me),
  • the idea how to use IoC and Guice in tests by Paweł Cesar Sanjuan Szklarz.

On my own speach I performed an experiment with a presentation format. Instead of a classical Impress/Power Point slides I used Vym – View Your Mind – an interesting tool for mind mapping with a build in slide editor. It allowed me to “animate” my mind map and talk about every its point (node). By the way I reported a dozen of feature requests for Vym, so there is a chance to make a slide editor even better on the next presentation :). The downside of using such tool is a limited way how it could be exported to some neutral format. The picture below contains the whole map, but without code snippets.

Sleepless asynchronous calls testing with Awaitility

The people I asked were pleased with the presentations. They were cross-sectional and touched many different aspects briefly, but even though I knew covered topics before I noted down a few useful tips. The venue was tightly filled (about 100 people). In addition to interesting topics there were an ability to eat pizza and win an SSD disk. The event was completed with a networking session in the near restaurant. For those who cannot attend there is a video available (in Polish) on the WJUG’s You Tube channel.

Last Saturday together with 8 other mentors we were showing various Git-related technics on Git kata event for over 80 people.

Git kata was a free git workshop conducted in a kata form. Paraphrasing Wikipedia “A Git kata is an exercise in using Git which helps an user hone their skills through practice and repetition”. During sessions a mentor was showing selected Git aspects in practice providing listeners detailed comments on each performed step. The attenders could follow master’s steps using their own laptops.

There were various Git technics covered including:
– undoing changes (reset, revert, reflog),
– useful aliases, configuration tricks, Git internals and git prompt with fish shell,
– collaboration with other using public services (like GitHub, Bitbucket, GitLab, Gitorious) or patches via email/USB,
– submodules, filter branch and rerere.

In the past I was leading different programming katas, but I have never head about the idea to use it with Git. It sounded very interesting when I was asked to join a mentors team on Git kata. I hope I helped some people better understand internals of Git commands and in addition having two free slots I got to know (among other things) about rerere which can reduce number of manual merges (have you even heard about it before?). “branch.autosetuprebase always” flag which set a rebase as a default strategy on pull for a newly created branches or a “help.autocorrect 1” flag which automatically applies “did you mean” suggestions in case of typo. The event was very successful and I wonder if not to extend my training portfolio by a Git course.

In my first post I would like to explain why I decided to set up my own blog and what I plan to place here.
I’m not a big fan of blogging. I don’t follow any blog about someone other personal life, his/her ups and downs or the new plants in a garden and that’s something you will not find reading this site. Technical blogs on the other side are for me the simplest way to write a technical article, a relation from a conference, a book review or introduce some new useful software on the market.
A few times I was in a situation when I did/found something which could be interesting also for others, but didn’t have a place to express it. This blog is planned to fill in a hole. Besides I plan to write about Software Craftsmanship, Clean Code, TDD and other things which help developing good, testable and maintainable code. I’m also the author of some open source libraries (see sidebar on the left) which could be more popular by writing blog entries about them.
I don’t make an assumption to write regularly. Posts will be published when I have something to share and have time to write it down.
One more thing. Most of my posts will be written in English which isn’t my native language. If you find some typos in posts (or have any suggestion) please drop me an email. Thanks!