My name’s Norman Ovenseri and I think that outlandish ideas are the best.

I don't publicize my social media, so if you want to get into contact by email then WHOIS query the domain.

Recent Posts

  • Why I Do Not Store UUID as CHAR or VARCHAR

    Updated at September 14, 2019 at the 16th hour


    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 decode according to your character set each UUID you decided to store as (VAR)CHAR? Did you know that write perform will suffer if you use random data as primary key? Do you know how the primary key is used in MySQL? Clustering key ring any bells?

    You didn't? Now you know! Stop bending things to fit your world view just because you do not understand how a system is designed. Convincing people that "it works for me, so I'm gonna spread the word" is self serving and under serving to people who have to maintain your system in the future.


    Store as binary. UUIDs are 128bits of randomness depending ...

  • Terrible Ideas #1: Database Model as a Service

    Updated at September 09, 2019 at the 17th hour

    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 people and splitting responsibilities into accounting, market and product. Each needs database access and have their own applications to access said database. Accounting and marketing are gonna execute SQL queries to get data while product will have common access patterns with some cases where they need to analyze data.

    Product says we wanna move to SOA, so they can move more flexibly. They start splitting up the monolith into services to handle some business cases in a more agile manner. Seeing progress on this front not being satisfying, Product now wants microservices since smaller === more agile, but at the same time Product says let's globalize our common access patterns to all databases by ...

  • Svelte/Sapper is F*cking Amazing

    Updated at June 24, 2019 at the 03th hour

    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 just writing my own framework that just pushed html/css/js, but then I remembered Svelte v3 from a couple months ago and checked it out. Boy oh boy, I was blown away by the tutorial. I'm looking at it saying this is what Aurelia was trying to do! I was excited, but more cautious this time around with switching to it. I documented what I needed for this site and other internal UIs I created to verify what I'd be losing if I did switch. Once I verified that I liked it and actually gained, I took the plunge to convert the site. Honestly, I was fighting the decision ...

  • Building a ZeroMQ based Service Discovery application

    Updated at May 24, 2019 at the 18th hour


    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 my last post for Building a low latency Async RPC library, I needed a way for my applications to at runtime whether on laptop or datacenter environment find the registered running services quickly. From the get go, you know that there has to be a way to enter and query for entries. The application would have to be able to provide the ip:host and the protocol of which I label as the service provider. Protocol is http, rpc server and rpc publisher. It would also need to provide health checking to make sure the ip:host:protocol are still valid. Finally a way to be notified of any changes.

    Building it

    Just have to say, it ...

  • Been Working on a High Performance Async Low Latency RPC Library

    Updated at March 03, 2019 at the 19th hour

    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 (or timeout if too long). If you think about HTTP, it is what browsers use to communicate with a server in order to get the data that makes up what you see here.

    My Use case

    In my case my service mgmt application will use RPCs to communicate with any application that connects to it. Most of the RPCs should be a PingRPC just to make sure that the other application is still communicating other wise it is considered down. To expand the use, I always wanted a way to connect to any of my applications and draw some data out of them (pub/sub). Namely, metrics and maybe logging in a linux ...

  • Building Java 9 and 10 Modules with Gradle

    Updated at September 24, 2018 at the 02th hour


    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! Gradle has performance analysis features such as build scan and profile reports to help with figuring out what is taking so long. The one thing about Gradle though is that it is a little obtuse sometimes. Take the time to learn Groovy since it is a superset of Java.

    So, how do we build a Java module for a single project?

    Let's say our project root starts from /Project. In the root is src and build. src contains main and etc. the usual directory structure.

    We need to declare our module with the exports and imports.

    Module File Path: /Project/src/main/java/module-info.java

    module com.newcompany.project {
    requires java.sql
    exports com.newcompany.project.common;

    Let's configure gradle: /Project/build.gradle

    Gradle, under the hood, will ...

  • Software Engineering Interviews are Arbitrary

    Updated at April 01, 2018 at the 01th hour

    You have likely have read about issues with software engineering interviews before and are reading yet another one! Well, I'm going to talk more about my experience in going through the motions.

    For now, here is a 1 hour talk by a guy named Moishe about interviewing.

    In the video he mentions that there was an experiment done with a hiring committee where their future self would reject the past selves. Probably a good thing as things do not stay the same, but at what point should one say that this candidate might be enough experience or the job? That's a hard question since each position is a moving target through the years. I won't talk about this much.

    Let's talk about my experiences

    Lemme disclose that I sign NDAs, but don't really care what they say. I'm not causing any monetary damage by posting this so if you really have a big issue about this, sue me then and blog about how much money you lost in the process....

    I interviewed onsite at Amazon, Google, Splunk, Facebook, Reddit, Cruise Automation, AirBnB and Turo. I talked to other companies in the process, but yeah either I no longer wanted to ...

  • Storing Creation and Updated Times Metadata in MySQL

    Updated at March 17, 2018 at the 15th hour

    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?

    1. 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. 
    2. I store milliseconds in database by default and TIMESTAMP doesn't support that as far as I know, call it cargo culting!
    3. I like comparing numbers rather than relying on a timestamp data type.

    There is nothing wrong with using TIMESTAMP and it comes down to personal preference. It makes absolute sense to use TIMESTAMP as you can take advantage of MySQL's automatic initalization feature, which means the database manages these two fields and it is a happy day for a developer.

    Back to BIGINT

    So we have two fields that are bigint. Now I need to make the decision on whether this will be ...

  • Learning about Blockchain and Smart Contracts

    Updated at March 12, 2018 at the 19th hour

    Recently I've picked up blockchain and more Ethereum's smart contracts as I've had interest in the decentralized trust area. [Digression: I'm mining bitcore, so I have some vested interest in learning about what I am throwing myself into.] I've recently been talking with some friends about their idea for education and blockchain and found some interest in it, not enough to join it, but enough to stay interested that maybe some day I'll join them on it. 

    Let's talk about some of the parts: Blockchain, Cryptocurrency, Smart Contracts


    Blockchain really is an interesting way to store data using "crowdsourced" computational power. Who remembers Folding at Home? I know I do since I have a PS3, though the ps3 app has folded ;). It was a crowdsourced way to help study cancer by using the computational power of the PS3 while idle. Think of the blockchain as a series of blocks where they are chained using the previous block's cryptographic hash. Each of these blocks stores some data (wikipedia says timestamp and transaction data). Transaction data can store pretty much anything on the condition that you must pay some amount of coin/bits with respect to the size of ...