Softwire Blog


Top five technology trends for 2017


20 January 2017, by

cyber-glasses-1938449

 

With so many new buzzwords and technologies, it is hard to determine which of these actually hold any clout in the modern business arena or have what it takes to become part of our lives in the future. Whilst we don’t profess to have all the answers here at Softwire, here are the top five trends that we believe will make a real impact in 2017.
Virtual Reality

We predict that VR will continue to be one of the most significant developments in the technology space this year. VR has the potential to complement and improve daily activities.  Facebook has marked its space in this arena and we are likely to see VR-related upgrades from the leading social media players. Social media channels are one of the best routes for pushing the boundaries of this technology. Products including Google Daydream Viewer and  Samsung VR have increased the level of content for consumers to digest and we’re likely to see this with games, movies, TV series and possibly gigs.

 

Augmented Reality

With the overwhelming success of games like Pokemon Go, brands now see the huge potential of this technology. It’s taken stampedes of people in parks, racing to catch their next Pikachu to make anyone pay attention. We predict that 2017 will see consumers less apprehensive of accepting AR on their smartphones and devices. In fact, with many of the shocks the world has faced in 2016, perhaps it may offer a more appealing ‘reality‘ whilst not completely detaching us from the outside world.

Following its recent upgrade, Microsoft’s mixed reality platform, ‘Windows Holographic’,  now promises a varied new set of reality experiences for Windows users. Apple could make a play for a seat at the table with AR offerings. Who knows, Magic Leap may even start shipping at some point later this year (well, maybe…).

Where AR surpasses its counterpart, VR, is in its hardware simplicity. There is no need to purchase additional complimentary hardware, there’s a much easier gateway to the experience – a mobile device. AR has the potential to enhance existing games, toys, work and retail and we’re excited to see what comes next.

 

Artificial Intelligence

During 2016, AI has developed significantly and as a result machine learning has become more universally understood. Consumers have benefited from the increased choice of digital voice assistants and it’s likely that many big players will see 2017 as an opportunity to take advantage of consumers’ understanding and appreciation of this growing tech trend.

With Google’s Assistant, and Amazon’s Echo marketing themselves as must-haves in the home, we could see champions such as Microsoft and Apple releasing their own respective Cortana and Siri-based competitive devices.  AI will continue to grow smarter and smarter.

 

Screen Technology

We will take advantage of some of the emerging tech,  AR and VR, on 4K screens and on smartphones. Yes, smartphones.  HDTV technology is old news, curved screens and 3D just aren’t hitting the right buttons. Creating bigger and bigger TVs will not win any innovation prizes. Why is this one of our top trends? We believe that the manufacturing tides of transformation are turning towards the smaller screens, specifically those we have at our constant disposal.

We have seen OLED (organic light-emitting diode display) technology rise to become the flagship technology for smartphone screens. This year we’re likely to see the technology leveraged to help create thinner and more battery-efficient smartphones.

Why is this important? Why should anyone care? Will anyone ever really notice? Consumers are becoming more familiar with slipping their smartphones into their VR headset of choice.

With the screen so close, only higher resolutions can deliver the best experiences.

 

Security and Privacy

With the growth in artificial intelligence and IoT devices security is a key question.  We will have thousands of connect devices, all communicating via the cloud, using real-time monitoring, logging, and data analytics – data on us. Security gaps with unpatched IoT devices could lead to significant compromises more damaging than previously thought.  In order for these technologies to move forward security and privacy issues need to be taken seriously.

 

We will be closely monitoring these trends during 2017 and delivering bespoke digital solutions to our valued clients, to find out more read our blog.

 

 

A quick guide to javascript streams


16 January 2017, by

In this short article, I’ll lead you through a crash course on what a stream is, and how you can harness them to make your code more understandable.

If you want to try out any of the examples here, they will work with the excellent library bacon.js.

So what is a stream?

A stream is a sequence of objects, but unlike other sequences, it’s handled lazily (so the items aren’t retrieved until they’re required). This means that unlike a normal List, it doesn’t have to be finitely long.

You can put anything in your stream characters, numbers or even user events (like keystrokes or mouse presses). Once you’ve got your sequence, you can manipulate it in lots of different ways.

Streams can also completely remove the requirement to think about time, meaning fewer race conditions and therefore more declarative code. This removal of the need to represent time in code also results in architecture diagrams which are easy to draw and reason about.

Manipulating your stream

Now that we know the purpose of a stream, how do we manipulate it? What follows is a selection of functions that can be called on streams along with visual representations of the effect of these functions when called. It should provide everything needed to set up and use some programs which utilise streams.

map(f)

Map takes a function f. Then, for every item that appears in the stream, it applies the function f to it and produces a new stream with the new values.

scan(f)

Scan takes a function f. Then for each value in the stream, applies the function to the previous result along with the current value. This is similar to fold, but the output is a stream of all the values rather than just the final value, which fold would provide.

filter(f)

Filter takes a function f, then for each value computes the function, and if it evaluates to true, puts the value into the output stream, else discards the value.

merge

There are several ways to combine two streams. Using merge will take values from both streams and output values (in the order they are received) into the output stream.

This differs from concat, which takes two streams and returns all of the first stream before returning all of the second stream.

sampledBy(f)

SampledBy takes a function f and two streams (A and B). The function f is then called whenever a value is provided by stream A, passing in the last value from each stream. In the example below, a value is created in the output stream whenever a value occurs in the top stream. The output is then created from the value in the bottom stream.

slidingWindow(n)

SlidingWindow takes an integer n and returns the last n values from the stream as an array each time a new value occurs in the input stream.

Stream Summary

So in summary, you can use stream functions to manipulate streams in a multitude of different ways. You should use streams to remove the time component from code, allowing for simpler to understand and debug code.

This post first appeared on Chris Arnott’s blog.

Building on the global changes of 2016?


9 January 2017, by

2016 is being commonly touted as the “worst year ever“, with people referencing the high number of artist deaths and the close political results of Brexit and the US election between increasingly polarised sides. Not everyone shares this view of course, and it has prompted some retaliatory positive news pieces you can read one here .

Whichever side of the political divide you are on, decisions taken in 2016 look to set us up for big changes in 2017 and beyond.  Sorting out the finer details of Brexit, let alone assessing the impact, will be years in the making.

The pace of change has been accelerating over the recent decades, with new business and technologies coming and going at an incredible pace. Over the last few months alone, Vine is out, Snapspecs are in and Pokemon Go proved to be an instant hit across the globe.

Change means the end of certain things that we love and it means opportunity. Opportunity in your market, opportunity in training and leveraging your employees and opportunity in connecting with your clients. Technology is the foundation of all of this change. In 2016, we helped the BBC to bring coverage of Glastonbury and other events to the public as an interactive experience, we helped David Lloyd Leisure to win an award for their new mobile booking application and we started working with a leading bank to help them transform how they develop technology. You can read about them here.

An increase in change means an increase in the ways that we can help people to innovate and drive their businesses in 2017. And beyond.

Blog Picture

Softwire West CSR Report


29 December 2016, by

After another year of great work and fantastic contributions to our Corporate Social Responsibilities, the CSR Committee at Softwire West wanted to make a report that not only detailed our achievements for the year and highlighted the headline figures (such as raising a total of £2858.80 for various charities!), but also demonstrated all the great events and causes people had committed to, organised, prepared for and attended. Something that showed the hard work our staff had put in to help others whilst having lots of fun! Therefore, we created this video (with music!) to thank everyone and give them something to smile about as we approach the end of the year…

Work Experience with Social Mobility Foundation and Inspire!


22 December 2016, by

Whiteboard sessionThis summer we welcomed a number of work experience students to come and work at our office in Kentish Town. This year was our biggest intake yet: we worked with two separate charities (the Social Mobility Foundation, and Inspire!), to have a total of 20 students in our office over a 6 week period. Most of the students did a 2 week placement, and all of the placements overlapped with our summer interns (who’re mostly first and second year university students). All our placements were offered to students from underrepresented or underprivileged groups who might not otherwise have the opportunity to get work experience.

The SMF’s work experience programme is already well-established. They select really bright and enthusiastic young people from low-income backgrounds. We are one of the very first software development companies to participate in the programme.

Work experienceTo keep everyone interested, we taught some of the basics using Code Academy, and then got the students to pair up and write a simple implementation of Tic Tac Toe in HTML/CSS and JavaScript. We’ve found that Pair Programming is an effective technique for training, and use it frequently with our interns and new graduates. Each pair worked on their own implementation and practiced a standard development workflow that our commercial projects use, making changes locally and then pushing them up to GitHub to share. Once each implementation was finished, we collaborated as a group to use a shared database on Firebase. With the help of a whiteboard, pencils, and paper, the students created a shared data model so that each pair’s implementation could load the games from the other pair! All the code came together at the end of the two weeks, and the final result was excellent.

It wasn’t all diagrams and marker pens; Softwire has a strong culture combining work with fun, and we wanted the students to experience this as well. We took them out for ice cream at Ruby Violet, played pool, used the office HTC Vive to play some (occasionally jumpy!) VR games, and made sure everyone had the option of a free lunch every day.

Two of the work experience students particularly impressed us; Tobi and Fuad from Inspire! were both smart, enthusiastic, and had a great working knowledge of programming. We felt that two weeks wasn’t enough for these two, so we invited them to join our 4 week training internship program. After gaining approval from their school, they worked alongside first and second year undergraduates on a harder range of problems, including computer vision and algorithmic problems. We made sure to pair them with undergraduates, both as a learning experience and to help them get some idea of what university life is like. Both Tobi and Fuad really enjoyed the experience, and are hopefully considering applying to Computer Science courses at respected UK universities.

We wish all of the students taking part in our work experience program the best of luck, and hope that we see some of them apply for full-time roles as they graduate university!

Photos courtesy of Charlotte King Photography.

Fundraising at Softwire


22 December 2016, by

Megaphone Kearns
Check out all the awesome fundraising events we’ve held in the last 2 months!

RockStock

We happen to have lots of amazingly talented musicians here at Softwire, and this year our top lead guitarist Harry organised our popular Charity RockStock in aid of mental health charity Mind, and WarChild, a charity based right next door to us in Kentish Town who are doing fantastic work protecting the rights of children caught up in war. We had a blast and raised nearly £600, which was doubled for a total of £1200 under Softwire’s generous charity matching scheme!

Quiz

As usual, our resident quizmaster and commercial director Tom wrote and hosted our annual quiz in aid of Médecins Sans Frontières. As a result of his reputation for setting really fun and interesting quizzes, his persistent marketing campaign in the weeks leading up to the event, and his glamorous assistant Lachlan’s raffle-ticket-selling skills, we raised a whopping £4,850 for MSF after Softwire’s doubling.

The Great Softwire Bake-Off

Phil & MikeOur kitchen team Helen, Dom and Massimo have been hosting regular Charity Breakfast Clubs for Refuge. This month they put on something extra special – to help us through Bake-Off withdrawal the week after the final, they hosted a lavish bake-off with plenty of cake, tea and cocktails for bakers and non-bakers alike. We had lots of stunning entries from various Softwirians an impressive chequerboard  cake, mille-feuille, and a gingerbread house beautifully decorated by our director Dan’s two children. Star Baker went to James with his delicious fruity sponge cake. With Softwire’s matching, we raised a total of £1,400.

Charity Saturday

We’ve been holding regular Charity Saturdays since our founding director Dan came up with the brilliant idea three years ago. It’s a day in which we all come into the office to do what we do best – a normal day’s work – and Softwire donates all the money earned by the company that day to charity. It’s incredibly efficient and is by far our most successful fundraising event each year. We raised nearly £11,000 in just one day! The money went to our usual favourites – SCI, Ashanti Development, Home-Start UK and Giving What We Can.

Christmas Jumper Day

To round off the year, we showed off our silliest Christmas jumpers for Save the Children during our annual Christmas pub lunch, and raised another £145.

We’ve raised over £18k in the last two months, for a year-end grand total of over £30k, and we’ve had lots of fun doing it too!

Focus on the future, not the present


6 December 2016, by

What follows are three examples of how focusing on the future improves efficiency over focusing on the present.

Running — don’t look down

I often like to run at the weekend. I’m not sure what I’m running from, but I feel significantly more happy for the rest of the weekend if I go for a run on Saturday morning.

I’ve got some tactics to make sure I actually go for my run, as I’m very good at putting it off. Giving myself some accountability and telling my fiancée the night before helps, as she then keeps reminding me until I go out. I also find removing barriers to starting very helpful, by which I mean make sure everything is ready for me to head out the night before. This usually involves putting my running shoes by the door, and sleeping in my running shorts.

I’m not running with any particular aim at the moment, other than my happiness and fitness (although given the advice I’m giving in this blog post, perhaps I should have a more tangible goal to be aiming for), but I do use run keeper to track my run. This keeps me focused on my pace and encourages me to try my hardest. This also means I can notice when I’m speeding up/slowing down, to try and keep a consistent pace.

The main factors that I find, which affect my run are:

  • hills
  • posture
  • focus

Hills are obvious. If it’s steep, I’m slower. Posture is perhaps less obvious, and I’m not going to focus on it here, but good posture aids breathing, and consequently speed.

Focus is the big thing here. I’m much faster if, rather than staring at my feet, I focus on where I’m running to. Unfortunately, the more exhausted I am, the more difficult this is, so I’m active in checking where I’m looking while I run. If I find my head drooping, and my vision staring at the floor, I revert it back to far away, and focus on getting myself there. This helps me reach that place, and means I get to pay more attention to my surroundings as I pass them by.

Projects — where is the project going?

I’ve spoken about this before in Don’t touch the patient, but I was mainly talking about tech leads in that post. This point applies more generally to everyone on a team.

You need to know where your project is heading, or your short term decisions will be in the wrong direction.

If you only focus on your current tasks, it’s easy to not spot things that will be an issue a week/month down the line. It’s important to spot these issues and resolve them early, as they are easiest to fix the earlier you address them.

To maintain this forward looking vision, it is important to know how your current tasks fit into the larger picture. What is the higher purpose of your work, and what can you do in the present to ensure that your work fits in with everything else going on. Working this out will involve communicating with other people to know what their aims are. Often other people will come to you first, but if they don’t, ensure you know who to talk to and make sure that the conversations are happening.

Work — where am I going?

At the highest level, this focus on the future applies to your whole career. If you only ever focus on what you are doing this day/week/month, then when you come to reflect on the past year, you’ll find that you missed the chance to take the opportunities provided to you to further your career and drive it in the direction that you wanted.

Zoe Cunningham has written an excellent series of blog posts about getting the career you want, which I would recommend to anyone who wants to know more:

What do you want

Make a plan

Do it

Summary

There are lots of situations in everything you do to ensure your focus is in the right place. Your life will be easier overall if you make sure that you focus on the future, as it will allow your present tasks to be progress you to your goals. Without this anticipation, you may find that you have not ended up where you expected, with lots of work required to get back on track.

This post first appeared on Chris Arnott’s blog.

2016 internship – the Do-It For Good mobile app


1 December 2016, by

The Do-it Trust promotes the use of social technologies to enable social action and volunteering. They are a digital social action charity behind Do It which is the UK’s digital home for volunteering.  The Do-it Trust have been doing a great job promoting charity events – in just over 18 months they have registered 200,000 new volunteers.

We approached the CEO of the company, Jamie Ward-Smith, to ask whether they would like us to build a mobile app for them free of charge as a part of our summer intern’s training. We grouped the summer interns together, assigned them a senior developer as a full time trainer and they got to work on a real project and experienced the full lifecycle of a software project.

Mobile App

The aim of the mobile app is to make it easy for volunteers to apply for charity events based on their interests and skills they would like to gain.

Do It App

One of the main features of the app is a built-in chat system which enables the event organiser to contact the participants to have a group chat about the event. We also made it simple for users to share the events they are interested in on various social media platforms to create more awareness about such events.

Do It app sharing

As a result of having a mobile app, Do-It will be able to reach more people and make participating in charity events more interactive via the built-in chat system and an option to share opportunities on various social media platforms.

Do It menu

Do It oppotunity

To be able to use the app on various devices, we used the open-source mobile development framework Cordova.

About the project

The Do-It project provided the perfect balance of a meaningful real world project which would have real benefits for the users, contribute to our corporate goal of doing more pro-bono work and had relaxed deadlines to enable us to provide quality training.

The Do-it team gave us a lot of flexibility and they were open for suggestions and our ideas. This meant that interns could actively be involved in the decision making process which made everyone feel like a valuable part of the app development. We believe that the interns working on the mobile app got a fun and rewarding internship during which they learnt skills and gained valuable experience that they can take with them.

Available on the App Store and on Google Play.

Do It For Good

 

Using sqlite for dev nodeJS environments


29 November 2016, by

This post will explain how to get one click DBs working in nodeJS.

Problems with your zero to hero

I was recently working on a NodeJS project, and it was set up to use a mySQL database. This was fine for production, but meant that people joining the project had several manual steps to get the project working.

  • Install SQL server
  • Set up a SQL database
  • Update the NodeJS config to point to the database.

This isn’t too difficult to do. But I wanted to reduce the ramp up to getting the project up and running on a dev machine.

This meant moving to a database that could configure itself from whatever was checked into the codebase.

One option would have been to translate the steps above into code so that running a command would create a SQL database that was configured to be used by the code.

This would have been overkill, as there are much better options.

I chose to instead configure dev and test environments to use a local sqlite database.

Local sqlite database

A sqlite database can be added as an npm dependency, so that it is installed as part of dependency management when a new developer checks out the code.

"dependencies": {
  "sqlite3": "3.1.4"
}

Now that sqlite has been added as a dependency, it can be called from the ORM that we’re using. In this example, I’ve used Sequelize as the ORM, as once set up, it allows easy mapping of Javascript objects to database objects, as well as having built in support for database migrations.

The next thing to do is to have a configuration file which details how to connect to the database in different environments:

module.exports = {
  development: {
    dialect: 'sqlite',
    storage: 'data/dev-db.sqlite3'
  },
  test: {
    dialect: 'sqlite',
    storage: 'data/test-db.sqlite3'
  },
  production: {
    username: process.env.RDS_USERNAME,
    password: process.env.RDS_PASSWORD,
    database: 'ebdb',
    port: process.env.RDS_PORT,
    host: process.env.RDS_HOSTNAME,
    dialect: 'mysql'
  }
};

This config.js file shows that in dev and test mode, we’ll connect to the sqlite database which is stored in the file “data/<env>-db.sqlite3”.

In production, it instead connects to an RDS instance (the production machine in this project was running on AWS), with the connection details stored in the environment on the cloud machine (rather than being checked into the code).

Now we need to setup sequelize to use the correct database when it is initialised. This is done in the index.js file under the models folder:

var path = require('path');
var Sequelize = require('sequelize');
const basename = path.basename(module.filename);
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname, '..', 'config', 'config.js'))[env];
const db = {};
var sequelize = new Sequelize(config.database, config.username, config.password, config);

This code fetches the relevant section of the config.js file, and uses it to initialise the ORM. What’s not shown above is the code that loads all the models into Sequelize. We’ll leave that as an excercise for the reader.

As you can see. This file is using an environment variable to determine what mode we are running the code in. All that’s required to run in production is set NODE_ENV in the environment variables to be equal to “production”.

The app can now be started using “npm start”, which will start, using the dev database.

Migrations

Just a quick note here on using Sequelize for database migrations. You can hook your migrations into the “npm start” command above by adding the following to your package.json file:

"scripts": {
    "prestart": "sequelize db:migrate -c config/config.js"
}

Summary

So what have we learnt?

  • You should try and ensure setting up a project is as easy as possible for new developers
  • You can use different environments variables to separate out dev/test/production environments (and default to test).
  • This method can work, even if you are deploying to the cloud.
  • You can easily add database migrations into the start command of your application.

This post originally appeared on Chris Arnott’s personal blog.

What I did on my second volunteering day – Zoe


25 November 2016, by

Inspired by my first day volunteering with Barnardo’s in Marylebone, I decided to use my second volunteering day to pursue something else that I have been keen to do for a while – spending more time with older people. Now that I’m in my thirties I’m starting to realise what a different perspective can be gained with age and so I’m very keen to hear from people who have maybe four times as much experience as I do!

Once again I used the fabulous employee volunteering platform Benefacto. It was easy to find something that matched my desired area, and one click and I was booked to help run The Lunch Club with Finsbury & Clerkenwell Volunteers. FCV have been organising volunteers to help others in need since 1971 and one of their current responsibilities is to run a lunch club for local elderly residents every Monday and Thursday.

Like at Barnardo’s, a lot of the jobs that need doing are quite simple and just need manpower. So my first job was to lay the tables ready for people to arrive.

FCV-table

Second, myself and a fellow volunteer from Accenture were given the task of peeling a mountain of potatoes for the Shepherd’s Pie, followed by a large basket of cooking apples brought in by a volunteer. Luckily two regular volunteers were able to chef these into the main course and an apple strudel for dessert.

 

FCV-potatoes

At about 12pm guests started to arrive for lunch. Some are able to make their own way in, but most are brought in a minibus driven by another volunteer. We helped them in and to their seats, gave them a cup of tea or coffee and then served lunch.

 

FCV-guests1

FCV-guests2

The number of volunteers helping out through FCV is absolutely incredible. There is Andy, who seems to be the main person behind the day to day running of the lunch club. There are two chefs (there used to be three) and a driver. There is Jan, who helps with everything and Irenie, who runs the raffle. Then there is the board. This includes Felicity who started lunch club tens of years ago, Andrew the chair and Leslie the treasurer; all three dropped in to see how lunch was going on the day I was there. Judy, an ex-employee of the charity, dropped in (she brought the apples we peeled). While we were peeling, she explained how well the charity worked, not just for the clients, but also for the volunteers.

 

After lunch, Andy ran several games of bingo and I learnt some new bingo calls. Then the guests were driven home and we cleared up and washed up. There was a lot of washing up! Overall it was a great day and a fantastic experience to be part of this community of people doing good, even just for a day.