Jane Dallaway

Jane Dallaway

Jane Dallaway  //  Development manager, photographer, dog owner and snowboarder based in Brighton, UK
Email: jane @ dallaway.com
Also at:        

Coding challenge 3

Today, Mark and I announced the winner of the 3rd Madgex Coding Challenge. This coding challenge was announced on the 3rd June and entries needed to be in on the 30th June. The email announcement said:
So, the challenge this time is all around compression.

Take a string, compress it into a byte[], record the size, decompress it.

You can use any algorithm you chose, but it must be coded by you and not included from an external library

I have defined an Interface ICompress as follows:

public interface ICompress
{
   /// <summary>
   /// Take a string and convert it into a byte[]
   /// </summary>
   /// <param name="source">The string to be converted</param>
   /// <returns>The converted byte[]</returns>
   byte[] Compress(string source);

   /// <summary>
   /// Take the bytearray produced by the call to Compress, and decompress it
   /// </summary>
   /// <param name="compressedData">The data to be decompressed</param>
   /// <returns>The string</returns>
   string DeCompress(byte[] compressedData);
}

I have provided a solution with the interface (Interface), a console app (CodingChallenge3) and an implementation of the interface (Compressor) (which just converts from string to byte[] and back again, no compression) on the development file share.

The source string is provided through the app.config file of the CodingChallenge3 project (the console app).

What do you need to submit?
- A Compressor project that I can plug in to the provided solution
- A couple of paragraphs explaining how your algorithm works

We had 4 solutions submitted, and they were all of a really high standard. I tested them with 6 different input scenarios:
- The original provided sample - the text for "Mary had a little lamb"
- An empty string - which caused a few exceptions to be raised
- A single space
- A string of numbers
- The contents of war and peace
- The contents of the 3 musketeers in French

Each sample was run through each person's solution, and the most compressed result won that round. In the end, one person won 2 rounds (having implemented their own algorithm) and one won 4 rounds (having implemented 3 different methods and selected the one with the highest compression).

This was based around Puzzle 16: Zip me up, Buttercup from the great resource Collection Of Puzzles For Programmers

Previous coding challenges have been based loosely on LTD Puzzle 4: Finding Prime Numbers (which was Madgex coding challenge 1) and LTD Puzzle 3: ASCII Art Shapes (Madgex coding challenge 2).

I'm delighted with how these are going, and the interest and general communication that they generate - lots of discussion, hints of secrecy, and comparisons between each other - and then lots of discussion once the results have been announced, and the code is available for scrutiny. So, I'm now busy thinking up ideas for Madgex Coding Challenge 4 - if anyone has any suggestions or resources for me to use, please pop them in the comments

Loading mentions Retweet
Filed under  //  coding challenge   madgex  

Comments (0)

SQL Coding Dojo 2

Yesterday I led the the second SQL coding dojo held as part of the Madgex ILP programme. As with the first one, I chose a puzzle from my copy of Joe Celko's SQL Puzzles and Answers. This time I chose one called One in Ten which I described as follows:

During a data migration exercise a table has been created which takes the outputs of an array and flattens them into a table named Dojo2 which is defined as:

Id INTEGER – Primary Key
F1 INTEGER
F2 INTEGER
...
F10 INTEGER

Produce a list of rows which have exactly one non zero value in the columns F1 to F10 using any method you like – select, views, creating new tables etc


As with last time, I've put a copy of the SQL file I produced to create the tables and populate the data here, and this time I've also provided two of the solutions from the book here.

Learning from last time's feedback I had a proper keyboard plugged in to my laptop this time. Other than that I ran it very similarly. There were only 3 attendees this time, so at each time we had one driver and 2 co-pilots as this seemed more practical. All of them had keyboard time, and all had co-pilot time. Again like last time I provided a word document detailing the table layout, the SQL used to create and populate the data, and the expected results - this can be downloaded here.

During the practice 2 different approaches were tried, one using string manipulation the other using ABS and max value checking. The ABS and max value checking method worked for the first 3 columns and so was assumed that it would work across all 10 columns but the participants got a bit fed up of typing as the method chosen - using lots of CASE statements would have been many lines long on completion :-)

The retrospective raised the following points:

  • Generally the session was enjoyed
  • Each participant learn something and found some areas to follow up on - mainly SIGN, ABS and PIVOT
  • The screen resolution of the laptop when plugged into the big screen was an issue as it was hard to get enough data on the screen at one time - given the number of participants a large standard monitor would have been better
  • Participants felt that it was good to watch how people tried to solve the problem and learnt from others approaches

As with last time, it was enjoyable for me to watch, and I learnt both from setting up the problem in the first place trying out the provided solutions, but also from watching my colleagues try different approaches.

Loading mentions Retweet
Filed under  //  CodingDojo   ilp   madgex   SQL  

Comments (0)

SQL Coding Dojo

Last week I led a SQL based Coding Dojo as part of the Madgex ILP programme. A lot of ILP sessions are in a presentation format, and I wanted to do something with a bit more, or in fact a lot more, attendee participation. I've been interested in the idea of deliberate practice for a while, and Richard has been to quite a few coding dojos and so I figured it was time to give it a try. Shortly after I'd decided to do one, I attended a Skills Matter evening and stumbled across Ivan Sanchez, who blogged about Starting a Coding dojo which helped me get my thoughts in hand.

I chose to use SQL as the area to practice, mainly because it is an area I am really familiar with and so could help out if necessary. Also I have a copy of Joe Celko's SQL Puzzles and Answers which provided me with a great collection of puzzles to practice with.

I chose a puzzle called Double Duty which is described as follows:

A person may have more than one role. The roles are defined as follows:
O – Officer
D – Director

The PersonRole table is defined as:
PersonName VARCHAR(50)
RoleCode CHAR(1)

Produce a list of People and their roles where they are either Officer or Director, and where anyone with both the O and D role is represented once as B – Both.


I've put a copy of the SQL file I produced to create the tables, and populate the data here, so feel free to take a look.

I opened the session by explaining what a dojo was (a training hall for practice in the martial arts), what a coding dojo was (a practice area for coding skills) and introduced the problem domain (I provided print outs of the table structure, data and expected results). I then introduced the roles we were going to use - driver and co-pilot - and the rules we were going to adhere to. In our main meeting room we have a large plasma screen and so I connected this to my laptop so that the audience could see exactly the same as the driver and co-pilot. I provided a couple of SQL books and a SQL Server cheatsheet for reference.

After the initial self-consciousness had gone, the pairs settled into the idea pretty well, and it was interesting to watch the different pairs interact and form new (rapid) working relationships. There were 7 participants, and each spent 5 minutes as the driver and 5 minutes as the co-pilot. By the end of the session there were 4 solutions produced which meant that the group as a whole felt that they'd achieved something. We ran a quick retrospective at the end of the session and the following were the major points:

  • The audience found a certain amount of frustration by not being able to help, and not being able to shout out suggestions.
  • At least one person acting as the co-pilot found it hard to articulate what needed to be done.
  • At least one person admitted to finding it hard to think without having their fingers on the keyboard.
  • At least one person learnt something about SQL.
  • Quite a few people found a laptop keyboard hard to use, so a proper keyboard would have helped.


As a result of the success of this one, I've booked in another one for a couple of months time - again SQL based but I'm also thinking of making use of TDD Problems for another practicable skill.

Loading mentions Retweet
Filed under  //  CodingDojo   ilp   madgex   SQL  

Comments (0)

OAuth.net

As I write this, Glenn should be doing the welcome talk at dConstruct, and he should be revealing Madgex's first foray into open sourcing our software - OAuth.net.

From the Madgex Lab site:

"OAuth.net is a .net library which provides full OAuth consumer and provider support. The library facilitates secure API authentication in a simple and standard method for desktop and web applications.

OAuth allows user to grant and deny one application access to the data stored in another application. It forms one of the foundation blocks of the data portability concept, which has the aim of allowing users to easily move their personal data around the web."


From what I've seen and heard, OAuth is a great solution to the password anti-pattern problem. An immediately obvious place for this to be applied within Madgex will be to enhance the backnetwork to offer the ability to find your contacts using the Google contacts API - don't hold your breath mind you as we're all a bit busy delivering job boards in time for the January rush.

As a company, I think we're going to learn a lot through opening this code out to the community and I'm really, really excited about it. Bruce will be doing a talk about OAuth at BarCamp Brighton over the weekend - provisionally titled "OAuth versus the Password Anti-Pattern" - so if you're going to be there and are interested in learning more then pop along and hear what he has to say.

Loading mentions Retweet
Filed under  //  madgex   oauth  

Comments (0)

ILP Time - How did I spend mine?

So, the first period of ILP time is over, and I've managed to use 50-60 hours of my allocation attending workshops, watching presentations, learning stuff and doing ideas project work.
Learning:

  • Started reading through the Opera web standards curriculum to ensure my knowledge was up to date
  • Attended various presentations including: Stress Management, Zen and the craft of software development, Introduction to unit testing with nUnit, CSS3: Third time's the charm, Comet (a presentation by Simon Willson who came in kindly to talk to us), Basic NLP and hypnosis, SQL Server Advanced, Vision and Goal setting, Theories of Management and Javascript inheritance


Ideas:

  • Looked into DBVerse, a database deployment tool, to see if this would help us. Review here
  • Looked into Tarantino, another database deployment tool. Review here
  • Worked with Bruce to start writing a database deployment tool to meet our specific requirements. This is still ongoing and will continue into the next few months
  • Attended Hackday 3 and worked on some keyword searching work with Chris
  • Looked into Stylecop, a code style analyser. Review here


Now I have to start planning out the next years allocation - I'm cashing in a couple of days to attend the ReMix UK conference, I'm going to continue attending Simon's management and leadership courses, as well as his NLP related ones. I'm also hosting 2 sessions in the next month - one which is SQL Snap, based on CSS Specificity snap and one which is an experimental SQL Coding dojo. I'm sure I'll report back on both of these afterwards.

Loading mentions Retweet
Filed under  //  ilp   Learning   madgex  

Comments (0)

Ideas and Learning project

One of the new initiatives at Madgex is the introduction of the Ideas and Learning project. This is a cross between the Google 20% initiative and the Pixar University initiative. Out Ideas and Learning project gives us 35 days per year (roughly 15% of our working time) to developing our own ideas and learning. That covers building prototypes of new ideas, learning about a new technology, trying out something that we've been meaning to attend to, or learning new soft skills.

Yesterday I attended two internal workshops. The first was an hour long session on "Stress Management" which covered both the physical and emotional responses to stress and how the body/brain hasn't evolved sufficiently to allow for different types of stresses to be handled in different ways - we're still hard wired to run away from woolly mammoths, so when we feel stressed our senses become more acute, our heart starts pumping, our blood goes to our legs so we can start running, and our brain gets less blood. We learnt a technique for meditation which I'll give a try to help focus the brain on the present, rather than it over analysing stuff.

The second was a session on "Zen and the craft of software development" which was a whistle stop tour through some history of development covering the different paradigms, comments vs documentation, problem solving and including lots of hints and tips for development.

Both of these sessions were useful, in very different ways, and I can see that I'm going to gain a lot from this new initiative.

Loading mentions Retweet
Filed under  //  ilp   madgex  

Comments (0)

Belbin Team Roles

We had a team away day yesterday, and in preparation I completed a Belbin self-perception inventory. We got the results yesterday and here's what my preferred roles are:

  • Implementer - Implementers are aware of external obligations and are disciplined, conscientious and have a good self-image. They tend to be tough-minded and practical, trusting and tolerant, respecting established traditions. They are characterised by low anxiety and tend to work for the team in a practical, realistic way. Implementers figure prominently in positions of responsibility in larger organisations. They tend to do the jobs that others do not want to do and do them well: for example, disciplining employees.
  • Specialist - The specialist provides knowledge and technical skills which are in rare supply within the team. They are often highly introverted and anxious and tend to be self-starting, dedicated and committed.
  • Completer-Finisher - The completer finisher dots the i’s and crosses the t’s. He or she gives attention to detail, aims to complete and to do so thoroughly. They make steady effort and are consistent in their work. They are not so interested in the glamour of spectacular success.

My least preferred roles are:

  • Plant - The plant is a specialist idea maker characterised by high IQ and introversion while also being dominant and original. The plant tends to take radical approaches to team functioning and problems. Plants are more concerned with major issues than with details.
  • Resource Investigator - The resource investigator is the executive who is never in his room, and if he is, he is on the telephone. The resource investigator is someone who explores opportunities and develops contacts. Resource investigators are good negotiators who probe others for information and support and pick up other’s ideas and develop them. They are characterised by sociability and enthusiasm and are good at liaison work and exploring resources outside the group.
  • Co-ordinator - The co-ordinator is a person-oriented leader. This person is trusting, accepting, dominant and is committed to team goals and objectives. The co-ordinator is a positive thinker who approves of goal attainment, struggle and effort in others. The co-ordinator is someone tolerant enough always to listen to others, but strong enough to reject their advice.

The main surprise is Co-ordinator being in the least preferred roles as it is a role that I tend to do quite often - even yesterday in our break out sessions, I was the one "chairing", ensuring everyone got a chance to make their point, kept things focusses etc. Maybe the key here is preferred - I do this role when no-one else does, and I like to think I do it reasonably well. Having read the completer-finisher characteristics I would say that over the years I have definitely become one of these, I am pedantic and picky and like to ensure everything is done to a high quality. My anxiety must be in a constant state of flux as the Specialist is an anxious role whilst the Implementer is a low anxiety role.

The last time I filled in one of these was about 10 years ago, during a course, and it would be really interesting to see how things have changed. I'll have to dig around at home and see if I can find it.

Loading mentions Retweet
Filed under  //  madgex   nvq   team  

Comments (0)

My first Madgex project live

The first project I worked on at Madgex went live last week. It is a customisation on the Origin Job board, and is a series of 8 Dutch job sites working off one database, one Admin site and one Recruiter access site. New job seeker sites are due to be added early next year, so it has been designed to work with 20 - 30 different job sites.

I moved on to a new project before the sites went live so Mike picked up the project and saw it through to launch. Thanks Mike!

The sites are:


As with all projects it had its challenges, but as this was my first localised project, it also had its learning opportunities. Despite the clients only wanting the sites to work in Dutch, I decided to strip all of the static text into resources files and allow the opportunity to display any of the 3 sites (job seeker, recruiter services or admin) in either English or Dutch. This was primarily to allow for easier development and support. There is an entry in the Web.config file to allow the culture to be defined. So far, it has worked pretty well, except that to update the resources file the web sites all need to be stopped to prevent them from locking the file. However, updates are rare so this isn't a big problem in the grand scheme of things.

One of the great delights about Madgex is the way that the design works. We have creative designers who do the pretty bits and we also have a team of HTML developers who do HTML and CSS (and some javascript) meaning that as a developer I integrate the HTML with the objects and get it all functioning. So, instead of spending hours doing cross browser checking or trying to work out how to get a certain effect to happen, I have a designated HTML developer who does this for me and tells me what I've done wrong, leaving me to get on with the functionality. Perfect!

All in all a succesful project which involved great team work, and great people. Looking forward to the next one.

Loading mentions Retweet
Filed under  //  madgex   portfolio   project  

Comments (0)

Busy busy busy at Madgex

It had been a busy few days over at Madgex. We are one of the premium sponsors at dConstruct, running the backnetwork and hosting barcampbrighton over the weekend. To be fair, its been business as normal most of the time, but we did have to pack all our kit away this evening in preparation for an office shuffle.

Our t-shirts turned up this afternoon for dConstruct and then five of us headed off to the Dome to setup our stand for dConstruct and after a bit of fun working out what how to put the thing up, we ended up with a pretty good looking area. I'm meeting Nick tomorrow morning to set up the PCs before registration and then we're good to go. We've also got flyers in all of the dConstruct bags for the various jobs we are recruiting for at the moment (mainly C# developers, creative designer types and an information architect).

I took advantage of being there this evening to register ahead of time, and so am now happily sorting through my schwag, and stickering stuff.

After a quick burger at GBK, where most of the rest of the geek community of Brighton were, we headed off to Heist for a few pre-conference beers at the pre-conference party.

Taken from backnetwork, here is my blogroll prior to the conference kicking off properly - it'll be interesting to see whether it grows over the weekend.

Loading mentions Retweet
Filed under  //  barcampbrighton   dConstruct   dConstruct07   madgex   photos  

Comments (0)

Madgex Hackday II


Hackday in progress
Originally uploaded by Jane Dallaway
Last week saw the 2nd Madgex hackday. There were 6 teams, with 24 hours each, to work on a project of our own choosing. We were the biggest team of 5 people on the day and focussed on implementing a templating language for ASP.NET based around the concept of django's templates. Our hacking went well and by the end of the day we had a working subset of tags.

On Friday we all had to present our projects, and quite a wide range had been done from social policy research, a project documentation creator, a tool for deployments, a tool for managing the status of changes waiting to be deployed, and finally a table football webcam (so that the people on the other floors can check that the table is empty before appearing for a game). Our project won, and so we have custody of the cup until the next hackday.

All in all it was an excellent opportunity to work with different people and to investigate some new ideas. Thanks Madgex!

Loading mentions Retweet
Filed under  //  hackday   madgex  

Comments (0)