mirror of
https://github.com/hazemKrimi/personal-website.git
synced 2026-05-01 18:00:26 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 50f0c72c50 | |||
| 3eb3e6e7d8 | |||
| 096ea0be7d | |||
| 42afc213b6 | |||
| c0af412250 | |||
| c60b28b7cc | |||
| 08216c49fe | |||
| 17f0373cf4 | |||
| 16f50cd70c | |||
| 4821d2ddfd | |||
| 8fa62cd1f9 | |||
| 880feedc91 | |||
| ac590ab526 | |||
| d6469c00a9 | |||
| 1371ae77dd | |||
| e553cb61b3 | |||
| 0fe5f2ef50 | |||
| f2d3437701 | |||
| a6ac8c6f52 | |||
| 858a80e9d7 |
@@ -19,7 +19,7 @@ jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
HUGO_VERSION: 0.145.0
|
||||
HUGO_VERSION: 0.154.5
|
||||
steps:
|
||||
- name: Install Hugo CLI
|
||||
run: |
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
public/
|
||||
resources/
|
||||
|
||||
.hugo_build.lock
|
||||
.hugo_build.lock
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
body {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-size: 16px;
|
||||
line-height: normal;
|
||||
line-height: 1.5;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
|
||||
background-color: var(--background);
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
main #container {
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(15rem, 20rem);
|
||||
column-gap: 2rem;
|
||||
}
|
||||
|
||||
main #metadata {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
Binary file not shown.
+4
-2
@@ -27,8 +27,10 @@ I started my career as a Front End developer in a software agency in Tunisia cal
|
||||
|
||||
Then I started working remotely in a company based in the UK called [Cielo Costa](https://cielocosta.com) which is all about providing custom solutions to improves internal business processes.
|
||||
|
||||
Currently, I am working at [Finteum](https://finteum.com) which is creating a global financial market for intraday liquidity, enabling interbank lending for hours at a time.
|
||||
Afterwards, I started working at [Finteum](https://finteum.com) which is creating a global financial market for intraday liquidity, enabling interbank lending for hours at a time.
|
||||
|
||||
Currently, I am working at [ProveAI](https://proveai.com) which is creating a platform for AI management that helps organizations centralize and manage their AI models while maintaining strict oversight of data access and usage.
|
||||
|
||||
### My Hobbies
|
||||
|
||||
Even though I didn't pursue Game Development, I am still a gamer but I don't play that much anymore. Currently, I am more into Cycling, reading Mangas, Personal Development books and Computer Science related books. I also play [Chess](https://www.chess.com/member/hazemkrimi) and card games.
|
||||
Even though I didn't pursue Game Development, I am still a gamer but I don't play that much anymore. Currently, I am more into Cycling, reading Mangas, Personal Development books and Computer Science related books. I also play [Chess](https://www.chess.com/member/hazemkrimi) and card games.
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
title: "The Importance Of Contributing To Open Source"
|
||||
description: "How I started contributing to open source projects? And what can software engineers learn and benefit from doing so?"
|
||||
keywords: ["Open Source", "Contribution", "Software Engineering", "Software Development", "Computer Science", "Experience"]
|
||||
date: 2025-05-15
|
||||
---
|
||||
|
||||
I recently started contributing to open source projects that I was using because I wanted to give back to those projects since they provide utilities I use on a daily basis either at work or on personal matters.
|
||||
|
||||
## What Will You Learn And Benefit As A Software Engineer?
|
||||
|
||||
Working on an open source project is similar to working on a project at a company. Since each project usually has a team of dedicated maintainers, resembling senior developers or tech leads, who review pull requests and merge them, are responsible for releases of the project and are responsible for its future direction by having a roadmap for example.
|
||||
|
||||
Even though an open source codebase had many people contribute to it over the time, it is usually very well documented so it is fairly easy to get a big picture understanding of a project by reading the documentation. You can find documentation on the architecture, the directory structure of the codebase, project specific concepts or "business logic". Also, you will always find guides on how to contribute, report bugs and how to install, run and debug the project on development mode. And if you get stuck, there are places where you can chat with fellow contributors or maintainers to get clarification or help.
|
||||
|
||||
Therefore working on an open source project gives you experience in par with working at a company if not better. Because you will have to be truly autonomous with choosing what to work on, take the initiative and communicate with other people working on the project, and most importantly get deep into a new codebase and figure stuff out on your own for the most part.
|
||||
|
||||
Another advantage is that you get to choose what project to work on and even what part of a project. This gives you the freedom and desire to learn about the processes of software engineering other that developing a project like deployment, testing and documentation. Not like in a company where you are tied to the position you got hired to do and even if you want to get into another area in a company project in my experience you will either slow the team down and potentially miss deadlines or you are denied access entirely.
|
||||
|
||||
## How To Get Started?
|
||||
|
||||
Don't stress it out and just pick a project you use and find interesting. Look for any beginner friendly issues like bugs or small improvements. Then get to the documentation and read it thoughouly to be on the know on any rules set by the project creator(s), get familiar with installing the project and running it in development mode, and know where the communications channel are to reach the team. Lastly, get to the codebase and start working on the thing you have chosen to do and eventually get it done and open a pull request.
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: "The Switch To Linux And The Beginning Of My Self-Hosting Journey"
|
||||
description: "How I got into Linux and how that eventually led me to get into self-hosting."
|
||||
keywords: ["Self Hosting", "Linux", "Homelab", "VM", "GPU Passthrough"]
|
||||
date: 2026-01-29
|
||||
---
|
||||
|
||||
I made the full switch into Linux in 2023 since I started following YouTubers like [Luke Smith](https://www.youtube.com/@LukeSmithxyz) and [Mental Outlaw](https://www.youtube.com/MentalOutlaw) to name a few and then got into the rabbit hole of self-hosting on a budget therefore it is safe for me to say that I am somewhat experienced in this practice so I will walk you in this post on my setups over those 3 years, what I learned and what are my plans for the future.
|
||||
|
||||
## Linux As My Main OS
|
||||
|
||||
Back then I only had a desktop that I bought the year before and was using Windows 10 on it for gaming and work since at that time I was working with Microsoft software. Here are its specs (the only thing that remained till now is the GPU and case as I replaced everything else):
|
||||
|
||||
- Intel Core i5 10400.
|
||||
- 16 GB DDR4 RAM.
|
||||
- NVIDIA GeForce RTX 3050 8GB VRAM.
|
||||
- 1 TB NVMe.
|
||||
|
||||
Here is a picture of my desktop where I first bought it (apologies for the image quality):
|
||||
|
||||

|
||||
|
||||
For me the main reason for making the switch to Linux is that I wanted to learn it hands on and dedicate my computer for software development, I started out with Debian 11 as my first distro.
|
||||
I wasn't doing too much gaming but I came up with a solution for some of the games I was playing with friends that had Anti-Cheat and that was a VM with GPU passthrough thanks to QEMU/KVM which was built in and allowed me to have a config in such a way that Windows and the Anti-Cheat software can't figure that they are running in a VM.
|
||||
|
||||
Here are guides I used back in 2024 when I updated my VM to use Windows 11 through Qemu/KVM and GPU Passthrough:
|
||||
|
||||
- [Installing KVM And QEMU](https://sysguides.com/install-kvm-on-linux)
|
||||
- [Installing Windows 11 On VMs](https://sysguides.com/install-a-windows-11-virtual-machine-on-kvm)
|
||||
|
||||
Other reasons that are still as important are ownership and privacy: I get to use my OS without having to have an account tied to the developers and customize it to my heart's content all with minimal resource consumption. There are still issues with driver and software compatibility but it is getting better in the recent years thanks to projects like [Wine](https://www.winehq.org/) and [Proton](https://github.com/ValveSoftware/Proton).
|
||||
|
||||
## Self-Hosting
|
||||
|
||||
Previously, I had my website deployed on Vercel since back then I made it using Next.js but as I got deeper into the optimization meme I recreated my website in [Hugo](https://gohugo.io/) which worked out pretty well and I am now more satisfied with its performance. Naturally, since I migrated away from Next.js I decided to get my own VPS and deploy the website there. I would say I got an overpowered one for my uses but I gained the capability to have more stuff in there like some of my personal projects and my own email through open source tools (check Luke Smith's [emailwiz](https://github.com/LukeSmithxyz/emailwiz) repo). Here is the VPS specs which I got from Hostinger through a YouTuber's affiliate link:
|
||||
|
||||
- AMD EPYC 9354P 8 Cores.
|
||||
- 32 GB DDR4 RAM.
|
||||
- 400 GB NVMe.
|
||||
- 32 TB Bandwidth.
|
||||
|
||||
Having to manage a server comes with learning more tools related to System Administration like Nginx, Certbot, GitHub Actions, Systemd services, setting up SSH and firewall rules, blocking unwanted traffic through [Crowdsec](https://github.com/crowdsecurity/crowdsec). This made me get a better hands on understanding on how different components work in Linux since nothing is abstracted away like it was with Vercel and had to configure almost everything by hand. Here are some guides that helped me setup my website on my VPS:
|
||||
|
||||
- [VPS Setup And Website Deployment](https://www.youtube.com/watch?v=DmbBgXK8M5M)
|
||||
- [Based Website Analytics Written In C](https://curiouscoding.nl/posts/goaccess-setup/)
|
||||
|
||||
And here is a sneak peek at my latest analytics stats:
|
||||
|
||||
{{< video autoplay="true" controls="false" loop="true" src="./analytics.webm" >}}
|
||||
|
||||
## My Home Server
|
||||
|
||||
The next thing I did was to get some sort of personal cloud that is hosted locally mainly to sync and backup files between my devices and block ads in my local network. For that I started out with a Raspberry Pi 4 that had 8 GB of RAM in which I connected a 500 GB SSD external drive and for cooling I got heatsinks and a cpu fan and kept it running 24/7 and it worked surprisingly well for a good amount of time. I used [Syncthing](https://syncthing.net/) for file synchronization and [PiHole](https://pi-hole.net/) as my local network DNS server to block unwanted incoming traffic. Here are pictures of my Raspberry Pi and how I mounted it to my old desk in 2024:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Then in 2025 I got a new desktop so I used the old one as my home server. I upgraded the RAM to 32 GB and the CPU to an i5 12400 and got an SSD on which I installed [Proxmox VE](https://pve.proxmox.com/wiki/Main_Page). Thanks to the [community scripts](https://community-scripts.github.io/ProxmoxVE/) I was able to get the stuff I had on the Pi migrated to my home server with ease into separate LXCs and VMs. I also added the ability to connect to my home server remotely through VPN using [Wireguard](https://www.wireguard.com/) and since my ip at home is dynamic I registered a subdomain as a DDNS record and used [ddclient](https://ddclient.net/) on the server to automatically send the new ip every time it changes. Here are some guides I used to configure PCIe passthrough both to VMs and LXCs to pass my GPU for better performance:
|
||||
|
||||
- [Proxmox PCIe Passthrough](https://www.youtube.com/watch?v=_hOBAGKLQkI)
|
||||
- [Proxmox LXC GPU Passthrough Written Guide](https://digitalspaceport.com/proxmox-lxc-docker-gpu-passthrough-setup-guide/)
|
||||
|
||||
Here is my home server running 24/7 and connected to a UPS to stay up for a while in case of a power outage (the other UPS is connected to other devices like the router):
|
||||
|
||||

|
||||
|
||||
And here is its proxmox dashboard from where I can access LXCs and VMs or monitor and manage resources:
|
||||
|
||||

|
||||
|
||||
## Next Steps
|
||||
|
||||
Getting into Linux and self-hosting made me better at system administration and got me excited and hopeful about having as much autonomy as possible with the tools I use especially with the current times where almost every commercial software dedicated to normal consumers hoards and sells data to be used for ads even in paid products. Although it is not for everyone since it involves a lot of configuration which requires patience but for me it is so I will continue to incoporate free and open source tools into my "personal cloud" to keep learning as a software engineer and to keep control of my digital footprint.
|
||||
|
||||
One step I recently took in that direction is installing my own search engine using [SearXNG](https://docs.searxng.org/) on my VPS which I can use on all of my devices. Other steps I plan to take is to get into more Linux distros (I tried debian based, Arch and Nix) and most importantly contribute back to the open source tools in any way I can whether financially or through assistance in development.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: 'Jack Compiler'
|
||||
description: 'Compiler from The Jack language to The Hack platform (Nand2Tetris Part 2)'
|
||||
source: 'https://github.com/hazemKrimi/jack-compiler'
|
||||
demo: 'https://github.com/hazemKrimi/jack-compiler/releases/tag/v1.0.0'
|
||||
date: 2026-04-30
|
||||
---
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
title: 'Jack VM Translator (Archived)'
|
||||
description: 'VM Translator from The Jack language VM code to The Hack language assembly code as part of the Nand to Tetris course'
|
||||
title: 'Jack VM Translator'
|
||||
description: 'VM Translator from The Jack language to The Hack platform (Nand2Tetris Part 2)'
|
||||
source: 'https://github.com/hazemKrimi/jack-vm-translator'
|
||||
date: 2024-05-05
|
||||
demo: 'https://github.com/hazemKrimi/jack-vm-translator/releases/tag/v1.0.0'
|
||||
date: 2026-04-06
|
||||
---
|
||||
|
||||
+3
-1
@@ -1,5 +1,5 @@
|
||||
server {
|
||||
server_name hazemkrimi.tech;
|
||||
server_name hazemkrimi.tech www.hazemkrimi.tech;
|
||||
|
||||
access_log /home/deploy/logs/hazemkrimi.tech.access.log;
|
||||
|
||||
@@ -7,6 +7,8 @@ server {
|
||||
|
||||
index index.html;
|
||||
|
||||
error_page 404 /404.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
@@ -5,25 +5,19 @@
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<div id="container">
|
||||
<div>
|
||||
{{ partial "breadcrumb.html" . }}
|
||||
|
||||
<section id="metadata">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div>
|
||||
<span>{{ readFile "assets/icons/calendar.svg" | safeHTML }} {{ .Date.Format .Site.Params.dateFormat }}</span>
|
||||
<span>{{ readFile "assets/icons/clock.svg" | safeHTML }} {{ printf "%d minute(s) read" .ReadingTime }}</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="content">
|
||||
<div>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{{ partial "breadcrumb.html" . }}
|
||||
|
||||
{{ partial "table-of-contents.html" . }}
|
||||
</div>
|
||||
<section id="metadata">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div>
|
||||
<span>{{ readFile "assets/icons/calendar.svg" | safeHTML }} {{ .Date.Format .Site.Params.dateFormat }}</span>
|
||||
<span>{{ readFile "assets/icons/clock.svg" | safeHTML }} {{ printf "%d minute(s) read" .ReadingTime }}</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="content">
|
||||
<div>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{{- with .Page.Resources.Get (.Get "src") }}
|
||||
<video
|
||||
{{ if eq ($.Get "autoplay" | default "false") "true" }}autoplay muted playsinline{{ end }}
|
||||
{{ if eq ($.Get "controls" | default "true") "true" }}controls{{ end }}
|
||||
{{ if eq ($.Get "loop" | default "false") "true" }}loop{{ end }}
|
||||
preload="metadata"
|
||||
style="width: 100%; height: auto;"
|
||||
>
|
||||
<source src="{{ .RelPermalink }}" type="{{ ($.Get "type" | default "video/webm") }}">
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
{{- end -}}
|
||||
Reference in New Issue
Block a user