As a sort of year in review post I’ve decided to review the top 5 technologies I learned and/or used this year to solve some of my problems. Here are my top 5 technologies for 2017 in no particular order.
My university’s mobile application development class allowed the use of any third party libraries available to produce a functioning Android application. I knew that I didn’t want to manually prepare SQL statements if I could help it and I really enjoy using Eloquent ORM for Laravel projects despite ORM being considered an anti-pattern by some folks. I tried to find something similar to Laravel’s Eloquent models and Sugar ORM had been recommended by others in the WGUIT Slack channel as a good ORM to use for the project. Initially, the installation didn’t go very well, but it was only some Java version mismatches that were easily fixed with a few answers from StackOverflow (doesn’t count as a technology, otherwise that website would be number 1 with a bullet). Sugar is not as in-depth as something like Entity Framework, and seems to share a lot of similarities with Eloquent’s feature set. Unlike Eloquent, the relationships only have to be defined in the child model. This means that parent objects can’t call a method to retrieve child objects. Despite this shortcoming, Sugar made it easy to do all the SQLite querying and storing that I needed to finish my mobile application development class.
Intel released a security update this past year to patch a vulnerability in Intel’s AMT package that allows remote BIOS/machine management on certain Intel chips. The exploit, detailed in this Ars Technica Post, allows remote attackers to gain hardware level access to a remote computer. To patch this vulnerability across hundreds of point-of-sales that come through my workplace every day, I had to come up with an automated solution that would do two things. First, the solution needed to check and see if the patch was already applied. Second, the solution would need to apply the fix if not already applied. To make this happen efficiently I combined a self-extracting 7-zip archive with a PowerShell script wrapped in a batch file. By wrapping the PowerShell script in a batch file, I was able to use the syntactical sugar available in PowerShell and bypass the remote execution restrictions present in most installations of Windows. While this did present a minor security vulnerability, our secured network allows only a single machine to remotely execute code on units under test. This helps to prevent MITM attacks and HTTP is avoided by using socket connections over TCP/IP. Anyway, PowerShell really helped glue together the identifier for the vulnerability and the fix released by Intel.
This year I had a lot of school projects and most of them were in Java. However, my IT capstone project required a rapid development speed and ease of use for a web framework. I decided to use Laravel because it really is easy to get a decent website up in running in a few minutes. The PHP Artisan CLI really shines in this regard. Models, Controllers, and even Authentication middleware is super easy to create with just a few keystrokes in the command line. I also really enjoy using a lot of the really simple facades available to make logging, mailing, sessions, and form handling super easy. Laravel is just a joy to work with and the convention over configuration approach makes it really easy to make a quick application.
Most of my side projects this year were written for NodeJS. I only managed to finish one of them, but the other one (Vue JS todo app) managed to get off to a decent start. The one I managed to finish (a blog post about it will be available next week), was a Nightwatch.js script to grab all of the free Udemy courses for a certain category and language. I spent a good deal of my time this year working with Express.js and only just recently learned the middleware chain pattern that it uses. One thing I dislike about Express is that it doesn’t expressly (heh) follow the MVC pattern like other web frameworks do. I also don’t like the fact that Express really has no opinion on how it should be used. Yeah, the docs give you a basic example of req, res, next and routes but when structuring a large web application it can be hard to decide what to put where. Despite the shortcomings Express is a great framework that I look forward to working with more in the future.
Ahh, desktop application development. It will truly never die, and JavaFX is one of the more powerful UI frameworks for cross-platform development. I normally wouldn’t use JavaFX, but my university’s degree program is almost entirely built around Java. JavaFX is not quite as powerful as WPF in the .NET ecosystem but it is more powerful than the Windows Forms in that it can observe lists automatically in the markup for the UI. I really enjoy the XML as UI that WPF and .NET are going for, and it really shines in JSX syntax (React is something I hope I will be able to use more in 2017) in the React library from Facebook. Anyway, JavaFX is something I would recommend for anyone trying to do cross-platform app-development for desktops. There’s even Kotlin support through the TornadoFX framework.
Anyway, that’s my list. I hope you all had a wonderful year, and were able to code a lot of useful solutions to complex problems this year! Happy new year, and happy coding!