Real-world data prove that Agile, BDD & co. work - lecture by G. Adzic

I've attended a very inspirational lecture by Gojko Adzic, organized by the Oslo XP Meetup. Many people including some respectable persons claim that Lean, Agile, and high-level testing based on specifications (whether you call it Agile acceptance testing, Acceptance-test driven development, Example-driven development, Story-testing, Behavior-driven development, or otherwise - let's call them all Specification by example) do not work.

To prove the contrary, Gojko has collected over 50 case studies of projects that were very successful thanks to using these methods. In his soon-to-be-published book, Specification by Example (download ch1, a review), he investigates what these projects and teams had in common, which was missing in the failed ones. So it's great for two reasons: It documents how great success you can achieve with Specification by Example and it shows you how to implement it successfully.


Continue reading →

How to customize CKEditor with your own plugins, skins, configurations

This post summarizes what I've learned about customizing the open-source WYSIWYG rich-text editor CKEditor 3.5.2 with one's own plugins, skins, and configurations. There is already a lot of good resources so wherever possible I will link to them and just summarize and/or supplement them. However I've found no overall guide for customizing CKEditor and thus intend to fill this vacancy.
Continue reading →

CKEditor: Hide some toolbar buttons on a per page basis

In my project we had CKEditor with a common toolbar used on many pages and we needed to be able to hide some of the buttons on some pages (e.g. email editor didn't support some functionality/content). It took me a long time to figure a way to do it for CKEditor has no methods for simply removing/hiding buttons from a toolbar. My solution uses the fact that the configuration file can see variables defined in the including page and that it can contain functions - namely there is a function which takes the default toolbar definition and removes from it all the buttons mentioned in a variable, which is expected to be defined in the page.


Continue reading →

Code quality matters to the customers. A lot.

Some people argue that the main taks of a developer is to deliever working, value-bringing software to the customer and idealistic concepts such as code quality should not hinder that primary task. They acknowledge that it is good to strive for good code quality but say that sometimes code quality must give way to the quick deliverance of outcomes to the customer. After having worked on the code base so rotten that it drove less resistant programmers mad I have to strongly disagree. Code quality is not an abstract concept that has a value only in the developers' world, it is a very real thing, which translates directly to money, namely if you are missing it, it translates into great financial losses over the time.


Continue reading →

CKEditor: Collapsing only 2nd+ toolbar rows - howto

Normally CKEditor (v3.5.2) hides/shows all the toolbar buttons when you press the collapse/expand button but I needed to always show the first row with "basic tools" and only collapse the second and following rows with advanced functionality tool buttons. CKEditor doesn't have proper support for that but there is a simple workaround.

Update: Example solution (CKEditor 3.6.1) published, see the changes done or download the full source and open _samples/replacebyclass.html.


Continue reading →

Most interesting links of March

Articles, links etc.

N/A
Continue reading →

CKEditor: Scroll dialogs with the page, i.e. not fixed to the middle

Dialogs in the popular rich-text wysiwyg JavaScript editor CKEditor 3.5.2 are fixed-positioned and thus when you scroll the editor's page they always stay in the middle as you can see in its demo. That is a problem if the dialog is longer then the height of the page because you will be never able to scroll to its end (where the Ok/Cancle buttons are located).

It could be perhaps solved by adding a scrollbar to the dialog but I solved it by overriding the dialog's position: fixed with position: absolute. Here is how to do it.
Continue reading →

Introduction to ObjectTeams/Java, a Role-Based Approach to Modularity With AOP

I've recently stumbled upon an interesting Eclipse project called ObjectTeams/Java (OT/J), which promises improved reusability and maintenance and support for evolvable architectures by creating well-encapsulated bundles of behavior - modules - that can be applied to existing classes (via AOP), when they are in the appropriate context of interaction (and not simply always, as is the case with AOP). An example application is the addition of NonNull constraint to JDT via an OT/Equinox plugin, without the necessity to modify JDT's base classes. I've decided to write down my discoveries as the project is missing a clear and brief introduction (though it has otherwise very good documentation). This blog borrows heavily from [1].
Continue reading →

Why not to be afraid of 2012

You don't need to be afraid of the foretold end of the world in 2012. To end the world is a big project and I think we can easily compare it to large scale IT projects. Consequently:
  1. Such a large-scale change certainly wont't be delivered on time. Most likely it will take several times longer, i.e. we can expect it around 2020 earliest.
  2. Anyway it will be necessary to downsize it considerably, so don't expect a complete destruction of everything to take place.
  3. Most likely the project will be canceled at the end.

Continue reading →

Most interesting links of February

Articles, links etc.

Git
Continue reading →

Hidden Dependencies Are Evil - Arguing With The Clean Code (Slightly)

Hidden dependencies are evil because two pieces of code influencing invisibly each other make it very hard to understand what the code is doing. There is an example of an unresolved hidden dependency in the presumabely perfected code in Clean Code's chatper 14: Successive Refinement. When I wrote the first draft of this post I thought I´d be arguing with the author on this point but after reading the next chapter (15) I found him propagating the very same idea. Of course no code is ever perfect but anyway I believe this is something that should have been improved. The final code actually looks really well, it's short, clean, and expressive, but there is this one thing that really troubles me for I find it difficult to understand (and thus quite "unclean"), and that is the method parseArgumentStrings. Perhaps I'm not smart enough but clean code should be dummy-proof anyway :-). The problem is caused by a hidden dependency between methods of the main class Args and between this class and another one, which is modifying Args' internal state variable.
Continue reading →

Clean Code: Four Simple Design Rules - Obligatory Read

I consider the Clean Code book to be obligatory for every programmer. And if you currently haven't the time to read it all at once then you should read - and take deep into your heart - at least the 12th chapter Emergence by Jeff Langr, which introduces Kent Beck's Four Simple Design Rules and explains thoroughly what they mean and why they're so important. The rules, in the order of importance, are:
  1. Runs all the tests
  2. Contains no duplications
  3. Expresses the intent of the programmers
  4. Minimizes the number of classes and methods (this isn't as controversial as it may sound, see below)
Stated like this in simple sentences it's difficult to see the depth hidden behind them and thus their essential importance for clean, high-quality code with high-quality design and I'll therefore try to explain what they really mean in the full extent based on Clean Codes. I'll cite some parts of the book - for I can't find better words than the author - hoping for the author(s) and publisher graciously permitting it.
Continue reading →

Manually restoring raw partclone partition image to a VMWare

This post sums up how to manually restore a partition backup create by Clonezilla (using partclone) into a VMware virtual machine, which can be then either executed or its (virtual) disk mounted. The difficult points are "manual" and "partition backup" (would be much easier with a full disk backup). Normally I restore a backup by running Clonezilla from a virtual machine with sufficiently large virtual disk, but at times it isn't possible, e.g. because the Clonezilla kernel has a buggy USB driver which tends to disconnect at times (at least with my version & flash disk).
Continue reading →

Most interesting links of January

I'm moving to Norway and have thus little time for reading but still I've stumbled upon something really interesting.
Continue reading →

Goodby IBA, welcome, Norway and Iterate!

I've spent great and inspiring years in IBA CZ
Continue reading →

Copyright © 2024 Jakub Holý
Powered by Cryogen
Theme by KingMob