Computer Engineering at Trinity College Dublin
I'm really drawn to most aspects of technology, programming, engineering, woodworking and music.
Please see my CV for more info.
These are the languages and frameworks I have been using lately and am most comfortable with. However learning new languages is always fun and once you have a good grasp of the basics of computer science, usually don't take too long to pick up!
Node is a fairly new language and as such I dont have too much experience with it (although it is what I am primarily working in at the moment). The widespread acceptance of Node means that it is one of the best languages for getting a project off the ground as there are often fantastic open source packages which can really speed up the development process. I have mainly used Node for developing REST APIs with the popular Express package along with Mongoose (for MongoDB) or Sequelize (for PostgreSQL).
React Native is one of my favourite frameworks at the moment. I had used other hybrid frameworks before (namely Ionic / Cordova) and never really felt like the end product was up to scratch. React Native apps really don't suffer from these problems and provide a great user experience. Developing is also a breeze thanks to using simple markup and flex on the UI side and tools like Redux on the logic side. I spent the summer of 2017 working as a developer with Wynk using React Native.
MongoDB is a nifty framework for a document based NoSQL database. It works great with Mongoose (for Node JS) and is perfect for applications where data isn't tightly related or some data duplication is acceptable. Having all a user's data in one place makes querying extremely simple and efficient so as long as the application doesn't call for too many joins between documents, MongoDB is a great choice.
Java was the first programming language I learned and is probably where I feel most comfortable if im tackling a large project. I find the object oriented approach extremely satisfying and enjoy finding the best ways to break the problem up into clean, reusable classes.
Android is one of my favourite environments to work in (ignoring the long build times for a moment..). I recently built a top down RPG in vanilla Android with a group of friends and thoroughly enjoyed it. I really hope to work on a large scale Android project somewhere down to the line.
Working in C is extremely gratifying (and frustrating). My Data Structures and Algorithms module was taught through C and implementing things like graph traversal algorithms (eg Dijkstra's Algorithm) at such a low level (as well as working in ARM Assembly) really gave me an insight into writing efficient code and how it was all implemented under the hood.
These are some of the tools I use to build basic websites.
HTML 5 is the markup language in which websites are built. All of the code to create and display your web page, along with any static content you wish to include is done so through HTML.
CSS is the language used to style the content you create using HTML. CSS allows designers to add color, fonts, background images and much, much more and is responsible for all of the great web designs we see today!
Bootstrap is an extremely popular framework with a strong focus on mobile-first, responsive design. It was built and is used by the creators of Twitter. Bootstrap is open source, meaning it is fully customizable, and gives me complete control.
php is an backend language used for interacting with databases. A mastery of this language allows you to insert data into your database and programatically generate your webpage based on whats in the database, or even user input. For example, different content can be shown to different users through php!
MySQL works in tandom with php. Modern day webpages revolve around dynamic content which is stored in a database and programatically (conditionally) called upon. MySQL is the language used to manage, retreive and add content (text/images etc) to and from your database!
This project was an implementation of a micro coded instruction set processor built in VHDL (VHSIC Hardware Description Language). The processor is based on the design contained in the textbook Logic and Computer Design Fundamentals by M Morris Mano & Charles R. Kime. This was an extremely satisfying and rewarding project as it bridged the gap between low level assembly code (which itself bridged a gap between higher level programming constructs and basic instructions) and bare metal machine code.
The processor was built in an object oriented manor using encapsulation. A good example of this was building simple M channel x N bit multiplexer components, and using those multiplexers (along with other logic) to build more complex components such as an arithmetic unit to perform basic arithmetic. The processor can perform a bunch of basic instructions using the functional unit and main memory, but can also perform arbitrarily complex instructions due to its support for micro code. This allows more complex instructions to be performed by sequencing these basic instructions over multiple clock cycles. The implementation for these complex instructions are stored in the processors control memory and thus these complex instructions can be used as any other instruction from the point of view of the application programmer.
Please checkout my GitHub Repo for the source code and a detailed write up, including step by step diagrams of the processor running a test program.
Block Diagram of the Processor
Last year I worked as part of a team of 8 to develop a role playing, pseudo 3D, top down game. We developed the game’s entire engine from the ground up using only vanilla Android. We had the option to use a variety of frameworks and libraries such as Unity in order to get us up and running quickly, but we opted to build everything ourselves as we were all more interested in understanding the core mechanics of and building a game engine than simply designing the game.
I worked on building the core engine for the game (such as the game loop / class structure) as well as designing and implementing a system allowing world maps to be built using a simple spreadsheet and rendered in game allowing the rapid production of levels for the game.
The result was a simple Pokemon style game where the player could move around the game world, interact and fight with NPCs and dynamically change levels. However the game was designed and built in such a way that adding new functionality and levels was very simple allowing the game to grow in complexity.
Please see this repo for more info.
The Rendered Game World
The Map Creator
While you are here why not have a quick go at John Conway's Game of Life?
I built this in a couple of hours using Processing which is a great Java framework for doing things with graphics.
It is a fascinating simulation of how populations evolve over time according to 4 simple rules and can lead to some interesting results.
Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
Any live cell with two or three live neighbours lives on to the next generation.
Any live cell with more than three live neighbours dies, as if by overpopulation.
Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
Stefano Lupo Web Design 2017
Designed by Stefano Lupo