<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://filipin.eu/feed.xml" rel="self" type="application/atom+xml" /><link href="https://filipin.eu/" rel="alternate" type="text/html" /><updated>2026-04-24T21:42:22+00:00</updated><id>https://filipin.eu/feed.xml</id><title type="html">Filipin.eu</title><subtitle>Željko Filipin&apos;s blog. &lt;br /&gt;&lt;a href=&quot;/&quot;&gt;Home&lt;/a&gt; &lt;a href=&quot;/blog&quot;&gt;Blog&lt;/a&gt; &lt;a href=&quot;/tags&quot;&gt;Tags&lt;/a&gt; &lt;a href=&quot;/license&quot;&gt;License&lt;/a&gt;</subtitle><author><name>Željko Filipin</name></author><entry><title type="html">Testival Meetup #79, Zagreb, Croatia</title><link href="https://filipin.eu/testival-79" rel="alternate" type="text/html" title="Testival Meetup #79, Zagreb, Croatia" /><published>2026-04-22T00:00:00+00:00</published><updated>2026-04-22T00:00:00+00:00</updated><id>https://filipin.eu/testival-79</id><content type="html" xml:base="https://filipin.eu/testival-79"><![CDATA[<p><img src="assets/2026/testival-79.jpg" alt="Testival Meetup #79" title="Testival Meetup #79" /></p>

<p>Last month we didn’t have a regular Testival meetup, so we had the second <a href="https://www.meetup.com/testival/events/313776699/">Testival book club</a>. The attendance was lower than the <a href="testival-78">last time</a>. This time only three of us came. It is my fault. I organized the meetup on very short notice. March was really busy.</p>

<p>We were talking about <a href="https://www.goodreads.com/book/show/201116293-taking-testing-seriously">Taking Testing Seriously: The Rapid Software Testing Approach</a> by James Bach. I was the only one that finished the book. Other attendees (Karlo and Bojan) started reading, but didn’t finish yet.</p>

<p>It was still a good meetup. Karlo wrote a blog post <a href="https://karlosmid.com/2026/03/an-unexpected-display-of-art/">An unexpected display of art</a> about it.</p>

<p>During the last meetup, I didn’t yet write <a href="taking-testing-seriously">Taking Testing Seriously by James Bach and Michael Bolton</a>. I also depended on my Kindle for highlights from the book. Looking for relevant highlights on the Kindle proved not to be fast, so this time I have printed both the blog post and all of my Kindle highlights. It made it much faster to find things.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Quibble Local: Yet Another MediaWiki Local Development Environment</title><link href="https://filipin.eu/quibble-local" rel="alternate" type="text/html" title="Quibble Local: Yet Another MediaWiki Local Development Environment" /><published>2026-03-31T00:00:00+00:00</published><updated>2026-03-31T00:00:00+00:00</updated><id>https://filipin.eu/quibble-local</id><content type="html" xml:base="https://filipin.eu/quibble-local"><![CDATA[<h2 id="mediawiki-local-development-environments">MediaWiki Local Development Environments</h2>

<p>At work, I have to set up <a href="https://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> on my machine frequently. Setting up <a href="https://www.mediawiki.org/wiki/Core">MediaWiki Core</a> is not a big problem. The problem is when you want to install an <a href="https://www.mediawiki.org/wiki/Manual:Extensions">extension</a> or a <a href="https://www.mediawiki.org/wiki/Manual:Skins">skin</a>. Some extensions and some skins are easy to install and set up. Some are very complicated. Guess which ones I have to install most of the time.</p>

<p>Over the years, I have tried several MediaWiki local development environments. (I’ll use just the <em>environment</em> from now on.) The list below is roughly by the time I started using each tool.</p>

<ul>
  <li><a href="https://www.mediawiki.org/wiki/MediaWiki-Vagrant">MediaWiki-Vagrant</a></li>
  <li><a href="https://www.mediawiki.org/wiki/MediaWiki-Docker">MediaWiki-Docker</a></li>
  <li><a href="https://www.mediawiki.org/wiki/Cli">cli</a></li>
  <li><a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart">MediaWiki-Quickstart</a></li>
</ul>

<p>In 2023 I created a task to explore various available options (<a href="https://phabricator.wikimedia.org/T344682">T344682</a>).</p>

<p>A few environments I didn’t even manage to try yet.</p>

<ul>
  <li><a href="https://gitlab.com/wmde/technical-wishes/docker-dev">docker-dev</a></li>
  <li><a href="https://www.mediawiki.org/wiki/Local_development_quickstart">Local development quickstart</a></li>
</ul>

<p>I’m sure I’m missing a few environments. I remember trying some environments that no longer exist.</p>

<p>What’s the point? Obviously, there’s a need for environments. No existing environment has all, or at least most, of the features developers are looking for.</p>

<h2 id="quibble">Quibble</h2>

<p>I was working on a project that required me to take a good look at <a href="https://doc.wikimedia.org/quibble/">Quibble</a>. Quibble is an important part of our continuous integration. It’s the part that installs and configures MediaWiki Core with various combinations of extensions and skins.</p>

<p>As a first step of taking a good look at it, I updated a very old wiki page, <a href="https://www.mediawiki.org/wiki/Selenium/How-to/Run_tests_targeting_Quibble">Run tests targeting Quibble</a>. I have created the page in 2019, and the last update to the page was in 2021.</p>

<p>I was playing with Quibble and updating the page. I was pretty happy with Quibble features. I was not at all happy with the commands I had to write.</p>

<p>For example, this command installs MediaWiki Core.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">docker run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="se">\</span>
  <span class="nt">--entrypoint</span><span class="o">=</span>quibble-with-supervisord <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/cache:/cache <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/log:/workspace/log <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/ref:/srv/git:ro <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/src:/workspace/src <span class="se">\</span>
  docker-registry.wikimedia.org/releng/quibble-bullseye-php83:latest</code></pre></figure>

<p>This one runs Selenium tests.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">docker run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="se">\</span>
  <span class="nt">--entrypoint</span><span class="o">=</span>quibble-with-supervisord <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/cache:/cache <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/log:/workspace/log <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/ref:/srv/git:ro <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/src:/workspace/src <span class="se">\</span>
  docker-registry.wikimedia.org/releng/quibble-bullseye-php83:latest <span class="se">\</span>
  <span class="nt">--skip-zuul</span> <span class="se">\</span>
  <span class="nt">--skip-deps</span> <span class="se">\</span>
  <span class="nt">--run</span> selenium</code></pre></figure>

<p>Pretty quickly I had enough of copy/pasting long multi-line commands.</p>

<p>In MediaWiki-Quickstart, the same can be done with these commands.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./fresh_install
./run_selenium_tests</code></pre></figure>

<p>That’s way more to my taste.</p>

<h2 id="quibble-local">Quibble Local</h2>

<p>In the spirit of <a href="https://xkcd.com/927/">xkcd standards</a> comic, the obvious solution was to create yet another environment. Of course. Introducing… <a href="https://gitlab.wikimedia.org/zfilipin/quibble-local">Quibble Local</a>. (URL might change in the near future.)</p>

<p>My initial plan was to create simple scripts that would execute very long Quibble commands. I didn’t need to think about how to name the scripts. I could just reuse names from MediaWiki-Quickstart.</p>

<p>So, in Quibble Local, if you want to install MediaWiki Core and run Selenium tests, you would use the same commands as MediaWiki-Quickstart.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./fresh_install
./run_selenium_tests</code></pre></figure>

<p>These were one of the first commands. Quibble Local has much more features these days.</p>

<p>Project readme file documents everything. You can also use the help command to get help for all commands, or about just one command.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./help
./help <span class="nb">install</span></code></pre></figure>

<p>I keep adding features and refactoring the code. Let me know if you find it useful, if you find any problems, or if you have any comments. See the footer for contact information.</p>

<h2 id="claude-code">Claude Code</h2>

<p>I took this project as an opportunity to try <a href="https://claude.com/product/claude-code">Claude Code</a>. I wanted the project to have minimal dependencies (<a href="https://en.wikipedia.org/wiki/Bash_\(Unix_shell\)">Bash</a>, <a href="https://en.wikipedia.org/wiki/Git">Git</a>, <a href="https://en.wikipedia.org/wiki/Docker_\(software\)">Docker</a>). There was no chance I was going to write a project in Bash. For various reasons.</p>

<p>It is an interesting experience. I’m impressed that a tool can write code that does what I say. Most of the time.  I’m not impressed with the quality of the code, or the architecture. Since this is just an experiment, I’m fine with the code as is. If this becomes anything more, I would rewrite it in a language I know better.</p>]]></content><author><name>Željko Filipin</name></author><category term="code" /><category term="wikimedia" /><summary type="html"><![CDATA[MediaWiki Local Development Environments]]></summary></entry><entry><title type="html">Taking Testing Seriously by James Bach and Michael Bolton</title><link href="https://filipin.eu/taking-testing-seriously" rel="alternate" type="text/html" title="Taking Testing Seriously by James Bach and Michael Bolton" /><published>2026-02-28T00:00:00+00:00</published><updated>2026-02-28T00:00:00+00:00</updated><id>https://filipin.eu/taking-testing-seriously</id><content type="html" xml:base="https://filipin.eu/taking-testing-seriously"><![CDATA[<p><img src="assets/2026/taking-testing-seriously.jpg" alt="Taking Testing Seriously by James Bach and Michael Bolton" title="Taking Testing Seriously by James Bach and Michael Bolton" /></p>

<h2 id="draft">Draft</h2>

<p>This post is a draft. Please come back in a week or two and it will be updated.</p>

<p>I try to write at least one blog post every month. For months where I fail to meet even that very low bar, I publish whatever I have at the end of the month. I do my best to finish the post as soon as possible. Usually in the next few days, or weeks.</p>

<h2 id="introduction">Introduction</h2>

<p>I have been reading <a href="https://www.satisfice.com/blog">James Bach’s blog</a> for years, if not decades. The same is true for <a href="https://developsense.com/blog">Michael Bolton’s blog</a>. (I met Michael Bolton, not once, but twice! The first time in <a href="https://filipin.eu/testival-41">2018</a>, the second time in <a href="https://filipin.eu/qa-meetup">2025</a>.)  In late 2025 James Back published a blog post <a href="https://www.satisfice.com/blog/archives/487931">55 Months, 1 Day</a>, announcing his new book. The book is a collaboration with Michael Bolton. (I could not find a blog post announcing the book on Michael Bolton’s blog. The only thing I found is <a href="https://developsense.com/taking-testing-seriously-the-rapid-software-testing-approach">Taking Testing Seriously: The Rapid Software Testing Approach</a>.)</p>

<p>I was very excited to read the book. I think I bought it on the very day it was published. I have been reading it almost every day for about thirty minutes. I might be one of the first people that have read the book.</p>

<h2 id="the-book">The book</h2>

<p>The book has four parts, twenty two chapters and four appendices.</p>

<p>The first eight chapters are written mostly by James Bach. From chapter nine until the end of the book, each chapter is written by a different author or authors.</p>

<p>Chapters seventeen and eighteen are transcripts of interviews Michael Bolton had with a couple of people.</p>

<p>Appendices are unattributed, so I assume they are written by the main authors, Bach and Bolton.</p>

<p>It’s a very strange book format. I don’t think I’ve read a book that combines so many different styles and authors. Maybe Bach and Bolton submitted the first eight chapters (and appendices) to the publisher and they told them the book is too short. So, they added more chapters written by other people. Maybe they wanted this format.</p>

<h2 id="book-clubs">Book Clubs</h2>

<p>I have started not one, but two book clubs about the book. One for Testival (see <a href="https://filipin.eu/testival-78">Testival Meetup #78</a>), one at work. Each club has met once so far. Both clubs plan to meet at least one more time.</p>

<p>I love book club meetings. I had great discussions in both clubs.</p>

<h2 id="quotes">Quotes</h2>

<p>When I exported my Kindle highlights to a pdf file, it was twenty file pages. That’s above the average for me. The average is five to fifteen pages. I’ll comment on a few interesting quotes.</p>

<blockquote>
  <p>The first full book on a human-centered approach to testing was Cem Kaner’s Testing Computer Software. (Page 13.)</p>
</blockquote>

<p>I have read it in <a href="https://filipin.eu/testing-computer-software">2022</a>.</p>

<blockquote>
  <p>But we suggest that pessimism is a good heuristic for testers. Let everyone else on the team be optimistic. (Page 70.)</p>
</blockquote>

<p>Pessimism is my superpower.</p>

<blockquote>
  <p>p. 233339362199739. (Page 73.)</p>
</blockquote>

<p>I’m one of those people that (sometimes) carefully reads footnotes. This surely looks like an impossible page number.</p>

<blockquote>
  <p>Bug reporting is central to testing. (Page 118.)
… the quality of your reports is probably the single most important factor in determining your credibility as a tester. (Page 118.)</p>
</blockquote>

<p>There’s craft in writing a good bug report. As short as possible, while still containing all relevant data.</p>

<blockquote>
  <p>No one can deny that automation tool sales demos are impressive. (Page 217.)</p>
</blockquote>

<p>That’s the main complaint I have when I see a demo of yet another test automation tool. Sure, it’s impressive for a simple example. But what happens in a few months, or years, when there’s a lot of code?</p>

<blockquote>
  <p>…the costs of automation are not just in the initial creation of it. (Page 232.)</p>
</blockquote>

<p>In my experience, the vast majority of the cost is maintenance.</p>

<blockquote>
  <p>There are also large tooling opportunities; automation frameworks and such. But keep in mind, there is a certain danger with those projects: they tend to pull the toolsmiths into their own world. Pretty soon, the testers are wondering what those guys do for a living. (Page 237.)</p>
</blockquote>

<p>I do test automation for a living. For the last couple of decades. At least once, a tester asked me what in the world I actually do.</p>

<blockquote>
  <p>Considerations for GUI-level Automation. Let’s say you are thinking about embarking on automation that will drive the product on a GUI level. Okay. Generally speaking, you ought to be scared of this. (Page 243.)
Having said that, it’s not always a bad idea. (Page 243.)</p>
</blockquote>

<p>If you’re not scared of GUI test automation, you should be.</p>

<blockquote>
  <p>So-called self-healing automation is very limited in its scope. Don’t believe the hype. (Page 245.)</p>
</blockquote>

<p>I am yet to see this work. As usual, I’ll be glad to be proven wrong.</p>

<blockquote>
  <p>There’s always a problem, and the problem is always people. (Page 428)</p>
</blockquote>

<p>If you think projects fail for technical reasons, you might be wrong.</p>

<blockquote>
  <p>Of all the things I’ve learned over the years, I see now that learning how to learn has been the most valuable lesson. (Page 433.)</p>
</blockquote>

<p>I wish learning how to learn is something you do in school. I had to learn it myself.</p>

<h2 id="popular-highlights">Popular Highlights</h2>

<p>The book has more than five hundred pages. All of the popular highlights are in the first fifty pages. Either most of the people that highlight have only read the first ten percent of the book, or the first ten percent of the book are the best part.</p>

<p>I’ll have to double check, but it looks like popular highlights are not the same (for the same book) on my Kindle device and in my Kindle macOS app. Shrug.</p>

<h3 id="why-testing">Why Testing?</h3>

<blockquote>
  <p>Testing is the opposite of faith in the product. Testing begins with faith in the existence of trouble. (Page 8, 20+ highlighters)</p>
</blockquote>

<h3 id="the-meaning-of-testing">The Meaning of Testing</h3>

<blockquote>
  <p>Testing is the process of evaluating a product by learning about it through experiencing, exploring, and experimenting with it. (Page 17, 30+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Even if you do run a bunch of very good automation, when it fails, you must investigate it. That’s a learning process. And when it doesn’t fail, you ought to be wondering what bugs you could be missing. You should be proactively looking for holes in that testing. That’s a learning process. Real testing is always learning. (Page 18, 10~ highlighters)</p>
</blockquote>

<blockquote>
  <p>A test is an encounter with a product that constitutes an episode of testing. (Page 20, 20~ highlighters)</p>
</blockquote>

<blockquote>
  <p>Good deep testing means testing that maximizes the chance of finding every elusive bug, of some particular kind, that matters. Good shallow testing means testing that has some chance of finding every easy bug of some particular kind. (Page 21, 20+ highlighters)</p>
</blockquote>

<h3 id="foundational-ideas">Foundational Ideas</h3>

<blockquote>
  <p>For testing purposes, we are concerned with dynamic systems— wherein changing the meaningful relationships causes change to the entire system. (Page 34, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>A model allows you to explore a system; exploring a system allows you to model it better. (Page 34, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Testers do not control, assure, or ensure quality. Releasing the product is a business decision, not a testing decision. (Page 38, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Methodology is what you think should happen; process is what actually happens. (Page 43, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Without tacit knowledge, you can’t solve hard problems; without explicit knowledge, you can’t talk about them. (Page 48, 10+ highlighters)</p>
</blockquote>]]></content><author><name>Željko Filipin</name></author><category term="book" /><category term="book-club" /><category term="image" /><category term="testing" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #78, Zagreb, Croatia</title><link href="https://filipin.eu/testival-78" rel="alternate" type="text/html" title="Testival Meetup #78, Zagreb, Croatia" /><published>2026-01-31T00:00:00+00:00</published><updated>2026-01-31T00:00:00+00:00</updated><id>https://filipin.eu/testival-78</id><content type="html" xml:base="https://filipin.eu/testival-78"><![CDATA[<p><img src="assets/2026/testival-78.jpg" alt="Testival Meetup #78" title="Testival Meetup #78" /></p>

<p>This week we had the first ever <a href="https://www.meetup.com/testival/events/313040352">Testival book club</a>. About ten people came to discuss <a href="https://www.goodreads.com/book/show/201116293-taking-testing-seriously">Taking Testing Seriously: The Rapid Software Testing Approach</a> by James Bach.</p>

<p>We did our usual introductions, had some pizza and discussed the book. Less than half of the attendees started reading the book. Most of the people just started reading recently, so they have read only the first few chapters. I was the only one that has read more than half of the book. (I read for about thirty minutes every working day.)</p>

<p>The discussion was diverse. From different chapters of the book, to <a href="https://en.wikipedia.org/wiki/International_Software_Testing_Qualifications_Board">ISTQB</a> and finally to <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> (of course).</p>

<p>We were a bit distracted by a big screen in the restaurant showing the <a href="https://ehfeuro.eurohandball.com/men/2026/matches/details/202611010101060/Croatia-Hungary/">Croatia-Hungary</a> handball game.</p>

<p>I really enjoyed the discussion. Two hours were not enough. I hope we’ll have more book club meetups in the future.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">So Good They Can’t Ignore You by Cal Newport</title><link href="https://filipin.eu/so-good-they-cant-ignore-you" rel="alternate" type="text/html" title="So Good They Can’t Ignore You by Cal Newport" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://filipin.eu/so-good-they-cant-ignore-you</id><content type="html" xml:base="https://filipin.eu/so-good-they-cant-ignore-you"><![CDATA[<p><img src="assets/2025/so-good-they-cant-ignore-you.jpg" alt="So Good They Can't Ignore You by Cal Newport" title="So Good They Can't Ignore You by Cal Newport" /></p>

<h2 id="introduction">Introduction</h2>

<p>Cal Newport is one of my favorite authors. I have read almost all of his books. Some of them several times. I also really like his podcast <a href="https://www.thedeeplife.com/listen/">Deep Questions</a>.</p>

<p>I have read this book at least two times. I have listened to it in late 2022 as an audio book and I have read it in early 2025 as an ebook.</p>

<p>I wish I had read this book when I was much younger. Probably in high school. I hope my kids read it in high school.</p>

<p>2025 was really busy. I wanted to write a review of the book earlier. I usually have the time to write one blog post every month. So, this book never made it to the short list. Until now.</p>

<h2 id="the-book">The Book</h2>

<p>The book has four sections. Each section has several chapters. Each section discusses one rule.</p>

<ul>
  <li>Rule #1: Don’t Follow Your Passion</li>
  <li>Rule #2: Be So Good They Can’t Ignore You (Or, the Importance of Skill)</li>
  <li>Rule #3: Turn Down a Promotion (Or, the Importance of Control)</li>
  <li>Rule #4: Think Small, Act Big (Or, the Importance of Mission)</li>
</ul>

<h2 id="quotes">Quotes</h2>

<p>After exporting my Kindle highlights, I got an eleven page pdf document. I have highlighted a lot. I’ll select just a few quotes.</p>

<h3 id="chapter-one-the-passion-of-steve-jobs">Chapter One: The “Passion” of Steve Jobs</h3>

<blockquote>
  <p>The Passion Hypothesis</p>

  <p>The key to occupational happiness is to first figure out what you’re passionate about and then find a job that matches this passion.</p>

  <p>(Page 4.)</p>
</blockquote>

<p>Before reading the book, I thought this was the only way. I know better now.</p>

<h3 id="chapter-five-the-power-of-career-capital">Chapter Five: The Power of Career Capital</h3>

<blockquote>
  <p>The Career Capital Theory Of Great Work</p>

  <ul>
    <li>The traits that define great work are rare and valuable.</li>
    <li>Supply and demand says that if you want these traits you need rare and valuable skills to offer in return. Think of these rare and valuable skills you can offer as your career capital.</li>
    <li>The craftsman mindset, with its relentless focus on becoming “so good they can’t ignore you,” is a strategy well suited for acquiring career capital. This is why it trumps the passion mindset if your goal is to create work you love.</li>
  </ul>

  <p>(Page 48.)</p>
</blockquote>

<p>The combination of rare and valuable is the key. If something you can do is just rare, or just valuable, it’s not enough.</p>

<blockquote>
  <p>Three Disqualifiers For Applying The Craftsman Mindset</p>
  <ul>
    <li>The job presents few opportunities to distinguish yourself by developing relevant skills that are rare and valuable.</li>
    <li>The job focuses on something you think is useless or perhaps even actively bad for the world.</li>
    <li>The job forces you to work with people you really dislike.</li>
  </ul>

  <p>(Page 56.)</p>
</blockquote>

<p>When selecting a job, you don’t have to be really picky. There are just a few things that would make a job bad.</p>

<h3 id="chapter-seven-becoming-a-craftsman">Chapter Seven: Becoming a Craftsman</h3>

<blockquote>
  <p>There are two types of these markets: winner-take-all and auction.</p>

  <p>(Page 91.)</p>
</blockquote>

<p>I was not aware of these two markets. The world makes more sense now.</p>

<h3 id="chapter-eleven-avoiding-the-control-traps">Chapter Eleven: Avoiding the Control Traps</h3>

<blockquote>
  <p>The Law of Financial Viability
When deciding whether to follow an appealing pursuit that will introduce more control into your work life, seek evidence of whether people are willing to pay for it. If you find this evidence, continue. If not, move on.</p>

  <p>(Page 139.)</p>
</blockquote>

<p>It’s pretty easy to get positive feedback from people. It’s very hard to get money from people. If people are willing to pay for something, you have struck gold.</p>

<h2 id="popular-highlights">Popular Highlights</h2>

<p>This Kindle feature fascinates me. What have other people highlighted? It’s probably important. I could not find any official documentation about it. What I did find is that a lot of people hate it.</p>

<h3 id="introduction-1">Introduction</h3>

<blockquote>
  <p>In other words, you need to be good at something before you can expect a good job.</p>

  <p>(4k+ highlighters.)</p>
</blockquote>

<p>A word of warning for people entering the job market.</p>

<h3 id="chapter-two-passion-is-rare">Chapter Two: Passion is Rare</h3>

<blockquote>
  <p>Compelling careers often have complex origins that reject the simple idea that all you have to do is follow your passion.</p>

  <p>(Page 13. 4k+ highlighters)</p>
</blockquote>

<p>My career is a perfect illustration of this.</p>

<blockquote>
  <p>Autonomy: the feeling that you have control over your day, and that your actions are important</p>

  <p>Competence: the feeling that you are good at what you do</p>

  <p>Relatedness: the feeling of connection to other people</p>

  <p>(Page 18. 5k+ highlighters.)</p>
</blockquote>

<p>The more I think about this, the more it sounds correct.</p>

<h3 id="chapter-three-passion-is-dangerous">Chapter Three: Passion is Dangerous</h3>

<blockquote>
  <p>The more we focused on loving what we do, the less we ended up loving it.</p>

  <p>(Page 23. 3k+ highlighters.)</p>
</blockquote>

<p>It’s similar to relationships. It’s not enough to focus only on picking the right person. It’s very important to work on the relationship once you have found the right person.</p>

<h3 id="chapter-five-the-power-of-career-capital-1">Chapter Five: The Power of Career Capital</h3>

<blockquote>
  <p>You need to get good in order to get good things in your working life, and the craftsman mindset is focused on achieving exactly this goal.</p>

  <p>(Page 49. 4k+ highlighters.)</p>
</blockquote>

<p>The world doesn’t owe you anything. You have to deserve it.</p>

<h3 id="chapter-seven-becoming-a-craftsman-1">Chapter Seven: Becoming a Craftsman</h3>

<blockquote>
  <p>It is a lifetime accumulation of deliberate practice that again and again ends up explaining excellence.</p>

  <p>(Page 84. 4k+ highlighters.)</p>
</blockquote>

<p>This is probably not something you want to hear at the beginning of your career. It’s something you’ll agree with later in life.</p>

<blockquote>
  <p>Doing things we know how to do well is enjoyable, and that’s exactly the opposite of what deliberate practice demands.… Deliberate practice is above all an effort of focus and concentration. That is what makes it “deliberate,” as distinct from the mindless playing of scales or hitting of tennis balls that most people engage in.</p>

  <p>(Page 96. 3k+ highlighters.)</p>
</blockquote>

<p>It’s sobering when you realize you have hit a plateau in something. Be it running, chess, guitar, coding… The time of being comfortable is over. It’s time to train hard again.</p>

<h3 id="chapter-eight-the-dream-job-elixir">Chapter Eight: The Dream-Job Elixir</h3>

<blockquote>
  <p>Giving people more control over what they do and how they do it increases their happiness, engagement, and sense of fulfillment.</p>

  <p>(Page 113. 4k+ highlighters.)</p>
</blockquote>

<blockquote>
  <p>To summarize, if your goal is to love what you do, your first step is to acquire career capital. Your next step is to invest this capital in the traits that define great work. Control is one of the most important targets you can choose for this investment.</p>

  <p>(Page 114, 3k+ highlighters.)</p>
</blockquote>

<p>I have not realized, until recently, how motivated I am when I have a hard goal to reach, and enough control to try different approaches to reach it.</p>

<h3 id="chapter-twelve-the-meaningful-life-of-pardis-sabeti">Chapter Twelve: The Meaningful Life of Pardis Sabeti</h3>

<blockquote>
  <p>Hardness scares off the daydreamers and the timid, leaving more opportunity for those like us who are willing to take the time to carefully work out the best path forward and then confidently take action.</p>

  <p>(Page 154. 3k+ highlighters.)</p>
</blockquote>

<p>I am amongst “the daydreamers and the timid” in several things that are important to me. I am amongst a few that are “confidently taking action” in a few things that are important to me.</p>]]></content><author><name>Željko Filipin</name></author><category term="book" /><category term="image" /><category term="productivity" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #77, Zagreb, Croatia</title><link href="https://filipin.eu/testival-77" rel="alternate" type="text/html" title="Testival Meetup #77, Zagreb, Croatia" /><published>2025-11-29T00:00:00+00:00</published><updated>2025-11-29T00:00:00+00:00</updated><id>https://filipin.eu/testival-77</id><content type="html" xml:base="https://filipin.eu/testival-77"><![CDATA[<p><img src="assets/2025/testival-77.jpg" alt="Testival Meetup #77" title="Testival Meetup #77" /></p>

<h2 id="meetup">Meetup</h2>

<p>For me the meetup started with a beautiful bike ride to the venue. As usual, Karlo Šmid joined me on the bike ride after the meetup. We had some time for a longer chat.</p>

<p>About thirty to forty people were at the meetup. An average for our meetups. There were even several people online. (We usually don’t have an online option.)</p>

<p>There were a couple of talks and several lightning talks.</p>

<ul>
  <li>Sanjin Grahovar Sadiković - Maestro: A Modern Take on Mobile Test Automation</li>
  <li>Greg Paskal - AI Insights for the Quality Minded</li>
</ul>

<p>It was a good meetup. It was organized by Tomislav Prša. He’s taking more and more of the organization. I’m glad the next generation is taking over.</p>

<h2 id="maestro-a-modern-take-on-mobile-test-automation">Maestro: A Modern Take on Mobile Test Automation</h2>

<p><a href="https://maestro.dev/">Maestro</a> looks interesting. It’s a mobile test automation tool. It was fun to see in the documentation how to automate <a href="https://docs.maestro.dev/examples/advanced-wikipedia-android">Wikipedia Android application</a> page.</p>

<p>I already have an idea for a project where I would like to try it out.</p>

<p>I’m not impressed by using YAML for writing tests. (There seems to be a JavaScript option too.) (I once strongly discouraged a team at work that was writing an automation framework from using YAML. They eventually picked JavaScript.) YAML is great for demos. Even for some simple use cases. It would probably not be a good choice for any even moderately big test suite. I prefer to write tests in real programming languages. All the way back in 2001, Bret Pettichord wrote <a href="https://www.stickyminds.com/article/hey-vendors-give-us-real-scripting-languages">Hey Vendors, Give Us Real Scripting Languages</a>.</p>

<h2 id="ai-insights-for-the-quality-minded">AI Insights for the Quality Minded</h2>

<p>I’m not sure why the host company wanted to have a remote speaker. We usually only have in person meetups, with in person speakers. That said, <a href="https://www.gregpaskal.com/">Greg Paskal</a> did a good job.</p>

<p>These days, no event can happen without somebody talking about AI. He talked about using various AI tools for various tasks, and for which of those tasks tools did a good job and for which tasks they failed.</p>

<h2 id="lightning-talks">Lightning talks</h2>

<p>One of the best parts of every meetup are lightning talks. (Up to five minutes long.) We had three this time.</p>

<ul>
  <li>Marko Bjelac - Većina koda je bljak. (Most of the code is yuck.)
    <ul>
      <li>Mostly a commercial for the meetup he’s organizing, <a href="https://www.meetup.com/zagreb-software-crafters/">Zagreb Software Crafters</a>. Lightning talks are perfect for such announcements.</li>
    </ul>
  </li>
  <li>Karlo Šmid -  <a href="https://www.manning.com/books/build-a-large-language-model-from-scratch">Build a Large Language Model (From Scratch)</a> by Sebastian Raschka.
    <ul>
      <li>Book report.</li>
    </ul>
  </li>
  <li>Željko Filipin - <a href="https://www.wiley.com/en-se/Taking+Testing+Seriously%3A+The+Rapid+Software+Testing+Approach-p-9781394253203">Taking Testing Seriously</a> by James Bach and Michael Bolton.
    <ul>
      <li>I have proposed we read the book together, like a book club. We’ll see how that goes.</li>
    </ul>
  </li>
</ul>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">QA Meetup with Michael Bolton, Ljubljana, Slovenia</title><link href="https://filipin.eu/qa-meetup" rel="alternate" type="text/html" title="QA Meetup with Michael Bolton, Ljubljana, Slovenia" /><published>2025-10-31T00:00:00+00:00</published><updated>2025-10-31T00:00:00+00:00</updated><id>https://filipin.eu/qa-meetup</id><content type="html" xml:base="https://filipin.eu/qa-meetup"><![CDATA[<p><img src="assets/2025/qa-meetup.jpg" alt="QA Meetup with Michael Bolton" title="QA Meetup with Michael Bolton" /></p>

<p><em>I’m taking a photo of Karlo, who’s taking a photo of Michael. To make it even more fun, you can see Michael, Karlo and me on the big screen.</em></p>

<h2 id="introduction">Introduction</h2>

<p>At the beginning of the month, a member of the Testival community posted in our Slack that <a href="https://developsense.com/">Michael Bolton</a> is giving a <a href="https://www.meetup.com/ljubljana-qa-meetup/events/311435517/">talk</a> in nearby Ljubljana, Slovenia.</p>

<p>This was not the first time I would see Michael speak. He was already in Zagreb (Croatia, where I live) at <a href="testival-41">Testival #41</a>.</p>

<p>Ljubljana is about a two hour drive from Zagreb, so a few of us decided to go. I was driving one car. There was at least one more car from Zagreb with a few more people. A fun part of such events is that there’s several hours of driving to get there and back, so there’s plenty of time to just talk. Frequently, it’s hard to find some time to just talk with people.</p>

<p>We arrived an hour or two earlier. We had time to walk around a bit, grab a drink and some food. There was even time for a short chess game.</p>

<h2 id="meetup">Meetup</h2>

<p>QA meetup in Ljubljana happens only once a year. (Our Testival meetup is monthly.) About fifty (or even sixty) people came. Pretty good outcome for a meetup.</p>

<p>It started with a very short introduction by the organizers. So short, that I don’t think the organizer introduced himself or the company, just the speaker.</p>

<p>They had trouble connecting the speaker’s machine to the big screen. I think the solution included connecting a phone with a cable to the computer, then connecting to the screen via the phone, then somehow to the computer. Or, something even more complicated. Welcome to 2025.</p>

<p>The official talk name was “What Are We Thinking in the Age of AI?”. The unofficial summary could be “I don’t hate AI.”</p>

<p>Michael recommended a lot of books and articles. I was trying to write them all down, or take photos of slides. I’m not sure if I did a good job. I think the best way is to send him an email message asking for slides. I’m sure I missed a lot of recommendations, or got them wrong.</p>

<p>The talk lasted for more than an hour. It was longer than expected. I’m not complaining. It was a good talk.</p>

<p>I have plenty of notes from the talk, but I’m having trouble picking a few to highlight here. A pretty interesting part of the talk was a report Michael (or <a href="https://www.satisfice.com/">James Bach</a>, or both of them, I’m not sure) created after testing several AI tools. (I’m not sure if <a href="https://www.satisfice.com/blog/archives/487962">Serious Data From Testing LLMs</a> is the correct report.)</p>

<p>After the talk there was some time for questions. The vast majority of questions came from people that came with me to Ljubljana. I had a few questions too, but I wanted to give others a chance to ask their questions.</p>

<p>After the talk, there was more time to socialize. Since I came all that way to see Michael speak, I decided to stick around him. People were asking all sorts of questions. That was a pretty good part of the event.</p>

<h2 id="conclusion">Conclusion</h2>

<p>I’m glad I heard about the event and that I was able to attend. If it wasn’t posted to Testival Slack, I would surely miss it.</p>

<p>I’m glad several people from the Testival community are interested in testing so much that it’s not a problem for them to drive for a few hours just to attend an event.</p>

<p>It was great to have some time with fellow Testival organizers, Karlo and Tomislav.</p>

<p>The event itself was well organized. The talk was interesting. The discussion after the talk was great.</p>

<p>I hope there will be more events like that in the near future, close enough to where I live.</p>

<h2 id="read-more">Read More</h2>

<p>If you want to read more about the event, <a href="https://blog.tentamen.eu/an-evening-with-michael-bolton/">Karlo</a> also wrote a blog post.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #74 and #75, Zagreb, Croatia</title><link href="https://filipin.eu/testival-74-75" rel="alternate" type="text/html" title="Testival Meetup #74 and #75, Zagreb, Croatia" /><published>2025-10-31T00:00:00+00:00</published><updated>2025-10-31T00:00:00+00:00</updated><id>https://filipin.eu/testival-74-75</id><content type="html" xml:base="https://filipin.eu/testival-74-75"><![CDATA[<p><img src="assets/2025/testival-74.jpg" alt="Testival Meetup #74" title="Testival Meetup #74" /></p>

<h2 id="meetup">Meetup</h2>

<p>During summer there are no official Testival meetups, but a few of us meet every month for drinks. In July and August 2025 we had Testival meetups <a href="https://www.meetup.com/testival/events/309302077/">#74</a> and <a href="http://v">#75</a>.</p>

<p>It’s always great to meet with the Testival organizers and community. In this photo by <a href="https://www.linkedin.com/in/niko-madar/">Niko Mađar</a> (used with permission) you can see all Testival organizers and one community member.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival 2025, Zabok, Croatia</title><link href="https://filipin.eu/testival-2025" rel="alternate" type="text/html" title="Testival 2025, Zabok, Croatia" /><published>2025-09-30T00:00:00+00:00</published><updated>2025-09-30T00:00:00+00:00</updated><id>https://filipin.eu/testival-2025</id><content type="html" xml:base="https://filipin.eu/testival-2025"><![CDATA[<p><img src="assets/2025/testival-2025.jpg" alt="Testival 2025" title="Testival 2025" /></p>

<h2 id="open-space">Open Space</h2>

<p><a href="https://testival.eu/">Testival</a> is one of the rare <a href="https://www.citconf.com/openspace.php">open space</a> conferences. Its format is highly influenced by <a href="https://www.citconf.com/">CITCON</a>. The only difference from CITCON is that Testival usually has an opening keynote talk. Most conferences follow a predetermined schedule with talks and speakers announced in advance. The more open space conferences I attend, the more I like the format.</p>

<h2 id="friday">Friday</h2>

<p>Most participants were not familiar with the open space conference, so the event started by organizers explaining the format.</p>

<p>The conference continued with introductions. Everybody said a sentence or two about them. There were about fifty participants, so that part didn’t last long.</p>

<p>The main part of the first day was participants suggesting topics for sessions the next day. It started slow. Much slower than I expected. But, very slowly, people were suggesting interesting topics. After about an hour, we had more topics than we could possibly discuss on Saturday. Next, we voted on the topics. The topics that got the most votes were scheduled in four parallel tracks. The more votes a topic got, the bigger room it was scheduled in.</p>

<p>I have suggested two topics, but they didn’t get enough votes to be scheduled.</p>

<p>After the voting, the social part of the day started. Food and drinks were served and I had a nice time talking with people. In my opinion, that’s a very important part of a conference.</p>

<h2 id="saturday">Saturday</h2>

<p>Saturday started with breakfast and social time. It’s always nice to have plenty of time to socialize at conferences.</p>

<p>The keynote was <a href="https://testival.eu/testival-2025-keynote-speaker-announcement/">Back to the Future: Quality Engineering Edition</a> by Irja Straus.</p>

<p>In general, I’m against having a keynote at an open space conference. Every time we talk about organizing the next Testival, I get outvoted. Other Testival organizers like keynotes. Most years we had only one keynote at the start of the second day of the conference. Some years we had two keynotes, at the start and at the end of the second day.</p>

<p>Irja is an experienced conference and meetup speaker. I have seen her talk before and I knew she can give a good keynote. She lived up to my expectations. The keynote was about the current state of software testing mixed up with a lot of <a href="https://en.wikipedia.org/wiki/Back_to_the_Future_\(franchise\)">Back to the Future</a> references, quotes, photos and clips. It was informative and fun. I was impressed. Irja did a great job.</p>

<p>The main part of the conference was after the keynote. Unfortunately, life happened, so I had to leave immediately after the keynote.</p>

<p>I have heard it was a great conference. I hope the next time I’ll be able to participate in the entire event.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">MediaWiki Quickstart by Monte Hurd</title><link href="https://filipin.eu/mediawiki-quickstart" rel="alternate" type="text/html" title="MediaWiki Quickstart by Monte Hurd" /><published>2025-08-30T00:00:00+00:00</published><updated>2025-08-30T00:00:00+00:00</updated><id>https://filipin.eu/mediawiki-quickstart</id><content type="html" xml:base="https://filipin.eu/mediawiki-quickstart"><![CDATA[<p>It’s rare that I write about a piece of software written by a coworker. <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart">MediaWiki Quickstart</a> is so useful that it deserves a post.</p>

<p>Monte started the project in <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart/-/commit/268cf40b867266a93da1f08e3bb7b7d5d8a9a58c">2021</a> and wrote the vast majority of the code. According to <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart/-/graphs/main?ref_type=heads">contributor analytics</a> he created more than 800 commits. (I’m in the second place with just above 50 commits. The third is Peter Hedenskog with more than 10 commits.)</p>

<p>According to <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart/-/graphs/main/charts">repository analytics</a>, it’s mostly shell, followed by PHP, Vue, JavaScript and HCL. (I’ve never heard about HCL, I think. I’ll have dig deeper.)</p>

<p>What does it do? It’s the simplest way to get MediaWiki working on your machine. The only dependency is Docker.</p>

<p>From zero to Mediawiki in three steps:</p>

<ul>
  <li>Install Docker</li>
  <li>Clone <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart">mediawiki-quickstart</a></li>
  <li><code class="language-plaintext highlighter-rouge">./fresh_install</code></li>
</ul>

<p>Want to install an <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart/-/tree/main/extensions">extension</a>, or a <a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart/-/tree/main/skins">skin</a>?</p>

<p><code class="language-plaintext highlighter-rouge">./install extensions/Echo</code></p>

<p><code class="language-plaintext highlighter-rouge">./install skins/Modern</code></p>

<p>Something went wrong? Just do a fresh install.</p>

<p><code class="language-plaintext highlighter-rouge">./fresh_install</code></p>

<p>I’ll finish by mentioning two of my favorite features.</p>

<p>The fist one is a <a href="https://quickstart-ci-components.wmcloud.org/">job</a> that runs continuously. It’s testing if Selenium tests work for all supported extensions and skins.</p>

<p><img src="assets/2025/mediawiki-quickstart/ci.png" alt="MediaWiki Quickstart CI" title="MediaWiki Quickstart CI" /></p>

<p>The second one is live view of the desktop of the Docker container where Selenium tests are running.</p>

<p><code class="language-plaintext highlighter-rouge">./run_selenium_tests</code></p>

<p><img src="assets/2025/mediawiki-quickstart/selenium.png" alt="MediaWiki Quickstart run_selenium_tests" title="MediaWiki Quickstart run_selenium_tests" /></p>]]></content><author><name>Željko Filipin</name></author><category term="image" /><category term="software" /><category term="wikimedia" /><summary type="html"><![CDATA[It’s rare that I write about a piece of software written by a coworker. MediaWiki Quickstart is so useful that it deserves a post.]]></summary></entry></feed>