Welcome to the home of Shifoo (previously That Computer Scientist). My name is @bobby, and this is my personal website. I aim to build a retro looking personal website, where I share my thoughts, ideas, and experiences through articles, and will showcase some cool nostalgic features and tools.

Please note that I am continuously working on this site, and it is still under construction. So, not all features are available yet, and some features may not work as intended.

There's also a some of fun stuff you can find in the sidebar, that you can play around with. I will be adding more in the not so distant future. Also, To participate around various sections of the site, you will need to register for an account. I hope you enjoy your stay here.

  • Jul 13, 2023: Domain & Site Spells: Alright, short update! We have migrated to a new domain: shi.foo. This domain is a secure domain, and therefore older browsers may be unable to access it. Previous domain thatcomputerscientist.com is still active. It will redirect if your browser supports HTTPS, otherwise, you can still use the plain HTTP version on that domain.

    Another Update is Site Spells. They are fun little tools which do nothing in particular.
    There's a lot more planned. So, keep your eyes peeled. Alright, bye.


  • Jun 12, 2023: Tags and Translation: Little Update! Tags are now available on the website and are functioning as intended. Tags used to be present as a link in the sidebar (as it is now), but was a non-functioning link. Later on, I removed the link for a while to facilitate development. Now, you can access posts tagged with the same tags as you expect.

    Another thing that was added is the Japanese translation support. The website is still in English, but you will be able to switch to Japanese by clicking in the Links section of the sidebar. This will set your preferred language to Japanese, and reload whatever page you're on will instantly translate the text for you. Once your preferred language is set, Google Translate will take over (client side) and translate everything live for you. Your live chats will also be translated if you use the chatbox on the main page. Some links and comments, however, will not be translated. What gets translated and what is not will be more fine-tuned as I develop the site.

    Article Tools: If you are reading any post on this weblog, there are two new tools available on every post, called "Focus" and "Spectacles". These are as simple as the name suggests and will improve accessibility in your reading experience. Focus will darken everything except the article text, allowing you to read with Focus (duh!), and Spectacles will increase the font size a bit to facilitate reading for people who face trouble reading small text. Preferences for spectacles will persist across pages, while Focus will not.

    That was all for this update! Enjoy your day!
    Edit, June 16, 2023: Translations are instantaneous now.


  • Jun 03, 2023: Oneko Left Us! If you have visited this site prior to today, you will remember a cute cat "Oneko" following your cursor. I thought it would be poetic to have "a cat following the mouse" on my site, but looks like the humour was lost on me. Apparently, Oneko was more of a distraction than a cute little kitty following you. And at last, today Oneko has finally left us. Oneko will no longer be following your cursor.

    Of course, there will be crazy weird people who actually like a cat following their mouse, and that's precisely why, Oneko has left us with a gift to summon it whenever we want. So, go to Fun Stuff Site Spells in the sidebar (Hamburger menu, if you're on a phone), and click "Summon Oneko", and voila you will have your cursor-following-minion back!
    Ciao!


  • May 31, 2023: Little Feature Update: Updates get incrementally deployed every time, but only at some milestones, I deliver updates as announcements. And, today is that day again. Are you ready?

    Chat Server: A live chat server is available on the main page which will allow text-based communication while the user remains on the page. Since this chat history is not saved or cached anywhere, all messages will be removed from the chat box on page reload and a new chat session will be established.

    Anonymous Commenting: This site will now allow anonymous commenting without signing up for an account. As expected, it will be a very limited feature in terms of what you can do with your account, but it has been implemented to work well enough for general commenting right now. Always be on the lookout for potential updates.

    Phone Compatibility: I have added relevant media queries so that this site is also browsable on phones without needing to zoom in i.e. the fixed desktop version is no longer an issue on phones and the site will behave in a responsive manner on phones with screen size < 480 units (this shall cover almost all phones out there). Please note that the responsive port might not be fully complete as of this writing, but most parts are already translated for phones and the site is very much usable on smaller devices.

    Username Restrictions: Certain restrictions have been placed on usernames. Specifically, you won't be able to register some protected usernames. There have been / will be some more updates in the username section as well. For more information, it is recommended that you read the Site Policy page.

    Analytics: W.E.F May 27, 2023, this site will employ Google Analytics to track user activity. Also, Cloudflare's Browser Insights will be used to track performance metrics. Again, it is recommended that you read the Site Policy page.

    That's it for now. Adios!


  • May 05, 2023: Alright, Changes! There have been a lot of changes in the UI and look of the website, and part of the reason why is that compatibility with older browsers shall no longer be a concern for me. I have seen statistics, and obviously, no one is browsing with TLS 1.0.

    The goals of this website have not been changed, though. But, the Old internet used to be fun where we put whatever we wanted to, and that's exactly the direction this site will go to. We are still building a retro-styled webpage, and neither am I changing the underlying technology or code. Still, from now on, compromises will not be made in the functionality and looks of the site due to compatibility issues.

    I would still try to keep the compatibility as low as Windows XP, but again, I make no promises. Never did, never will! Ciao, baby!


  • Mar 11, 2023: Big Updates: A lot has changed. Most of the links are working now. User profiles (only if set to public, (private by default) can be browsed. Currently, only recent comments by the user are shown in the profile section, along with some personal details (if provided). To browse a test profile I set up, visit @testuser.

    User accounts also support avatars now. To change the avatar, head to the corresponding Settings Page. Note that you need to be logged in for this. Among other additions, Archives and Categories are also accessible now.

    Skippy: Welcome, Skippy! It is the 404 Assistant Bot for this site. Skippy is a creature with very little intelligence and tries to look at what URL you want to go to. If the URL is incorrect, Skippy will try to point you in the correct direction. This works for both articles and user searches. Go ahead and try going to an invalid post URL. It also greets you with a fancy message.

    Browser Updates w/ Math: Support for rendering Math is also added using MathJax. Math will require JS support in your browser. Browser compatibility for viewing math is IE6 or above. Browsers that don't support MathJax will render the math in plain text so you can still read the post. LaTeX is used for math formulae. Again, being on Windows XP or later will yield the best experience.

    Commenting: Commenting on posts is also available for users who have logged in. This is to keep spam at a minimum. Auto-highlighting code, LaTeX formulae, and text formatting (bold, italic, strikethrough) are supported in comments. To know more, head over to the comments section of any post.


  • Jan 03, 2023: Browser Support Update: There might be a few rendering issues in older versions of IE, however, using third party browsers like the latest supported version of Netscape, will render as intended. Also, it shall also be noted that some browsers might try to fetch the SSL version of the site (e.g. Chrome on Windows XP). Using any other browser works (yes, even IE!). Firefox even supports SSL (need to add exception). Since I am under no obligation to support all the browsers, I have no plans to fix this issue.

    Also, who uses XP anymore? I am crazy enough to support those browsers, but that doesn't mean you also go crazy and start using one! That will be too crazy now, wouldn't it? Until next time!


  • Nov 12, 2022: The website is now compatible with older browsers like Internet Explorer 6+, Classilla 9.x, Firefox 3.1, and more. Older browser can access the site on HTTP only, but if you can load HTTPS on some browsers (like Firefox) and add exception, then good for you. Modern browsers will auto-redirect to HTTPS.

    However all this being said, some / all pages might face rendering issues or even fail to load completely in some browsers. In that case, I would suggest you to use the latest supported browser for your operating system.

    Generally speaking, any Windows 9X+ or Mac OS 9+ system can use the website with the latest supported version of any compatible browser. However, for best experience I would suggest to use at least Windows XP or Mac OS X releases.


  • Oct 02, 2022: Updates section is now available on the blog. This section shows all the recent new features added to the website and where to find them.


Ad

Recent Posts

Multi View Interfaces in Bubble Tea

Bobby posted in Programming | Feb 14, 2024

Recently, I was trying to build a "multi-screen" or "multi-view" application in Go using the Bubble Tea library. Now, for those who don't know, Bubble Tea is a framework for building terminal-based UIs/applications which is based on The Elm Architecture. Not only this, Bubble Tea also ships with a lot of "sister" libraries which can be used to further enhance your experience of building CLI or TUI applications with Bubble Tea. Bubbles and Lip Gloss are two such libraries which are built on top of Bubble Tea and which I am also using through this article.

Now, back to the basic problem. All I wanted to do was to switch between two (or potentially more) screens. So, let's start by building two example screens — one with a spinner and the other with a simple text message. But before we do that, let's first see how The Elm Architecture works. Right here, you can see picture of the Elm Architecture which I stole from the official Elm guide. The Elm Architecture is based on three main components:

Continue Reading | 5 Comments Computer Science 💻 Programming Insights

Packrat Parsing and Parsing Expression Grammars

Bobby posted in Computer Science | Nov 24, 2023

One of the most important features of the Parsing Expression Grammar formalism is that it is packrat parsable. This means that it can be parsed in linear time using a technique called memoization. This technique is also known as tabling in the logic programming community. The basic idea of a Parsing Expression Grammar or PEG is that you have a DSL or a domain specific language which looks exactly like a BNF, except that it is a program and its a parser. Now, these PEGs can be ambiguous and are capable of backtracking. Packrat parsers make the backtracking efficient with caching. How this works, is that the parser remembers the results of all the sub-parsers it has already run, and if it encounters the same sub-parser again, it just returns the result from the previous run. This behaviour makes packrat parsing is a very powerful technique.

When you design a language you typically want to formalize the syntax with a context-free grammar and then you feed it through a compiler and it'll generate a table-driven, bottom-up parser. Then you may have to hack on the grammar until you get it right because in order for the parsers to be efficient they need to be able to look ahead just one symbol so that they know what choice to make as they typically don't support backtracking. Of course there are versions which support infinite backtracking, but that can make your parser very inefficient. So, usually what you try to do in order to get a very efficient parser is you try and turn it into a nice grammar and then you use the generated parser to do what you like.

Continue Reading | 1 Comment Computer Science 💻 Programming Theory of Computation

Nix is the New Arch!

Bobby posted in Thoughts | Jun 24, 2023

Remember the days when everyone and their pet iguana was raving about Arch Linux? You couldn't escape the ever-so-subtle "I use Arch BTW" remarks in every Linux forum. Well, move over, Arch, because NixOS is here to steal your thunder! Nowadays, it seems that you can't browse YouTube or read a blog without stumbling upon someone extolling the virtues of NixOS and how it is the epitome of computing perfection. But hey, who needs critical analysis when we can jump on the hype train and declare NixOS as the new Arch? Because that's exactly what's going on. NixOS has now become the self-proclaimed prodigy that's poised to dethrone Arch Linux as the holy grail of Linux distributions. The time is calling, my friends! It's time for you – the seasoned Linux enthusiast – to dust off your keyboard warrior capes and embark on a new crusade. So, grab your Tux plushie (or, your pitchforks if you belong to the world of devils) and let's embark on an adventure through the enigmatic world of NixOS (and let the memes commence)!

Continue Reading | 2 Comments Linux 🐧 NixOS WTF Weed Good! ☘️

Building a Simple User Presence

Bobby posted in Programming | Jun 04, 2023

Guess who's back? Back again?... for the rest, go listen to the fucking song! I am not here to sing songs for you. Anyroad, what's up? Actually, no one cares... so, let's get started! Remember back in the day, when you visited your favourite forum and it would say something like "$N$ users online: $(n)$ members, $(x)$ guests" (of course $ {n, x} \in \mathbb{N} $)? This is called user presence. It's a simple way to show your users that they are not alone on your website. It's also a great way to show off your mad skills to your friends. So, let's get started!

Before we start, I would like to discuss your options to track user presence on your website. There are multiple ways to do this:

WebSockets: This is the most modern and probably the most efficient way to do this. WebSockets will provide you with a persistent, bidirectional communication channel between your server and the client. Talking in a broad perspective, you would set up a WebSocket server that listens for incoming connections and handles WebSocket events, and when a client establishes a WebSocket connection, register their presence by storing relevant data (e.g., user ID, session ID) on the server. Then you can implement mechanisms to track user activity, such as sending heartbeats or receiving client-initiated events. 

Continue Reading | 3 Comments Computer Science 💻 Programming

Sorting: Average-case Lower Bounds...

Bobby posted in Computer Science | Jun 02, 2023

Are you back or are you new here? If you're back, why'd you even come back? If you're new, you are in for hell. People who are back, you know what's coming. People who are new, you don't know what's coming. But you will. You will. Last time, we discussed "Why Comparison-based Sorting Algorithms have $\Omega(n log n)$ Lower Bound" and this is a follow-up to that. Also, if you haven't read that, go read the previous article first, then come back here and read this. Alright, ready? Let's go.

Today, we will discuss average-case lower bounds for comparison-based sorting algorithms. Now, I don't expect your little brain to remember everything you were spoon-fed last time, so I'll give you a quick recap. As expected, our focus in this article, once again, is comparison-based sorting Algorithms. In our last article, we were able to define a comparison-based sorting algorithm.

Also, we were able to prove that any comparison-based sorting algorithm must take $\Omega(n log n)$ time in the worst case. And, we also defined a theorem for this proof. Do you remember what it was? Of course, you don't. Here's the theorem:

Continue Reading | 1 Comment Computer Science 💻 Programming Data Structures Algorithms 🧬