PrettyNeat! Software Development & Design based in Malta

we code the tastiest tech this side of the globe

cartoon business person

Enterprise Web Applications

We automate systems, to keep things simple at home, in-office, or on the go.

postgres icon sqlserver icon dotnet icon vue icon

Monolith or Microservice?

Organizations are complex, but the tools shouldn't be. We'll architect a system that works for you.

cartoon cloud and human brain

Cloud Applications and SaaS

We help provide the security, high performance and cost-effectiveness of doing things online.

aws icon ubuntu icon windows icon docker icon

Serverless, Containers or VPS?

Start local, take it global. From bots to subscription services - we'll put together a platform and stack combination that scales.

cartoon hand coming out of phone

Mobile and Multiplatform

We create responsive applications that adapt to your customers’ habits no matter what their device is!

ios icon swift icon android icon java icon

Cross Platform or Native?

Sometimes a responsive web app is all it takes. Other times, the only way forward is native. We'll help you figure out when its the right fit.

cartoon engineer

pick a stack...

Websites, mobile apps, digital games, and virtual or augmented reality experiences are our bread and butter.

We work with businesses to design and develop products, modernize internal systems, and bring digital services to market.

...any stack

check out what we're up to

Multiplayer in Unity with Mirror

Once upon a time, Unity provided a first party multiplayer framework - UNet. That’s gone. Thankfully, there’s Mirror. Mirror framework: The improved UNet replacement Unfortunately, despite it still being a class leading networking solution, it was no longer directly supported by the company. In UNet’s stead, other multiplayer services came in to fill in its shoes (ex Photon), but they are notoriously more expensive (because they charge per connected “player”). That said, an individual who goes by the handle vis2k created a MMORPG framework uMMORPG - which under the hood utilized what is now known as the Mirror Networking Framework. What’s wonderful about it is that it’s API isn’t all too different from UNET and it’s free, self-hostable and open source. It’s designed to be performant and suited to any scope — from small hobby projects to full-blown MMOs. Below is a demo of uMMORPG, with 480 players in a small map. As you can see, Mirror is fast and stable. uMMORPG 480 CCU Worst Case Stress Test Setup Since Mirror is a great open source 3rd party networking plugin, it also provides a very friendly and understandable API. Step 1 You will need Unity for this :D. Download Mirror either from Unity Asset Store or from their github repository Step 2 Create a empty project (2d or 3d). Import the mirror unity package. Step 3 To make Mirror work with your empty scene, you need to create an empty gameobject called Network Manager. Next, add NetworkManager and NetworkManagerHUD components to this gameobject. If you did everything correctly, upon starting the scene you should see this. NetworkManagerHUD Now you have multiplayer game - well, minus the game :D To write your custom networking code, you need to replace MonoBehaviour with NetworkBehaviour. APIs and Development Experience The client-server aspect of Mirror uses commands, RPCs, and SyncVars - all of which are coming from the NetworkBehaviour class. Using these things, Mirror is able to give you a high quality API experience. Commands Commands are a way for the player to call functions of networked objects on the server when the player has authority over them (which the server can assign). Let’s give an example for player HP and Mana. [Command] public void CmdHeal(){ this.hp = this.maxHp; } [Command] public void CmdMana(){ this.mana = this.maxMana; } RPCs ( Remote procedural calls ) They are precisely the opposite of the commands. They are used...
Keep reading
on 25th April 2022

Technology Acronyms Explored

Technology acronyms demystified! Acronyms are great… when used wisely. They can be easier on the brain, some are actual mnemonics - hinting at their expansion’s meaning (see DRY, KISS as examples). That said, these advantages may be nullified by the sheer volume of acronyms one must recall in common technical parlance. If any expansions escape you, you are not alone. Enter the 2022 Turboencabulator The turboencabulator is a pretend machine developed in 1944, conceived to mock technobabble. Several decades later any programming paradigm argument will eventually see OOP, DRY, and SOLID in the same sentence to bamboozle opponents in very much the same spirit. Add SCRUM for good measure. Lists of expansions abound online, but most acronyms fall in one or more of the following broad categories: 1. Specific technical concepts or technologies ex. FQN: Fully Qualified Name The name of an object including all its parents’ names. Can be used to identify the target uniquely Fully Qualified File Name identifies a file in a File System, including the full path from root. It is a subset of a Fully Qualified Path Name, which may specify a directory as well. 2. Paradigms or Methodologies ex. TDD: Test Driven Development A development paradigm, using a test suite and iterative failing tests to guide the writing of minimal code and ensuring compliance after changes Slows development, facilitating robust code. Easy to misunderstand, often inapplicable Domain Driven Design is “Driven” more vaguely, stating that system design should stem from the real-world system concerned. Doing an accounting tool? Learn accounting 3. Mnemonics for good practices ex. DRY: Don’t Repeat Yourself “Dry” code is a mnemonic itself Requires identifying opportunities for modules and generalizations Deceptively easy to state, not to do, like Keep It Simple, Stupid (define “Simple”… ) 4. References the “culture” in its expansion ex. POCO: Plain Old Class Object Defines an object (in Object Oriented Programming) which has no “depth” (state/logic), convenient to hold data Often used for models of databases, easy to generate via tooling Like Yet Another Markup Language, references the “culture” in its expansion 5. Nested Acronyms ex. AJAX: Asynchronous JavaScript And XML A nested acronym containing eXtensible Markup Language Surprisingly (to many) not a technology, but rather a methodology Also an enthusiastic way of supporting a Dutch football (soccer) team 6. Retconned to Acronym ex. FUBAR: Fudged Up Beyond All Repair Slang made by mangling a German word,...
Keep reading
on 11th March 2022

Azure Devops vs Github

A tale of Microwaves & Premature Optimization. The Microwave Moment “The objective was food. What I found, was distraction.” Earlier in my life, when shopping around for a microwave (or just about any appliance), I used to be the person hunting for the most knobs and switches. Aside from the promise of convenience, every extra button represented a problem that the manufacturer had graciously worried about on my behalf, so I didn’t have to. Double win! A better person than me likely takes a lot of pride in their many buttons and knobs, pouring over the manual for tricks and tips at every opportunity; memorizing the subtle differences in icon and duration between the ‘Popcorn’ and ‘Beverage’ options; Maximizing the use of ‘Oven Mode’ when heating leftovers for that succulent crunchy finish; Certainly not accidentally resetting the clock every-time they want to set an alarm. As I’ve come to discover in my adult life, I am not that person. I began skimming through the manual once… then I got hungry. I cranked the temperature to max, and set the timer for 1 minute. I ate, and moved on with my life. Nothing has changed since. When something is still cold at the end of that 1 minute, I repeat the process… until it’s not. I now look at the many knobs and switches not as solutions to prospective problems, but as perpetual distractions whenever I reach for a bag of uncooked popcorn. If only I went for the simpler microwave… A Developer’s Siren Song: Premature Optimization Now that you understand the relevant parts of my psyche let’s meander to the tech talk. For context, at the time of writing Pretty Neat is a small agency juggling a handful of clients and internal projects. Cue our recent foray into Azure Devops. All the knobs and switches! If you can imagine it, odds are there’s a configuration option for it. Every Agile consultant’s wet dream! Look at all the knobs and switches! Just look at them… Thus, with a few days budgeted for building our workflow around Azure Devops, we began pouring through the documentation, poking around with a couple of repositories and project boards, and generally structuring things ‘by the book’. Immaculate project structures, descriptive, well labelled user stories and sprints abound. Good feels all round. That is, until the actual work of software development started pouring in. In a world...
Keep reading
on 13th August 2020
Contact us today!