Welcome

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

  • 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

    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 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

    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! 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
    Categories

    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
    Categories

    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

    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 ...

  • I Deployed Today and Recommend react-draft-wysiwyg as a text editor

    Updated at March 11, 2018 at the 18th hour

    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 are important in telling a search engine which page is the authoritative page. It makes sense to push it to the website owner considering a search engine would have to randomly pick a page out of "duplicates". Duplicates cause your search engine rank to drop or pages will be de-indexed all together. For some reason, a url ending in / and without are seen as different. As a human, I say it makes no difference. It makes a big difference path-wise. / could lead to an index page while without the '/' it would be a folder. The best way to deal with that is to just redirect from / to ...

  • Why I Think Flutter Looks Amazing!

    Updated at March 03, 2018 at the 17th hour

    It has been a while for me to get excited about a language. PHP was the first language I learned, but I wasn't excited about it. It wasn't until I discovered PHP 5 and OOP that I felt an epiphany! C++ and Java really take the cake for amazing languages. Most recent has been NodeJS with async await! A new contender has come on to the field!


    Flutter, a cross platform framework built on the Dart language. It is used to build iOS and Android apps! Usually, when I see this cross platform claim, I say it is too good to be true, but I looked at the architecture of the framework and I like how easy it is to define UI components and styles, that I can't resist trying this!


    You can read about why Flutter used Dart (https://hackernoon.com/why-flutter-uses-dart-dd635a054ebf) to gain some reasoning behind their choice.


    I remember Cordova, which I think was ok for some apps, but generally crappy looking and because of that you could tell the difference between a native and Cordova app. I think because I had a crappy experience with Cordova that the idea of compiling to JS put me off. There is React ...