Jane Dallaway

Jane Dallaway

Jane Dallaway  //  Service Delivery manager, photographer, dog owner, gardener, reader, learner, software developer and occasional snowboarder

This blog contains all sorts of bits and bobs, from development related stuff, through process and productivity stuff, to photography stuff, and general inspiration things. It's a bit all over the place with no real theme, but then so am I

Email: jane @ dallaway.com
Also at:    

Madgex is 10 years old - my photo is in the argus

Last Thursday we celebrated Madgex's 10th birthday with a string of celebrations - breakfast, cakes and champagne in the boardroom, a quiz, a photography competition, a table football competition and a very lovely dinner at the Seven Dials restaurant.  We used the table football competition as an opportunity to get a photograph to accompany our press release.  So it went from this 

Sarah, Charlie, Jim and Al

to this:

Madgexareten

which was published in the Argus yesterday.

Filed under  //  madgex   photo   photography  

Comments (0)

Madgex Photography Workshop #2 - my submissions

As organiser of Madgex Photography Workshop #2, I drew the (very) short straw of doing my 8 photos on the final day.  So, prior to handing the cameras in to Colourstream, I attempted my 8 shots.  As a reminder, the brief was: 

  1. a number
  2. something taken from ground level
  3. a Brighton landmark
  4. something red
  5. a dog
  6. shoes (this one is in tribute to lomokev and his fine collection of shoes and feet photographs)
  7. street art
  8. the person you're handing the camera over to

My attempts were:

A number - actually lots of numbers

Number

Something taken from ground level - these guys were jumping from surface to surface until I turned up with the camera, then the guy on the right waved at me, so I thought I'd take the photo then

From ground level

A Brighton landmark - due to limited time I chose the nearest place to my work place, the pavilion...

Brighton Landmark

Something red - probably my favourite of my photos

Red

A dog - not enough time to get home and take a photo of my lovely dog but I fortunately found one tethered outside a cafe in Bond Street

Dog

Shoes - I wasn't the only one to take a photo of the display outside this shop

Shoes

Street art

Street Art

the person you're handing the camera over to - in my case it wasn't so much a person, as a shop

Person handing the camera over to

The feedback was generally positive, people had enjoyed the challenge but had found it much more difficult than the last challenge (which allowed the use of any camera, any post processing etc). At least a couple of people appreciated the fact that it totally levelled the playing field (which was kind of the point).

Some of the participants did really well - quite a few of them got all the photos in order, and some of them managed to get a theme running through them all. The most impressive theme was books, with each photo representing a different book title - i.e. Catch 22 (for number), Brighton Rock (using the Brighton word lights from the pier (landmark) and a stick of rock) etc. The winner image(s) from the different themes are now all displayed on the notice board at work for everyone to look at and appreciate.

Madgex Photography Challenge #2 - the winners

Filed under  //  Learning   madgex   photo   photography  

Comments (0)

Madgex Photography Workshop #2

At Madgex I have the opportunity to talk to people about photography, even though it isn't related to my day job.  I occasionally run training sessions or workshops to share my passion with others.  I enjoy doing this as it makes me think in a different way - I often find explaining needs a deeper understanding than just doing.  I'm not the most talented photographer in the company, but I want to learn more, and by teaching I do just that.  In November I ran the first of a new style of workshop - this was challenge based.  It consisted of 2 parts, the first setting the scene, and issuing a challenge (in this case taking photos where the main colour of the image was one of the Madgex colours - you can see Kevin's submissions here) and the second reviewing the submissions.  Amongst the feedback from the attendees of the session was that there was too large a gap between the people who had high end cameras, and those using their iPhones or low end digital cameras, and also that those who had an aptitude for photoshop had an advantage.  When I started thinking about my 2nd workshop, and what the challenge would be I took these into account. 

Today, I issued the new challenge, this was partially inspired by this blog post which I read some point last year.  I'd bought 2 identical disposable cameras (Kodak Fun Flash 27+12 for those who want the exact details) to be shared between the 8 attendees (somewhere between 9 and 10 shots each).  I then issued them with a list of 8 items to take photographs of (inspired by lomokev's hot shots course) and as they like an element of competition, some scoring element.  

So, the photos:

  1. a number
  2. something taken from ground level
  3. a Brighton landmark
  4. something red
  5. a dog
  6. shoes (this one is in tribute to lomokev and his fine collection of shoes and feet photographs)
  7. street art
  8. the person you're handing the camera over to

And the scoring:

Basics:

  • 1 point per picture that matches the brief

Bonus Points:

  • 1 bonus points for doing them all in order
  • 2 bonus points if you can manage a theme that runs through all 8 of your images
  • 1 bonus point if your picture is judged to be the best of that category by me
  • 1 bonus point if you use only 8 exposures rather than the allowed 9

Penalty Points:

  • Lose 1 point per day you're late handing your camera over to the next person
  • Lose 1 point if the last photo of your set isn't the person you're handing over to
  • Lose 1 point per extra exposure over your allotted 9 you use
  • Lose 20 points if you break or lose the camera

The intention is to get everyone thinking more before they press the shutter, to really commit to the image they are attempting to capture.  Having been "playing with" film cameras for the past year I've begun to appreciate how much more focussed I am in what I take with film than when shooting digitally.  I also hope that this takes away the concern about equipment and allows them to focus on composition and colours rather than technicalities.  I'm really excited to see what they come up with and manage to produce, and despite the initial look of mild shock on their faces, I'm hoping that they really engage with it and enjoy this challenge.

Filed under  //  Learning   madgex   photography  

Comments (0)

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

Filed under  //  code   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.

Filed under  //  SQLServer   code   madgex  

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.

Filed under  //  SQLServer   code   madgex  

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.

Filed under  //  madgex  

Comments (0)

Largest reproduction of one of my photos

Today, whilst helping the Madgex team unpack the stand for dConstruct I got to see the largest reproduction of one of my photos to date.

The Original - one of my photos from the last Madgex hackday:

Media_httpfarm4static_dhfpg

The Stand - with imagery created by Oli:

Media_httpfarm4static_dbhnj

And as Innei had come along to help us set up, I managed to get some interaction shots as well:

Media_httpfarm4static_vabyf

and
Media_httpfarm4static_dhhug
Filed under  //  madgex   photo  

Comments (0)

SQL Snap

At last September's BarCamp Brighton I saw the CSS Specificity Snap cards and this gave me an idea. So, armed with a concept of showing the different ways of producing the same output using the SQL Server 2005 flavour of SQL I started generating SQL statements. Alex was kind enough to make them pretty, and last week I ran a Madgex ILP session to play.

There are 26 cards in my pack, each card has a SQL statement, and a letter. The letter is used for the crib sheet to allow me to easily spot the matches.

Media_httpfarm4static_qdzco

I prepared by producing two piles of 13 cards, with a match in both piles. I then put one pile in the middle of the table face down, and dealt out the rest of the cards to the 5 people who were playing. I placed the 3 spare cards on the table face up so that we could all see them and proceeded to turn them over one by one. When a card was turned over everyone looked at the SQL on the overturned card, and checked their cards and the spare cards to see if there was a match. If a match wasn't spotted then I explained what the SQL was doing, and at only one point did I have to say which letter the matching card would have. During this I had quite a few comments about functions people didn't recognise - especially COALESCE and NULLIF. I also explained some of the performance, and functional differences between the SQL statements when they were seen - so for instance I explained the differences between DELETE and TRUNCATE but I still I have these as a match because they can provide the same result and provided an interesting talking point.

The second game we played was a memory game where I placed all of the cards on the table face down and everyone turned over 2 cards at a time. If the SQL on the cards resulted in the same output, then it was a match and they took the cards away. If they didn't then the cards got turned back over and the next person had a go.

All in all this session took about 30 minutes, and resulted in quite a lot of noise and laughter (so much so that someone came and closed the door of the room we were in).

The following table contains the Letter Code, SQL statement, and the matching Letter code. They are ordered so that the matches are grouped together.

Code SQL Match
V SELECT CAST(GETDATE() AS VARCHAR(11)) G
G SELECT CONVERT (VARCHAR(11), GETDATE()) V
Z SELECT name FROM sysobjects WHERE xtype = 'P' Q
Q SELECT name FROM sys.procedures Z
D SELECT sysobjects.name, syscolumns.name FROM sysobjects INNER JOIN syscolumns ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = 'u' A
A SELECT sysobjects.name, syscolumns.name FROM sysobjects, syscolumns WHERE sysobjects.id = syscolumns.id AND sysobjects.xtype = 'u' D
U SELECT getdate() O
O EXEC('SELECT getdate()') U
J DELETE FROM Test T
T TRUNCATE TABLE Test J
Y SELECT ISNULL(NULL,1) W
W SELECT COALESCE(NULL,1) Y
P SELECT [name], xtype FROM sysobjects ORDER BY xtype M
M SELECT [name], xtype FROM sysobjects ORDER BY 2 P
H SELECT NULLIF(1,1) R
R SELECT CASE 1 WHEN 1 THEN NULL ELSE 1 END H
I SELECT [name], xtype FROM sysobjects ORDER BY 1 N
N SELECT [name], xtype FROM sysobjects ORDER BY [name] I
X SELECT CAST(GETDATE() AS VARCHAR(20)) F
F SELECT CONVERT (VARCHAR(20), GETDATE()) X
S SELECT name FROM syscolumns WHERE id = ( SELECT id FROM sysobjects WHERE xtype = 'u' AND name = 'Jobs' ) K
K WITH objects (id) AS
( SELECT id FROM sysobjects WHERE xtype = 'u' AND name = 'Jobs' ) SELECT name FROM syscolumns INNER JOIN objects ON syscolumns.id = objects.id
S
L INSERT INTO Job (JobID, PrimaryJobTypeID) VALUES (1,1) B
B INSERT INTO Job (JobID, PrimaryJobTypeID) SELECT 1,1 L
C DECLARE @sMessage AS VARCHAR(20) SET @sMessage = 'Hello' E
E DECLARE @sMessage AS VARCHAR(20) SELECT @sMessage = 'Hello' C
Filed under  //  SQLServer   madgex  

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.

Filed under  //  Learning   madgex  

Comments (0)