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.
Updated at November 14, 2019 at the 13th hour
A.K.A. Secrets. Secrets are not terribly interesting topic outside of servers and databases being compromised by exposed details where we raise pitchforks at those for not keeping their servers behind proper network access security and credentials encrypted. Configuration refers to values provided to software initially and while it runs by a file descriptor (file, socket) or shared memory. Environment variables are provide only at boot and cannot be changed at runtime, so I'm a fan only for constant values.
Centralized Secrets aka Don't worry about it
I was working with secrets management where I worked previously and Hashicorp's Vault was used for it. It is a pretty good product that focuses only on core product. I'm not too big a fan of centralized storage of secrets or configuration, but it is only one way to manage secrets without worrying about encryption and keys and etc. You could store many kinds of things considered secret such as credentials like API Keys, database passwords and etc. One could rotate passwords using database integration where Vault will automatically create user/passwords. Same for AWS. It does have shortcomings such as how to notify of rotation/change, but tries to mitigate it with grace periods. ...
Next Project: Task Management
Updated at November 13, 2019 at the 22th hour
I've been working for myself for almost two weeks now just trying to lay down some bases and modify some of the logos I got back from freelancers to make it look pleasant. Design and infrastructure have been my focus and that will come to a head soon. I have down a good version 1 layout of Take to Task (yes that's the name), which is only for myself.
I put up a landing page here: http://www.take2task.com that displays the logo and logotype under the moniker of "Excerion Sun" (abbreviated to ExcSn). This app uses Svelte/Sapper and is a self contained node application, aka a binary. The font uses Inter font, which I think is a really nice general legible font. I like it so much that I will switch this blog to that font some day.
It has been nice just laying the ground down for the real development.
Why task management?
Isn't Trello good enough or Monday.com? These are really good products with many loyal users and plenty of alternatives exist across many product categories which leads me to believe loyalty will always shift towards a product that jives with consumers. I will not strive to create a ...
Terrible Ideas #3: Mangling Technical Patterns
Updated at November 11, 2019 at the 18th hour
Oh boy, I remember when I started getting familiar with Software Engineering patterns and y'know these patterns have names assigned to them and try to desperately to memorize them because some day it will come in handy! I'm a true software developer if I can apply these patterns. Yeah yeah, etc etc. What I didn't know was that people would co opt these terms to mean or do something else entirely. Abuse is what this is.
The easiest and most memorable pattern in Software Engineering forever.
Unbelievable when I encountered code that was CRUD (literally and figuratively!) code named as *Factory. WTF is going on here, OK, let me Google this and see what this is supposed to do by convention. Oh, right it just builds objects that can be used elsewhere.
Maybe, just maybe, you could get away with READ and CREATE, but update and delete?! Update and Delete are unforgivable and unforgettable.
There is general agreement from some of the newcomers (<1 years) that the suffix made no sense since it did business logic, but because the suffix was being used already just monkey see, monkey do. I can't survive in that kinda environment for long. ...
Terrible Ideas #2: Single Repo or Monorepo on Git
Updated at November 02, 2019 at the 16th hour
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 work on files that you did not checkout ("Time to go home"). Transient failures would corrupt your state. The build pipeline was so coupled together due to the thought of using direct references to common libraries instead of publishing the library. Just general bad practices that intermingled due to neglect and not thinking about the effects.
I swore off .Net, never again. C# the language is ok. Honestly, If I were the CTO I would have initiated mass firings, freeze of feature dev and a move to Java. Not all at once obviously, but mindsets need to shift in order to be nimble, hire the best and worry less ...
For the Next Few Months...
Updated at November 02, 2019 at the 12th hour
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?
Created my own RPC library supporting (a)sync client/server and pub/sub so I can communicate between applications written in them over ZeroMQ. I wanted to create a plain object and communicate it without generated boilerplate like GRPC/ProtoBuf and Capn'Proto. There aren't many uses I've seen of ZeroMQ, but it is definitely being used out there.
Created a Service Discovery application that heavily leverages ZeroMQ. It also serves as the application dictionary. Any application should be able to get the host/ports of any running services. I should be able to register and configure a service. Super interesting project for me and a serious use of Rust and ...
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.
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.
Just have to say, it ...