Web developer building with Flutter, Svelte and JavaScript. Recently fell in love with functional programming.

Malaysian. Proud Sabahan. Ex game developer but still like playing games.

New found hobby is outdoor camping with my love.
January 27, 2023

Number, number and more numbers.

Surviving is of course the priority. In order to survive in this modern society, we need the numbers to be enough. The income need to be there, saving have to be made, debt need to be paid, cash need to flow. Money buy food and shelter. We need the numbers to survive first. No question. Next? Bigger number as redundancy, as insurance o...
Read more
January 17, 2023

Silly me. Listen to the (Dart) Stream.

I was working on some form submission feature in the noon. Things were going well. I cleaned up the code and commit them before my dinner break. There are a few latest changes from the remote need merging prior to continuing my work later. Ate my food and wash everyone plates. I back at my desk to work. Rebuild, just to be sure. Then d...
Read more
January 16, 2023

My typical "working" day

8 hours of sleep later, I usually wake up to a bright day. The lazy morning routine kicks in: 1. continue laying in the bed for half hour. 2. get up to do neck and shoulder stretching. 3. Cold shower. Brush. 4. To the kitchen now. Drink 300ml plain water. 5. Put back all the dried dishes from the drying rack. 6. Back to the room. Make ...
Read more
January 13, 2023

I can't do 120 WORK hours per month

The usual hours for office, 8 hours per day, 40 hours per week, 120 hours per month. But I can't do it. More like, hours spent appeared to be working for the company. REALLY working? If one clocked 8 hours "at work" for a day, what amount to "really working" is less, way, way less. Ever since I became a freelancer, broke from my salari...
Read more
January 11, 2023

How to find a good team mate in software development?

This is not a clickbait questioning title with an answer post. It is a genuine question to ask, and this post is going to continue elaborating the question. Sorry if you came here for an answer. Do stay if you are interested or are in the similar situation or is my answer. Let us not bother about the kind of cooperation first. It can b...
Read more
January 9, 2023

Dart Stream journey 1: Stream everywhere

I have been enjoying writing "dot chaining" dart codes recently, something I really adore when I was building fp-svelte. The beauty of the codes is their declarative nature of them, as opposed to imperative codes. Let shows them here. Stream, Stream everywhere final _contacts = BehaviorSubject<List<Contact>>(); _contacts.addStream(remo...
Read more
January 4, 2023

Flutter: Text theme from other design language

I always know there are header 1 to header 6 and body text. Also, aware of the existence of subtitle, caption, paragraph, etc. Never understand what is their purpose, vaguely can guess they are different in size. Maybe few of them are naturally bold? I cannot be certain. Recently, my freelancing project's customer asked me to incorpora...
Read more
January 3, 2023

TTD: My way to keep my pet poject alive in trubulence time.

I have been working on my Flutter database pet project: FutonDB, on and off, for a couple of weeks. In a relatively easy week, I would spend one or two days on it. Busy weeks will see me contribute zero hour to it. Usually, this kind of sporadic schedule will kill my interest rather quickly in any pet projects I started. Not this time,...
Read more
January 2, 2023

CouchDB: Intentionally create conflict and getting it

Sounds like a thug. But, no pain, no gain. Yo! Conflict is the way of CouchDB, and life. Embracing it with love is how we live in harmony, with Database, and with people too. To learn to embrace CouchDB's conflict, one must first create it in a control environment, then slowly exposing it to the system for adaptation. a.k.a. test drive...
Read more
December 31, 2022

My new year and birthday wish

I didn't "use" my birthday (3 days ago) wish. And I heard there is one for new year. I will be combining the power of these two wishes into one: A quick recovery, and comfortable life afterward, for the little girl, Hannah Teng.
Read more
December 30, 2022

CouchDB: My open_revs confusion

New day, new confusion. Today solved puzzle is the `open_revs` query parameters used in a GET /{db}/{doc}. The official and correct definition for it is as follows: `open_revs` takes an array of leaf revision string, and return all of their corresponding document in the response. It is correct, but again, expecting the readers are Couc...
Read more
December 29, 2022

CouchDB: My new_edits confusion

`new_edits` is a boolean option to pass as query parameters for a PUT or BULK_DOCS operation. It is meant to be used by replicators only. I am writing a replicator! So I ought to use it. Then it costed me a day to learn what it really means and what are expected from it. Needless to say, since writing a replicator is not a common thing...
Read more
December 28, 2022

Happy Birthday to Linus Torvalds and me

38 years of living, 20 years of knowing Linux and 5 years of using Linux full time for all computing stuff. Today, I learned that I share the birthday with Linus Torvalds, the father of Linux. Cool. I bet the next similarity I can claim to have with Linus is both being a programmer. Writing codes is most likely our most overlapped non-...
Read more
December 17, 2022

Flutter web to not download stuff from external host

If you are building web application with Flutter Web and paid attention to the network tab during load, you would notice three downloads that's not from your host.canvaskit.js, canvaskit.wasm and a cryptic font from Google. This is not good if you are building a web application for companies that cares about data privacy, especially en...
Read more
November 1, 2022

Quietly, I made another "work mode" Linux, again.

This time, it is a Manjaro i3. I do not use this word lightly, but, I think I've got the perfect setup. Perfect. Manjaro because I still very much in love with their package managing. AUR is simply awesome. i3. The beauty is in the simplicity and cleaniness. Keyboard oriented too. Thanks to my previous adventure into Sparky's i3, I cam...
Read more
October 24, 2022

BeeHive 0.1 : Camp gears.

BeeHive is a codename for the ultimate old age house for my wife and me to live and die at. In our imaginary world, it is a decent little cottage up in the mountain, a misty garden and a quiet night. We are not there yet, and not even working hard towards it. We do, however, take baby steps towards it. The first step is a set of campin...
Read more
October 18, 2022

I saw a Monad in Dart Stream

I knew I had read it, briefly, in one or two of the articles about functional programming before. Or if I type something about "Functional Programming", "Reactive X", and "Dart Stream" into DuckDuckGo, the first page will be full of them. It is when I wrote these lines of code... Rx.combineLatestList( [_siteInfoController.stream, _prod...
Read more
October 13, 2022

50/50 of GUI development

50 fun works / 50 tedious works. Fun when the result gets better and prettier as time goes on. The colours are starting to match. The flow of pages to pages is coming to life. Tedious when each iteration is back and forth of tweaking a few numbers, or ONE number, rebuild and check out the result in the actual application. It may work a...
Read more
October 11, 2022

Overwatch 2 on Nitendo Switch

I downloaded the shiny, flashy, and free Overwatch 2 into my Switch this morning. It is actually a quick process. Download, link up Bnet account, wait it load and Tada! My past favourite shooter in my present favourite gaming console! But, still, a first person shooter with console controller? Does it work??? I've played Quake3, Counte...
Read more
October 9, 2022

What about integration test?

Flutter team defined an integration test similar to an end-to-end test: Run the real application in a real device or emulator, automate the user action (e.g. click on a button), and verify the actual result by reading the displayed information. A very slow process. The test is usually a long one to write too, involving a lot of differe...
Read more
October 8, 2022

The autonomous testing I like

I wrote a lot of tests: Unit tests, integration tests, good tests, bad tests, flickery tests, and so on. Unit tests are always my favourite because they are easy to reason, simple to write and quick to run. But, they are less effective when the goal is building a GUI application. Especially web applications. Modern GUI applications, we...
Read more
October 5, 2022

Why Flutter? Because Flutter Web makes sense now.

4 years ago, I learned about AngularDart during my Flutter journey. 2 years ago, I built 3 web applications with AngularDart. Two of them are for my startup. One out of three applications are still running and kicking in the wild, doing software stuff: fixing real-world problems. 2 years ago, there was news coming out of Flutter: The l...
Read more
October 3, 2022

Svelte development with Kakoune

Well, one can always works with .svelte files in Kakoune. In fact, I have been doing that for two days, with the pain of lacking language supports. Doable. But not ideal. Certainly not looking good for a programmer. We are supposed to be the productive bunch. Language supports are there to help us and we cannot say no. Today is the day...
Read more
October 2, 2022

Use bleeding edge tools, bleeds.

It is fun riding on the hype of the latest, shiny and paradigm shifting tools to build my boring web application. SvelteKit is still in early stage, but I loved Svelte so much I launch the next project with it as soon as I gave myself enough excuse to start yet another project. The bleeding edge nature of SvelteKit already bite me once...
Read more
September 29, 2022

WiFi in Linux: 5g okay, 2.4g not okay?

Problem My Manjaro used to NOT connecting to my 2.4g WiFi band. It connected to my 5g band no problem. It just keep asking me for the password again and again and again when I tried to connect to 2.4g. The new Sparky installation has the same issue! So I bit the bullet and search high and low to find the solution, which I present below...
Read more
September 28, 2022

Magic in SvelteKit

Magic sounds like a good thing, a wonderful thing that magically improved stuff. Not in building software though. When I call something "magic" in doing software development, it means I don't understand why something happens the way it is. Not always, but under the context that I thought it should have behaved the other way around. The...
Read more
September 27, 2022

Headhunting in GitHub

Today, I got an email. I got a lot of emails every day, but one that directed me personally and encouraged a reply is rare. How I wish there are more of these so that I can justify my Hey account better. Anyway, back to the email. A tech recruiter followed me on GitHub and sent me a personal email from the address he got from my GitHub...
Read more
September 26, 2022

Input field for images of Flutter, in all platforms

An input field, usually in a form, expects users to either pick an image from the gallery (disk) or take a new photo with a camera on the device. Both options result in an image file waiting to be read. Most modern devices can fulfil both functionalities. Users are certainly expecting it too. Flutter developers can build this into thei...
Read more
September 25, 2022

The unproductive days of seeking more productivity

For nine months, I have been working with my peak productive workspace setup: Kitty terminal (for tiling my CLIs), Kakoune as IDE, taskwarrior, timewarrior, todotxt, homemade pomodoro timer, an expansive of alias, etc. The theme here is keyboard-centric workflow. My Vivaldi and Chromium browsers even have Vimium C for full keyboard web...
Read more
September 24, 2022

Stable Sparky and Adventurous Manjaro

I installed the stable Sparky (Debian based Linux distro) not too long ago. To try out a lighter Linux installation with i3 Window Manager. Lean! The journey is bumpy. Explosive even. I nuked my configurations for Kakoune, nnn and Kitty in the process. I was trying to do a common configuration for common application by storing the conf...
Read more

See more posts »