Hi there, I’mAckhava Adam Malonda.

I am a 15 y.o living in Jakarta, Indonesia. I love to think about and join competitions in math, physics, and programming.

Additionally I enjoy diving into the technology that makes things work and grew on to be fond of making homemade software and hardware (and seeing/imagining them work).

When I'm not thinking about the next "fun project" to do (e.g. salvaging dusty old laptops, using lego for cable management, or tearing and restyling my site for no real reason) or getting my desk just right, I love listening music, playing musical instruments, and eating sushi - don't hesitate to send me one (hehe)!

Résumé

Achievements

Bina Nusantara Programming Contest for High School Students (BHPC-HS) 2024

November 3, 2024

Gold medalist

XXXI M.A. Alekseev International Tuymaada Olympiad for school students, Informatics

July 2024

Second Degree Diploma (Silver Medalist)

18th Asia-Pacific Informatics Olympiad (APIO), held by China

May 2024

Silver Medalist

Read More

Skills and Interests

Frontend.

Tailwind CSS

A utility-based library that lets you build styles and markup in one file.

HTML

The starter pack of all websites. Must-know to get anything commonly seen on a browser.

CSS

The basic language used to style websites. It is static, like HTML.

JavaScript (JS)

A versatile language used in websites, web servers, and apps.

Backend

Next.js

A performant and unified, fullstack React framework

Django

A powerful Python-based web framework with (arguably) a book's worth of built-in features.


Blog Posts

The new ackhava.dev site!

Hi there! It's been quite some time since I last updated my website. However, I wasn't abandoning the website. instead, the real problem is interesting to look at since it's quite a slap in the face to use proper organization. I didn't originally did this impulsively, but rather I think of it as a move that comes with some decently good side effects.

Backstory

Okay, to kick things off, I think it's a good idea to talk about the old website's architecture, as I probably never shared this before. It is a fairly simple Django application running on a SQLite database. For the UI I pulled off an HTML template and modified it to work with Django well. It was decently good, and I like the concept altogether, but the site's quite slow. If you don't believe me, test it yourself, please:

  1. Open up the new project site and the old projects site in two separate tabs.
  2. Do a hard of the webpage. Now to be clear this not the usual F5 or Ctrl/Cmd + R shortcut. Instead, you should press something Ctrl/Cmd + shift + R, depending on the browser. This sequence clears all cache in the browser, showing how a new user sees the loads. Make sure to run them at the same time e.g., by selecting both tabs and applying the reload key.
  3. Behold, the difference should show up! The new site finishes loading faster, while the old site, while already mostly loaded, was still waiting for some time.

Disclaimer: I run both applications on the same hosting account (it's a traditional deployment, burst your in-head edge or CDN network cloud right now), so the results shouldn't be too different depending on your internet connection.

The way I found out about this was when I ran GTMetrix, where I got a measly D rank at best. Frustrated, I searched for a way, since I knew that this is gonna make my site great. So, I tried minifying assets manually without any VCS like Git, and I was stubborn enough to have node_modules stuck on the top branches of my filesystem tree.

Disaster strikes!

Over time, I didn't really have anything to fix/improve, so I had let my bundles sag and tangle up over time. Then, the time came when I should be fixing a bug where one of the buttons didn't click correctly. I was ready to ship out a CSS-only fix to the problem, but my bundling setup was nowhere to be found, and neither were the original source files, so I was forced to hog down thousands of characters to locate and apply the fixes. It was a nightmare-like experience to do this every single time a patch was made. The code wasn't exactly minified by modern standards, with some files being left untouched, but wasn't in source code either, as some files are production bundles, creating a nasty mess. By then, I knew that I could not continue doing this for long.

Moral

Now I don't want you to just lift your shoulders on this issue. Sure everything loads, but I can guarantee you will not like how the files reek if you just let everything happen without a source of truth to compare.

I know how skipping one typo feels all too easy, but in the future this will devolve into each file having many copies spread all over the place. Then again, even if you pull it off this way, how are you going to release it? What about bundling/minification? What about a staging?

Instead, I highly recommend using something like GitHub, which gives a free, online, Git-based solution to manage your code. Not only does it save headaches on file organization, you also get the added advantage of being able to track a bad commit, the ability to create issues, forks and pull requests, a built-in Continuous Integration (abbreviated as CI, this might help you log off early knowing that a cloud server will get the builds done as you drive home) service, as well as the ability to code online on any platform irrespective of resources.

Yes, GitHub ships with an online coding environment. It is called Codespaces, and you can use it on any machine with a decently modern browser. After creating an instance online, you can use it anywhere. For example, you can link Visual Studio Code to the instance with a special extension. You can also use it on an online version of VS Code, letting you code comfortably in a public computer without installing software or leaving any files behind.

The first changelog

In this version of the site, which I will call v2.0.0, there are notable changes

Architecture

In the previous site versions I used Django, which makes the site very easy to code but didn't come with decent optimizations built in. Moreover, the Python language does not easily play with JavaScript build tools, forcing me to maintain two environments simultaneously - one for the Python server and a Node project to bundle and optimize source code. Additionally, Django was not built with optimizations that require client-side and server-side code, such as image optimizations.

Therefore, I am dropping Django in favor of Next.js, a better-suited full-stack framework with an emphasis on web performance. It is based on the React system, easing the introduction of custom components that can perform under-the-hood optimization. The full-stack framework easily allows a mix of static site generation, server-side rendering with hydration, and client-side rendering to coexist with minimal problems. Additionally, it is built with JavaScript, so build tools and server logic coexist as one application. Additionally, it does techniques such as minification and code-splitting with no custom configuration, as well as image optimizations.

To make content management easier, I decided to use Strapi for my content, containing projects and blog posts at the same time (see the Blogging section too).

Site look and feel

Frustrated by using templates, I steered quite far from ready-made, fully fledged templates, and created my own site layout. It is powered by Tailwind CSS with some Chakra UI components thrown in occasionally. I also used a flatter, darker theme using the Nord color theme. Finally, I used modal-aided navigation for easier access using Next.js Parallel Routes and Intercepting Routes, while also creating a smooth and intuitive experience.

Speed

Inadvertently, using Next.js actually helps my site. It bests my previous system at almost all web metrics, showing a good start. It is generally a cheering result indicating that this is probably right for me, giving the performance without the hassle (no ads!!).

Blogging

The old blog at https://blog.ackhava.com is still alive and well, but I will not update it again. Instead, I will add new content and updates to the Blog section of the https://ackhava.dev site. This makes life easier than maintaining a separate system. However, I have no intentions to perform a migration due to the incompatibilities present. Instead I have made a fresh start, including with this blog.

Anyways, I think that is enough for the update and I'll see you next time!

Read More
View more

Projects

Word Association Game

This is a simple word association game. In this game there are 5 cards. Each card has four words, and two options. The task is simple: pick the word that is the most similar! One of the words is an antonym of the other, so once you know the meanings the difference should be stark. Pick the option by pressing one of the green buttons. A correct option increments the score, and an incorrect option decrements the score. Note that you can pick both options for one card (so even if you get it wrong, just press the other one to return your lost score).

Check my blog post here to find out more about how I made this app

Read More

Tic Cat Mouse

Yaay! Summer vacation is just around the corner! Before that I have to participate at the EAY celebration at Cendekia Harapan Bali. This celebration is held by my school every end of academic year. Students are required to do a performance or make and explain a product. For this year I have chosen the latter, and this web game is a product that I have made. This game is a modified version of the Tic Tac Toe game with a different theme, which I name Tic Cat Mouse. Same as the Tic Tac Toe game, this is a two-player game. This project is made using HTML, CSS and JS

Read More

Snake Game

The previous project, the Tic Cat Mouse, is just one of my two projects for the EAY celebration. I also made this game, a snake game built using HTML, CSS and JS. The game screen (the part with the black background) is an HTML5 canvas that is controlled using the corresponding JS functions

Read More

QR Code Generator

This project is a QR code generator. To use this, write the text in the text field and then click on the button. The QR code will appear below. To make this, I used a QR code API that returns QR code images as the output. I then set the source tag of an image tag to show the actual QR code. Notice that an alert will then appear, saying that the QR code has been generated. However, due to styling problems currently it does not support screens that are too small. In this case there is a JavaScript safeguard which prevents the user from reaching a problematic user experience and instead replaces the UI with a simple message stating the problem.

Read More
View more