My new blog post discussing automation in software development and how the automation of tasks and procedures can increase the efficiency, reliability and productivity of a software development team’s processes, giving the example of using Git Aliases to improve a team’s version control practices here
I am pleased to announce that last week I was informed by the University of Lincoln School of Computer Science that I have been awarded both the “Best BSc (Hons) Graduate” and “Best Project BSc (Hons) Computer Science” awards for the highest overall mark in the year group and highest marked dissertation, respectively.
These awards will be presented after the graduation ceremony on September 11th!
Dodgy WiFi, Visas and Relief…
It was when standing in line at immigration to leave Vietnam and enter Singapore on a 3 week backpacking trip where I managed to connect to the airport WiFi and with a shaky hand frantically refresh my emails every second to find out that after 3 years of studying at University and 1 year completing a work placement in industry I will be graduating from the University of Lincoln with a First Class Honours Degree in Computer Science. Achieving 85% overall, including scoring 100% on my final year project/dissertation (which you can read about here: I have achieved 100% on my dissertation!)
After finishing University at the end of May, I’ve managed to spend time away from exam revision to reflect on the last 4 years of my life with a view to putting it into words and sharing. I’ll begin by running with the usual cliché: my overall time at University has been an incredible experience, both academically, socially and in terms of personal growth. I’ve grown a lot and come into myself, learnt so much (about both technology, and well… life) and I’m truly proud of the experiences that I’ve had. On top of the time at University, the year working in industry between my 2nd and 3rd year is still one of the best decisions I’ve made; ultimately rewarding me in a hundred different ways, from giving me an incredibly value technological skillset in industry standard tools, to learning how to work and communicate efficiently and effectively in a professional multi-discipline team, to enhancing my work-ethic, ambition and drive. All of this on top of working 8 to 5 everyday on real-life projects that would be used by real-life people all over the real-life country, everyday… Overall, an experience that I cannot speak highly enough of, and would absolutely encourage recommend other students to do. The list of benefits really is endless… (however I attempted this with a reflective piece written at the halfway point of my placement year, which you can read here: What I’ve learn in the first six months of my first internship.)
So, what have I actually learnt?
As with any degree, the modules completed varied in difficulty, personal enjoyment and interest, and the overall set of skills gained. With final year modules such as mobile computing and cross-platform development allowing me to spend time designing and building portfolio piece applications (andrewsmithdeveloper.com) in technologies that I would be using in industry, and modules such as software engineering and final year project allowing me to write large yet concise pieces of documentation whilst simultaneously allowing me to reflect and critically analyse tools, practices and principles within the software development industry, and modules such as autonomous mobile robotics and parallel computing presenting difficult and challenging problems that needed reliable and effective solutions, often resulting in hours of intense coffee fuelled brain-racking and failed attempts; a process that ultimately lead to a stream-lined solution and a multitude of learnt lessons (mistakes = growth).
The final year project/dissertation module really should get a special mention here. Initially a module that seemed daunting and intimidating, final year project turned out to be the most fulfilling academic experience of my life, ultimately allowing me to explore subjects that I could get incredibly passionate about; diabetes, artificial intelligence and building software. From writing an initial proposal to my supervisor for a self-thought project, to building an extensive API and mobile application, to writing the final report on it and finally presenting to people in industry at the Computer Science Showcase was all incredibly rewarding and fulfilling, and I firmly believe that no academic experience has grown my abilities, experience and confidence more than completing my final year project. Upon reflection, this year long module coupled with my placement year in industry were two experiences that have made the most difference to my career, passions/interests and skillset. With high success in both massively growing my confidence and providing ease and reassurance from any imposter syndrome.
I believe that University doesn’t just teach you the tech-y stuff. It also teaches you the popular 21st century recruiter buzzwords transferable skills. When it comes down to it, you have 8 modules a year to complete, with possibly 16 different assignments to work on and hand in at a certain deadlines; something that requires organisation and time-keeping skills, as well as drive, ambition and passion. Contrary to 21st century popular belief, Red Bull fuelled all nighters are not the way to be successful in a degree. When friends asked me how I got such-and-such grade, I would always reply with a simple answer of “9 to 5 on the silent floor of the library”. A process that allowed me the freedom of my evenings and weekends, and thus a social life as well as the piece of mind that all my work was done for the day and to a good quality. It’s not impossible, you can have a social life at University and still have academic success. It’s all about maintaining your ambition and drive and keeping the balance (which don’t get me wrong, is actually very hard). These transferable skills that you learn are also so relevant to industry, and learning them at University really did ease the process of getting into the working routine for my placement year as well as for my next job.
What’s up next?
I’m happy to say that this Monday I’ll be beginning a new job as a Web Developer at Roller Agency in Nottingham. I’m looking forward to beginning this new step in my career and furthering my skills, experiences and personal development and working with a talented team on exciting new projects with modern technologies, all in a vibrant city with a budding tech scene. I’m also excited to get back to attending Tech Nottingham events and NottsJS events, something that’s always fun and rewarding.
My final University transcript is as follows:
- 3rd Year
- Final Year Project – 97% (100% on final report)
- Software Engineering – 87%
- Image Processing – 83%
- Autonomous Mobile Robotics – 81%
- Mobile Computing – 78%
- Cross-Platform Development – 78%
- Parallel Computing – 74%
- Placement Year in Industry – July 2017 to July 2018
- 2nd Year
- Database Systems – 88%
- Human-Computer Interaction – 86%
- Professional Practice – 81%
- Object-Oriented Programming – 79%
- Networks and Network Systems – 76%
- Artificial Intelligence – 74%
- Group Project – 73%
- Programming Paradigms – 55%
- 1st Year
- Operating Systems – 76%
- Programming and Data Structures – 76%
- Problem Solving – 74%
- Maths for Computing – 70%
- Algorithms & Complexity – 67%
- Web Authoring – 65%
- Computer Architectures – 60%
This month I have begun my cloud computing journey by completing the Google Cloud Platform Fundamentals: Core Infrastructure certification to give myself an introduction to important concepts, terminology and processes for working with Google Cloud Platform.
This course involved the computing and storage services available in Google Cloud Platform, including Google App Engine, Google Compute Engine, Google Kubernetes Engine, Google Cloud Storage, Google Cloud SQL, and BigQuery. As well as important resource and policy management tools, such as the Google Cloud Resource Manager hierarchy and Google Cloud Identity and Access Management.
I feel incredibly proud to announce that my dissertation/final year project for my BSc (Hons) Computer Science has been awarded 100/100 marks (subject to exam board confirmation), with feedback from academics including “the best L3 project and report of all my years as an academic”, “a highly impressive piece of work that exceeds any reasonable expectations for an undergraduate project”, “an excellent undergraduate piece of work, that could conceivably be developed further to institute real impact” and “by far the most comprehensive and insightful review in the domain of interest comparable to a doctoral dissertation literature review.“
My project entitled “Using Artificial Intelligence and Machine Learning to improve the Glycaemic Control of Insulin Dependent Type 1 Diabetics” involved demonstrating 5 different techniques and methods of artificial intelligence and machine learning that could be used to support a Type 1 Diabetic patient in managing their condition. This was presented to the patient through an API built in Node.js, Express and MongoDB and a mobile application built in Ionic 3.
Overall, this project was an incredible opportunity, and the challenges that it posed really pushed me to achieve my best work and I’m incredible proud of the final outcome and grade!
Pleased to say a few weeks ago I undertook the exam and achieved my Microsoft Technology Associate certification in HTML5 Web Application Development.
This certification taught and tested the following skills:
- Understanding the platform fundamentals
- Packaging and the runtime environment: app package, app container, credentials/permission sets, host process, leverage existing HTML5 skills and content for slate/tablet applications
- Managing the state of an application
- Managing session state, app state and persist state information; understanding states of an application; understanding the differences between local and session storage
- Debugging and testing a HTML5-based, touch-enabled application
- Touch gestures; understanding which gestures you test on a device
- Choosing and configuring HTML5 tags to display text content
- Choosing and configuring HTML5 tags to display graphics
- When, why and how to use Canvas; when, why and how to use scalable vector graphics (SVG)
- Choosing and configuring HTML5 tags to play media
- Video and audio tags
- Choosing and configuring HTML5 tags to organise content and forms
- Tables, lists, sections; semantic HTML
- Choosing and configuring HTML5 tags for input and validation
- Understanding the core CSS concepts
- Separating presentation from content (create content with HTML and style content with CSS); managing content flow (inline versus block flow); managing positioning of individual elements( float versus absolute positioning); managing content overflow (scrolling, visible and hidden); basic CSS styling
- Arranging UI content by using CSS
- Using flexible box and grid layouts to establish content alignment, direction and orientation; proportional scaling and use of “free scale” for elements within a flexible box or grid; ordering and arranging content; concepts for using flex box for simple layouts and grid for complex layouts; grid content properties for rows and columns; using application templates
- Managing the flow of text content by using CSS
- Regions and using regions to flow text content between multiple sections (content source, content container, dynamic flow, flow-into, flow-from, msRegionUpdate, msRegionOverflow, msGetRegionContent); columns and hyphenation and using these CSS settings to optimise the readability of text; using “positioned floats” to create text flow around a floating object
- Managing the graphical interface by using CSS
- Graphics effects (rounded edges, shadows, transparency, background gradients, typography and Web Open Font Format); two-dimensional (2-D) and three-dimensional (3-D) transformations (translate, scale, rotate, skew and 3-D perspective transitions and animations); SVG filter effects; Canvas
- Creating and using functions; jQuery and other third-party libraries
- Locating/accessing elements; listening and responding to events; showing and hiding elements; updating the content of elements; adding elements
- Using animation; manipulating the canvas; working with images, shapes and other graphics
- Sending and receiving data; transmitting complex objects and parsing; loading and saving files; App Cache; datatypes; forms; cookies; localStorage
- Responding to the touch interface
- Gestures, how to capture and respond to gestures
- Code additional HTML5 APIs
- GeoLocation, Web Workers, WebSocket; File API
- Accessing device and operating system resources
- In- memory resources, such as contact lists and calendar; hardware capabilities, such as GPS, accelerometer and camera
The skills learned through completing this certification, built on the skills gained during my year-long industrial placement in web development. Ultimately increasing my interest in web applications development and the development of micro-services and APIs.
Overall, the certification has provided me with a wide range of new skills that I can apply to a range of different applications and platforms, ranging from back-end services to cross-platform mobile apps and progressive web apps.
Hackathons are an absolutely brilliant way to improve skills, meet and talk with like-minded individuals and experiment with all the random/quirky/unimaginable/silly tech ideas that you could ever dream of. Whether it’s hacking together various bits of hardware to build something bigger, mashing up APIs with other APIs to create swarms of meaningful data, or simple exploring a brand new technology to create something new and applicable in the real world, you’ll definitely find it at a Hackathon. If someone has an idea, then developers + coffee + no sleep for 24 hours is an equation that will make it possible.
I spent this weekend at Lincoln Hack 2018, a Hackathon run by Digital Lincoln; a local group which brings together a diverse range of people with an interest in digital technology and the online world. I entered the “freestyle” challenge, with the primary requirement being that the hack had to be somehow related to Lincoln.
My idea for the Hack was to create an interactive game, which could be played across multiple mobile phones that were positioned next to each other in a row. This game would involve holding and releasing a button on a master device to keep some object in the air and avoid hitting the bottom or top of the screen, then once the object has made its way to the end of one phone screen it would then move onto the next phone’s screen, and so forth. My hope was this game could be played across 20+ phones. Easy right…
Lincolnshire has a great RAF heritage, with a high number of the UK’s most prominent RAF bases being located in and around Lincolnshire. With the 617 squadron, famous for being involved in the Dambusters Raid, being formed at RAF Scampton; an RAF base roughly only 5 miles away from where the Hackathon was taking place.
Therefore, I decided to give my game a Dambusters theme. There’d be a little introduction about Lincoln’s 617 squadron, then the object the user would keep in the air would be a Lancaster Bomber, and each mobile phone would be labelled with the name of a location that was on the route in the Dambusters operation. A score would increment to add an edge of competition to the game.
The build went quite well! Socket.IO worked really great, and the pixel-style 8-bit artwork of the application looked good too. Overall I was pleased with what I’d built. I even won 24 cans of red bull, being awarded the “Best use of 4 £1000 iPhones” award! However there were a number of issues, as detailed below.
Another challenge was born out of the need for the phones to move the object across a portrait screen that was in the real-world actually set as landscape mode, I initially did this through increasing the object’s position from the top of the screen, rather than the left, to appear as moving sideways when presented on a landscape device, again this could have maybe been done better, and maybe ensuring the game was only playable in landscape mode would have made things easier; as every calculation done had to take into consideration that the game would actually be played rotated by 90 degrees.
The most difficult challenge in this Hackathon project was in communicating between server and all the mobile screens in such a way that was quick, efficient and appeared seamless to the player. A number of things had to be taken into consideration in the communications, including emitting the last known x and y positions of the plane from each device back to the server and then back out to the next device along, as well as working out which particular device in the row to move onto. However this was made a bit easier by Socket.IO’s socket.broadcast.to(client_id).emit(); function which allows you to communicate with an individual client (device) via its ID, as well as the socket.broadcast.emit() which allowed me to broadcast a message to all devices connected except for the sender.
Using a new technology such as Socket.IO was quite challenging to begin with, however it quickly became apparent how powerful this technology is. Being able to communicate between devices in real-time is a feature could be implemented across such a wide variety of applications in a huge number of contexts, from real-time chat/messaging web applications to real-time interactive games like this project, there’s such a huge potential of things that can be achieved by using this technology. Socket.IO is definitely a technology that I’ll be building more projects with and looking into in more depth!
Overall, a successful and fun Hackathon, with a nice exposure to yet another interesting and new technology. Many lessons were learnt and many bugs were fixed (and created). If you’re in the technology industry, or just simply looking to get started in it, Hackathons are such a great way of mingling and working with like-minded developers, designers, students, entrepreneurs, hobbyists and tech addicts in an incredibly fun yet productive manner.