A Review: Eversion by Alastair Reynolds

Eversion

by Alastair Reynolds
ISBN-13 ‏ : ‎ 978-0575090781

There’s little to no sci-fi in the first 30% of this book and you’d be forgiven for thinking Reynolds was just indulging himself in a seafaring romp. There’s only a hint of sci-fi up to about half way through, when it develops into groundhog day. I didn’t enjoy this. I put the book down for a week or two until I forced myself to pick it up again and finish it. I couldn’t put the second half down!

There isn’t the usual Alastair Reynolds scope, but that doesn’t matter as there is plenty of his trademark exploration and discovery and a fantastic plot twist I didn’t see coming. By far my favourite character is Ada for her sharp sense of humour and general attitude to life. The other characters are convincing and, for once, there’s a good ending, even if it is a little corny.

ARD & Winterfyleth at the Bread Shed

ARD

Following a nightmare which is parking in Manchester and getting a meal on a Saturday night without booking, we walked into the Bread Shed just as ARD were getting going, minus my vinyl and CDs for signing!. The masterpiece which is Take Up My Bones was instantly recognisable, as were composer and multi instrumentalist Mark Deeks and fellow Winterfyleth band mate Chris Naughton, both on guitar. The latter was centre stage, where surely Deeks should have been?

From the off the band, who were put together to perform an album which was never intended to be performed live, were a little loose with the drums too prominent and the guitars not clear enough. There appeared to be a lot retuning necessary, especially from Chris and the lead guitarist who appeared hidden away a lot of the time. This didn’t really detract from enjoyment of the incredible compositions from the album.  By the time the final 10 minutes, consisting of Only Three Shall Know, came along something had changed, the band was as tight as anything and I wished they could have started again from the beginning. 45 minutes had flown by and I’ll certainly go and see them again.

Winterfyleth


I think I’ve seen Winterfyleth four times now, including the set which became their live album recorded at Bloodstock and earlier this year supporting Emperor at Incineration Fest. They never disappoint.

Winterfyleth are one of those bands that are so consistent with their music, without being boring or repetitive, that it doesn’t matter what they play or how familiar I am with the songs, it’s just incredible to listen to. Having said that, disappointingly, they didn’t play A Valley Thick With Oaks, which is my favourite. Who can resist singing along “In the heart of every Englishman…”? However, I did come away with a new favourite in Green Cathedral!

We only got an hour, but at least they didn’t bugger about going off and coming back for an encore. There were old songs, new songs and never before played live songs. Loved every second of it and, for the first time for me, the final song wasn’t preceded with “Sadly time is short and our songs are long, so this is our last one.” Until next time!

 

Glory! Hammer!

Glory! Hammer! Were fantastic!

They played well and were lots of fun as you’d expect.  I mean who doesn’t like a gig to start with a cardboard cutout of Tom Jones and Delilah playing on the PA. The band were all dressed up - it must have been very hot - and playing their parts.

I did find some of the gaps between songs and the interplay with the audience felt a little too Steel Panther. It was too frequent, superfluous and added time to a set which could have been shorter.

Sozos Michael is a phenomenal singer and makes it seem effortless and perfect. I’m a big fan of widdly guitar and it doesn’t stand out as much on record as it did live which was a really nice surprise.

It’ll be great to see them again when the promised new album is out and they tour again.




A review of React Cookbook: Recipes for Mastering the React Framework

React Cookbook: Recipes for Mastering the React Framework

by David Griffiths and Dawn Griffiths
ISBN: 978-1492085843

This is a book of about 100 recipes across 11 sections. The sections range from the basics, such as creating React apps, routing and managing state to the more involved topics such as security, accessibility and performance.

I was especially pleased to see that the section on creating apps looked at create-react-app, nextjs and a number of other getting started tools and libraries, rather than just sticking with create-react-app.

I instantly liked the way each recipe laid out the problem it was solving, the solution and then had a discussion on different aspects of the solution. It immediately felt a bit like a patterns book. For example, after describing how to use create-react-app, the discussion section explains in more depth what it really is, how it works, how to use it to maintain your app and how to get rid of it.

As with a lot of React developers, the vast majority of the work I do is maintaining existing applications, rather than creating new ones from scratch. I frequently forget about how to setup things like routing scratch and would usually reach for Google. However, with a book like this I can see myself reaching for the easy to find recipes again and again.

Chasm City

Chasm City

Alistair Reynolds
ISBN-13‏: ‎ 978-0575083158

Following the announcement of the release of Inhibitor Phase and then Elysium Fire I’ve been rereading some of the previous Revelation Space novels to pick up the thread. First time around I found Chasm City a dark story and it was no different the second time, but I got so much more out of it. I also remember losing the thread towards the end the first time, but not this time!

As with most of the series, the thread of the main story is inconsequential to the main Revelation Space arc. It’s the other aspects of the story which tie up with other Revelation Space events which make this such a fantastic book. By the time I read the last page I knew that Sky's Edge was named after the edge Sky Hassausman had over the other ships in the flotilla which settled the planet. I knew that the war had started between the ships of the flotilla and what they were fighting about. I knew how the Melding Plague had got to Chasm City and how it was discovered and spread. I knew that Sky had met Khouri, who is an important character in the main trilogy. And more, much more! I wish I knew how the Melding Plague came to be though.

I read the second half of the book in about two weeks. I just couldn’t put it down!

A Review: Incineration Fest 2022 – Metal is back!

Overall I really enjoyed Incineration Fest and would go again if the line up is right for me. What was really great was seeing metallers back at gig with no restrictions and doing what we do best!

Winterfylleth

I completely fell in love with Winterfylleth when they played Bloodstock on the mainstage and even more so when they released the set as a live album. They are incredible and totally deserved to be opening proceedings at the Roundhouse for Incineration Fest. Actually, they deserved to be much higher up the bill. They’re a solid outfit, played what I wanted to hear and ended, as I always think of them ending from the live album, with Chris saying this is the last song “as time is short and our songs are long!” I need to see them do a headline set in a venue with a great PA soon.

Tsjuder

Tsjuder was the wildcard for me. I didn’t really know them and had heard only a few things on Spotify before, although what I heard was really good. I had no idea I was going to be blown away. They sounded incredible from the first note, which was even more impressive given that they are only a three piece and the PA in the Roundhouse wasn’t turning out to be great for definition.

Bloodbath

Bloodbath was really the reason I was at Incineration Fest. I’d missed them at Bloodstock ten years before as one of my sons was being born and I hadn’t had a chance to see them until now. Of course now Nick Holmes (Paradise Lost) rather than Mikael Åkerfeldt (Opeth) was on lead vocals.

I was very, very excited and from the moment I heard that trademark crunching guitar sound I was even more excited. They played for a full hour. Unlike the Black Metal bands on the bill there was more riffing and solos and a slight different drum sound.

They’re an odd band to watch. For reasons I don’t understand, the bass player and two guitarists would often turn their backs to the audience to face the dummer. The band didn’t seem to interact much with each other on stage and even less so with Nick.

Nick’s deadpan humour was present when he did speak to the audience. He introduced the band as being from Sweden, then added from Halifax almost as an afterthought! During the set he admitted he couldn’t see and dispensed with his sun glasses as they’d apparently been a good idea backstage. After breaking the microphone he enquired if it would be added to his bill at the end of the night.

Emperor

Emperor hasn't released any new material (that I know of) since 2001 and, if I’m honest, I barely listen to them beyond the live album these days. I’ve seen them at least three times before, the first time being in 1999 in a small club in Bradford on my birthday - it doesn’t get much better than that. I’m more of a fan of Ihsahn’s solo stuff these days and I still really enjoy Samoth’s Zyklon whenever I play it. Emperor, not so much anymore.

They played for the full ninety and for the most part were solid as you might expect. Whether or not Faust plays with is of no consequence to me and I certainly didn’t need to covers they played with him towards the end of the set. There was lots I knew and lots I enjoyed, but I wouldn't make an effort to see Emperor again.







Devin Townsend at the Royal Albert Hall (again)

Leprous

There’s an obvious pull for me towards Leprous due to the association with Ihsahn and prog, but rock bands generally do little for me these days. I listened to a little of Aphelion before the gig, but it didn’t grip me.

They’re an odd live band and some of the time the cello player looked a bit out of place when he was without his cello. The sharing of the keyboards among various band members, often in the same song, was also weird. The singer was wearing a waistcoat and doing some very odd dancing and his voice can grate. For a prog band the lack of any guitar or keyboard lead breaks was also weird.

However, I quite enjoyed Leprous!


Devin Townsend

We’d only seen Devin Townsend a few months ago (in the summer at Bloodstock), but my wife loves him so we went again. We should have gone the night before as he played loads of songs we knew, in contrast to the night we went where he played nothing we knew! Most of it, I am reliably informed, was from the Ocean Machine and Infinity albums.

Devin still plays brilliantly and it was great to see him again with the session musicians he’d teamed up with for his Bloodstock performance. He creates a fantastic wall of sound and engages with the crowd like few others. I’m sure we’ll go and see him again, after all we’ve not heard Hyperdrive live yet!

Learnings from Decapitated

When am I going to learn? 

The first two times I saw Decapitated, Bloodstock and then supporting someone in Norwich at the Waterfront, they were incredible. 

In early 2020 in London they sounded awful and we left. Last night in Norwich they sounded terrible again. 

I don’t know if it was them or the sound system, but there was no definition. It was all drums, vocals and not much else, so we gave up halfway through. 

I’m hoping the new album will be amazing, they’ll play at the UEA and it will be amazing. However, if I am going to learn, then I won’t be risking it.

Galactic North (a review)

Galactic North

Alastair Reynolds
ISBN-13: ‎ 978-0575083127

Galactic North is a group of short stories set in the Revelation Space universe starting at it’s very beginning and stretching right to it’s end.


Great Wall of Mars


I reread the Great Wall of Mars after the Inhibitor Phase to remind me of some of Warren Clavian’s back story. It didn’t disappoint. I should have read Great Wall of Mars again before Inhibitor Phase, but hindsight is a wonderful thing. At least I’ve remembered why Nevile hated his brother and how he was betrayed by him, why Nevile defected to the conjoiners and how Felka fits in. One small story explains so much of why things happened in several of the other stories including Absolution Gap.


Glacial
 

Glacial adds little to the overall story, but does help to explain how the relationship between Clavian, Galiana and Felka developers and how it becomes so strong. Glacial is really an opportunity for Alastair Reynolds to explore the concept of a thinking, possible sentient planet.  He does this, as always, by hinting throughout at the bigger picture and keeping you reading.


A Spy in Europa

 
Not sure what I think of this one. Seemed a bit pointless. Not very nice characters who all stabbed each other in the back. Some interesting science tho and provided a backdrop and context for Grafenwalder's Bestiary.


Weather

 
What a fantastic standalone story this is with some great characters who demonstrate that not all Ultras are cut-throat. There’s lots more detail about conjoiners here and the secret of how C-drives are managed is revealed, but that’s not the darkest secret.


Dilation Sleep

 
I was disappointed in this story until I read the notes at the end and realised it was the first story written in the revelation space universe and that it introduced some key aspects, such as Chasm City. It doesn’t really add anything to the overall story, but has some interesting insights into refersleep.
 

Grafenwalder's Bestiary

 
Some of the best stories are those which are difficult to read due to the behaviour of some of the characters. When they do things you can’t understand the motivation for and could not imagine doing yourself. In this story it’s cruelty, deception and revenge and I loved it.


Nightingale

I do wonder how Alastair Reynolds thinks up these horrors, but they are glorious. This story is particularly horrible at the end. The evil computer was far worse than anything in the Resident Evil series, with undertones of Hal 9000. There’s exploration in the story, battle, weapons and the sort of intrigue which makes it difficult to put down. 


Galactic North 

This should be expanded to a novel, or at least a novella. There’s scope for so much evolution, especially with the greenfly and how they come to take over. I couldn’t put this down, and wouldn’t have done it if my Kindle hadn’t died a few pages before the end!

In some ways it’s a shame that Alastair Reynolds has put a hard limit on the timeline of Revelation Space, but I loved it! I reread Galactic North to understand the comments at the end of Inhibitor Phase and the Nest Builders. I should have read it first. And I should have a Revelation Space timeline on my wall.


A review: Inhibitor Phase by Alastair Reynolds

Inhibitor Phase
by Alastair Reynolds
 
 ISBN-13 ‏ : ‎ 978-0316462761

* * * Warning Spoilers * * *


To say I was excited at the prospect of another core Revelation Space novel, more than a decade since Absolutely Gap, wouldn’t come close. In preparation I reread Absolution Gap and loved it on the second reading.

I wasn’t inspired by the description of the Miguel character hiding from the Wolves on an unknown planet, but it turns out this was just a minor distraction at the beginning and that The Inhibitor phase plays a major part in advancing the story. The scope and breadth, as you would expect from Alistair Reynolds is vast and intricate.

I was a little disappointed that the characters were ping ponging between some of the same old worlds, Ararat and Yellowstone, and the evolution of some of the survivors from Redemption Ark into Merpeople, but this didn’t detract in any way. It either wasn’t clear or I missed what happened to Ana Khouri - maybe she’s still on Hela. It was sad, but probably necessary to see the end to the Nostalgia for Infinity. I also missed how, following her death on Mars, Glass and Warren had reencountered each other and swum with the pattern Jugglers prior to Sun Hollow.

Overall I loved this story. I literally could not put it down! Alastair Reynolds is the master of descriptive exploration and constantly hints at more facets to the story I just have to know and have to keep reading for! The Inhibitor Phase does of course leave questions unanswered and sets up the next story, which I cannot wait for either!
 

A Clash of Kings a Review


A Clash of Kings: Book 2 (A Song of Ice and Fire)

George R.R. Martin

ISBN-13 ‏ : ‎ 978-0007447831

I loved the Game of Thrones TV series Even the way the final series ends. Although I’m not sure I would have chosen the eventual king. I was looking forward to reading the books and understanding the stories in more depth and, to an extent, that was the case. More so with the first book than the second.

A Clash of Kings just has too much irrelevant detail and quickly becomes laborious to read. A part which stands out is after one of the battles where there are many pages given over to a list of knights who were awarded honours. The vast majority were in no way relevant to the story and just prolonged getting to the end. Fortunately the last 3% (I was reading on kindle) was given over to an appendix so I was able to skim that.

There were a number of key events from the TV series, not least of which Bron lighting the wildfire with an arrow, which I was looking out for and were disappointingly missing. Of course the book is the original and these events were invented for the TV series, but still.

I’m told the books get better from the third one onwards, so once I’ve got through Inhibitor Phase, Dune and one or two others I’ll be back. I’ve started now, so I need to finish.

Find My Tea: A technical journey through new product development (online 1st February 2022)

What: Find My Tea: A technical journey through new product development

When:
Tuesday, February 1, 2022 7:00pm to 8:30p (GMT)

Where:  SyncIpswich (online)

RSVP: https://www.meetup.com/SyncIpswich-Ipswichs-Tech-Startup-Community/events/281991960/

 

 

After what feels like an age I’m getting back into speaking and of course I’m speaking about Find My Tea! This time it’s technical!

As well as online with SyncIpswich I’m also doing the ACCU Conference, nor(DEV):con and one other:

    ACCU Conference - 4pm 8th April (Bristol) - 90min version
    nor(DEV):con - 24th & 25th June (Norwich)
    TBC - July

Find My Tea: A technical journey through new product development

There is more to having a great idea for an app than just building the app. You’re not only required to be a full stack developer (whatever that means), which doesn’t usually include the skills for building an app, you need to understand and be competent in ‘Ops’ (there’s really no such thing as DevOps) and the automated pipelines used for testing and deploying the app, it’s backend services and supporting applications. And there is so much to choose from!

In this session I will take you on the journey of discovery from having an idea, to choosing, rechoosing and choosing again the different technologies and platforms I used to build and release a new product from scratch.

This session will be focussed on the technology choices made and the reasoning and not on the product itself - although of course this will feature. This will include the mobile technology, the technology used for the web applications, backed services, hosting and development pipelines.

You can download the Find My Tea app here: https://findmytea.co.uk

 

Paul Grenyer

Husband, father, software engineer, metaller, Paul has been writing software for over 35 years and professionally for more than 20. In that time he has worked for and in all sorts of companies from two man startups to world famous investment banks and insurance companies. He has built and run three limited companies, none of which made him a millionaire and two of which threatened his sanity on more than one occasion.

Paul was a founding member of both SyncNorwich and Norfolk Developers, two of the most successful tech and startup based community groups in the East. He created and chaired the hugely successful Norfolk Developers Conference (nor(DEV):con) for seven years bringing in speakers and delegates in the sphere of software engineering from around the globe.

Paul is currently a Senior Software Engineer at Bourne Leisure, the owners of Haven caravan parks, and the founder of the tea finding app, Find My Tea. He loathes the word Entrepreneur, not least because he struggles to spell it and it reminds him of Del Boy from the 80s sitcom Only Fools and Horses. He sees Entrepreneurship as a side effect of the creative process of problem solving, rather than a career path in its own right.

Despite having dealt with the world of business from directors of the board down, Paul has kept both feet firmly on the ground even when his head has been in the clouds with healthy doses of Heavy Metal, Science Fiction and Formula One and long hair until it started falling out in 2013.

Oh, and he loves good tea too!

Come and see Find My Tea pitch to SyncNorwich on 23 November 2021

 


What:
Startup Pitches #12 - Find My Tea, Greenr, Scoop & Yakbit

When: Tuesday, November 23, 2021 @ 6:00pm

Where: Access Creative College, 114 Magdalen Street, Norwich

How much: Free

RSVP: https://www.meetup.com/syncnorwich/events/281757681/

Agenda

6.00pm - Arrivals & Networking with Pizza & Beer
6.15pm - Intro
6.30pm - PITCH 1: Find My Tea
6.40pm - PITCH 2: Greenr
6.50pm - PITCH 3: Scoop
7.00pm - PITCH 4: Yakbit
7.10pm - Q&A
7.30pm - Vote for Best Pitch
7.45pm - Networking & Quick Drink
8.00pm - Close

PITCH 1: Find My Tea

Tea made simple

Whether you're looking for loose leaves or tea bags to take home, or a cafe to unwind in with your favourite blend – it's easy. Simply type in your location or postcode, and you'll soon be able to find the shop or cafe serving the tea that touches your tastebuds. Simple.

https://findmytea.co.uk/
https://twitter.com/FindMyTea

Speaker Paul Grenyer is a husband, father, software engineer, metaller, Paul has been writing software for over 35 years and professionally for more than 20. In that time he has worked for and in all sorts of companies from two man startups to world famous investment banks and insurance companies. He has built and run three limited companies, none of which made him a millionaire and two of which threatened his sanity on more than one occasion.

https://www.linkedin.com/in/pgrenyer/
https://twitter.com/pjgrenyer

 

PG Webhooks Tool (beta) – I want your feedback!


PG Webhooks Tool

https://pg-webhooks.herokuapp.com/

PG Webhooks is a tool designed to help with the testing of webhooks. It allows you to receive and view messages from a webhook until you're ready to setup the server which will receive the real webhooks for your application.

Register the URL uniquely generated for you by PG Webhooks with your webhook. Fire the webhook and see the messages appear. Select each message to see the details, including the body and header.

PG Webhooks sits on a free Heroku instance so may take a few moments to start the first time you use it. It is backed by a non-persistent Redis database, so your messages are only stored temporarily.

PG Webhooks beta is very much a prototype and has plenty of rough edges. I would appreciate any feedback in the comments below. 



New Profile: Written for a talk on ‘Entrepreneurship’

Husband, father, software engineer, metaller, Paul has been writing software for over 35 years and professionally for more than 20. In that time he has worked for and in all sorts of companies from two man startups to world famous investment banks and insurance companies. He has built and run three limited companies, none of which made him a millionaire and two of which threatened his sanity on more than one occasion.

Paul was a founding member of both SyncNorwich and Norfolk Developers, two of the most successful tech and startup based community groups in the East. He created and chaired the hugely successful Norfolk Developers Conference (nor(DEV):con) for seven years bringing in speakers and delegates in the sphere of software engineering from around the globe.

Paul is currently a Senior Platform Engineer at the Fintech startup Snoop and the founder of the tea finding app, Find My Tea. He loathes the word Entrepreneur, not least because he struggles to spell it and it reminds him of Del Boy from the 80s sitcom Only Fools and Horses. He sees Entrepreneurship as a side effect of the creative process of problem solving, rather than a career path in its own right.

Despite having dealt with the world of business from directors of the board down, Paul has kept both feet firmly on the ground even when his head has been in the clouds with healthy doses of Heavy Metal, Science Fiction and Formula One and long hair until it started falling out in 2013.

Oh, and he loves good tea too!

A Review of Absolution Gap: Ignore the naysayers. Read this book. Love this book.

Alastair Reynolds ISBN-13 : 978-0575083165

I re-read Absolution Gap a decade or more after the first time in anticipation of the next part coming out in July of this year (2021). It was always the weakest of the trilogy, but not nearly as bad as I remember. In fact this time I devoured it in a relatively, for me, short period of time.

It’s true, as some other reviewers have said, that the story here could have been told in far fewer words, but then much of the texture of the story telling would have been lost and I think this is what makes this such a great book!


The characters and themes are believable in this universe. I think the story could have been very different if certain characters had not been killed off so early or at all. It’s always a shame when a lot of the main thrust of a previous book (Redemption Ark) is undone, but this is often how things play out in the real world.


I achieved what I wanted by re-reading Absolution Gap, I’m up to speed ready for the next instalment. The problem is that there is so much in the Revelation Space universe I now feel the need to go back and read it all again.


Ignore the naysayers. Read this book. Love this book.


Red Rebel Day: Did you know that 1 in 10 women can’t afford sanitary protection?

When Neelam Sultan asked me to support RedRebelDay I was keen to do what I could. It’s what you do when someone asks. It’s what I like to do when someone asks.

Then I attended the ‘ambassadors’ briefing, where a heavy emphasis was put on telling people what Period Poverty means to you. As a man this was quite daunting, especially as until recently the subject was still quite taboo for me. Especially as at least one of my former employees took great delight, and still does, in telling me when she had her period just to see the uncomfortable look on my face. What got me over it? Attending a Zoom call with 100+ women and a handful of men who were all talking very openly about periods and the problems 1 in 10 women face in affording sanitary protection.

Beyond the facts, that still didn’t help me understand what Period Poverty really means, let alone what it means to me. Then someone on the call described not being able to go to work or go to school or about your everyday life for a few days every month because you couldn’t afford something as simple as a sanitary product. This struck home for me, because I take being able to do these things for granted and I know how it feels when something beyond my control stops me from doing something I want to do. This is what Period Poverty means to me.

Will you help women live their lives in the way they deserve by donating to Red Rebel Day today? I have: 


Tea

A review: Permafrost

 

Permafrost

by Alastair Reynolds

ASIN : B07HF26D1H

Alistair Reynolds continues his run of form with this fantastic novella, Permafrost. One of the things I love most about Reynold’s Revelation Space series is how the stories flip between different times. For me this is one of the biggest and best parts of weaving a space opera, and it’s in abundance in Permafrost. I’m still in two minds about whether I enjoy first person writing though, I’m definitely more of a fan of third person. However, first person worked well here. Novellas, by their very nature are short, which means the character building is fast and the stories are fast paced too. I really enjoyed that aspect of Permafrost.

Given that the story is based on the effects of climate change, as well as time travel, I was concerned it would be over the top, but it actually describes brilliantly and concisely the effects of climate change and how they form the bedrock for the story. Then Reynolds moves on and concentrates on the story.

The climax is a page turner (or button clicker if you read on a kindle like I do) and moves very quickly - which I loved. Without wishing to give too much away, I did feel that defeating the evil (or maybe not so evil) machines was a bit too easy, but this didn’t detract from the climax.

If you’ve never read Alistair Reynolds before, then this would be an excellent place to start!

There’s a new Revelation Space novel out later this year and in preparation I’m rereading Absolution Gap. I’ve already read the first two paragraphs, one of my most memorable scenes from Revelation Space, and I am very, very, excited!

Just when you thought it wasn’t safe to search for tea…

There hasn’t been anything from Find My Tea HQ for a while. We’ve been working hard behind the scenes improving the existing infrastructure and fixing bugs in the app, not least of which, the lack of functioning maps on iPhone. The good news is the maps are back and there’s a new version of the app to download for iPhone users!

Early next year we hope to release a feature which will let users add new locations for other users to search for. Stick with us, we really appreciate your support so far.

Please connect with us on social media in the meantime:

Website: http://findmytea.co.uk/ (including links to the apps)

Facebook: https://www.facebook.com/Findmytea-113424607013669

Linkedin: https://www.linkedin.com/company/findmytea

Twitter: https://twitter.com/FindMyTea


Review: Bone Silence Delivers

Bone Silence (Revenger, #3)Bone Silence by Alastair Reynolds
My rating: 5 of 5 stars

Alistair Reynolds is still by far my favorite author and he has continued his form, which rebooted with Revenger, in Bone Silence. A friend once said to me that Alistair Reynolds struggles to know how to write an ending and, disappointingly, I think this is still true with Bone Silence. This trilogy has the constant unanswered questions which drew me into and kept me hooked on the Revelation Space stories. There is a kind of answer at the end and a bit of a twist which, if I’m honest, left me underwhelmed. The answer lacks detail and explanation of the reasons and then the Ness sisters ride off into the sunset and Reynolds announces that he’s done with the pair.

That aside I loved Bone Silence and the entire trilogy. Each book is different and describes different aspects of the universe in which it is set. The characters are diverse and interesting and the story wide, far reaching and mostly unpredictable. The sisters' respect for each other is clear throughout, but like real siblings there are tensions and fights. There is a lot more to this universe and so much scope for expansion. I’d love Alistair Reynolds to return to it some day and expand this story, fill in some glossed over gaps and detail and tell some of the other stories, even if the cliched seafaring language did irritate me throughout.


View all my reviews

Piping Software for Less: Why, What & How (Part 1)

Developing software is hard and all good developers are lazy. This is one of the reasons we have tools which automate practices like continuous integration, static analysis and measuring test coverage. The practices help us to measure quality and find problems with code early. When you measure something you can make it better. Automation makes it easy to perform the practices and means that lazy developers are likely to perform them more often, especially if they’re automatically performed every time the developer checks code in.

This is old news. These practices have been around for more than twenty years. They have become industry standards and not using them is, quite rightly, frowned upon. What is relatively new is the introduction of cloud based services such as BitBucket Pipelines, CircleCI and SonarCloud which allow you to set up these practices in minutes, however with this flexibility and efficiency comes a cost.

Why

While BitBucket Pipelines, CircleCI and SonarCloud have free tiers there are limits.

With BitBucket Pipelines you only get 50 build minutes a month on the free tier. The next step up is $15/month and then you get 2500 build minutes.

On the free CircleCI tier you get 2500 free credits per week, but you can only use public repositories, which means anyone and everyone can see your code. The use of private repositories starts at $15 per month.

With SonarCloud you can analyse as many lines of code as you like, but again you have to have your code in a public repository or pay $10 per month for the first 100,000 lines of code.

If you want continuous integration and a static analysis repository which includes test coverage and you need to keep your source code private, you’re looking at a minimum of $15 per month for these cloud based solutions and that’s if you can manage with only 50 build minutes per month. If you can’t it’s more likely to be $30 per month, that’s $360 per year.

That’s not a lot of money for a large software company or even a well funded startup or SME, though as the number of users goes up so does that price. For a personal project it’s a lot of money. 

Cost isn’t the only drawback, with these approaches you can lose some flexibility as well. 

The alternative is to build your own development pipelines. 

I bet you’re thinking that setting up these tools from scratch is a royal pain in the arse and will take hours; when the cloud solutions can be set up in minutes. Not to mention running and managing your own pipeline on your personal machine and don’t they suck resources when they’re running in the background all the time? And shouldn’t they be set up on isolated machines? What if I told you, you could set all of this up in about an hour and turn it all on and off as necessary with a single command? And if you wanted to, you could run it all on a DigitalOcean Droplet for around $20 per month. 

Interested? Read on.

What

When you know how, setting up a continuous integration server such as Jenkins and a static analysis repository such as SonarQube in a Docker container is relatively straightforward. As is starting and stopping them altogether using Docker Compose. As I said, the key is knowing how; and what I explain in the rest of this article is the product of around twenty development hours, a lot of which was banging my head against a number of individual issues which turned out to have really simple solutions.

Docker

Docker is a way of encapsulating software in a container. Anything from an entire operating system such as Ubuntu to a simple tool such as the scanner for SonarQube. The configuration of the container is detailed in a Dockerfile and Docker uses Dockerfiles to build, start and stop containers. Jenkins and SonarQube all have publically available Docker images, which we’ll use with a few relatively minor modifications, to build a development pipeline.

Docker Compose

Docker Compose is a tool which orchestrates Docker containers. Via a simple YML file it is possible to start and stop multiple Docker containers with a single command. This means that once configured we can start and stop the entire development pipeline so that it is only running when we need it or, via a tool such as Terraform, construct and provision a DigitalOcean droplet (or AWS service, etc.) with a few simple commands and tear it down again just as easily so that it only incurs cost when we’re actually developing. Terraform and DigitalOcean are beyond the scope of this article, but I plan to cover them in the near future. 

See the Docker and Docker Compose websites for instructions on how to install them for your operating system.

How

In order to focus on the development pipeline configuration, Over this and a few other posts I’ll describe how to create an extremely simple Dotnet Core class library with a very basic test and describe in more detail how to configure and run Jenkins and SonarQube Docker containers and setup simple projects in both to demonstrate the pipeline. I’ll also describe how to orchestrate the containers with Docker Compose. 

I’m using Dotnet Core because that’s what I’m working with on a daily basis. The development pipeline can also be used with Java, Node, TypeScript or any other of the supported languages. Dotnet Core is also free to install and use on Windows, Linux and Mac which means that anyone can follow along.

A Simple Dotnet Core Class Library Project

I’ve chosen to use a class library project as an example for two reasons. It means that I can easily use a separate project for the tests, which allows me to describe the development pipeline more iteratively. It also means that I can use it as the groundwork for a future article which introduces the NuGet server Baget to the development pipeline.

Open a command prompt and start off by creating an empty directory and moving into it.

mkdir messagelib
cd messagelib

Then open the directory in your favorite IDE, I like VSCode for this sort of project. Add a Dotnet Core appropriate .gitignore file and then create a solution and a class library project and add it to the solution:

dotnet new sln
dotnet new classLib --name Messagelib
dotnet sln add Messagelib/Messagelib.csproj

Delete MessageLib/class1.cs and create a new class file and class called Message:

using System;

namespace Messagelib
{
    public class Message
    {
        public string Deliver()
        {
            return "Hello, World!";
        }
    }
}

Make sure it builds with:

dotnet build

Commit the solution to a public git repository or you can use the existing one in my bitbucket account here: https://bitbucket.org/findmytea/messagelib

A public repository keeps this example simple and although I won’t cover it here, it’s quite straightforward to add a key to a BitBucket or GitHub private repository and to Jenkins so that it can access them.

Remember that one of the main driving forces for setting up the development pipeline is to allow the use of private repositories without having to incur unnecessary cost.


Read the next parts here:




Sidebar 1


Continuous Integration 

Continuous Integration (CI) is a development practice where developers integrate code into a shared repository frequently, preferably several times a day. Each integration can then be verified by an automated build and automated tests. While automated testing is not strictly part of CI it is typically implied.


Static Analysis

Static (code) analysis is a method of debugging by examining source code before a program is run. It’s done by analyzing a set of code against a set (or multiple sets) of coding rules.


Measuring Code Coverage

Code coverage is a metric that can help you understand how much of your source is tested. It's a very useful metric that can help you assess the quality of your test suite.



Sidebar 2: CircleCI Credits

Credits are used to pay for your team’s usage based on machine type and size, and premium features like Docker layer caching.



Sidebar 3: What is Terraform?

Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.

Configuration files describe to Terraform the components needed to run a single application or your entire datacenter. Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure. As the configuration changes, Terraform is able to determine what changed and create incremental execution plans which can be applied.

The infrastructure Terraform can manage includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc.


Piping Software for Less: Jenkins (Part 2)



Run Jenkins in Docker with Docker Compose

Why use Jenkins I hear you ask? Well, for me the answers are simple: familiarity and the availability of an existing tested and officially supported Docker image. I have been using Jenkins for as long as I can remember. 

The official image is here: https://hub.docker.com/r/jenkins/jenkins

After getting Jenkins up and running in the container we’ll look at creating a ‘Pipeline’ with the Docker Pipeline plugin. Jenkins supports lots of different ‘Items’, which used to be called ‘Jobs’, but Docker can be used to encapsulate build and test environments as well. In fact this is what BitBucket Pipelines and CircleCI also do.

To run Jenkins Pipeline we need a Jenkins installation with Docker installed. The easiest way to do this is to use the existing Jenkins Docker image from Docker Hub. Open a new command prompt and create a new directory for the development pipeline configuration and a sub directory called Jenkins with the following Dockerfile in it: 

FROM jenkins/jenkins:lts

USER root
RUN apt-get update
RUN apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io
RUN service docker start

# drop back to the regular jenkins user - good practice
USER jenkins

You can see that our Dockerfile imports the existing Jenkins Docker image and then installs Docker for Linux. The Jenkins image, like most Docker images, is based on a Linux base image.

To get Docker Compose to build and run the image, we need a simple docker-compose.yml file in the root of the development pipeline directory with the details of the Jenkins service:

version: '3'
services:
  jenkins:
    container_name: jenkins
    build: ./jenkins/
    ports:
      - "8080:8080"
      - "5000:5000"
    volumes:
        - ~/.jenkins:/var/jenkins_home
        - /var/run/docker.sock:/var/run/docker.sock

Note the build parameter which references a sub directory where the Jenkins Dockerfile should be located. Also note the volumes. We want the builds to persist even if the container does not, so create a .jenkins directory in your home directory:

mkdir ~/.jenkins

Specifying it as a volume in docker-compse.yml tells the Docker image to write anything which Jenkins writes to /var/jenkins_home in the container to ~/.jenkins on the host - your local machine. If the development pipeline is running on a DigitalOcean droplet, DigitalOcean Volumes can be used to persist the volumes even after the droplet is torn down.

As well as running Jenkins in a Docker container we’ll also be doing our build and running our tests in a Docker container. Docker doesn’t generally like being run in a Docker container itself, so by specifying /var/run/docker.sock as a volume, the Jenkins container and the test container can be run on the same Docker instance.

To run Jenkins, simply bring it up with Docker compose:

docker-compose up

(To stop it again just use ctrl+c)

Make sure the first time you note down the default password. It will appear in the log like this:

Jenkins initial setup is required. An admin user has been created and a password generated.

Please use the following password to proceed to installation:

<password>

This may also be found at: /var/jenkins_home/secrets/initialAdminPasswor

To configure Jenkins for the first time open a browser and navigate to:

http://localhost:8080

Then:

  1. Paste in the default password and click continue.
  2. Install the recommended plugins. This will take a few minutes. There is another plugin we need too which can be installed afterwards.
  3. Create the first admin user and click Save & Continue.
  4. Confirm the Jenkins url and click Save & Finish.
  5. Click Start Jenkins to start Jenkins.

You now have Jenkins up and running locally in a Docker container! 

  1. To use Docker pipelines in Jenkins we need to install the plugin. To do this:
  2. Select Manage Jenkins from the left hand menu, followed by Manage Plugins.
  3. Select the ‘Available’ tab, search for ‘Docker Pipeline’ and select it,
  4. Click ‘Download now and install after restart’. 
  5. On the next page put a tick in the ‘restart after download’ check box and wait for the installation and for Jenkins to restart. Then log in again.

Next we need to create the Docker Pipeline for the Messagelib solution. 

  1. Select ‘New Item’ from the left hand menu, enter ‘Messagelib’ as the name, select ‘Pipeline’ and click ok.
  2. Scroll to the ‘Pipeline’ section and select ‘Pipeline script from SCM’ from the ‘Definition’ dropdown. This is because we’re going to define our pipeline in a file in the Messagelib solution. 
  3. From the ‘SCM’ dropdown, select ‘Git’ and enter the repository URL of the Messagelib solution. 
  4. Then click Save.


Jenkins is now configured to run the Messagelib pipeline, but we need to tell it what to do by adding a text file called Jenkinsfile to the root of the Messagelib solution.

/* groovylint-disable CompileStatic, GStringExpressionWithinString, LineLength */

pipeline
{
    agent
    {
        docker { image 'pjgrenyer/dotnet-build-sonarscanner:latest' }
    }
    stages
    {
        stage('Build & Test')
        {
            steps
            {
                sh 'dotnet clean'
                sh 'dotnet restore'
                sh 'dotnet build'
            }
        }
    }
}

This very simple Groovy script tells the Jenkins pipeline to get the latest ‘dotnet-build-sonarscanner’ Docker image and then use it to clean, restore and build the dotnet project. ‘dotnet-build-sonarscanner’ is a Docker image I built and pushed to Docker Hub using the following Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build-env
WORKDIR /
RUN apt update
RUN apt install -y default-jre
ARG dotnet_cli_home_arg=/tmp
ENV DOTNET_CLI_HOME=$dotnet_cli_home_arg
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
ENV PATH="${DOTNET_CLI_HOME}/.dotnet/tools:${PATH}"
ENV HOME=${DOTNET_CLI_HOME}
RUN dotnet tool install --global dotnet-sonarscanner
RUN chmod 777 -R ${dotnet_cli_home_arg}

This creates and configures a development environment for Dotnet Core and Sonar Scanner, which requires Java. 

There is a way to use the Dockerfile directly, rather than getting it from Docker Hub, described here: https://www.jenkins.io/doc/book/pipeline/docker/

Once the Jenkins file is added to the project and committed, set the build off by clicking ‘Build now’ from the left hand menu of the MessageLib item. The first run will take a little while as the Docker image is pulled (or built). Future runs won’t have to do that and will be quicker. You should find that once the image is downloaded, the project is built quickly and Jenkins shows success.


Read the next parts here:


Part 2: Piping Software for Less: Jenkins (Part 2)
Part 3: Piping Software for Less: SonarQube (Part 2)

Digital Ocean’s PaaS Goes BETA

Make no mistake, I LOVE DigitalOcean! It’s simple to use and reasonably priced, especially compared to some of its better known competitors. They even respond quickly to queries on Twitter!

A couple of days ago I received an email from DigitalOcean inviting me to try out their new Beta 2 for App Platform (DigitalOcean’s PaaS product) which they described as follows:

“It handles common infrastructure-related tasks like provisioning and managing servers, databases, operating systems, application runtimes, and other dependencies. This means you can go from code to production in just minutes. We support Node.js, Python, Ruby, Go, PHP, and static sites right out of the box. If you have apps in other languages, simply create a Dockerfile and App Platform will do the rest. You can deploy apps directly from your Github repos and scale them (vertically and horizontally) if needed.….”

I’m also a fan of Heroku for its ease of application deployment and, with the exception of a few AWS services, Heroku is the only platform other than DigitalOcean which I regularly use for deploying my projects. I use Heroku because I don’t have to provision a Droplet (a Linux server on DigitalOcean) to run a simple web application. Now that DigitalOcean has a similar service there’s a good chance I won’t need Heroku.

The DigitalOcean App Platform (which I’ll refer to as ‘Apps’ from here on) doesn’t yet have as many features as Heroku, but the corresponding features which Apps does support are much simpler to work with. There are basically two types of applications you can run, a static website (static), a web application (service) or a worker. A worker is basically a service without any routing and can be used for background tasks. As with Heroku you can add databases as well.

Apps is currently in Beta which means it’s an initial release of a potential future product. Customers who participate in DigitalOceans beta programs have the opportunity to test, validate, and provide feedback on future functionality, which helps DigitalOcean to focus their efforts on what provides the most value to their customers.

  • Customer availability: Participation in beta releases is by invitation, and customers may choose not to participate. Beta invitations may be public or private. (How exciting, they picked me!).
  • Support: Beta releases are unsupported.
  • Production readiness: Beta releases may not be appropriate for production-level workloads.
  • Regions: Beta offerings may only be available in select regions.
  • Charges: Beta offerings may be charged or free. However, free use of beta offerings may be discontinued at any point in time.
  • Retirement: At the end of a beta release, DigitalOcean will determine whether to continue an offering through its lifecycle. We reserve the right to change the scope of or discontinue a Beta product or feature at any point in time without notice, as outlined in our terms of service.

I was (am!) very excited and decided to try a few things out on Apps. Below you’ll find what I tried, how I did it and some of what I learnt.

Static Asset App

The simplest type of ‘app’ which you can deploy to Apps is a static website and it really is straight forward. Remember the days when you would develop a website by creating files in a directory and opening them locally in a browser? Well, once you’ve done that you can just push them to GitHub and they’re on the web!

1. Create a new GitHub repository - it can be private or public.

2. Add a single index.html file, e.g:

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" ref="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    <title>Hello, App Platform!</title>
  </head>
  <body>
    <h1>Hello, App Platform!</h1>
    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
  </body>
</html>

I’ve used the Bootstrap Hello, World! example as it brings in CSS and JavaScript, but any HTML example will do.

3. Log into DigitalOcean and select Apps from the left-hand menu.

4. If it’s your first App click ‘Launch App’. Otherwise click ‘Create App’.

5. Then click ‘GitHub’. If this is your first App, select ‘Configure your GitHub permissions’ and follow the instructions to link your GitHub account.

6. Back in Apps, select your new repository from the dropdown list and click Next.

On the next page you’ll be asked to choose a name for the app, select the branch to use from your repository and configure ‘Autodeploy on Push’.

7. Update the name of the app if you want to, leave the rest of the defaults as they are and click Next.

On the next page you have the option to add build and run commands. You don’t need any for a simple HTML app.

8. On the ‘Choose Build Configuration’ page click ‘Launch App’ to deploy the app and wait while Apps configures the app.

9. After receiving the ‘Deployed successfully!’ message, click the ‘Live App’ link to launch the app in a new tab.

That’s it! Your HTML page is now live on DigitalOcean’s App Platform. You can treat your repository just like the root directory of a website and add pages, images and JavaScript as you need. Just add them to the repository, commit, push and wait for them to be deployed.

Apps will generate a URL with a subdomain which is a combination of the name of your app and a unique sequence of characters, on the domain .ondigitalocean.app. You can configure a custom domain from the app’s settings tab and Apps provides a CNAME for redirection.


Node App

The next step up from a static asset app is a simple node webapp. Apps will install Node.js and your app’s dependencies for you and then fire up the app.

I was hoping to be able to deploy a very simple node webapp such as:

var http = require('http');

http.createServer(function (req, res) {

  res.write('Hello, App Platform!');

  res.end();

}).listen(process.env.PORT || '3000');

But this seemed to confuse Apps. It requires a package-lock.js file, which is generated by running npm install, to be checked into the repository and didn’t deploy successfully until I added the express package. 

1. Create a new directory for a simple node project and move into it.

2. Run npm init at the command line. Enter a name for the app and accept the other defaults.

3. Add a .gitignore file containing:

node_modules

so that dependencies are not checked into the repository.

4. Add the Express () package:

npm install express --save

This will also generate the package-lock.js which Apps needs and must be checked into the repository with the other files.

5. Create an index.js file at the root of the project:

const express = require('express')

const app = express()

const port = process.env.PORT || '3000';

app.get('/', (req, res) => {

  res.send('Hello World!')

})

app.listen(port, () => {

  console.log(`Example app listening at http://localhost:${port}`)

})

Apps injects the port the webapp should run on as an environment variable called, PORT. This is easily read by Node.js as shown.

6. Add a start command to the scripts section in package.json:

"scripts": {

    "start": "node index.js",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

7. Create a new GitHub repository, it can be private or public, and check your node project into it.

Then follow from step 3 of the Static Asset app above. Note at step 8, Apps has automatically configured npm start as the run command, having detected a Node application and you can select the pricing plan on the same screen.

WARNING: Node applications are NOT free on DigitalOcean App Platform. Make sure you delete unwanted applications from the Settings tab.


Docker App

As well as Node.js, Apps appears to support Ruby, Go and Python nativity, as well as others. What about .Net or other languages and platforms? For those Apps supports Docker. Let’s see if we can get a simple dotnet core application running in Apps.

1. Create a new directory for a dotnet core project (e.g. dotnetcore) and move into it.

2. Create a dotnet core web application:

dotnet new webapp

3. Add a Dockerfile to the project:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env

WORKDIR /app

# Copy everything else and build

COPY . ./

RUN dotnet publish dockercore.csproj -c Release -o out

# Build runtime image

FROM mcr.microsoft.com/dotnet/core/sdk:3.1

WORKDIR /app

COPY --from=build-env /app/out .

EXPOSE $PORT

ENTRYPOINT [ "dotnet", "dockercore.dll" ]

Apps injects the port the webapp should run on as an environment variable called, PORT. Make sure the Docker image will expose it as shown.

4. To make sure the application runs on the port injected add the following UseUrls method call in program.cs:

public static IHostBuilder CreateHostBuilder(string[] args)

{

    var port = Environment.GetEnvironmentVariable("PORT") ;

    return Host.CreateDefaultBuilder(args)

        .ConfigureWebHostDefaults(webBuilder =>

        {

            webBuilder.UseStartup<Startup>().UseUrls($"http://+:{port}");

        });

}

5. To prevent the application trying to redirect to a non-existent ssl port, remove or comment out the following line from startup.cs

// app.UseHttpsRedirection();

6. Building a dotnet core application generates a lot of intermediate files that you don’t want to check in, so add an appropriate .gitignore file to the root of the project.

7. Create a new GitHub repository, it can be private or public, and check your dotnet core project into it.

Then follow from step 3 of the Static Asset app above. Note at step 8, Apps has detected the Dockerfile and is not giving the option for build commands. You don’t need to specify any run commands and you can select the pricing plan on the same screen.

WARNING: Docker based  applications are NOT free on DigitalOcean App Platform. Make sure you delete unwanted applications from the Settings tab.


Finally

There was one big disadvantage for me and that’s the lack of a free tier for anything more advanced than a static web application. The cost isn’t extortionate (https://www.digitalocean.com/docs/app-platform/#plans-and-pricing), but quite a bit for hobby programmers. If you want to use a database on top there’s a further cost, whereas this is free to begin with in Heroku.

Apps currently only supports GitHub. You can use private repositories, which is great, but I’d like to see BitBucket support as well. Heroku has its own git repositories as well as supporting external repositories. 

I’d also like there to be Terraform support for Apps as there is for the rest of the DigitalOcean services. However, given that Apps in Beta, I can see why it isn’t supported yet.

Overall Apps was very easy to use and had a much shallower learning curve and was generally easier to use than Heroku.  DigitalOcean, do you think we could have AWS style Lambdas next, please?


Metal Commando – Primal Fear

I've had much anticipation for this release and I wasn't disappointed. While it lacks the epic nature of Severn Seals and New Religion until the final (13 minute!) track, it's packed full of solid power metal songs. Unlike most albums, I found it instantly enjoyable on first listen. Other than the lack of epicness, my only complaint would be it's rather short. I'm fully expecting this to become one of my favourite albums of 2020.

Metal Commando

Greenback backup


Why

When Naked Element was still a thing, we used DigitalOcean almost exclusively for our client’s hosting. For the sorts of projects we were doing it was the most straightforward and cost effective solution. DigitalOcean provided managed databases, but there was no facility to automatically back them up. This led us to develop a Python based program which was triggered once a day to perform the backup, push it to AWS S3 and send a confirmation or failure email.

We used Python due to familiarity, ease of use and low installation dependencies. I’ll demonstrate this later on in the Dockerfile. S3 was used for storage as DigitalOcean did not have their equivalent, ‘Spaces’, available in their UK data centre. The closest is in Amsterdam, but our clients preferred to have their data in the UK. 

Fast forward to May 2020 and I’m working on a personal project which uses a PostgreSQL database. I tried to use a combination of AWS and Terraform for the project’s infrastructure (as this is what I am using for my day job) but it just became too much effort to bend AWS to my will and it’s also quite expensive. I decided to move back to DigitalOcean and got the equivalent setup sorted in a day. I could have taken advantage of AWS’ free tier for the database for 12 months, but AWS backup storage is not free and I wanted as much as possible with one provider and within the same virtual private network (VPC).

I was back to needing my own backup solution. The new project I am working on uses Docker to run the main service. My Droplet (that’s what Digital Ocean calls its Linux server instances) setup up is  minimal: non-root user setup, firewall configuration and Docker install. The DigitalOcean Market Place includes a Docker image so most of that is done for me with a few clicks. I could have also installed Python and configured a backup program to run each evening. I’d also have to install the right version of the PostgreSQL client, which isn’t currently in the default Ubuntu repositories, so is a little involved. As I was already using Docker it made sense to create a new Docker image to install everything and run a Python programme to schedule and perform the backups. Of course some might argue that a whole Ubuntu install and configure in a Docker image is a bit much for one backup scheduler, but once it’s done it’s done and can easily be installed and run elsewhere as many times as is needed.

There are two more decisions to note. My new backup solution will use DigitalOcean spaces, as I’m not bothered about my data being in Amsterdam and I haven’t implemented an email server yet so there are no notification emails. This resulted in me jumping out of bed as soon as I woke each morning to check Spaces to see if the backup had worked, rather than just checking for an email. It took two days to get it all working correctly!

What

I reached for Naked Element’s trusty Python backup program affectionately named Greenback after the arch enemy of Danger Mouse (Green-back up, get it? No, me neither…) but discovered it was too specific and would need some work, but would serve as a great template to start with.

It’s worth nothing that I am a long way from a Python expert. I’m in the ‘reasonable working knowledge with lots of help from Google’ category. The first thing I needed the program to do was create the backup. At this point I was working locally where I had the correct PostgreSQL client installed, db_backup.py:

db_connection_string=os.environ['DATABASE_URL']

class GreenBack:
    def backup(self):    
        datestr = datetime.now().strftime("%d_%m_%Y_%H_%M_%S")
        backup_suffix = ".sql"
        backup_prefix = "backup_"

        destination = backup_prefix + datestr + backup_suffix
        backup_command = 'sh backup_command.sh ' + db_connection_string + ' ' + destination
        subprocess.check_output(backup_command.split(' '))
        return destination

I want to keep anything sensitive out of the code and out of source control, so I’ve brought in the connection string from an environment variable. The method constructs a filename based on the current date and time, calls an external bash script to perform the backup:

# connection string
# destination
pg_dump $1 > $2

and returns the backup file name. Of course for Ubuntu I had to make the bash script executable. Next I needed to push the backup file to Spaces, which means more environment variables:

region=''
access_key=os.environ['SPACES_KEY']
secret_access_key=os.environ['SPACES_SECRET']
bucket_url=os.environ['SPACES_URL']
backup_folder='dbbackups'
bucket_name='findmytea'

So that the program can access Spaces and another method:

class GreenBack:
    ...
    def archive(self, destination):
        session = boto3.session.Session()
        client = session.client('s3',
                                region_name=region,
                                endpoint_url=bucket_url,
                                aws_access_key_id=access_key,
                                aws_secret_access_key=secret_access_key)

        client.upload_file(destination, bucket_name, backup_folder + '/' + destination)
        os.remove(destination) 

It’s worth noting that DigitalOcean implemented the Spaces API to match the AWS S3 API so that the same tools can be used. The archive method creates a session and pushes the backup file to Spaces and then deletes it from the local file system. This is for reasons of disk space and security. A future enhancement to Greenback would be to automatically remove old backups from Spaces after a period of time.

The last thing the Python program needs to do is schedule the backups. A bit of Googling revealed an event loop which can be used to do this:

class GreenBack:
    last_backup_date = ""

    def callback(self, n, loop):
        today = datetime.now().strftime("%Y-%m-%d")
        if self.last_backup_date != today:
            logging.info('Backup started')
            destination = self.backup()
            self.archive(destination)
            
            self.last_backup_date = today
            logging.info('Backup finished')
        loop.call_at(loop.time() + n, self.callback, n, loop)
...

event_loop = asyncio.get_event_loop()
try:
    bk = GreenBack()
    bk.callback(60, event_loop)
    event_loop.run_forever()
finally:
    logging.info('closing event loop')
    event_loop.close()

On startup callback is executed. It checks the last_back_date against the current date and if they don’t match it runs the backup and updates the last_backup_date. If the dates do match and after running the backup, the callback method  is added to the event loop with a one minute delay. Calling event_loop.run_forever after the initial callback call means the program will wait forever and the process continues.

Now that I had a Python backup program I needed to create a Dockerfile that would be used to create a Docker image to setup the environment and start the program:

FROM ubuntu:xenial as ubuntu-env
WORKDIR /greenback

RUN apt update
RUN apt -y install python3 wget gnupg sysstat python3-pip

RUN pip3 install --upgrade pip
RUN pip3 install boto3 --upgrade
RUN pip3 install asyncio --upgrade

RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list
RUN wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
RUN apt-key add ACCC4CF8.asc

RUN apt update
RUN apt -y install postgresql-client-12

COPY db_backup.py ./
COPY backup_command.sh ./

ENTRYPOINT ["python3", "db_backup.py"]

The Dockerfile starts with an Ubuntu image. This is a bare bones, but fully functioning Ubuntu operating system. The Dockerfile then installs Python, its dependencies and the Greenback dependencies. Then it installs the PostgreSQL client, including adding the necessary repositories. Following that it copies the required Greenback files into the image and tells it how to run Greenback.

I like to automate as much as possible so while I did plenty of manual Docker image building, tagging and pushing to the repository during development, I also created a BitBucket Pipeline, which would do the same on every check in:

image: python:3.7.3

pipelines:
  default:
    - step:
          services:
            - docker
          script:
            - IMAGE="findmytea/greenback"
            - TAG=latest
            - docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD
            - docker build -t $IMAGE:$TAG .
            - docker push $IMAGE:$TAG

Pipelines, BitBucket’s cloud based Continuous Integration and Continuous Deployment feature, is familiar with Python and Docker so it was quite simple to make it log in to Docker Hub, build, tag and push the image. To enable the pipeline all I had to do was add the bitbucket-pipelines.yml file to the root of the repository, checkin, follow the BitBucket pipeline process in the UI to enable it and add then add the build environment variables so the pipeline could log into Docker Hub. I’d already created the image repository in Docker Hub.

The Greenback image shouldn’t change very often and there isn’t a straightforward way of automating the updating of Docker images from Docker Hub, so I wrote a bash script to do it, deploy_greenback:

sudo docker pull findmytea/greenback
sudo docker kill greenback
sudo docker rm greenback
sudo docker run -d --name greenback  --restart always --env-file=.env findmytea/
greenback:latest
sudo docker ps
sudo docker logs -f greenback

Now, with a single command I can fetch the latest Greenback image, stop and remove the currently running image instance, install the new image, list the running images to reassure myself the new instance is running and follow the Greenback logs. When the latest image is run, it is named for easy identification, configured to restart when the Docker service is restarted and told where to read the environment variables from. The environment variables are in a local file called .env:

DATABASE_URL=...
SPACES_KEY=...
SPACES_SECRET=...
SPACES_URL=https://ams3.digitaloceanspaces.com

And that’s it! Greenback is now running in a Docker image instance on the application server and backs up the database to Spaces just after midnight every night.

Finally

While Greenback isn’t a perfect solution, it works, is configurable, a good platform for future enhancements and should require minimal configuration to be used with other projects in the future.

Greenback is checked into a public BitBucket repository and the full code can be found here:

https://bitbucket.org/findmytea/greenback/

The Greenback Docker image is in a public repository on Docker Hub and can be pulled with Docker:

docker pull findmytea/greenback

Test Driven Terraform [Online – Video Conf] – 7pm, 2 April 2020.


We'll use TDD to create a Terraform module which builds a Heroku app and deploys a simple React application.

If you'd like to follow along, you'll need the following prerequisites

  • Terraform installed
  • Go 1.14 installed
  • Heroku account - HEROKU_API_KEY added to environment variables.
  • Git installed
  • BitBucket account

This meetup will be via Zoom:- https://zoom.us/j/902141920

Please RSVP here: https://www.meetup.com/Norfolk-Developers-NorDev/events/269640463/

Insomnium – Norwich

Something my first proper girlfriend said to me has stuck with me my entire life as I disagree with it (mostly).  She said that the best way to discover a new band was to see them live first. The reason I disagree is because I get most pleasure from knowing the music I am listening to live - most of the time.

I’m a member of the Bloodstock Rock Society and their Facebook page is often a place of band discussion. Lots of people there were saying how good Insomnium are, but they didn’t do a great deal for me when I listened to them on Spotify. Then it was early 2020, I hadn’t been to a gig since Shakespears Sister in November, I fancied a night out and Insomnium were playing in Norwich. So I took a chance….

From the off they were great live and I really enjoyed it. I came to the conclusion that I must like some of their older stuff as it was the new album which hadn’t done much for me. There were lots of things I like, like widdly guitars, metal riffs and blast beats, but what really lets Insomnium down is the vocals. Death metal vocals, to a certain extent, are death metal vocals, but this guy sounded like he was singing a different song in a different band - it’s the same on the album I tried. If the vocals were more suited to the music, like there are with Wintersun, it would be even better. I also learned that Norwich City’s current start player is from the same town in Finland as the band.

The first thing I did this morning was look up which albums the setlist was from an make a list:

  • One for Sorrow
  • Across the Dark
  • Above the Weeping World
  • Shadows of the Dying Sun
  • Heart like a Grave

And then die a little inside at the prices on Amazon and eBay. I think I’ll be playing a lot of Insomnium on Spotify for the time being so I’m ready to enjoy them to the full next time.



A review: .Net Core in Action

.Net Core in Action
by Dustin Metzgar
ISBN-13: 978-1617294273

I still get a fair amount of flack for buying and reading technical books in the 21st Century - almost as much as I get for still buying and listening to CDs. If I was a vinyl loving hipster, it would be different of course…. However, books like .Net Core in Action are a perfect example of why I do it.  I needed to learn what .Net Core was and get a feel for it very quickly and that is what this book allowed me to do.

I’ve been very sceptical of .Net development for a number of years, mostly due to how large I perceived the total cost of ownership and the startup cost to be and the fact that you have to use Windows.  While this was previously true, .Net Core is different and .Net Core in Action made me understand that within the first few pages of the first chapter. It also got me over my prejudice towards Docker by the end of the second chapter.

The first two chapters are as you would expect, an introduction followed by various Hello World examples. Then it gets a bit weird as the book dives into the build system next and then Unit testing (actually, this is good so early) and then two chapters on connecting to relational databases, writing data access layers and ORMs. There’s a sensible chapter on micro services before the weirdness returns with chapters on debugging performance profiling and internationalisation. I can kind of see how the author is trying to show the reader the way different parts of .Net core work on different platforms (Windows, Linux, Mac), but this relatively small volume could have been more concise.




DevelopHER Overall Award 2019

I was honoured and delighted to be asked to judge and present the overall DevelopHER award once again this year. Everyone says choosing a winner is difficult. It may be a cliche, but that doesn’t change the fact that it is.

When the 13 category winners came across my desk I read through them all and reluctantly got it down to seven. Usually on a first pass I like to have it down to three or four and then all I need to agonise over is the order. Luckily on the second pass I was able to be ruthless and get it down to four.

To make it even more difficult, three of my four fell into three categories I am passionate about:

  • Technical excellence and diversity
  • Automated Testing
  • Practical, visual Agile

And the fourth achieved results for her organisation which just couldn’t be ignored.

So I read and reread and ordered and re-ordered. Made more tea, changed the CD and re-read and re-ordered some more. Eventually it became clear.

Technical excellent and the ability for a software engineer to turn their hand to new technologies is vital. When I started my career there were basically two main programming languages, C++ and Java. C# came along soon after, but most people fell into one camp or another and a few of us crossed over. Now are are many, many more to choose from and lots of young engineers decide to specialise in one and are reluctant to learn and use others. This diminishes us all as an industry. So someone who likes to learn new and different technologies is a jewel in any company’s crown.

The implementation of Agile methodologies in Software Development is extremely important. Software, by its very nature is complex. Only on the most trivial projects does the solution the users need look anything like what they thought they wanted at the beginning. Traditional waterfall approaches to software development do not allow for this. The client requires flexibility and we as software engineers need the flexibility to deliver what they need. Software development is a learning process for both the client and the software engineer. Agile gives us a framework for this. Unlike many of the traditional methods, Agile has the flexibility to be agile itself, giving continuous improvement.

When implementing Agile processes, the practices are often forgotten or neglected and in many ways they are more important. Not least of which is automated testing. The practice of writing code which tests your code and running it at least on every checkin. This gives you a safety net that code you’ve already written isn’t broken by new code you write. And when it is, the tests tell you, they tell you what’s wrong and where it’s wrong.  We need more of this as an industry and that is why I chose Rita Cristina Leitao, an automated software tester from Switch Studios as the overall DevelopHER winner.


Shakespear Sister Ipswich November 2019

I was very surprised and excited and then immediately disappointed to see Shakespere Sister on the Graham Norton show. They performed Stay, which is their big hit (longest single at number in the UK be a female artist, 8 weeks), but Marcella wasn’t even trying to hit the high notes and it was awful. We decided to go and see them on tour anyway as it was potentially a once in a lifetime experience before they fell out again.

The Ipswich Regent was half empty in the stalls and the circle was closed and oddly there were quite a few security guards - apparently at the request of the band. Encouragingly Shakespear Sister came on on time and they sounded good! As they ploughed through many of their well known songs, new songs and a few older more obscure songs, the vocals were strong from both Marcella and Siobhan.

The rhythm section was incredible.  The drumming was tight, varied and interesting, but what really stood out was the bass. I think part of this was that the player had fantastic bass lines to play, but also oozed talent. It’s really uncommon for a bass player to need to change bass guitars between songs but Clare Kenny swapped frequently. It’s just a shame that the lead guitar player was totally unremarkable and I’ve no idea what the keyboard player was for.

The highlight I, and I imagine many others, had been looking forward to was Stay. It was better than with Graham Norton, but it’s clear that Marcella can not get to the highest notes and live, she doesn’t try. It was still a good performance of a fantastic song.

Would I go and see them again? Probably not, unless I was dragged.

Borknagar

I was pretty sure I had seen Borknagar support Cradle of Filth at the Astoria 2 in the ‘90s. It turns out that was Opeth and Extreme Noise Terror, so I don’t really remember how I got into them now.

Whatever the reason was, I really got into their 2000 album Quintessence. At the time I didn’t really enjoy their previous album, The Archaic Course, much so with the exception of the occasional relisten to Quintessence, Borknagar went by the wayside for me.  That was until ICS Vortex got himself kicked out of Dimmu Borgir for allegedly poor performances, produced a really rather bland and unlistenable solo album called Storm Seeker, and then got back properly with Borknagar.  That’s when things got interesting.

ICS Vortex has an incredible voice. When he joined Dimmu Borgir as bassist and second vocalist in time for Spiritual Black Dimensions, he brought a new dimension (pun intended) to an already amazing band. I’ve played Spiritual Black Dimensions to death since it came out and I think only Death Cult Armageddon is better.

ICS Vortex’s first album back with Borknagar is called Winter Thrice. Loving his voice and being bitterly disappointed with Storm Seeker I bought it desperately hoping for something more and I wasn’t disappointed. It’s an album with a cold feel and lyrical content about winter and the north. I loved it and played it constantly after release and regularly since. It’s progressive black metal which is the musical equivalent to walking through the snow early on a cold crisp morning.

This year Borknagar released a new album called True North. When I’ve loved an album intensely and the band brings out something new I always feel trepidation. Machine Head never bettered Burn My Eyes, WASP never bettered the Crimson Idol. I could go on, but you get the picture. True North is another album about winter and the north. So I ought to have been on safe ground, but then Arch Enemy have pretty much recorded the same album since Doomsday Machine, but never bettered it. They’re all good though.

My first listen to True North was tense, but it didn’t take long for that to dissipate. I had it on daily
play for a few weeks, together with the new albums from Winterfylleth and Opeth. True North was so brilliant I thought it might be even better than Winter Thrice. So cautiously I tried Winter Thrice again, but I wasn’t disappointed to find it was the slightly better album. The brilliant thing is that I now have two similar, but different enough albums I can enjoy again and again and other than Enslaved’s In Times, I haven’t found anything else like it.

I hope they do what Evergrey did with Hymns for the Broken, The Storm Within and The Atlantic and make it a set of three. Cross your fingers for me.

Winterfylleth

At school I had this friend, Jamie, and he once said to me that he always preferred having a band’s live album to their studio album of the same songs. His example was Queen’s Live Magic. To me, then, this was madness. It didn’t have all the same songs as It’s a Kind of Magic and the production isn’t as good. Let’s face it, unless it’s Pink Floyd, the production of a live album is never as good as in the studio. I avoided live albums for years.

Pink Floyd’s Pulse was the first live album I really got into and then there was nothing until the teenies when live albums from Emperor, Immortal, Arch Enemy, Dimmu Borgir and Blind Guardian got me completely hooked.

The latest live album I’ve bought is ‘The Siege Of Mercia: Live At Bloodstock 2017’ by Winterfylleth. It’s amazing for a number of reasons. I was at Bloodstock, watching the band, when it was recorded. It’s a fantastic performance of of some brilliant songs. It’s got a, atmospheric, synth version of an old track at the end. It’s encouraged me to relisten to their studio albums and enjoy them so much more.

Winterfylleth are a Black Metal band from Manchester. Their lyrics are based around England’s rich culture and heritage.  Some of their album covers and songs depict the Peak District. You’d have thought a song about Mam Tour, a hill in the Peak District, might be a bit boring, but it’s not! Maybe because, being black metal, you can’t really hear the words, but as always the vocal style, heavy guitars and fast drums make for the perfect mix.

I currently have the Siege of Mercia, along with some similar new albums from the likes of Borknager, on my regular daily playlist and it just gets better and better.

nor(DEV):biz Big Dinner with Roarr! Dinosaur Adventure



What: nor(DEV):biz Big Dinner with Roarr! Dinosaur Adventure

When: 7th October, 2019

Where: Norwich City Football Club

How much: £40.99

Book: https://nordevbiz-oct-2019.eventbrite.co.uk

Join the best Norfolk and Norwich tech companies for dinner, while enjoying good food and great company.

Roarr! Dinosaur Adventure

A desire to innovate, with continual reinvestment creating bigger and bolder attractions – this is what our guest speakers have in mammoth (or should I say dinosaur!) proportions.

Owners of award-winning, Roarr! Dinosaur Adventure in Lenwade, Martin and Adam Goymour will be sharing their aspirations to develop this thriving business both in Norfolk and further afield. Not ones to rest on their laurels, they’ve already rebranded and invested millions so they can appeal to a broader market.

In 2018, they won the Best Large Visitor Attraction award in the Norfolk and Suffolk Tourism Awards. With more projects ‘in the pipeline’, their hard work and enthusiasm for innovation and redevelopment are evident.

From advancing their green energy strategy by placing solar panels on their indoor play area to a fossil dig and a steampunk-inspired restaurant in the Victorian walled garden, they are delighting thousands of visitors of all ages in Norfolk’s very own Jurassic Park.

About nor(DEV):biz

The aims of nor(DEV):biz (Norfolk Developers Business) are:

  • to be the go-to group for local businesses requiring a technology solution.
  • to facilitate and increase referrals and collaboration among Norfolk’s tech businesses.
  • to help close the digital skills gap.
  • to facilitate better collaboration between technology businesses and academic institutions.
  • to have a great meal with great company

Tickets prices do include a donation to the nor(DEV): chosen charity of the year, for 2019/2020.

Breakfast: One for the bikers with Matt Leach of Geotekk


Breakfast: One for the bikers with Matt Leach of Geotekk

When: Tuesday: September 3, 2019 - 7:30am to 8:30pm
Where: The Maids Head Hotel, Tombland, Norwich, NR3 1LB
How much: £13.95
RSVP: https://www.meetup.com/Norfolk-Developers-NorDev/events/qqwhznyzmbfb/

Matt will talk about Geotekk’s product design and fund raising journey and how the company has developed through a belief that anything which serves to reduce stress and worry in everyday lives enables a happier life empowering us to “Live More”.

Matt is co-founder of Geotekk, a company specialising in smart alarms for bikes. Founded in 2015 in response to ever-rising levels of bike theft, Matt and his co-founder James strive to provide customers with freedom and peace of mind by creating an affordable, versatile and best-in-class smart alarm. This alarm would combine and improve the most effective features of other security products into one multi-functional package.

Breakfast: Technological Future – Utopia or Dystopia?



When: 04/06/2019 07:30 - 08:30
Where: The Maids Head Hotel, Tombland, Norwich, Norwich
Price: 13.95 GBP
RSVP: https://www.meetup.com/Norfolk-Developers-NorDev/events/qqwhznyzjbgb/


Technological Future – Utopia or Dystopia?

A Norfolk Developers breakfast discussion with Callum Coombes and Fiona Lettice.

Technological innovation allows organisations to do more with less. As well as improving innovation and productivity, new technologies will help us with some of the key challenges ahead – making better use of limited resources like energy and water, mitigating the effects of climate change on food and poverty, disease prevention, and improving healthcare for an ageing population.

Technological innovation has generally been a powerful force for good, creating new jobs and improving salaries. But new technology also threatens jobs and whole industries, with devastating consequences in some communities and with the benefits unevenly distributed. So is the future utopian or dystopian?

Whichever, technological change will continue, so If we are to realise the potential of new technologies, like artificial intelligence and machine learning, we will need responsible innovation approaches and new regulatory frameworks.

We will need to develop future technologies using multidisciplinary perspectives and methods so that we better consider the future of work, protect our privacy and data, build consumer trust, and respond effectively to ethical and safety issues.

Norfolk Developers are facilitating this by bringing together its members and speakers to debate and shape a healthier technological future.

Breakfast with Norman Wilson: Size matters! Why size determines everything…


Breakfast with Norman Wilson: Size matters! Why size determines everything...

When: Tuesday, 12th March @ 7.30am to 8.30am
Where: The Maids Head Hotel, Tombland, Norwich, NR3 1LB
How much: £13.95
RSVP: https://www.meetup.com/Norfolk-Developers-NorDev/events/qqwhznyzfbhb/

Size matters! Why size determines everything in your organisation.
Norman Wilson

An anthropologist and evolutionary psychologist, Dunbar's fame largely focuses around a single number, 150. The theory of Dunbar's Number posits that 150 is the number of individuals with whom any one person can maintain stable relationships.

Join us for the process sessions at nor(DEV):con 2019: #Evolution from #NoProjects to Continuous Digital!



Join us for the process sessions at nor(DEV):con 2019 on Friday 22nd and Saturday 23rd of February in Norwich!

Get your Early Bird tickets here before they finish on Friday!


# Evolution from #NoProjects to Continuous Digital

Allan Kelley

Once upon a time there was IT, and IT departments had projects. Projects were always a bad fit for software development but somehow we made them work. As IT became Agile the damage caused by the project model became obvious and #NoProjects emerged to help teams go beyond projects.

Today growth businesses are digital. Technology is the business and the business is technology. Projects end but do you want your business to end? Or do you want it to grow? Growing a digital business means growing software technology.

In this presentation Allan Kelly will look at how #NoProjects came about, how it evolved into Continuous Digital and why it is the future of management.


Miscellaneous Process Tips
Jon Jagger

This session will explore three important process laws.

1. The New Law.
Why does nothing new ever work?

2. The Chatelier’s Principle.
How do systems change? How do they stay the same?

3. The Composition Fallacy.
No difference plus no difference equals no difference is a fallacy. Why?


Jugaad: Bringing Troubled Projects Back On Track
Giovanni Asproni

What do you do when a project is not going well—e.g., the client is upset, the team demoralized, the quality of the product is low, the project is late—to bring it back under control and make the client and the team happy again?

How do you that in highly politically charged environments?

In this talk I’ll answers the questions above and more, by sharing my experience in doing that in several projects of various sizes (from small to quite big) using some jugaad—a Hindi word, which, roughly, means thinking in a frugal way and being flexible, which, in turn, requires the ability to adapt quickly to often unforeseen situations and uncertain circumstances in an intelligent way.

I’ll describe, among other things, how to:

  • Work in highly politically charged environments
  • Deal with difficult (and powerful) people and speak truth to them
  • Help the teams to improve their morale and motivation
  • Make progress with limited resources
  • Use different leadership stiles (including command and control)
  • Make your client happier
  • Deal with serious mistakes


Bug-First Development – Agile Software Development For User Story Prospecting
Adrian Pickering

The idea behind bug-first or bug-driven development is devilishly simply: Everything is a bug until it isn’t.

As far as a user is concerned, there is essentially no difference between a bug, a feature that hasn’t been delivered and one that is otherwise unusable, say through substandard user interface or user experience. Bug-driven development essentially asks the user what operation they want to do next that they currently can’t undertake. The benefit this brings is laser-focused story discovery and prioritisation.


Working remote vs Working colocated
Paul Boocock

We often talk about waterfall, scrum, agile and many other processes but these are often considered from a colocated perspective.

As demand for remote working continues to increase, we will discuss if our usual processes work in a remote environment and what changes or considerations do we need to make to support remote workers?


One Team, Two Teams, Many Teams: Scaling Up Done Right (90 or 45 minutes, 90 preferred)
Giovanni Asproni

Scaling up software projects is one of the trends of the moment—many companies, big and small, try to do that  to increase the speed of delivery of their projects.

However, scaling up can be quite difficult (even going only from one to two teams),  especially if it is done focusing on the wrong aspects – most companies give too much weight to formal structures and processes (e.g., mandating the use of SAFe, LESS or other frameworks), and not enough weight to other aspects that would give a bigger bang for the buck: eg removing friction, improving communication channels, setting clear goals, delegating responsibility and accountability, etc.

In this session I’ll share my experience in successfully helping companies to do the right thing in projects ranging from two to about eighty teams, and I’ll offer some tools that you will be able to use right away in your projects.

The session, among other things, includes:

  • A description of what needs to be done right before scaling up
  • Strategies on how to decide when to add new people to a team and new teams to a project
  • Things to consider when deciding the structure of the teams (eg feature vs component teams), and its relationship with the shape of the system
  • How to use simple rules to allow teams to collaborate productively
  • An explanation on why each project has a upper bound in its ability to scale, and what to do about it


Reengineering a Library
Burkhard Kloss

Session abstract: Over the last few years, I’ve been consulting on reengineering a quant library. As is wont, the library had originally accreted, rather than been designed; eventually, it had turned into a ball of mud, and maintenance was becoming increasingly problematic. We decided to rewrite the library from scratch, using best practices as we understood them, and eventually turned it into a piece of code we can be proud of – and maintain and extend without too much pain.

This talk is a personal retrospective on techniques and processed we applied; what worked, what did not, and why.


Get your tickets now: http://nordevcon-2019.eventbrite.com

Join us for the nor(DEV):con 2019 Business Sessions: Running a business is hard!


Join us for the nor(DEV):con 2019 Business Sessions on Friday 22nd February!

Get your Early Bird tickets here before the price goes up after Friday!

Running a business is hard

John Gostling

Running a business is hard….harder when you don’t have much experience of running a business! 6 years ago I joined Breakwater IT as a Systems Engineer, I quickly realised there was so much potential that had yet to be tapped into, and every day since then my focus has been on releasing this, creating a better company to work with, and to work for. It’s been a constantly evolving journey, 2 steps forward, one step back (sometimes two!), but things are finally starting to fall into place.

This is a very open self-appraisal of the how we have transformed a loss making company into one that turns a profit and is currently growing at 20% year on year.


Crack the motivation code!

Cassandra Andrews

Imagine if you knew precisely what motivated each member of your team, how motivated they were and what you could do to improve their motivation! 

Cassandra Andrews interactive workshop focuses on motivation in the workplace and introduces ‘motivational maps’, an incredibly accurate and user-friendly tool which enables us to unlock and measure employee motivation.

Understanding exactly what motivates individuals in an organisation can be used with significant impact to support business growth and profitability by maximising employee and team motivation, retain employees and recruit the right people to complement existing teams.

At the workshop you will discover how to create high performing teams by learning:

What motivation is, how it can be measured and how it impacts the workforce.
About the nine motivators identified in motivational maps.
How to increase team performance by identifying conflicts in motivation.

To enable all delegates to get their own ‘wow’ moment from the workshop, there will be an opportunity for four attendees to win a complimentary individual motivational map with feedback/insight session and discounted motivational maps available for other attendees.


Developing an app to promote emotional resilience

UEA

Since summer 2017, Dr Laura Biggart and Dr Kamena Henshaw, from the School of Psychology, have been working with UEA computer science students and Steve Jones and Adam Ziolkowski from JoziTech to develop a student support app. Currently the app is focused on supporting students’ transition into Higher Education. In this session we will talk about the development of the app, the research background to the features, and the feedback since our launch in September 2018. We will conclude with a discussion of our future plans, including evaluation of the app and our plans to work with other organisations to develop bespoke OpenUp apps


Don’t fall over like Elon Musk did – How to stay energised and disrupt an industry

Ian Hacon

Elon Musk is one of the most famous workaholic cases in recent years. So much so, many others quoted him as a badge of honour when they too worked too hard. In 2018, his wheel fell off, forced to take a total break due to exhaustion. This session will help you understand how looking after your own energy is good for business and you will leave with some easily implementable steps to do so.


Orchestrated Mobility – Changing The Way We Move

John Fagan

By late 2030, its predicted that 95% U.S. passenger miles travelled will be served by on-demand vehicles owned by fleets, not individuals, in a new business model Transport-as-a-Service (TaaS).

Citizens will pay a monthly fee to go anywhere they wish, much like we do today using on demand services for music and video, like Spotify and Netflix.

TaaS will unify public, private & autonomous transportation into an efficient service and is predicted to deliver a largely carbon-free road transportation system.

In this talk i will…

Vision of Transport as a Service

Key Drivers (Technologies, Autonomous electric vehicles, ride sharing, costs and barriers)
Impacts on society, economics and the environment
Who should be the Netflix for Transport?
Examples of use cases and disruption happening today


Harnessing the power of subscription technology

Juliana Meyer

Thousands of professionals are discovering ways to transform the way they work and the way they earn a living. Leveraging the skills we each have, the talk uncovers how anyone can can build their own subscription business using the knowledge and talents they already have.

I’ll go deep into the steps needed, opportunities available, the how and why, and what has worked and not worked for others. This has already been a game changer for others who learnt this from my previous talks which then transformed their lives, their living, and their opportunities.

Given the key trends of subscription, technology and self-education, I’ll explore and explain how anyone can successfully launch their own apps from home to generate a passive income and lift the lid on exchanging time for money.


Get your tickets here: http://nordevcon-2019.eventbrite.com

Alastair Reynolds is on form with this steampunk meets pirates space opera.

Revenger
Alastair Reynolds
ISBN-13: 978-0575090552

Alastair Reynolds is on form with this steampunk meets pirates space opera.

The story is cliched and almost totally predictable, but very enjoyable at the same time. I’ve started wondering a lot recently, if they body count in such stories is worth the life of the person who is being rescued and I think that remains to be seen in the sequel.

Fura Ness is extremely driven and I struggled to understand a lot of her decisions.

As with much of Reynolds’ work, there is no explanation for why this universe is the way it is and it feels as strange as when the clock strikes 13 in 1984, but makes me want to read more in the hope of understanding.

While most of the story is linear and complete, there’s a large chunk towards the end which feels missing. The climax is a little brief and just like in terminal world there is suddenly a lot of new plot in the final chapter.

Where the story goes next will very interesting.

nor(DEV):con 2019 schedule live now!


nor(DEV):con 2019
Thursday 21st to Saturday 23rd of February 2019
The Kings Centre, Norwich, NR1 1PH


Friday opening keynote: The Failure of Focus
Liz Keogh

We know that in our landscape of people and technology, aiming for a particular outcome doesn’t always lead to us getting what we want. Sometimes the best results come from approaching a problem obliquely. But in Agile our highest priority is to satisfy the customer through the early and continuous delivery of valuable software. We like to start with the outcome, meet the needs of our users, delivering high-quality working software with happy teams and true agility… but how might that focus be holding us back, and what are the alternatives?

In this talk we look at some different strategies for approaching complex ecosystems, starting from where we are right now, and allowing innovation to emerge through obliquity, naivety, and serendipity.


Friday closing keynote: Software doesn't always work out. 
Kevlin Henney

Looking at the number of software failure screens in public places, it can sometimes seem that software developers are the greatest producers of installation art around the planet. Software failures can be entertaining or disastrous. They can also be instructive — there's a lot we can learn.








Saturday keynote: Plain Wrong?
Heydon Pickering

I love writing JavaScript. The trouble is, so does everyone else. When people aren’t writing JavaScript, they’re usually writing frameworks for writing JavaScript in JavaScript. In fact, most of the JavaScript that’s around these days seems to either be written for, or within, a JavaScript flavor like React, Vue, or Angular. Frameworks make writing your own code faster and more ergonomic, but they do not come without problems. Code written with Framework A depends on the environment Framework A provides in order to work — and this dependency often represents a lot of code to transmit, decompress, parse, and compile. What about ‘plain’ JavaScript? Is it always naïve to think anything worthwhile can still be achieved just writing some straight-up code? It turns out this is a tricky question to answer, because the line between plain and flavored JavaScript is kind of blurry. It’s also not clear who should be the ones to get to write JavaScript, for what reasons, or when. But there’s no doubt the little we do as web developers is often done with much more than we 

See the full schedule here: nordevcon.com


Emerging talent at the DevelopHER Awards 2018!


A couple of weeks ago I was honoured to be asked to judge and present the overall winner of the DevelopHER Awards 2018. There are a number of categories in the awards, including TechStar which I also judged, and the overall winner is chosen from the winners of the other categories.

I believe that the best developers start writing code at an early age and continue throughout their lives and on through their careers. As well as learning all they can, all the time, they give back to community around them and help other people develop as well.

Federica Freddi, who also won the Emerging Talent award, is clearly passionate about software development and is fully deserving of the DevelopHER award and I couldn’t have been more delighted to be able to present her with it on the night.

Federica told me "It is fantastic to see so many women recognised for their contribution to our industry. It is a huge honour for me to be able to represent so many talented people that are making the difference in tech. As an Emerging Talent, I still have a long way ahead and I don’t know what awaits for me in the future, however I am sure I will never forget to stop along the way to give back to people and help the next generations of tech stars to grow too."

I am hoping we’ll see Federica back in Norwich very soon.

What’s Norfolk Developers all about?


Sometimes it is difficult to explain exactly how we are different from our competitors and what working with us is like, so we put together a short video that says it all!

Some of our lovely clients have kindly shared how they felt about working with Naked Element, the results they saw and the impact our software had on their business. In less than three minutes it is clear why we get such good feedback from our clients. Our specialised way of working and personal approach makes a big difference, and our understanding of each client's needs is obvious from the finished product.

As CEO Paul Grenyer says, we are driven by our clients, and that, combined with our years of development experience, means that we have helped companies large and small overcome processing issues.

But don't take our word for it! Take a look at our video and what our clients have to say about us, and get in touch if you think we can help you!

April nor(DEV): A.I. and Cognitive Computing with Watson & Keep Secure and Under the Radar

What:  A.I. and Cognitive Computing with Watson & Keep Secure and Under the Radar

When: Wednesday 4th April, 6.30pm to 9pm.

Where: Whitespace, 2nd Floor, St James' Mill, Whitefriars, NR3 1TN

RSVP: https://www.meetup.com/Norfolk-Developers-NorDev/events/242231165/

A.I. and Cognitive Computing with Watson
Colin Mower

Artificial Intelligence and Cognitive Computing have become the latest buzzwords in the industry, with companies big and small rushing to work out how they can take advantage of this emerging technology.

In this discussion, we’ll look at the myths behind the hype, how mature the technology is and how IBM’s Watson has evolved from game show winner to one of the market leaders.

Colin works for IBM as a Technical Leader, crossing all the IBM technologies and services. Prior to Big Blue, he worked in Aviva for over 14 years and has contributed to nor(DEV):con and Norfolk Developer Meetups.

He still lives in Norfolk and apart from plenty of travel working for some of the big blue chip companies, he tries to get out in South Norfolk running and cycling in a vain attempt to lose weight and keep fit.


Keep Secure and Under the Radar
David Higgins

Some basic and some not so basic steps to keep you and your business safe in the on-line business arena.

David is ex UK Gov contractor discusses simple steps you need to take to stay ahead of current data security legislation and keep yourself / your business secured.

Linux & SQL Server at MigSolv a Review

We love the MigSolv data centre out at Bowthorpe in Norwich. This was nor(DEV):’s second visit and they always make us very welcome. Walking into what feels like a massive Blakes 7 set and getting the tour,including the retina scanner and massive server hall, is incredible and seriously interesting (even though it’s my third time!).

The intimacy of the board room with the table down the centre and nor(DEV): members arranged each side is great for generating conversation! And when you have a humorous and huge personality like Mark Pryce-Maher it encourages the banter and the discussion even more! It’s safe to say this was one of the most interactive nor(DEV): evening presentations for some time.

Mark was there to tell us about how you can run Microsoft SQL Server on Linux (or is that “Lynux”?). Anyone would think Mark had been on the WINE, but no, you really can run SQL Server natively on Linux now. The first question though, has to be “why?”. The answer is simple. Microsoft are going after geeks, Oracle users and Linux houses who only run Windows to run SQL server.

The second question is “how?”. Developers at Microsoft discovered that, despite the vast number of methods available from the Win32 API, there are only a small number of methods which actually talk to the operating system. These are for allocating memory, disc storage, etc. A project called Drawbridge was developed to identify these methods and port them to Linux. SQL Server can then make use of those methods to run on Linux. Simples!

Mark did a live demo of installing and connecting to SQL Server. Unfortunately he hadn’t made sufficient sacrifices to the demo gods and things didn’t go precisely to plan. SQL Server can be run on an Ubuntu instance on Microsoft’s Azure from about £1/day (I’m intending to try it on a Digital Ocean droplet which is slightly cheaper). It’s incredibly easy to install. You just add the necessary repositories to Ubuntu’s package manager and tell it to install SQL Server. There’s also a pre-made Docker image (if Docker is your thing) which is even quicker.

Microsoft have developed an open source version of the client tools called Microsoft Operations Studio . It is also very easy to install (I did it on my Linux Mint laptop over 4G while Mark was speaking), but for some reason during the demo it just wouldn’t connect to SQL Server. However, Mark talks a great talk and I’m sure with a little bit more playing it would have!

We enjoyed being at MigSolv and hearing from Mark! MigSolv would like us to go back and we’re keen to do so in the future.

The Next nor(DEV): is on 4th April and features “A.I. and Cognitive Computing with Watson” from Colin Mower of Microsoft and “Keep Secure and Under the Radar” from David Higgins. RSVP here: https://www.meetup.com/Norfolk-Developers-NorDev/events/242231165/

National Apprenticeship Week

Seeing as it’s been National Apprenticeship Week this week, we thought we would shine a light on our apprentices, past and present. Naked Element would be a duller place without them and the valuable work they do!

We’ve had three apprentices in total, Lewis, Rain and Jack and they’ve all been invaluable to our business. Lewis spent his year-long software development apprenticeship with us, before staying on a while longer as a full-time employee. He headed User Story workshops, held meetings with clients and even managed to join in with some of the social sides of Naked Element too! Lewis got a lot out of his time with us, saying "an apprenticeship is a great way to get your foot in the door of an industry, gain some excellent skills and first-hand experience in a job you may want to turn into a career". Lewis decided to be an apprentice because he felt that a more hands-on approach to learning would suit him better than studying full time. At the time he hoped he would be working in the US in the near future, but he has since decided to settle down at university and is due to begin a Computer Science degree at the UEA later this year to bolster his industry experience with a formal qualification.

Rain joined us as an administrative apprentice for just over a year, keeping us organised and the company running smoothly. Rain was an asset to Naked Element, as a natural networker and often the first face to greet clients, she helped start the conversation about software and business. From the professional presentation in her initial interview to managing conferences, she impressed us all. She took her experience with Naked Element and became the executive PA to the CEO of Apple Helicopters!

Our current apprentice is Jack, who is part-way through his software apprenticeship. We’ve been so impressed with Jack that we’re hoping he will stay on after his course has finished to be a software developer full time! He’s a good problem solver, helping Naked Element deliver projects more cost effectively and equally enthusiastic at tech events when he represents the company.

Our CEO Paul says "I believe that apprentices are an excellent way for the predominantly small tech companies in the TechEast region to grow and a way to help fill the skills gap we have here. They are also a great way to support young people in our region to get industry experience." Naked Element has found all three apprentices invaluable to supporting and growing our business and we’re very proud of how far they’ve come!

The new issue of the nor(DEV): magazine is out now, free to download!



This issue focuses on Business in Tech. Or Tech in Business, as it is almost impossible to have one without the other and they both have an equally important role to play in our region. Countless reports from business minds, governments and international organisations are all talking about how technology is going to play a bigger part in manufacturing, commerce and business in general.

So where does Norfolk fit in?

Luckily we’ve pulled together articles and interviews from some of the region’s leading names including Chris Sargisson and Tim Robinson, as well as celebrating all things Her with a gallery from the DevelopHER Awards. Speaking of women in tech, Hayley Johnson from Epos Now has been kind enough to close the issue with an inspirational call to action for all businesses.

We hope you enjoy this new issue and share the link with your friends and colleagues!

Download here.

Industry 4.0 – I Was There!

Last week we attended the Evolution: Journey into Industry 4.0 event and it was an illuminating experience! Not only did we get to hear from some of manufacturings leading lights in the region, we got to talk alongside them at Naame’s packed conference.

As well as having our exhibition stand, our Director Paul Grenyer spoke at the event, demonstrating the value of process automation within manufacturing and how it will support growth in the sector. No capital expenditure required! Paul was able to share the benefits our clients have already seen from automating processes, and have a little fun along the way too!

Other speakers included industry gurus from Loughborough University, the Department for International Trade, Knowledge Transfer Manager – KTN – Innovate UK, Cranfield University, Hethel Innovation and West Suffolk College. We were also fortunate enough to hear from companies already putting automation into practice to great effect, including Warren Services, asset intelligence group Pathfindr, telecoms giant Huawei UK and electric motors company MSF Technologies. We were also reassured that despite some reports claiming future tech would mean job losses, those at Industry 4.0 disagreed, saying job roles would simply evolve from manual tasks to monitoring and analysing. It was also interesting to discover that our region is leading the way in disruptive tech!

Henk Koopmans, chief executive of Huawei UK, encouraged business to ‘think big’ and focus on their market first, but the main takeaway message from the event was that engineering needed to play an important part of the New Anglia LEP economic strategy. The LEP is hoping for greater involvement from businesses to help define the skills needed in five years time so it can work with colleges to get those skills taught now in preparation.

For Naame’s part, it hopes to support manufacturers and introduce them to others who may be able to help with the challenges they face. They are also looking to create manufacturing groups in Suffolk – contact Naame if you are interested. The New Anglia Advanced Manufacturing and Engineering group are also looking to develop a strategic map and would like feedback on a consultation document being released onto their website this week.

The day proved to be a worthwhile investment, with genuinely interesting speakers and an intelligent audience keen to support and be involved in the next phase of industry in our region.

Interested in finding out what Naked Element can do to prepare your business for Industry 4.0? Get in touch for a cup of tea and a chat!

Originally published here.

MyTech once again a roaring success!

Held by Inspired Youth Projects, My Tech 2018 was another successful meeting of tech employers and burgeoning tech talent.

Naked Element was proud to support the event, as always, and our developers really got a lot out of it too! "The MyTech Inspired Youth event brought together some of the great local tech companies and organisations including EposNow, Breakwater IT and Tech East” said our developer Henri Keeble, “It was was great talking to the students about what it is we do at Naked Element - the technically minded students showed a lot of interest. We were able to give some insight into what a career in software may look like, but also speak about the different routes we'd taken to get to where we are now, with my colleague Jack and myself having very different experiences. We were able to offer some advice we wish we'd known! It was also good to see those who were uncertain of their future career goals taking an interest in the various companies that were present.”

The day started with employability workshops and employer speed networking sessions, designed to help students get an idea of the variety of opportunities available to them.
For those who felt a little anxious at the idea of networking, there was a new ‘no pressure’ session for a more relaxed way to talk to employers. Our apprentice software developer Jack Rogers found it interesting to hear more about what students were considering after high school. “I enjoyed listening to students that were passionate about their future after finishing their GCSE's. Some of the students were also not certain what they were going to do, so it was very helpful to explain the decisions I made. It was interesting to see the diversity of career paths of the young people attending and the choices that each of them are making, as well as seeing how technology has advanced as more and more students are showing an interest towards it.”
The second half of the event was dedicated time for older students who had their sights set on career opportunities, training or apprenticeships within the tech industry and it as clear that those who attended found the day valuable. Supporting the new wave of techies in the region has long been a significant part of what Naked Element do. Director Paul Grenyer explains “It’s very important to inspire and encourage students to choose a career in tech in Norfolk, as there is increased demand for digital skills and this looks set to continue for a considerable time to come - Norfolk companies contact me weekly looking for developers and people with supporting digital skills.” Paul is also involved in a work group to help address the skills shortage in our local area. “TechNation has put Norwich firmly on the map when it comes to innovative tech companies” he says “and these companies will be looking to grow over the next 5+ years and will require a local workforce to support that growth. That’s why events like My Tech are so crucial.”

HELP KEEP NORWICH & NORFOLK ON THE TECH NATION MAP IN 2018


HELP KEEP NORWICH & NORFOLK ON THE TECH NATION MAP IN 2018

Tech Nation is a groundbreaking series of reports on the UK’s digital tech ecosystem. Over the last three years – it has captured the strength, depth and breadth of activity across the UK. It has revealed the scale of the digital tech sector, captured its growth, and – crucially – developed an understanding of the characteristics of the communities driving it.

We hope to make Tech Nation 2018 the best report yet.

To do this, we need your help. Last year the survey had 2,700 responses, this year we hope to reach 11,000 responses, and to hear from all tech communities in the UK to allow us to provide the most up to date and insightful data on the UK tech community in 2018.

If you work in or run a business in the technology, digital sector or any business that is related to or supports these sectors such as investors, legal, education etc. then we need your input.

We want to hear from you on topics such as diversity of the tech sector in your local area, on opportunities for high growth businesses and the quality of education and training.

Help keep Norwich & Norfolk at the forefront of peoples minds when they consider Tech Communities in the UK.

It only takes 5 minutes!



If you would like to join Tech Nation 2018 Community Partner please email details of your business along with your logo to technation@techcityuk.com. This will mean that you will be sent updates of completions in your area, and have the opportunity to contribute further to the report.

All community partners will have their logos featured in the report.

The survey will close on Friday 2nd of February.

TAKE THE SURVEY

Full Day Workshop: BDD with Cynefin – Liz Keogh


What: Full Day Workshop: BDD with Cynefin - Liz Keogh

When: Wednesday, February 7, 2018, 9:00am to 4:45pm

Where: The King's Centre, King Street, Norwich, NR1 1PH

How much: £130.00

RSVP: https://www.meetup.com/Norfolk-Developers-NorDev/events/245781564/

Behaviour-Driven Development is a practice in which we talk through different examples (scenarios) of how a system might work, from the perspective of its many users. In this unique tutorial we mix BDD with Cynefin, the sensemaking framework that helps makes sense of the world around you and the problems you encounter depending on their predictability.

The course provides thinking and conversational tools to enable teams, product owners and managers to address risk early, develop a deep understanding of requirements at different scales, shorten the time needed to reach that understanding, produce high-quality, innovative solutions, and create human-readable, relevant and memorable tests as a by-product… and it's not just applicable to software!

For each outcome, attendees will demonstrate the skill during interactive exercises in the course.

BDD

  • Explain BDD and its practices
  • Create well-formed scenarios which are relevant to your own domain
  • Use conversational patterns to draw out new scenarios and explore scope
  • Discuss how best to engage Developers, Testers and Analysts or Business Experts in conversations
  • Identify and design mechanisms for quick feedback using single scenarios


Cynefin

  • Explain the Cynefin model and how it relates to BDD and Specification by Example
  • Estimate the level of complexity in different requirements phrased at different scales
  • Predict when an unelaborated requirement is likely to cause conflict or excessive discussion
  • Discuss shortcuts to apply to well-understood requirements to reduce analysis and planning time
  • Differentiate between well-understood, domain-specific, and innovative / uncertain aspects of work through using scenarios in conversations


Capability Red

  • Identify core and incidental stakeholders for a project
  • Generate a map of desired capabilities from lower-level stories and scenarios
  • Identify risk and uncertainty in capability maps
  • Discuss prioritization of long-term plans accordingly
  • Decide whether to engage stakeholders before or only after implementation (educators vs. gatekeepers / checklist)
  • Phrase capability-level problems in problem-space language, without diving into solution-focused features
  • Identify continuous capabilities to which BDD can be applied using monitoring (non-functionals and other non-discrete requirements)
  • Discuss monitoring mechanisms, including manual processes and compliance / governance where applicable.

Please note that automation of scenarios will be mentioned in this course, but is out of scope; this course focuses on the conversational and analytical aspects of BDD.




Mini Habits: Smaller Habits, Bigger Results

Mini Habits: Smaller Habits, Bigger Results
Stephen Guise  (Author)

ISBN-13: 978-1494882273

I’ve read quite a few self help books and while they always seem really good at the time, I’m not particularly good at following through. I guess I don’t necessarily have the willpower or the presence of mind to do what they recommend.

Mini Habits are different. They’re to small for failure.

There’s lots of repetition, which is slightly irritating until towards the end of the book the when the author hints as to why. As the author often says, you start with ridiculously small habits, the reoccuring examples are one pushup a day and writing 50 words a day, because it gets you into the habit, making it easier to do more. But you only have to achieve the small habit you set out to do. That’s what success looks like. So you can’t fail.

The book was recommended to me by my good friend Tom Bool. Soon after I started reading the book I started walking everyday right around the park. This took a good 30 minutes or more. Will power failed me some days. Now I make sure I walk for 15 minutes every day. Most days I do more as I walk to work. If I don’t walk to work I do 15 minutes or more in the park.

In addition to this my habits are drinking a pint of water a day and reading two pages of a book a day. Everyday I drink more than a pint of water and my incentive is that I don’t have a cup of tea until I’ve drunk my pint. I’m finding reading is enough reward in itself and I’m usually reading more than two pages a day. But if I haven’t found the time to read, I know I can read two pages just before bed.

I wish I’d read this book when I was still responsible for sales calls, because I could have done one a day which would be much easier than the 10 I’d often try and I could have been a success every day.

New Tech Startups born in 54 hour Sync The City event

From the moment I walked into the refectory at the Cathedral, ahead of the Saturday night pitches, I felt there was something special going to happen. It wasn’t until the pitches actually began an hour or so later, that I realised exactly what it was.

I’m ashamed to say I’ve never been to Sync The City, despite it being in its fourth year. The idea behind the event it to build a tech based startup in just 54 hours and then pitch for funding at the end. It was these final pitches I had come to see.

Twelve startups waited anxiously for Fiona Lettice, the Pro-Vice-Chancellor of the UEA, SyncNorwich and Sync The City organiser, to make her introduction to this year's event. She described Sync The City as The Apprentice crossed with Dragon’s Den, with all the tension and hard work compressed into a little over two days. With this, and the prize of £3,000 in funding on their minds, the twelve groups began their pitches.

When I’d been in the refectory earlier there was clearly some concern about these pitches, but every single one was excellent. I was expecting lots of hesitation in the delivery, having been put together under the pressure of the time limit, but there was hardly any. The styles, methods, number of presenters, etc. for each pitch varied greatly, which helped keep my interest to the end.

By only the second pitch I knew what it was that felt special when I had arrived. It was the sense of comradery shared by everyone who was taking part - a real feeling that they were all in it together, regardless of who won at the end of it all.

There was a clear winner for me - a team called Footprint whose product helped individuals identify all of their data on the internet.


The People’s Prize, as voted for by the audience, went to Unwind, a chatbot intended to help with mental illness.



The official judges, Ian Watson (CEO Start-rite shoes), Chris Sargisson (CEO Norfolk Chamber), Kirsty Jarvis (CEO Luminus PR and Jazz Singer), Juliana Mayer (CEO SupaPass) and Wayne Taylor (CTO Thyngs) chose Lone Safe, a team who developed a system for keeping lone workers safe, as the overall winner.



The runners up were a team called ViaCab who were developing an app for hailing Black Cabs.



The explosion of excitement from the winning team and the audience alike was incredible! After Lone Safe were led off to sign the paperwork for their prize money, and Sean Clark brought the event to a close, they could be heard still celebrating in a side room, excited to be able to make their startup a reality.

Event: How Norfolk Chamber of Commerce can help digital business!


How Norfolk Chamber of Commerce can help digital business

When: Tuesday 5th December, 7.30am to 8.30am.


How much: £13.95


7.30 am Breakfast

7.50 am How Norfolk Chamber of Commerce can help digital business

8.30 am Finish

Successful Norfolk entrepreneur Chris Sargisson was appointed as Chief Executive of Norfolk Chamber of Commerce in June 2017. Chris was educated in Norwich and lives in the city with his wife and two children. He worked in the 1990s shaping Norwich Union Direct before leaving to set up and launch its4me plc, one of the UK’s most successful online car insurance brokers and major Norwich employer. Chris also created House Revolution, one of the UK’s first online estate agencies, alongside running his own business consultancy practice which has helped organisations of all sizes across the UK.

At the nor(Dev) breakfast, Chris will explain how Norfolk Chamber can help you to raise the profile of your digital business, highlight you as an expert in your sector and increase awareness of your brand. Chris will demonstrate how Norfolk Chamber can ensure your business content, press releases and promotions reach the maximum number of potential readers.

Free parking is available at the Maids Head, but make sure you give your car registration number to reception before you leave so as not to be charged.

Lisa Vincent Reconnects with her Comfort Zone at nor(DEV):biz.

My comfort zone had left the building.

Heading out on a cold, dark, Monday evening to yet another Norwich networking event is not everyone’s cup of tea. It’s certainly not mine, and definitely not with the cream of the Norfolk tech sector midway through my first attack of a winter cold in I don’t know how long.

We all do things we think might help us to build relationships in business and gain favours with those people around us that might help to push us in the right direction. Accepting an invitation to the November nor(DEV):biz dinner at The Library Restaurant in Norwich was one of those such occasions.

I had worked opposite The Library for about 3 years and not actually made it into the building. Seeing as I have been known to travel many miles through the most challenging of conditions for some decent eats and beautiful architecture, I wrapped myself up and loaded with tissues, I braved the elements resolutely deciding to be back home and in bed by 9:30pm. I could get through this. I would dine and dash.

When I arrived just after 7pm, there were about 20 people gathered in the bar, discussing all manner of tech related topics I knew nothing about. A quick scan revealed that I didn’t know anyone in the room either. I hadn’t just stepped out of my comfort zone. My comfort zone had left the building, the locks had been changed and the eviction notice was nailed firmly to the front door. As my heart sank further into the 120-year old oak floor, one of the other attendees warmly introduced themselves. With that, so did another and third asked if I would like a drink. Result!

We moved upstairs to a private dining room for the main event where I got chatting to a number of people from various sectors, not just tech. We discussed work, families and life, as well as the issues people were facing in business. Which, it turns out, is the same whatever sector you’re in.

The energy in the room was very different to other ‘networking’ events I’ve been to. It felt more human and more open, more confident even. This was a group of some of the brightest minds in Norwich. Intelligent and engaging human beings who are passionate about what they do, enjoying dinner together in lovely surroundings. There was no agenda, no selling, just an unpretentious coming together of intelligent thoughts, ideas and the potential for collaboration with a genuine desire to help each other.

Between courses we listened to a personal account from Laura Flood, Lecturer in IT from City College Norwich, about her own journey into tech and how businesses can help and support new talent into the sector here in Norfolk. If Norfolk is going to be competitive, we need to build the right skills base and create the right jobs for our young people that also benefit the businesses that employ them.

Rather than being irritating, the lengthy delay before the dessert arrived at 10pm, provided a welcome opportunity to talk to even more people in the room. These included software engineers, branding specialists, digital agencies, senior business banking staff and even an accountant.

It seems that in the past, fear may have held me back from exploring the vibrant tech scene we have here in Norwich. If my experience of the nor(DEV)biz: dinner is anything to go by those fears are wholly unfounded. This is an area of business, with a culture, energy and group of individuals I would love to work with more.

I really enjoyed my evening. The food was great, the company fantastic and The Library Restaurant is a stunning location. I’m pleased to report that by the time I left, not only was I firmly reunited with my comfort zone, but we’re planning on attending the December nor(DEV)biz: dinner together.

Words: Lisa Vincent
Norfolk Developers: norfolkdevelopers.com

What Makes a ‘Machine’?


Defining what it is to be a machine is tricky to say the least. In everyday terms a machine is something man-made that performs an automated function. Computers are often referred to as machines but they are much more than the limited definition above. Perhaps, instead of trying to pin down exactly what a ‘machine’ is in the 21st century, it would be more pertinent to define what a machine is to us.

Isaac Asimov once described machines as ‘the true humanising influence’. In his mind machines would only be used to perform functions and carry out tasks that make life possible, leaving humans more time to do the things that make life worthwhile. Essentially through their ability to perform mundane but necessary actions, machines would allow us to indulge in every part of life outside basic functions, to allow us to enjoy what it is to be human. From a more modern writer’s point of view, machines have gone beyond their initial point of freeing us to taking us over. Stephen King focuses stories on machines gone mad in our increasingly automated world. In his film ‘Maximum Overdrive’, a classic Eighties trashy horror, any machine with moving parts becomes homicidal. Lawnmowers, Walkmans, vending machines and lorries are all affected by a passing comet’s radiation (don’t think about it too hard, it’s not meant to be taken seriously), come to life and start killing people. The only solution (spoiler alert) is to find a place where there are no machines, hide there and wait for the astrological phenomenon to pass. In the film our plucky heroes manage to find a sailing boat and a completely deserted island in the middle of a lake, but in reality finding a place without the presence of even the most basic machine would be practically impossible. In his book ‘Cell’, King uses the ubiquity of the mobile phone to reset the whole of humanity back to its animal instincts. Anyone who doesn’t have a cell phone at the time is soon killed and eaten by those that did. In his view technology and automation are so pervasive that they can plausibly (forgetting the green comet radiation) be used to cause global disasters affecting the whole of humanity. Not a virus or giant tidal waves, but machines we invented and built ourselves.

Conversely, anarchic cartoon South Park showed us that while we might think we don’t need machines, we still want them, especially when it comes to fulfilling mundane, everyday tasks. Characters in a recent episode complained that they were losing their jobs and being replaced by machines, but when given the chance to work as the electronic assistant ‘Alexa’ in the Amazon Dot device, they found the job so demeaning they quit. They realised that adding items to shopping lists and playing songs on demand were jobs that were beneath human beings and left Alexa to it. Who knew that technology would evolve to the point where an episode of South Park would prove a point made by Isaac Asimov nearly fifty years earlier?

Popular culture and plot devices aside, machines, of any kind, were created for a purpose – to make things better. Either to speed up processes, increase yield, reduce workload; to make things safer, quicker or more accurate. When we see a machine in this way, they become a tool to be used, rather than technology to be relied upon. We choose to use them, rather than to not be able to live without them. Rather than our future coming crashing down on us because of our reliance on our own creations, machines will hopefully become assistants to our way of life and give us more time to enjoy it. As Asimov said “It is machines that will do the work that makes life possible and that human beings will do all the other things that make life pleasant and worthwhile.”

Words: Lauren

Originally published: Naked Element

W.A.S.P. Reidolize The Crimson Idol

If I had to give someone an album which was an example of heavy hetal, The Crimson Idol would fulfil the criteria. It is the best heavy metal album by any band ever and the second best album by any band ever. It’s not thrash, progressive or power metal. It’s just heavy metal.

Right from the opening track it’s clear why WASP’s 1992 masterpiece is the ultimate heavy metal album. Line up changes have always plagued WASP and by the time of the Crimson Idol, long time guitarist Chris Holmes had left the band and only Blackie Lawless was left. Did it matter? No, Blackie writes everything anyway and on The Crimson Idol he played everything except drums and lead guitar.

The first thing you notice is the the drums. They’re different and significantly better and more intricate than on any other WASP album. Then there’s the lead guitar work. Chris Holmes is good, but he’s no Bob Kulick (brother of Bruce who played with KISS in the early 90s). Of course you’ve got that signature BC Rich guitar sound and when you combine all of this, Blackie Lawless's unmistakeable vocals and a heavy dose of the ‘higher you fly the further you fall’ concept album lyrics culminating in the The Idol, the best song with the best guitar solo ever, it makes for a magnificent album.

I’ve seen WASP several times, including them playing The Crimson Idol all the way through in Nottingham in 2007. The concern then was whether latest guitarist Doug Blair would be able to perform The Idol guitar solo live as well as Bob Kulick had on record. No worries there it turns out. So I was really looking forward to seeing it again in Norwich in 2017.

However, I’m increasingly of the opinion that Blackie Lawless and long time bass player Mike Duda are beyond giving a shit and just going through the motions. They barely move, Blackie spends quite a lot of time with his back to the audience and only speaks to us briefly in the encore which consists of just four songs. Neither smile. Blackie looks a mess. Mind you, so does most of the audience. Adding insult to injury and complete contempt for the audience, Blackie doesn’t switch to an acoustic guitar for The Idol. Playing those parts on electric guitar changes and degrades the song. Fortunately Doug Blair and new drummer Aquiles Priester are superb musicians and showmen throughout. The definition in the UEA LCR PA could have been better.

Doesn’t sound like I enjoyed it does? I did! It was fantastic. It was amazing to step back into my teenage years of 25 years ago. 2015’s Golgotha is the only good WASP album since 1995’s Still Not Black Enough and the title track was a fantastic bonus in the encore. WASP have consistently released albums over a long career. They don’t seem to be going anywhere soon, so if you get the chance, go and see them. You’re unlikely to be disappointed.



Pattern: Single CrUD Transaction

Software patterns have their roots in architecture. In 1978, Christopher Alexander published a book called ‘A Pattern Language: Towns, Buildings, Construction‘ (ISBN-13: 978-0195019193) about the patterns he’d discovered designing buildings. A pattern can be thought of as a tried and tested way of doing something which can be applied in different contexts.  Think about how the Observer or Visitor pattern is implemented across languages such as Java, Ruby and JavaScript, where the different language idioms dictate slightly different implementations of the same basic pattern.

Software Patterns became popular with the publishing of the Gang of Four book, “Design patterns: elements of reusable object-oriented software” (ISBN-13: 978-0201633610) in 1994. It contains a number of patterns, most of which every developer should know, even if it’s to know to avoid the likes Singleton. However, these aren’t the only patterns! Indeed, patterns are not created, they are discovered and documented. Whole conferences are dedicated to software patterns (http://www.europlop.net/), where delegates are encouraged to bring their pattern write-ups for appraisal by their peers and the experts.

In 2000 I joined the ACCU, a group for programmers who strive for better software. I was encouraged by another member to write for the group’s magazine, but I didn’t think I’d have anything to contribute that someone better hadn’t already thought of and written about. As I gained experience I found I had quite a lot to write about and to challenge.

In the same way you’d have thought that 23 years after the Gang of Four book most if not all of the software patterns had been discovered and documented. However, it appears not and I was very surprised to find that what I’m calling the “Single CrUD Transaction” pattern, although used by many, doesn’t appear to have been written up anywhere publically. I checked with industry experts and they weren’t aware of it being written-up either.

This is my first software pattern write up and where better to share it for the first time than Norfolk Developers Magazine?

Name

Single CrUD Transaction

Intent

To create, update and delete items in a datastore within a single transaction.

Problem

Sometimes it’s necessary to create, update and delete items in a datastore in a single transaction. Traditional web applications support create, update and delete in separate transactions and require the page to be reloaded between each action.

Modern web applications allow the items of a list to be created, updated and deleted in a browser without any interaction with the server or the underlying datastore. Therefore when the list is sent to the server side it must determine which items are new, which already exist and must be updated and which have been removed from the list and must be deleted.

One simple solution is to delete all of the items from the datastore and simply replace them with the list of line items passed from the browser to the server. There are at least two potential drawbacks with this approach:

  1. If the datastore (such as a relational database) uses unique, numerical ids to identify each item in the list, the size of the ids can become very big, very quickly.
  2. If the datastore (such as a relational database) has other data which references the ids of the items in the list, the items cannot be deleted without breaking the referential integrity.

Solution

The Single CrUD Transaction pattern gets around these drawbacks by performing three operations within a single transaction:

  1. Delete all of the list items from the datastore whose ids are not in the list passed from the browser to the server.
  2. Update each of the items in the datastore whose ids match ids in the list passed from the browser to the server.
  3. Create new items in the datastore for each item in the list passed from the browser to the server which do not yet have ids.
Each action is executed within a single transaction so that if any individual action fails the list is returned to its original state.

Applicability

Use the Single CrUD transaction pattern when:

  • Datastores cannot have new items added, existing items updated and/or items removed in separate transactions.
  • Creating new ids for each item in the list each time the datastore is modified is expensive or cumbersome.
  • Removing all the items of a list from a datastore and recreating the list in the datastore breaks referential integrity.

Advantages and Disadvantages

Advantages


  • Entire update happens within a single transaction.

Disadvantages


  • Three separate calls to the datastore within a single transaction.


Event: Burkhard Kloss on The Ethics of Software & Panel: Talking to the clouds


Event: Burkhard Kloss on The Ethics of Software & Panel: Talking to the clouds

When: 6 November 2017 @ 6.30pm

Where: Whitespace, 2nd Floor, St James Mill, Whitefriars, Norwich, NR3 1TN

RSVP: https://www.meetup.com/preview/Norfolk-Developers-NorDev/events/239616865

The Ethics of Software - some practical considerations
Burkhard Kloss
@georgebernhard

As Uncle Bob pointed out, software is everywhere, and without software, nothing works.

That gives us great power, and – as we all know – with great power comes great responsibility.

We have to make choices every day that affect others, sometimes in subtle and non-intuitive ways. To mention just a few:

  • What logs should we capture?
  • How does that change if we have to hand them over to the government?
  • Are our hiring practices fair? Are we sure about that?
  • Is there bias in our algorithms that unfairly disadvantages some groups of people?
  • Is the core function of our software ethical? How about if it’s deliberately misused?

I hope to raise a few of these questions, not to provide answers – I don’t have any – but to stimulate debate.

Burhard Kloss

I only came to England to walk the Pennine Way… 25 years later I still haven’t done it. I did, though, get round to starting an AI company (spectacularly unsuccessful), joining another startup long before it was cool, learning C++, and spending a lot of time on trading floors building systems for complex derivatives. Sometimes hands on, sometimes managing people. Somewhere along the way I realised you can do cool stuff quickly in Python, and I’ve never lost my fascination with making machines smarter.


Panel Discussion: Talking to the clouds

Conversational computing, the ability to talk to, an interact with a computer via voice, is becoming more and more prevalent. Most of us now have access to an intelligent assistant like Siri or Alexa, and how we interact with the devices is being defined. But are we going in the right direction. Should we be treating these devices as just "dumb computers", or should we speak to them as we do to other people?

Our panel of experts will discuss this topic with input from the audience as we look at one of the many areas where the question is not "can we?", but "should we?".

A review: nor(DEV):biz October 2017

The idea “Networking” strikes fear into the heart of many techies, but Norfolk Developers Business or nor(DEV):biz is different. The idea behind the monthly meetings over dinner at the Library Restaurant is to get tech companies in Norwich and Norfolk talking to each other and referring business between themselves and from external parties. It’s not just about tech companies though, we also invite people from academia (City College Norwich was represented tonight and the UEA attended the very first event), those running complementary business (such as accountants, lawyers, recruiters, etc), those looking to engage software companies and even those looking to be employed by them.

"It was relaxed and much like having a good dinner with a selection of your wittiest and most worldly wise friends !"
- Chris Sargisson, CEO Norfolk Chamber

Norwich has networking events coming out of its ears. nor(DEV):biz is different, not just because of the tech focus, but also because of the people who attend. Over the years Norfolk Developers has attracted the biggest personalities in the community (that’s you Dom Davis!) including many senior tech business owners. Yes, everyone has their one minute to speak to the group about who they are, what they do and what they’re looking for, but there’s no bell when your time is up and there’s humour, passion and interaction from the entire group. This isn’t just networking, this is building, bonding and rapport with people you may well work with in the future. It’s more than that, this is fun and raucous and entertaining. It’s a night out with friends rather than a pressure cooker for sales.

“Great event .Who would have thought that by having dinner with a bunch of techies I would learn that tomato ketchup is the best thing for smelly dog issues.. it just shows, never judge a book by its cover.” 
- Chris Marsh, AT&A BUSINESS INSURANCE BROKERS

At each nor(DEV):biz a member has the opportunity, not the obligation, to do a 15 minute spotlight. This is beyond their one minuter and the opportunity to give a more indepth overview of their business or something they are passionate about.

"Great evening arranged by Paul Grenyer and Dom Davis for the Norfolk Developers group. My highlight was Nikki and Tom Bool integrating the basics of Dog Training skills with leading a team in the workplace!"
- Anthony Pryke, Barclays 

For this, the fourth nor(DEV):biz, the spotlight was given by Nikki and Tom Bool. Nikki is a puppy trainer, while Tom runs a language services business, specialising in helping businesses market themselves and grow internationally. Nikki explained how to use positive reinforcement to encourage the right behavior in puppies, with some hilarious anecdotes. Tom went on to describe how similar techniques can be used to help foster the desired behavior in the people you work with. The spotlight fulfilled my favorite criteria by being both informative and entertaining.

"What a smashing group of people and thoroughly enjoyable puppy behaviours reflection on office management. "
 - Mike Peters, Evoke Systems

You know you’re onto a winner when you have to encourage people to leave and the conversation has moved from the table to a huddle by the doorway.  I’m already looking forward to the next nor(DEV):biz in November where we’re hoping to hear from Laura Flood and Anietie Ukpabio of City College, Norwich, about the young people they’re training to be software engineers.

If you’d like to attend nor(DEV):biz, please drop Paul an email on paul@norfolkdevelopers.com.


Norfolk Developers Magazine: AI

The first issue of the Norfolk Developers magazine (outside  of a conference) is out now and free to download!

This issue focuses on A.I., a topic we thought a good one to kick off with as everyone has an opinion about Artificial Intelligence, it affects our daily lives (see Dom Davis’ column about arguments with Alexa) and it gave us an excuse to use the awesome robot image on the front cover too.

It is because of people like you that we have  such a thriving tech community in Norwich and Norfolk, a community that has turned our Fine City into a Tech City. Without this passionate and dedicated community, there would be no reason for writers to contribute to this magazine, there would be no market for local companies to place adverts for, there would be no events to report from. Mainly, there would be no one to read it so thank you

How much will my software cost?


The question we get asked the second most when speaking to clients and potential clients is “how much will my bespoke software cost to build?” This is extremely difficult to answer without lots of detail and even then the complexities of software development, the complexity of client requirements and clients changing needs over the course of a project make an accurate estimate challenging.

For this reason, most software development companies shy away from including prices on their website. In fact we checked the websites of a number of our competitors and the closest we found was one who offers a range of fee options from fixed price to a daily rate and a couple who ask for your budget when contacting them for more information. As a client, until you get that first email response, phone call or face-to-face meeting you’re no closer to understanding how much your software will cost. Even then it may be some time before you are any the wiser.

We can’t help you understand how much your project will cost until we speak to you. What we can tell you is how much projects have cost our existing clients. We’ve broken the figures down into the types of services we provide, the minimum project cost, the maximum project cost, the average project costs and where in the range most of the projects sit:

* All values are approximate, exclude VAT and are correct as of August 2017

To start investigating how your business problem could be solved with a bespoke application, please contact us for a chat

How much will my software cost?


The question we get asked the second most when speaking to clients and potential clients is “how much will my bespoke software cost to build?” This is extremely difficult to answer without lots of detail and even then the complexities of software development, the complexity of client requirements and clients changing needs over the course of a project make an accurate estimate challenging.

For this reason, most software development companies shy away from including prices on their website. In fact we checked the websites of a number of our competitors and the closest we found was one who offers a range of fee options from fixed price to a daily rate and a couple who ask for your budget when contacting them for more information. As a client, until you get that first email response, phone call or face-to-face meeting you’re no closer to understanding how much your software will cost. Even then it may be some time before you are any the wiser.

We can’t help you understand how much your project will cost until we speak to you. What we can tell you is how much projects have cost our existing clients. We’ve broken the figures down into the types of services we provide, the minimum project cost, the maximum project cost, the average project costs and where in the range most of the projects sit:

* All values are approximate, exclude VAT and are correct as of August 2017

To start investigating how your business problem could be solved with a bespoke application, please contact us for a chat

My Fantasy Gig: Polish Death Metal



It’s no secret that I like death metal. Three of my favorite death metal bands are all from Poland. I’ve been lucky enough to see all of them at least twice individually, but never together. I’ve often wondered why they haven’t all toured together. I’ve never been to Poland either so I’d settle for seeing them all together in their home country.

Decapitated

Opening the show I’d have Decapitated a technical death metal band. Their style, as you would expect, is heavy and progressive. While currently the smaller and less well know of the three bands on this bill, Decapitated are growing in popularity and are poised to step into the shoes of metal titans such as Lamb of God.

After getting into Vader and Behemoth I was really excited to read about another Polish death metal band and I wasn’t disappointed, especially as I also have a soft spot for progressive metal. Often with metal bands who have been around a while, their back catalogue is noisy and unpalatable. Not the case with Decapitated. They’re tight, aggressive and heavy from the first album through to the more recent ones. I’ve seen them play three times now (once even in Norwich) and their live performance demonstrates their skill as musicians.

Behemoth

I’d have Behemoth second on the bill. By far the biggest of the three bands, Behemoth are one of the best metal bands around at the moment. Currently (summer 2017) they are touring the US with Lamb of God and Slayer. I’ve seen them play three times. Once to about 10 people at a club in Bradford and twice to thousands at Bloodstock.

Their singer is often in the press, in Poland and around the world. He famously burned a bible on stage in Poland and was promptly arrested. Later he was diagnosed with and beat cancer.

In the early days Behemoth’s style of ‘blackened death metal’ was heavily influenced by US death metal giants Morbid Angel, but much more palatable. That said they’ve improved on almost every album. Their 2013 album the Satanist is a masterpiece of modern metal. Probably their least heavy album to date, but still crushing.

Vader

Headlining I’d have Vader. I’d describe them as the godfathers of Polish death metal. While not as popular or well selling as Behemoth, they belong at the top. Vader play more traditional death metal, sometimes with trashy tinges. I really struggled to get into their back catalogue. I just wasn’t ready, but every album is superb.

I’ve seen them twice, both times in small clubs. Their sound wasn’t the best, but being a huge fan I put that down to the PA in the clubs. I am sure that atop such a fine bill, they would shine and show what they can really do.

Of course the final encore would comprise of all three bands playing a metal classic together.

My Fantasy Gig: Polish Death Metal



It’s no secret that I like death metal. Three of my favorite death metal bands are all from Poland. I’ve been lucky enough to see all of them at least twice individually, but never together. I’ve often wondered why they haven’t all toured together. I’ve never been to Poland either so I’d settle for seeing them all together in their home country.

Decapitated

Opening the show I’d have Decapitated a technical death metal band. Their style, as you would expect, is heavy and progressive. While currently the smaller and less well know of the three bands on this bill, Decapitated are growing in popularity and are poised to step into the shoes of metal titans such as Lamb of God.

After getting into Vader and Behemoth I was really excited to read about another Polish death metal band and I wasn’t disappointed, especially as I also have a soft spot for progressive metal. Often with metal bands who have been around a while, their back catalogue is noisy and unpalatable. Not the case with Decapitated. They’re tight, aggressive and heavy from the first album through to the more recent ones. I’ve seen them play three times now (once even in Norwich) and their live performance demonstrates their skill as musicians.

Behemoth

I’d have Behemoth second on the bill. By far the biggest of the three bands, Behemoth are one of the best metal bands around at the moment. Currently (summer 2017) they are touring the US with Lamb of God and Slayer. I’ve seen them play three times. Once to about 10 people at a club in Bradford and twice to thousands at Bloodstock.

Their singer is often in the press, in Poland and around the world. He famously burned a bible on stage in Poland and was promptly arrested. Later he was diagnosed with and beat cancer.

In the early days Behemoth’s style of ‘blackened death metal’ was heavily influenced by US death metal giants Morbid Angel, but much more palatable. That said they’ve improved on almost every album. Their 2013 album the Satanist is a masterpiece of modern metal. Probably their least heavy album to date, but still crushing.

Vader

Headlining I’d have Vader. I’d describe them as the godfathers of Polish death metal. While not as popular or well selling as Behemoth, they belong at the top. Vader play more traditional death metal, sometimes with trashy tinges. I really struggled to get into their back catalogue. I just wasn’t ready, but every album is superb.

I’ve seen them twice, both times in small clubs. Their sound wasn’t the best, but being a huge fan I put that down to the PA in the clubs. I am sure that atop such a fine bill, they would shine and show what they can really do.

Of course the final encore would comprise of all three bands playing a metal classic together.

A Review: Express in Action

Express in Action: Node applications with Express and its companion tools

By Evan Hahn
ISBN: 978-1617292422

This is another excellent JavaScript book from Manning. It contains a great introduction to Express.js and I wish I’d read it sooner as it explains a lot of things about Express.js and how to use it, as well as the tools surrounding it and Node.js, which I had previously worked out for myself. If you’re thinking of writing a web application, especially one in JavaScript, I recommend you read this book first.

The book is far from perfect. It could have been a lot shorter. There is a fair amount of repetition and the chatty style makes it overly verbose and irritating in many places.  The author tries to cover too much and goes beyond Express.js unnecessarily in a few places. However, given that, it’s still not a huge book and quite easy to read.

A Review: Express in Action

Express in Action: Node applications with Express and its companion tools

By Evan Hahn
ISBN: 978-1617292422

This is another excellent JavaScript book from Manning. It contains a great introduction to Express.js and I wish I’d read it sooner as it explains a lot of things about Express.js and how to use it, as well as the tools surrounding it and Node.js, which I had previously worked out for myself. If you’re thinking of writing a web application, especially one in JavaScript, I recommend you read this book first.

The book is far from perfect. It could have been a lot shorter. There is a fair amount of repetition and the chatty style makes it overly verbose and irritating in many places.  The author tries to cover too much and goes beyond Express.js unnecessarily in a few places. However, given that, it’s still not a huge book and quite easy to read.

A review: JavaScript the Good Parts

By Douglas Crockford
ISBN: 978-0596517748

Every JavaScript developer with a pre-existing working knowledge of JavaScript should read this book. JavaScript is a powerful and varied language, but it was developed in a hurry and there’s plenty wrong with it. This book outlines the good bits of the language and highlights the bad bits and the bits you should just avoid. There’s also a fair amount about the author’s JSLint project in the appendices.

This book was written in 2008 and probably needs updating. It’s hard going in places and the diagrams did little to nothing to help my understanding. I’ve come away still wondering about new and constructors, but I know I just need to review them again when I need them and it’ll get clearer.  I’m still not sure which function declaration syntax is best, but I’m not sure it matters too much.


A review: JavaScript the Good Parts

By Douglas Crockford
ISBN: 978-0596517748

Every JavaScript developer with a pre-existing working knowledge of JavaScript should read this book. JavaScript is a powerful and varied language, but it was developed in a hurry and there’s plenty wrong with it. This book outlines the good bits of the language and highlights the bad bits and the bits you should just avoid. There’s also a fair amount about the author’s JSLint project in the appendices.

This book was written in 2008 and probably needs updating. It’s hard going in places and the diagrams did little to nothing to help my understanding. I’ve come away still wondering about new and constructors, but I know I just need to review them again when I need them and it’ll get clearer.  I’m still not sure which function declaration syntax is best, but I’m not sure it matters too much.


Getting to the route of the problem

In 2016, Venkat Subramaniam wrote an incredible book called ‘Test-Driving JavaScript Applications’ which, along with JavaScript tools such as Mocha, Istanbul, Prettier and Eslint, have made me fall in love with JavaScript and Node.js (well for UI development anyway). JavaScript isn’t a proper language, right? For a long time I argued not, because the tools weren’t available to develop software with unit tests, static analysis and code coverage. This has changed and now I’m starting to take JavaScript seriously, even beyond jazzing up a web based UI. I’m almost over the lack of static typing.

I’m currently using Express.js, a web framework for Node.js, a lot and Venkat includes a section on testing Express.js routes in his book. They’re a bit like controllers in the Modal View Controllers pattern:

router.get('/', function(req, res, next) {
task.all(function(err, tasks) {
res.send(tasks);
});
});

Venkat’s example test looks like this:

it('should register uri / for get', function(done) {
    // ...        

    var registeredCallback = router.get.firstCall.args[1];
    registeredCallback(req, res);
});

I’ve left out some mocking and other boilerplate for brevity and so that we can concentrate on the one bit I don’t like. Venkat describes the test in full detail in his book.  Take another look at this line:

    var registeredCallback = router.get.firstCall.args[1];

What it does is get the second argument for the first get route declared with the router. That’s what is returned by firstCall, the first declared route. So if there is more than one get route declared with the router and at some point you change the order in which they are declared or you declare another get route in-between, the test will break. It’s brittle.

In fact it’s worse. To get the second get route you’d use secondCall and so on. So although it’s probably a very large number, there are a finite number of get routes you can get from the router with this method. For me this rang alarm bells.
Google suggested this is the way that everyone is doing it. It appears to be the standard practice. It doesn’t sit at all well with me. I’d much rather be able to look up route in the router by its path. After a while printing all sorts of things to the console to find out the data structures, I was able to develop this:

var rh = {
    findGet: function(router, path) {
        for (var i = 0; i < router.get.args.length; i++)
            if (router.get.args[i][0] === path)
                return router.get.args[i];

        return null;
    },

   // ..
};

module.exports = {
    execGet: function(router, path, req, res) {
        var get = rh.findGet(router, path);
        if (get != null) get[1](req, res);
    },

    // ..
};

The findGet function takes a router and the path to test and returns all of the arguments declared for that route or null if it’s not found.  The execGet function uses those arguments to execute the route, meaning that the test now becomes:

it('should register uri / for get', function(done) {
        // ...

        execGet(router, '/', req, res);
    });

Which is not only far more expressive, but less brittle and less code per test. It means that the declaration order of the routes for the router no longer matters. Of course similar functions can be added to facilitate testing post, put and delete.

I wanted to write this up as I couldn’t find any other solution with Google. Hopefully it will encourage developers to write more tests for Express routes as they become easier and less brittle.


Getting to the route of the problem

In 2016, Venkat Subramaniam wrote an incredible book called ‘Test-Driving JavaScript Applications’ which, along with JavaScript tools such as Mocha, Istanbul, Prettier and Eslint, have made me fall in love with JavaScript and Node.js (well for UI development anyway). JavaScript isn’t a proper language, right? For a long time I argued not, because the tools weren’t available to develop software with unit tests, static analysis and code coverage. This has changed and now I’m starting to take JavaScript seriously, even beyond jazzing up a web based UI. I’m almost over the lack of static typing.

I’m currently using Express.js, a web framework for Node.js, a lot and Venkat includes a section on testing Express.js routes in his book. They’re a bit like controllers in the Modal View Controllers pattern:

router.get('/', function(req, res, next) {
task.all(function(err, tasks) {
res.send(tasks);
});
});

Venkat’s example test looks like this:

it('should register uri / for get', function(done) {
    // ...        

    var registeredCallback = router.get.firstCall.args[1];
    registeredCallback(req, res);
});

I’ve left out some mocking and other boilerplate for brevity and so that we can concentrate on the one bit I don’t like. Venkat describes the test in full detail in his book.  Take another look at this line:

    var registeredCallback = router.get.firstCall.args[1];

What it does is get the second argument for the first get route declared with the router. That’s what is returned by firstCall, the first declared route. So if there is more than one get route declared with the router and at some point you change the order in which they are declared or you declare another get route in-between, the test will break. It’s brittle.

In fact it’s worse. To get the second get route you’d use secondCall and so on. So although it’s probably a very large number, there are a finite number of get routes you can get from the router with this method. For me this rang alarm bells.
Google suggested this is the way that everyone is doing it. It appears to be the standard practice. It doesn’t sit at all well with me. I’d much rather be able to look up route in the router by its path. After a while printing all sorts of things to the console to find out the data structures, I was able to develop this:

var rh = {
    findGet: function(router, path) {
        for (var i = 0; i < router.get.args.length; i++)
            if (router.get.args[i][0] === path)
                return router.get.args[i];

        return null;
    },

   // ..
};

module.exports = {
    execGet: function(router, path, req, res) {
        var get = rh.findGet(router, path);
        if (get != null) get[1](req, res);
    },

    // ..
};

The findGet function takes a router and the path to test and returns all of the arguments declared for that route or null if it’s not found.  The execGet function uses those arguments to execute the route, meaning that the test now becomes:

it('should register uri / for get', function(done) {
        // ...

        execGet(router, '/', req, res);
    });

Which is not only far more expressive, but less brittle and less code per test. It means that the declaration order of the routes for the router no longer matters. Of course similar functions can be added to facilitate testing post, put and delete.

I wanted to write this up as I couldn’t find any other solution with Google. Hopefully it will encourage developers to write more tests for Express routes as they become easier and less brittle.


Node.js the Right Way: Practical Server-Side JavaScript That Scales

By Jim R. Wilson
ISBN-13: 978-1937785734

Node.js the Right Way is a fantastic little book. It’s a small book (but then it’s Pragmatic exPress) and it doesn’t go into anything in much detail, but then that’s what makes it fantastic. It gives a useful and practical overview of writing Node.js server side applications and explains many of the tools and JavaScript patterns which will be useful to Node.js programmers.

It starts off with examples of manipulating the local file system using Node.js. This struck me a little odd as the only thing I tend to use the local file system for is reading configuration files. If I need to write a file I tend to put it in Amazon S3. However, this is genius and looking at how to manipulate the filesystem gives some useful insights into Node.js programming.

The book then goes on to look at networking with sockets, something which is often neglected in a world where we expect everything to be RESTful. There’s then a tour through scalable messaging, including clustering, how to access databases and how to write web services, including JavaScript promises and generators!

The final chapter covers writing a web application with a single page front end and authentication. This is the only place the book falls down. Too much is covered in two short a chapter. It’s still quite useful though.

This is not a book for a novice JavaScript or even a novice Node.js developer, but for once a little knowledge is not a dangerous thing and Node.js the Right Way will help increase that knowledge. It even led me to believe JavaScript might actually be the future.

Node.js the Right Way: Practical Server-Side JavaScript That Scales

By Jim R. Wilson
ISBN-13: 978-1937785734

Node.js the Right Way is a fantastic little book. It’s a small book (but then it’s Pragmatic exPress) and it doesn’t go into anything in much detail, but then that’s what makes it fantastic. It gives a useful and practical overview of writing Node.js server side applications and explains many of the tools and JavaScript patterns which will be useful to Node.js programmers.

It starts off with examples of manipulating the local file system using Node.js. This struck me a little odd as the only thing I tend to use the local file system for is reading configuration files. If I need to write a file I tend to put it in Amazon S3. However, this is genius and looking at how to manipulate the filesystem gives some useful insights into Node.js programming.

The book then goes on to look at networking with sockets, something which is often neglected in a world where we expect everything to be RESTful. There’s then a tour through scalable messaging, including clustering, how to access databases and how to write web services, including JavaScript promises and generators!

The final chapter covers writing a web application with a single page front end and authentication. This is the only place the book falls down. Too much is covered in two short a chapter. It’s still quite useful though.

This is not a book for a novice JavaScript or even a novice Node.js developer, but for once a little knowledge is not a dangerous thing and Node.js the Right Way will help increase that knowledge. It even led me to believe JavaScript might actually be the future.

Know your hammer from your screwdriver: The right tool for the job

As software developers, we at Naked Element, are skilled and experienced in a number of different programming languages and aware of many, many more. Choosing the right programming language for a piece of software is as important as choosing a hammer to knock in a nail, a flat headed screw driver for a flat headed screw and a cross headed screwdriver for cross headed screw. However with software it’s far more complicated as there isn’t always just one tool for the job.

It’s also important to consider the skills you have at hand. For example, you wouldn’t usually ask a plumber to fix your electrics or an electrician to fix your plumbing. However, given enough time most plumbers could learn to do electrics and vice versa. Generally people with a talent for practical things can easily pick up other practical skills. It’s the same with software developers, but you have to consider whether the investment in new skills will return sufficient results in an acceptable time frame, or whether to risk compromising your margins by bringing in already experienced outside help. It’s not an easy decision!

Software developers (the good ones at least) love learning new things - programming languages in particular - but there are divisions of course. Some software developers are only interested in writing software for Microsoft Windows, for example, or for Open Source platforms such as Linux and the tools they use are quite different. It’s even more pronounced with Android developers and iPhone developers! You don’t often get developers who like a bit of everything, but it does happen, and those are the sorts of developers we have at Naked Element.

It’s true that we’d happily write Java (a general purpose programming language aimed at open source software development) all day long, but that wouldn’t allow us to develop complete pieces of software. We regularly use various combinations of Java, Ruby on Rails and JavaScript in order to get the best result. We’ve turned our hand to Python and, more recently, Microsoft core languages such as C# and VB.net too. It depends what our clients need and our assessment of the right tool for the job. Sometimes it’s not even about choosing a programming language. Sometimes it’s about choosing pre-built software, such as Wordpress, and customising it to our client’s needs. We wouldn’t use Wordpress for anything more complicated than a simple e-commerce system, but for websites, including ours, it’s the right tool for the job.

So when you’re choosing your software development partner, consider whether they’re using the right tools for your project or whether they’re just using the hammer they’re familiar with to knock in your screw.

Know your hammer from your screwdriver: The right tool for the job

As software developers, we at Naked Element, are skilled and experienced in a number of different programming languages and aware of many, many more. Choosing the right programming language for a piece of software is as important as choosing a hammer to knock in a nail, a flat headed screw driver for a flat headed screw and a cross headed screwdriver for cross headed screw. However with software it’s far more complicated as there isn’t always just one tool for the job.

It’s also important to consider the skills you have at hand. For example, you wouldn’t usually ask a plumber to fix your electrics or an electrician to fix your plumbing. However, given enough time most plumbers could learn to do electrics and vice versa. Generally people with a talent for practical things can easily pick up other practical skills. It’s the same with software developers, but you have to consider whether the investment in new skills will return sufficient results in an acceptable time frame, or whether to risk compromising your margins by bringing in already experienced outside help. It’s not an easy decision!

Software developers (the good ones at least) love learning new things - programming languages in particular - but there are divisions of course. Some software developers are only interested in writing software for Microsoft Windows, for example, or for Open Source platforms such as Linux and the tools they use are quite different. It’s even more pronounced with Android developers and iPhone developers! You don’t often get developers who like a bit of everything, but it does happen, and those are the sorts of developers we have at Naked Element.

It’s true that we’d happily write Java (a general purpose programming language aimed at open source software development) all day long, but that wouldn’t allow us to develop complete pieces of software. We regularly use various combinations of Java, Ruby on Rails and JavaScript in order to get the best result. We’ve turned our hand to Python and, more recently, Microsoft core languages such as C# and VB.net too. It depends what our clients need and our assessment of the right tool for the job. Sometimes it’s not even about choosing a programming language. Sometimes it’s about choosing pre-built software, such as Wordpress, and customising it to our client’s needs. We wouldn’t use Wordpress for anything more complicated than a simple e-commerce system, but for websites, including ours, it’s the right tool for the job.

So when you’re choosing your software development partner, consider whether they’re using the right tools for your project or whether they’re just using the hammer they’re familiar with to knock in your screw.

Sign on the Dotted Line – Why Contracts are Important

Contracts might seem like something only big business needs, and many small companies work without them, but if your work is important to you, it is vital to have a contract in place. A well put together contract can make a business relationship stronger and more successful, so it is worth investing some time and effort in getting a contract just right.

When people think of contracts, they often seem daunting, filled with complicated language only solicitors understand, fine print made to confuse the signatory and seemingly endless clauses that only apply in the most unique of circumstances. Documents like this are off putting, and occasionally detrimental to the business process, especially at the beginning of a new working relationship. Contracts don’t need to be pages and pages long, or contain lots of legal jargon or penalties, the most important thing is that all parties understand the content of the contract and all are in agreement as to their own responsibilities. It is very important to make clear what is expected of each party and what will happen if either side fails to keep up their end of the agreement. Being clear on cost is essential too - what is included in the charge and, very importantly, what is not included. A good contract should only contain information relevant to that particular piece of work and should be written in simple, understandable language where possible. Having someone sign something they don’t understand is not a good way to begin!

For general terms of business, applicable to every piece of work, a Master Service Agreement can prove useful to accompany each specific work contract and Naked Element agrees and signs an MSA with every client. This MSA does not oblige either party to work with each other, it merely details the quality of the service or product, each party’s availability throughout the business relationship and the responsibilities they have to each other. Only once a schedule is signed, does it become a binding contract. The MSA defines the confidentiality clauses, copyright details, intellectual property rights, payment terms and the scope of charges as well as liability from each party. These key details are indispensable for any business, whether the project is worth £500 or £5,000,000 as they are crucial if something were to go wrong.

Contracts also shouldn’t be designed to catch someone out, or tie them down unnecessarily, they should be an agreement, put together for the benefit of all parties. Where possible, a clever business person should be open to discussing and amending a proposed contract before it is signed if the other party wishes to make changes. It is also often beneficial to include a clause allowing either party to revisit a contract for adjustment after a set period of time. Being flexible and open to future issues in this way increases trust between parties, making a successful business relationship more likely.

A good contract should -

  • Only include relevant information
  • Use simple language
  • Outline benefits of the contract to both parties
  • Be negotiable
  • Be adjustable where appropriate

With a proper contract the client will feel they can depend on the product or service they are paying for and can rely on the contract to ensure they will not be out of pocket if something goes awry. By the same token, the service provider is protected by the contract if a client should renege on something that was previously mutually agreed upon. A good contract, that has everyone's  interests covered equally, makes a business seem more trustworthy, as well as more professional, and if everything goes well, more likely to do business again.

Words by Lauren.

Sign on the Dotted Line – Why Contracts are Important

Contracts might seem like something only big business needs, and many small companies work without them, but if your work is important to you, it is vital to have a contract in place. A well put together contract can make a business relationship stronger and more successful, so it is worth investing some time and effort in getting a contract just right.

When people think of contracts, they often seem daunting, filled with complicated language only solicitors understand, fine print made to confuse the signatory and seemingly endless clauses that only apply in the most unique of circumstances. Documents like this are off putting, and occasionally detrimental to the business process, especially at the beginning of a new working relationship. Contracts don’t need to be pages and pages long, or contain lots of legal jargon or penalties, the most important thing is that all parties understand the content of the contract and all are in agreement as to their own responsibilities. It is very important to make clear what is expected of each party and what will happen if either side fails to keep up their end of the agreement. Being clear on cost is essential too - what is included in the charge and, very importantly, what is not included. A good contract should only contain information relevant to that particular piece of work and should be written in simple, understandable language where possible. Having someone sign something they don’t understand is not a good way to begin!

For general terms of business, applicable to every piece of work, a Master Service Agreement can prove useful to accompany each specific work contract and Naked Element agrees and signs an MSA with every client. This MSA does not oblige either party to work with each other, it merely details the quality of the service or product, each party’s availability throughout the business relationship and the responsibilities they have to each other. Only once a schedule is signed, does it become a binding contract. The MSA defines the confidentiality clauses, copyright details, intellectual property rights, payment terms and the scope of charges as well as liability from each party. These key details are indispensable for any business, whether the project is worth £500 or £5,000,000 as they are crucial if something were to go wrong.

Contracts also shouldn’t be designed to catch someone out, or tie them down unnecessarily, they should be an agreement, put together for the benefit of all parties. Where possible, a clever business person should be open to discussing and amending a proposed contract before it is signed if the other party wishes to make changes. It is also often beneficial to include a clause allowing either party to revisit a contract for adjustment after a set period of time. Being flexible and open to future issues in this way increases trust between parties, making a successful business relationship more likely.

A good contract should -

  • Only include relevant information
  • Use simple language
  • Outline benefits of the contract to both parties
  • Be negotiable
  • Be adjustable where appropriate

With a proper contract the client will feel they can depend on the product or service they are paying for and can rely on the contract to ensure they will not be out of pocket if something goes awry. By the same token, the service provider is protected by the contract if a client should renege on something that was previously mutually agreed upon. A good contract, that has everyone's  interests covered equally, makes a business seem more trustworthy, as well as more professional, and if everything goes well, more likely to do business again.

Words by Lauren.