View Posts for Software Engineering
-
Terrible Ideas #2: Single Repo or Monorepo on Git
TL;DR Only small MonoRepos on git a.k.a. Multi Repo. Use a MetaRepo if you want one big repo with "partial" checkouts.
I used to work at a company that did single repo (not monorepo) on TFS (This Fucking Subversion?). This was a terrible experience as the checkout process was say 1-2 hours burned checking out a 30-40GB repo when I started that ballooned to 60-70GB when I got to stop using it. Microsoft had stopped supporting it as they transitioned their way into Git. Network failure meant that you could not...
-
For the Next Few Months...
Yeah, so I left my job today so I could finally focus on some of the ideas I've had full time. I've always thought that I would have come up with a consumer business on the side while I was working, but that hasn't panned out as I would like. Mostly just focused on work and creating my own infrastructure software and libraries.
What Have I Done Already?
Let's talk about that non-exhaustively. I write mainly in Rust, Java and JavaScript. Any other language is because of third party software, which is very much...
-
Why I Do Not Store UUID as CHAR or VARCHAR
Misunderstandings
UUIDs.... Such a widely badly stored and used form of identification. Would you believe that people store UUIDs are in MySQL as not only primary key, but CHAR and VARCHAR?! Poor MySQL, poor B-Tree and poor computers that are abused by incompetence.
Did you know that UUIDs have 6 versions? Did you know that UUIDs are 128bit random numbers? Did you also know that UUID stored as ASCII doubles the character length and storage space? Do you know why? Did you know that MySQL has to encode and deco...
-
Terrible Ideas #1: Database Model as a Service
Had a go thinking about abstracting database access into a service and the question I have is why? Why bother abstracting this access? What benefit does one get when abstracting the database away from an application? Let's have a go at it shall we?
Imagine starting with a monolithic application that accesses a few databases and their tables. Life is great and everytime you update version x to version x+1, you update that application to support both version until fully migrated. Lets say you start hiring peop...
-
Svelte/Sapper is F*cking Amazing
Alright alright, so I dumped React as my frontend framework for this website and that's primarily because Googlebot was being all weird in rendering my pages for search results (this was after I fixed my "mobile usability problems" with simple html!). Same reason why I dumped Aurelia, but I had Server Side Rendering working for React. Mind you, I was an Aurelia fan boi 😂. Well, I needed a new framework to use that had SSR working out of the box, but not with React or Angular style heavy bundle.
I considered...
-
Building a ZeroMQ based Service Discovery application
Introduction
Service Discovery, the phonebook of applications, is a foundation for services oriented architecture. It answers the question of how does one service dynamically discover the endpoints of another service.
It is not a new thing that came with microservices. Zookeeper is a famous application for implementing service discovery on regardless of requirements. I give it good praise for the things you can do with it. If you don't have a lot of time to spend I recommend it.
Use Case
Building on top of ...
-
Been Working on a High Performance Async Low Latency RPC Library
Lately I've taken an interest in facilitating Remote Procedure Calls (RPC). Spawned from service management (mgmt) application I've been building in Rust. Along with that service management system, I built an in memory db for it in Rust as well. Very interesting stuff for me espcially Rust. More on that some other time.
What is an RPC?
RPCs are used to communicate across applications. Like if I wanted to get a user's email then I would submit a GetUserEmailRPC Request and get back a response at some point (...
-
Building Java 9 and 10 Modules with Gradle
Introduction
Java 9 introduced the Java Platform Module System a.k.a. JMS, JPMS and Project Jigsaw. With JMS, classloading and visibility are much different than before with modules being the way to import and export classes and resources. There are articles out that that explain the changes. Mark Reinhold made a post about JMS. What are the benefits? Segmentation, smaller build sizes. Let's talk bout Gradle.
Gradle is a step above Maven as a build system. With incremental parallel builds, it is super quick...
-
Storing Creation and Updated Times Metadata in MySQL
A common use case: Let's assume you have an accounts table and you want to know when an account was created or last edited. or you want a log table that stores created time.
First thing I would think of is what fields and what data type do I need? created_on BIGINT and updated_at BIGINT.Â
Well, why not use TIMESTAMP instead?
- The year 2038 problem! Only 20 years t o go. A MySQL task is create d to track expanding the field. I'm sure it will get solved via database update, but until then... yeah.Â
- I store mi...
-
I Deployed Today and Recommend react-draft-wysiwyg as a text editor
Alright, so I deployed a new version of the blog to support canonical URLs, new text editor for the backend, and fixed how lists get shown in a post.
Fixed list numbered elements going out of bounds.
Very small update, but lists' numbered elements were showing out of the post boundaries and all that needed to happen was modify the list css to push in the numbered elements back into the boundaries. Took a google search to find the solution unfortunately.
Canonical URLs (SEO)
I've learned that canonical urls ...