A letter from Hong Kong.

Well, it is great to see that the internet has made this world a little smaller: Yesterday I received a mail from a user in Hong Kong telling me that he was having trouble installing my Gedit plugin “gedittools” on his machine. Wow, a guy in China is using my software! It’s great to see that there are people on the other side of the world searching for the same features as I do.

Just because I’m happy about this contact and since this guy really seems to really appreciate my plug-in, here is the mail thread that we shared today:

Tuesday, July 3, 8:30 PM CET

Dear Matt,

I like your gedittools plugin very much. But I am not able to install it in my new workstation (RHEL6.2, 64bit) with gedit 2.28.4. I followed the simple installation approach, i.e. copy all files within gedittools folder into the gedit plugin path. I tried copying plugin files to each of below below paths, both none of them can let gedittools plugin be shown in gedit->Edit->Preferences->Plugins.

~/.gnome2/gedit/gedit-2/plugins/
/usr/lib64/gedit-2/plugins/
/usr/share/gedit-2/plugins/

Do you think if there is any compatibility issue or I have done something wrong? Sorry to bother you on such stupid question. I have spent few days on googling this and really feel depressed if my gedit has no such features.

Best Regards and Thanks,
Ernest

Wednesday, July 4, 8:56 AM CET

Hi Ernest!

Great to hear that my plugin made it all the way to Hong Kong.

Maybe it is simple: The latest version on Github is designed for Gedit
3. Therefore, if you download the latest version it will probably not
work on gedit 2.28.
The master branch is still designed for 2.28 – find it attached. With
these files it should work as described here:
http://www.any-where.de/blog/gedittools-a-plug-in-for-gedit/

Let me know if this works out!

Regards from Germany

Matt

Wednesday, July 4, 4:55 PM CET

Hi Matt,

It works!!!!!! This plugin implements the most useful features for me. Really thanks so much for your prompt reply and share this to the community. I already shared this plugin to my colleagues as one of the must-install gedit plugin. Thanks again!

Best Regards from Hong Kong,
Ernest

Wednesday, July 4, 11:04 PM CET

Hi Ernest,

glad to hear that!
I’ll post your lines in my blog 🙂

Take care

Matt

Great, that somehow made my day 🙂

Stratford-upon-Avon.

Last week we headed to Stratford-upon-Avon. This lovely little town is birthplace of the most famous English playwright Shakespeare. And that’s why we went there: Every year in April – in the time around his birthday – there’s a festival giving fantastic productions of Shakespeare’s plays. In both theatres you will have stunning actors, great stage settings and much fun. Along the festival there is a lot going on in town: Bands are playing, actors are speaking, a parade is taking place heading from Shakespeare’s birthplace to the church where he is buried.

swan_theatre_panorama.jpg

If you have enough of all that cultural stuff you might visit the Cotswolds which is the area Southern Stratford. That’s what we did: You find lovely villages such as Broadway, Stanton or Stanley which are all built from the same kind of stone. Therefore all buildings look like honey-coloured fairy-tale-houses. Really nice to stroll through these old quiet villages.

broadway_tower_panorama.jpg

Wanna see some pictures? Feel free to visit my Picasa account.

Testing using the Robot Framework.

I recently came across a testing framework called Robot. It allows easy creation of test tables using a simple keyword-driven syntax. The test-cases are stored in simple CSV/TSV files which allow easy creation by even non-technical staff. A really nice feature is a test library for Selenium which may be installed along Robot. This makes testing web GUIs (HTML and according to the docs Flash/Flex) a treat. You may use another library called Ride to maintain, edit and run tests from a nice and simple GUI or you might consider using command line tools to integrate Robot into CI tools.

Robot Framwork and Selenium- test automation

Installing Robot, Ride and Selenium

This is a description and basic tutorial to install Robot on a Ubuntu machine. To install a web-test setup for Robot do the following:

1. Refer to the following sites and download the latest versions:

Robot Framework
http://code.google.com/p/robotframework/

Ride GUI
http://code.google.com/p/robotframework-ride/

Selenium Plugin
http://code.google.com/p/robotframework-seleniumlibrary/

2. Extract and Copy: Once downloaded, extract and copy all folders to a folder called e.g. /opt/dev/robot

3. Install Robot and all libraries: In each folder run

sudo python setup.py install

4. Start GUI – run the following script to start creating tests:

ride.py

Components in Robot

Tests in Robot are organised in

  • Folders containing
  • Test Suites containing
  • Test Cases, User Keywords, Scalars, List Variables

Keywords are commands used to trigger events. Using Selenium this might be accessing a website, clicking a specific button etc.. User keywords are powerful way to create your own re-usable test commands based on a set of defined keywords. You are allowed to parameterise your user keywords. Great stuff!

Scalars may be understood as variables such as URLs or default parameters passed to web forms e.g.

Setting up a test environment

We now want to create a simple test suite which visits Google.com, searches for Robot Framework and checks if results exist. Before we set up all basic test components we need to define a constant value for the Google URL. To do so, right click on Resources and select New Scalar. Enter ${GOOGLEURL} for name and http://www.google.com as Value.

Creating a Test Suite

Setting up a basic test suite which loads up Google:

1. Click on File -> open Folder, create a new one and give it the name “Google”

2. Right Click on the folder and select “Add Suite”. Give it the Name “Google Test”

3. Right Click on the Suite and create three test cases: Initial, Load Google, Finally

Now, your setup should look something like this:

Test Setup in Ride

Loading Resources and Libraries
First we will add the Selenium Library: Click on the Google Test Suite and choose Add Library on the Edit Tab. Here you’ll need to enter the path to the Selenium library. In my case this is

/opt/dev/robot/robotframework-seleniumlibrary-2.7/src/SeleniumLibrary

Then we will add our recently created GOOGLEURL Scalar to the suite. Click Add Resource and enter the path to the constant file. If you do not want to remember and type the whole path, you might want to head back to the constants file, copy the path and paste it in here. Now, we’re ready to create our simple test!

Creating a simple test

Now, we’re going to create our basic testing. Therefore I’m going to use a number of keywords implemented in the Selenium library. A documentation about these keywords may be found here: http://robotframework-seleniumlibrary.googlecode.com/hg/doc/SeleniumLibrary.html?r=2.7 Of course you may create your own keywords.

1. We need to start the Selinum Server: The keyword to do this is – surprise – Start Selenium Server. Add this to your initial test case.

Start Selenium Server

2. Then we’re going to visit Google in Firefox:

Open Browser    ${GOOGLEURL}

3. Let’s wait until the search field is present. The id of the input field is ‘lst-ib’:

Page Should Contain Element    lst-ib

According to the Selenium Library Documentation the identifier may be the id of an element, its XPath locator etc.
4. Now fill the field with “Robot Framework”:

Input Text    lst-ib    Robot Framework

5. Wait for the page to contain “code.google.com/p/robotframework/”

Wait Until Page Contains code.google.com/p/robotframework/

We’re now ready to run the test. To do so, we hit the small brown “run” icon in the tool bar and we’ll see: it works just fine 🙂

Test successfully completed

Enhancements

Robot creates a log and report for each test-run. If a test fails, a screenshot is being created and integrated into the html report. You are, of course, able to trigger the creation of screenshots or source code logging. Also, using the Wait For Condition keywords you are able to run an almost unlimited amount of JavaScript based tests on your website. Have a look at the Selenium docs – there is a huge amount of keywords to be used.

An easy to use testing tool

Robot is a nice and easy to use tool – we’re not using it to integrate into CI. We’re just running stand-alone tests. But it’s really handy when it comes to handle a huge number of test cases: For example we were testing the behaviour of search functionality of one of our websites. With robot I was able to fire hundreds of request against the search and get screenshots in return for further manual investigation. Also we’re using it to autmatically test dependencies of our content trees in huge navigational structures. For this kind of test Robot is perfectly suited.

Dublin’s Terminal 2 disaster.

Infrastructural development not necessarily improves customer service. This is what I had to learn this morning when I took a flight from Dublin to Frankfurt. I can’t say how often I took this early Aer Lingus flight. Well, it is at seven o’clock in the morning and I often swore to never take it again. However, I did it again. But I was somehow looking forward to it as it was the first time for me to check in at the newly opened Terminal 2 at Dublin Airport. When they started to build the new terminal about three years ago, I was living in Dublin and thought: “Yes, this will be excellent. The old terminal is so narrow and packed with people. The new terminal will be a massive improvement.”

Aer Lingus moved from Terminal 1 to Terminal 2 for at least all European flights earlier this year. Until then it was always enough to be at the airport 60 to 90 minutes prior departure. They had this nice and crowdy check-in area 14 for all flights to the UK and Germany. Checking in took no longer than 10 minutes, followed by a medium sized queue at the security checks. However, there was always enough time to go shopping or have a coffee. When I read that my flight was about to depart from Terminal 2 from now on, I was really looking forward to check out this nice futuristic building. It could only get better. More time, more relaxation – a much better customer service and experience.

So, we ordered a taxi which should bring us to the airport to check-in around 90 minutes prior departure. Thankfully the taxi driver was much earlier. That way we had around 120 minutes for completing check-in and boarding. And we desperately needed that extra time!

The taxi driver dropped us off at Terminal 2 and we got into the building. It was packed. People. Everywhere. A huge number of people trying to fight their way through to one of the check-in machines and then onwards to an app. 400m queue for baggage drop. Unbelievable. It took us about 15 minutes to get through to one of the check-in machines. This was not due to long queues at these machines. In fact, there are enough machines but the position of them is so dumb that you have to fight yourself through the baggage drop queue to get there. Hard work. Once we completed that task, we already stood in the queue for baggage drop. If we’d arrived 15 minutes later, we would have found ourselfes at the end of an even longer queue. It literally went through the whole terminal. Scheduled departure time for our flight was 7 o’clock. It was 5:20 when we started queuing for baggage drop. It took us one hour to get to one of the desks. During that time, announcements had been made to tell people that their flights are now on final call and that people should leave the queue and proceed to one of the two extra counters for closing flights. Just the fact that there are these two counters pictures the situation in that terminal more than enough.

One minute before we reached the counter, a final call announcement was made for our flight. We decided to proceed in our queue. Once we got to the counter I asked the Aer Lingus staff member if this was a normal situation and if they deal with this amount of people everyday. And she said yes. Everyday. She told us that she was working from 4 o’clock in the morning and that the situation is not any better at any time in the morning. I have to say that this was a Sunday. Not a working day. She told us that the new terminal is far too small for all these Aer Lingus flights and that – hear hear! – Michael o’Leary was so right when he said that the new Terminal and Aer Lingus’ decision to move there “was rubbish”. Well, I guess that describes the happiness of Aer Lingus staff members perfectly. She was very nice though but was obviously more than irritated.

We finished our check-in and baggage-drop procedure and moved on to the security check. It was 6:20. 15 minutes till boarding should begin. The queue at the security check was long. I was used to that. It was not better in terminal 1. But it seemed like there were more x-rays in terminal 1 and more people had been working there. However, it took not too long and after 15 minutes we were checked-in, baggage-dropped and security checked and ready for a coffee and some shopping. Finally the fun part of being at the airport should start! But wait. Was it 6:35h already? Boarding time. We started to walk to our gate. The direction which the signs guided us to looked very suspicous. And in fact, yes, I knew it! Boarding was at a gate in terminal 1! Surprise, surprise. So, we walked all the way up from terminal 2 to terminal 1. We passed all the cafes, shops, the old empty security checks in terminal which are now far less frequented than the ones in terminal 2 and got on the plane at 6:45. 10 minutes later the machine departed. It was one time, surprisingly. But I don’t think anybody on the flight spent a Euro at the airport because we all were in a rush.

Stupid, huh? They built a new terminal and made the situation even worse than it was before. To me it looks like Aer Lingus wanted to play the new toy called Terminal 2, come whatever. And now they have that terminal along with more angry and stressed customers, lower earnings in shops and unhappy staff. Well done. At least, the new terminal looks much better than the old one. If we experience a dropping service quality, we’re much better looking at least.

Closing tickets in Trac via QR codes.

We’re now using Trac along TracPrinter for a couple of weeks now and have a pleasant new feature which will evolve during the upcoming weeks:

You are now able to place QR codes on your ticket prints to allow closing them using your smart phone. This is currently really just a simple feature: A small php script which needs to have access to the Trac database, simply takes a project name for database connection and a ticket and sets its status to closed / resolved. In the future I’ll add a nice mobile interface to allow adding comments / changing status etc. The configuration is quite simple: You just need to add the URL of the webserver running the script to your printer.properties file and configure your projects in the ticket_closer.php script if the project name differs from your database name. That’s it. Maybe somebody will love this feature just as I do!

QR Codes on ticket prints allow quick closing

Printing Scrum / Kanban Ticket Cards.

If you are using Trac and Scrum, you might have come to the point where you want to easily print ticket cards for your Scrum / Kanban board. At least, this is what happened to me. So, I created a little Java-tool to easily print Scrum / Kanban  Ticket Cards.

It is available on Github:

https://github.com/mmuell23/TracPrinter

There is some documentation in the wiki. Basically you may configure the tool in several ways:

  • define, which field of the ticket will be displayed on the card
  • define sizes, paddings, distances, …

It is possible to run the tool either as a stand-alone application or as a Java applet on your web-environment.

Trac Printer

This is what a ticket card will look like: In my exampe, it shows the name of the sprint in the header area, the ticket number and summary in the content area below and some information about the reporter, owner and URL in Trac.

Maybe somebody finds it as useful as I do 🙂

A book about Radical Management.

As we started to do Scrum a couple of months ago on a project which was about to fail (and sadly did fail, but due to other reasons…), I came across the fact that there is huge potential to change the way we do things not just in project work but in our general daily work. At my company, we work in a great environment with really high-potential team members and a good social atmosphere. We are a small Online-Media & IT department under the roof of a medium sized newspaper publishing company. But even though we are less than 20 people, inert knowledge, intransparent descisions, unclear communication to stakeholders and a lack of knowledge about “who does what and what needs to be done” seem to result in a a re-active and dissatisfying way of work rather than a creative way of getting things done.  So, I started to read blog articles and books about self-managed teams and agile development.

One book which in a particular way drawed my attention is Stephen Denning’s “The Leader’s Guide to Radical Management”. I am not a manager – as a software engineer I am part of a development team. Nevertheless, this book opened my eyes to what it really is that slows down development and maybe makes people unhappy about work in general – it is often a lack of transparency and responsibility to decide what is to be done in what time and what circumstances. Based on Dennings experience and talks to various managers across multible sectors in several countries, this is due to the fact that companies in the 21st century are still being managed in a traditional and unflexible 20th century way which major goal is rather delighting a client by providing quality services than making money and managing strictly top-down come whatever. Denning uses many stories and case studies to describe ways to achieve the goal of self-managed teams, establishing successful agile development and how to have an atmosphere of high performing work. This shall lead to better quality work and services, delighted clients and last but not least a happy work environment.

Even though I as a developer am not in the position to change things in a wide way across my company, this book gave me a lot of interesting thoughts and valuable information to change things in my surroundings – I’m really looking forward to start changing things in my office by “spreading the word” and trying to get people on board to move forward to a better organised, self-managed way to work. We already started by talking about it, establishing tools to centralise documentation and knowledge and thinking about better ways to handle incoming work in a transparent and productive way. There’s a lot you can do – Scrum is one method, Kanban another but this is all based on an uncompromising transparency, the will to enhance productivity or courage to admit failure and asking for help, which surely are some principles which really need to be learned from scratch – for both: “workers” and managers.

I really enjoyed reading the book and recommend it to everyone who wants to change the way things are done. For both – managers and workers – this book offers great opportunities to start changing things for better. Go and read 🙂

Gedittools – a new version

First of all: Thanks to all folks using my Gedittools plug-in for Gedit! All the mails and comments and download stats show that I was not the only guy looking for missing functionality in Gedit. During the past week or so I found some time to improve the XML-highlighting mechanism for Gedittool:

In fact, I re-designed and implemented the algorithm to find and highlight XML-tags from scratch. It is now much faster in searching and highlighting.

All other features like

– counting search results
– highlighting marked words throughout the document
– integrating a meld-interface to compare / diff opened files

remain as they are. Feel free to download the plug-in at Github.

Gedittools - a plug-in for gedit