Sunday, November 18, 2012

XP Days Ukraine 2012 - Conference Report

Kiev, 16-17 November, two days conference related to agile engeneering practices. I was there and it was cool. The organisers did really good job especially when selected those amazing speakers.   
Here is the core ideas extracted from this conference:
  • The role of software architecture in agile project ("The frustrated architect", by Simon Brown). How, when and why involve software design and why does it meter. Avoid dogmatism in agile projects.
  • Testing, TDD, continuos integration (CI), continuos deployment and quick builds are keys for success in agile projects:
    • "Testability for developers: Fighting a mess by making it testable", by Alexander Tarnowski
    • "Our way from 90 to 6500 tests", by Ivan Medvedev
    • "Crazy Talk: When 10 second builds start to make you nervous", by Daniel Worthington-Bodart
    • "Psychology of testing", by Miško Hevery (USA)
  • After these talk "Agile Testing by Example", by Mikalai Alimenkou and Andrii Dzynia I am a bit confused. Because speakers showed us how QA engineer should work with developers in agile team. It opened my eyes on monkey QAs I've seen so far. I have to motivate my colleagues to evolve their skills. No monkey job, only intellectual testing, proper tools for better work performance which simplify communication between developers and testers (QAs).
  • Several presenters showed their ways of using awersome tools: 
    • Acceptance testing of Web UI components via WebDeiver, Thucydides and Groovy , be Vladimir Tsukur
    • "Behavior-Driven Development on the JVM: A State of the Union", by John Smart. Here was highlighted the next tools: Selenium, JBehave, Spock, Cucumber and Thucydides. Which one use for each tests (unit, acceptance, UI, etc.)
    • "How Testacular makes AngularJS super-heroic at testing", by Miško Hevery. The creator of AngularJS showed demo how easy is to test AngularJS based app. It was really cool and inspired me to look closer into this framework.
    • "Introducing Thucydides: Better Automated Acceptance Testing on the JVM", by John Smart. The creator of Thucydides presented the concept behind this tool, how cool it is and when to use it. 
    • "Continuous Inspection with Sonar", by Olivier Gaudin. CEO of SonarSource presented the main idea of continuos code inspection. He highlighted that it's just a tool and we should use it as a part of overall development process to make it really valuable. It sounds reasonable, but so many people use Sonar metrics without deep understanding of what problems stand behind these numbers. 
  • "Agile Anti-Patterns. Yes your agile projects can and will fail too", by Sander Hoogendoorn. This speech was really inspiring, very honest and sarcastic. The speaker said about crazy dogmas in Agile. It's a funny to see how many people in our industry trying to copy some development process without simply adjustment to own project(s) and team(s). And Sander loudly told us about all this crap. I like his critics about Scrum "Masters" which are certified after 2-days training and accepted as Scrum experts without a single year experience in real Agile project. I've been waiting on video record of this talk. I can't wait to show it to some agile "experts".  
This conference gives additional motivation to push "right" practices in my surroundings. It's amazing how positively motivated conference can be. Unfortunately, many developers are very passive and don't  want to spend their time and money for education. They simply know "everything" they need.

XPInjection team (team behind this conference) is awesome. You did really great event with high quality. Big respect and keep moving. I'm waiting for the next similar events.

Friday, November 02, 2012

How to configure git diff and merge tools?

Git can use external tools to perform merge and diff:

Use default tool:
git difftool 
git mergetool

Use custom tool:
git difftool -t tool_name
git mergetool -t tool_name

There are tons on diff/merge tools, I'd like highlight git configuration for three of them:
Sample ~/.gitconfig (Windows):
[difftool "kdiff3"]
     path = D:/Tools/KDiff3/kdiff3.exe
     keepBackup = false
     trustExitCode = false
[mergetool "kdiff3"]
     path = D:/Tools/KDiff3/kdiff3.exe
     keepBackup = false
     trustExitCode = false
[difftool "diffmerge"]
     cmd = \"C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe\"  \"$LOCAL\" \"$REMOTE\"
[mergetool "diffmerge"]
     cmd = \"D:/Tools/Git/cmd/\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
     trustExitCode = false

    tool = kdiff3
    tool = kdiff3

Content of
$cat D:/Tools/Git/cmd/
if [ ! -f $basePath ]
"C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe" --merge --result="$resultPath" "$localPath" "$basePath" "$remotePath" --title1="Mine" --title2="Merged: $4" --title3="Theirs"

Sample ~/.gitconfig (OS X):
    tool = opendiff
    tool = opendiff
opendiff is bundled with Xcode Tools.

Sample usage:
$ git difftool -t diffmerge HEAD..HEAD~1