5 projects in 10 weeks

I’ve honestly been slacking in programming recently – actually, a lot. I’ve been stepping in the same small patch of grass for the last few months, and I feel like I’m losing touch with the current programming trends. Furthermore, I want to build up a small student portfolio, because my GitHub is mostly empty, with a small project here and there, all of them – forgotten about and written with some fairly shady coding practices.

For this reason, I’m embarking on a small mission for the next 13* weeks: writing 5 projects. Namely: a hotel reservation manager, a whiteboard sticky notes app, a TTS (Text-to-speech) app, a student planner, and a chat app.

* I know the title says 10 weeks, but for my sanity I’ve given myself 3 weeks of downtime.

Timeline

I’ll use the weeks of the year to track my time, starting with a Week 0 (W32/2024) for planning and preparation.

W0: Collect info about updates to C#, JS frameworks, etc. and ease back into programming.
W1-2: Hotel reservations
W3-4: Whiteboard sticky notes
W5: Break (school starts)
W6-7: TTS app
W8-9: Student planner
W10: Break (prepare for last project)
W11-12: Desktop chat app

Hotel reservation manager

Technology: web – ASP.NET

The first app I’m making is a Hotel reservation manager. It’s supposed to include features for clients and staff, having one integrated system for reservations, room maintenance and cleaning, managing prices, etc. This is inspired by an assignment I got in school by a former teacher of mine that I never actually finished. It’s a fairly straightforward project that can be accomplished by most CS students, and for that reason it’s the first one on the list.

I intend to write the app in ASP.NET Core, because quite frankly, I just like C#. It’s one of my primary and most used programming languages, and I want to acquire more hands-on experience with one of its most used libraries.

Whiteboard sticky notes

Technology: web – JS

I’m not sure if this exists, but I really like the concept: instead of having ‘folders’ in a notes app, you have a whiteboard, on which you put sticky notes. You can move them around and draw on the whiteboard as well. This website, like the hotel reservations project, will feature a basic login system. Given the limited time periods, I don’t want to go all-in on making an advanced auth system, so I don’t aim further than register, login, edit account for the auth functionality.

For this website, I want to touch a bit of React for the frontend and Node.js for the backend with Express. I’ve used both for small, unfinished projects before, but I want to deploy something with them.

Demo – I intend on keeping the app online as a demo version, where you can create an account. Accounts will get deleted 24 hours after their creation for the sake of not having people use this seriously (and keeping my costs down!)

Text-to-speech app

Technology: mobile (Android)

A close family member of mine has been having trouble with their voice the past few years, which inspired me to make a really simple TTS app, where you write a sentence or two and have the app dictate it. No menus, no fancy options (other than maybe a language/voice selection), just text to speech with big buttons for ease of use.

This should be an easy application to write, and I’m not sure if I’ll even need the whole two weeks for it, but I think it’s a good idea to have some variety in the difficulty of the projects. To make it more fun, I plan on trying out Kotlin with Android Studio.

Student planner

Technology: web (Next.js)

This has been on my mind for a long time – a student planner app, where you can insert your schedule, add classwork and upcoming tests/exams, note down homework, set goals for studying, etc. Just like the whiteboard app, this will too have a basic auth system and a demo deployment that deletes accounts a few hours after their creation.

I haven’t really been following JavaScript trends a lot (aside from watching Prime and Theo recently), so I want to test out Next.js. From my understanding, it should be pretty similar to the React + Express setup I have for the whiteboard app, so I hope to use that as a foundation knowledge base and expand on it with this app.

Desktop chat app

Technology: desktop (.NET with Avalonia), backend TBD

No particular reason for this project’s existence on this list, but it’s the last because it’ll require some more prep work. I want to build a simple real time chat application between users, and maybe even group chats. No specific end-to-end encryption or anything of the sort, just some basic message exchanges.

Avalonia UI (for .NET) has been on my radar for a very long time, and I want to put it to the test with something like this. I’m still not sure what I’ll use for the backend, so I’ll take the week-long break before the final project to consider that. I hope that, having completed 4 projects of varying difficulty, I’ll have some more insight on what would be more appropriate to use.

Conclusion

Week 1 begins on the 19th (so in exactly 7 days). I’ll post more on the blogs as I go, targeting at least one or two posts per project. See you soon!

My Love-Hate Relationship with Windows

Okay, to start off: I’ve been using Windows for as long as I can remember using computers. As a little kid, I used my father’s Windows XP laptop to watch YouTube and play Pinball. Later on, my parents digged up a Windows 3.11 beast, on which I mainly played the few games it had and toyed around with various settings. I spoke no English at the time, which made it even more fun.

So we’ve established I grew up with Windows and I should probably like it. And I do like it: it’s a great productivity tool once you get used to it and things just work. But sometimes, they don’t. And what infuriates me is that the things that don’t work are either the most obscure, forgotten features in the world, or the most commonly used interactions in the entire system.

Have you ever tried to update and shut down a Windows PC? It’s been an option for several years now, but every single time I’ve tried to click on “Update & Shut down”, the PC has instead updated and restarted, which is endlessly annoying, since I usually shut down before bed, so now I have to walk over and shut it down again from the lockscreen. Why?! How is it possible that this has been happening to me on at least 2 different PCs for as long as the feature has existed and still hasn’t been fixed? This isn’t happening to just me either… So annoying!

I actually tried to update and shutdown again a few days ago when it popped up in the Start menu. I’ll let you guess what actually happened:

  1. It worked;
  2. It updated, but restarted.

Drumrolls please… neither! Windows decided not to update and then restarted! Because why would it do any of the two things it said it’s going to do?

Today was the absolute cherry on top. I was in bed reading a book and got quite annoyed at the humming from my PC, so I lazily decided to connect to it via Remote Desktop on my phone, and shut it down – this has worked numerous times before. I did click the button and even saw the screen saying “Shutting down”. I thought to myself – “Great!” Alas, two hours later I realised my PC was still making noise. So what happened? Windows had single-handledly decided to abort shutting down for whatever reason (the only app running was Discord, which doesn’t prevent it). I have no idea what happened, but what I do know is that I had to channel my annoyance somewhere, which somehow led you to reading this. Honestly, if you’ve stuck around after so much of my whining, you deserve an award.

I have a couple of devices – an iPhone, an Amazon Fire tablet running Android (which I’m using to write this article right now), my Windows PC and a laptop running Arch Linux. No other device has trouble shutting down. In fact, Linux takes the prize on this: writing shutdown -h now fully stops the thing within 5-6 seconds. Amazing! Maybe Microsoft could look into hiring those awesome engineers from OpenAI to work on the shutdown feature of Windows. Surely if they can create AI video successfully, they could maybe fix shutdown? What do I know, I’m not the company that has been developing operating systems for the most of its existence… :/

i use arch btw

How to setup mutt with Yahoo Mail

Hi! I just stumbled upon terminal email clients, and decided to give mutt a go. This is how you setup mutt with Yahoo.

Install mutt

Using your preferred package manager, install the mutt package. I’m on Arch (btw), so for me, that’s pacman:

sudo pacman -S mutt

Configuring mutt

I followed the steps from this forum post:

1. Create the config directories and files:

mkdir -p ~/.mutt/cache/headers
mkdir ~/.mutt/cache/bodies
touch ~/.mutt/certificates
touch ~/.mutt/muttrc

Note: the -p on mkdir is a flag to create missing parent directories. So the first command will create ~/.mutt/ and ~/.mutt/cache if they don’t exist, before attempting to create ~/.mutt/cache/headers.

2. Create a Yahoo app password

Yahoo won’t let you sign in from any app without an “app password”. The idea is that your main Yahoo password is restricted to the web client only. Open up the Security page in your Yahoo Account preferences – link.

Scroll to “How you sign in to Yahoo”, which should have a panel for “Other ways to sign in” with “App Password” underneath. Click on “Generate and manage app passwords”, enter a name for the app (it doesn’t matter what you write here, I used “mutt laptop” so I can differentiate between apps easily). When you enter the name, the password will appear. Write that down somewhere, because you won’t get to see it again otherwise.

3. Configuration file

Open ~/.mutt/muttrc with your preferred text editor (nvim of course) and use the following template:

# Yahoo settings
set imap_user = "username@yahoo.com"
set imap_pass = "password"
set smtp_url = "smtp://$imap_user:$imap_pass@smtp.mail.yahoo.com:587"
set smtp_pass = "password"
set from = "username@yahoo.com"
set realname = "Your real name"
set folder = "imaps://imap.mail.yahoo.com:993"
set spoolfile = "+INBOX"
set postponed="+[Yahoo]/Drafts"
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
set move = no
set sort = 'threads'
set sort_aux = 'last-date-received'
set imap_check_subscribed

# Some tweaks
set ssl_starttls = yes
set imap_keepalive = 300
set mail_check = 90
set timeout = 15
set charset = iso-8859-1

4. Replace placeholders

  • On the bits where it says username in the values (e.g. username@yahoo.com), put your login, so essentially write your email address.
  • Don’t forget to replace “Your real name” with whatever you wish to show up as the sender when sending mail. For the webmail client, this is whatever name you’ve configured in your Yahoo account.
  • On the bits where it says password, use the App Password we generated above.

VoilĂ !

You should be all set. Run mutt in your terminal to see if it worked. Hopefully you get to see your inbox! (I have some Cyrillic emails which show up as ?)

An issue I encountered

It’s a good client, but it + kitty (my terminal emulator) do not seem to pair well. Let’s look at an email with links:

This image has an empty alt attribute; its file name is image-1-1024x431.png

Yeah, not pretty. If you’re looking for a solution for that, this blog seems to have fixed it, but I haven’t tested it. Happy mutt-ing!

Welcome to whatever this is!

Hi, dear reader! Welcome to my website, I guess. I hadn’t ever planned on writing a blog (it’s 2024, I’m Gen Z, sue me), but I realised occasionally I have thoughts that I find cool, but don’t have anyone to talk about with. So this is where they’re going now!

A bit about myself: I’m a self-taught programmer from Bulgaria, I love tinkering around with systems and stuff that’s more “behind the scenes”. I’ve been coding since around 8 years old and have gained quite a lot of weird and quirky bits of knowledges from random areas in development that have piqued my interest as I grew older. I really like roleplay games (not the DnD style, but actual real world roleplaying) and I sometimes journal.

I don’t have any plans for this. No set interval between posts, nothing. Some may be in Bulgarian, who knows: I get a spot on the Internet to dump my ridicolousness in now, and that’s all that matters to me!