]> git.frustrated-labs.net Git - frustrated-functor.dev.git/commitdiff
Merge branch 'rss-feed'
authorAlexander Goussas <[email protected]>
Tue, 19 May 2026 17:19:23 +0000 (12:19 -0500)
committerAlexander Goussas <[email protected]>
Tue, 19 May 2026 17:19:23 +0000 (12:19 -0500)
1  2 
content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd
content/2026-04-30-how-i-manage-my-blog.smd
content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd
content/2026-05-05-on-linkedin-connections.smd
content/2026-05-13-how-to-intercept-http-requests.smd
public/index.html

index 0000000000000000000000000000000000000000,ba16b8bbf0ff6373452bccbc46233685a3143780..69ebf8594646e3f402a41466a5b41f01f5937aa2
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,32 +1,32 @@@
 -.author = "Sample Author",
+ ---
+ .title = "One of the best Skills I've learned as a Programmer",
+ .date = @date("2026-04-19T00:00:00"),
++.author = "Alexander Goussas",
+ .layout = "post.shtml",
+ .draft = false,
+ --- 
+ There are many different skills one might invest it when getting into programming.
+ There is a plethora of programming languages, each with their unique appeal.
+ And within each language ecosystem, a plethora of web frameworks and stuff to learn.
+ But for me, one of the greatest investments came from something else altogether:
+ learning how to touch type.
+ For those of you that don't know, touch typing basically means typing without
+ looking at your keyboard. But I include in the definition typing with all your 
+ fingers.
+ Before learning to touch type, I only used both my index fingers. I literally did 
+ not use any other finger. One day, I decided to change that and started dedicating
+ a lot of time to acquiring the ability to touch type.
+ There was a free website I used for this, whose name I have since forgotten.
+ Something like typingrace of something like that.
+ Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty
+ respectable, if I may say so myself. Sometimes I just like typing whatever to feel
+ the vertigo as my fingers speed through my keyboard.
+ Also, this is a transferable skill, so if you can't touch type yet, I encourage you
+ to.
index 0000000000000000000000000000000000000000,b6ac3bc582b88b9c7dd334dd14d7947aa078b652..0a9d8fbf59ab56ef15dfb8f2ba383d8238200d50
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,48 +1,48 @@@
 -.author = "Sample Author",
+ ---
+ .title = "How I Manage my Blog",
+ .date = @date("2026-04-30T00:00:00"),
++.author = "Alexander Goussas",
+ .layout = "post.shtml",
+ .draft = false,
+ ---
+ There is an accompanying video devlog available on YouTube, where I go more in
+ depth about how this stuff is actually implemented: <a
+ href="https://www.youtube.com/watch?v=c6z5A_PRodg">https://www.youtube.com/watch?v=c6z5A_PRodg</a>.
+ Recently I went down the Kubernetes rabbit-hole and automated my whole blog's
+ pipeline. From build to deployment. No GitHub actions or any other 3rd party CI
+ provider. All self-hosted, literally. Well, with the sole exception of
+ CloudFlare Tunnels, of course. 
+ How did I do it?
+ For starters, my blog repository is deployed as static files in a NGINX Docker
+ container. As part of the build process, I execute a little CLI tool I built in
+ Zig to transform my posts from markdown to html.
+ So, I process the posts, build the image, tag it appropriately and push it to
+ Docker Hub. This is all automated in my git server, as we'll see in a minute.
+ Next, my stuff is hosted in a git server that I own. This server is exposed via
+ SSH and cloudflare tunnels. I have it configured to only allow public key
+ authentication and no root login, for example. Also, the SSH port is not
+ publicly exposed and is only accessible via cloudflared.
+ Now, Git has hooks for both server and client. In this case, we are interested
+ in the post-receive server hook. This hook runs after the changes have been
+ accepted by the server, so we have access to the latest code.
+ In my case, what the hook does is clone the repository from the bare repo in
+ the server, execute the build script (that is located in the cloned
+ repository), and finally executes a rollout in my Kubernetes cluster to pull
+ the latest image.
+ So, that's it. A pretty damn simple configuration, if I may say.
+ Next steps for me would be to configure redundancy for the disk where my git
+ stuff is. Right now I have the stuff in my local dev machine and on that
+ server, but ideally I'd want to make backups to an external drive periodically.
+ If you, dear reader, have any tips or tricks for me, please feel free to 
+ contact me in whichever way you might deem appropriate.
index 0000000000000000000000000000000000000000,d0764f93fa940e15b28110161c4dd8654a251eb9..b89b685ec3674c334ebff91dae49a6a3e912694d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,71 +1,71 @@@
 -.author = "Sample Author",
+ ---
+ .title = "How I cut my expenses by a freaking lot",
+ .date = @date("2026-05-02T00:00:00"),
++.author = "Alexander Goussas",
+ .layout = "post.shtml",
+ .draft = false,
+ ---
+ Let's start with the why.
+ I have no family, and, as of the time of writing, no university degree either.
+ This means that were I to be fired from my current job, I'd have a hard time
+ (probably, I don't really know) finding a new one, and that I'd have no where
+ to go but the street. I <i>could</i> go to a friend's, but I would not want to
+ bother them like that.
+ Then, a few months ago I started seriously thinking about the role of AI in my
+ area of work. I do not think AI can replace developers (I've seen it try and
+ fail magnificently) but I am also aware of the fact that employers do think so,
+ and, at least in my environment, have already started putting into action plans
+ to cut personnel and replace humans with AI tools.
+ This led me to have a little crisis. I thought about switching careers and more
+ extreme things as well. As of today, I no longer have these feelings. I love
+ programming and I will continue doing it in whichever way I can. At the same
+ time, I was thinking: what is it that I really need to have a "happy" life? For
+ me, the answer is books, coffee and someplace I can walk in peace while
+ listening to podcasts and stuff.
+ As you can see, I need barely any money for these things. And right now I am
+ living in a city where I can do the latter. So, this realization led me to make
+ a budget. Write down how much money I actually need in order to live. This
+ resulted in a grand total of about 250 US dollars per month. Let's break it down.
+ I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube
+ premium and ... well, that's it. I am excluding rent because I am in the
+ process of moving, but I am aiming to go somewhere under 200 USD. Right now I
+ am in a 500 USD apartment, but only because I took the first thing I found,
+ since I came fleeing Guayaquil after being almost murdered in the street.
+ What did I do in order to achieve this?
+ First, groceries. I started <i>really</i> looking at the prices of stuff I was
+ buying. I did not sacrifice quality for price. I found alternative products,
+ and bought at cheaper replaces. I also set a hard rule of absolutely no eating
+ out. Only in <i>very</i> special ocassions. You might try and gaslight yourself
+ into believing that you <i>need</i> to eat out in order to socialize or
+ whatever, but if you learned to cook well you could have friends at your house
+ for dinner, for example. I say from the bottom of my heart that I like my food
+ way more than a great deal of restaurants I've been to.
+ Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking
+ expensive.
+ The other thing is I started doing as much as I can online. So for example,
+ books and classes for whatever are usually cheaper online. You don't have to
+ pay for delivery or transportation this way either.
+ Then, I started using the least amount of clothes possible. A week, I use 12
+ pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to
+ be as lightweight as possible. So, no jeans. This way, I took my laundry cost
+ from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I've
+ found that my body has adapted pretty well. I barely feel any cold anymore.
+ That's basically it. Pretty simple, but effective. I honestly think we've
+ gotten too lazy and used to the comforts of modernity, which is exactly what
+ our capitalistic society wants. They want us to cOnSOom.
+ I hope you got something useful from this, and I really encourage you to try
+ and get out of the trap of consumerism. If you can afford it. And if you have a
+ different perspective, please don't hesitate to share it.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d491a8a4c35f2b501dd85d7ff60c5ce025b08e8a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,33 @@@
++---
++.title = "On LinkedIn Connections",
++.date = @date("2026-05-05T00:00:00"),
++.author = "Alexander Goussas",
++.layout = "post.shtml",
++.draft = false,
++---
++
++A little while ago I sent a connnection request to Mr. Simon Peyton Jones. In
++case you don't know who he is, he's <a
++href="https://en.wikipedia.org/wiki/Simon_Peyton_Jones"> one of the major
++contributors to the creation of Haskell</a>.
++
++He replied asking me what the connection was about, which surprised me since it
++was the first time someone asked that. I said that I only wanted to follow him
++because I'm a long time Haskell fan. He then told me that that's ok, but that a
++note with the connection to make it more personal would have been better. And I
++agree.
++
++I often rant about how dehumanized human connection in social media is. Trolls
++everywhere saying shit they would not dare utter in person. It's as if when
++online, people really think they're the main character in an RPG and everyone
++else is an NPC.
++
++And yet, for a long time I've spammed connections on LinkedIn, precisely
++thinking I am a main character in an RPG, and connections items to be collected.
++But not anymore.
++
++My goal is henceforth to build a genuine network of people sharing cool stuff
++and caring at a personal level. People that actually interact with each other.
++
++So, if you want to connect, I'll be more than happy to. Just make sure you send
++your personal note on the request ;).
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ebd7f6f2a5c24c24e3b9ce9c8d52fcf009cb7c1e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,73 @@@
++---
++.title = "How to Intercept and Modify HTTP Requests",
++.date = @date("2026-05-13T00:00:00"),
++.author = "Alexander Goussas",
++.layout = "post.shtml",
++.draft = true,
++---
++
++This blog post comes with an accompanying YouTube video where I showcase a demo
++application and intercept its requests. Watch it here: TODO.
++
++You have a flashy HTTP API and everybody wants to talk to it. Great! But with
++great power comes great risk. All these fuckers could be sending bullshitty
++strings to your carefully (or rather, <i>not carefully</i>) crafted service.
++What's more, some shady hackers could be waiting, licking their lips and
++drooling all over, to do nasty stuff, such as modifying in-flight requests!
++
++Granted, my understanding is that tampering like this is not possible with
++encrypted protocols such as HTTPS. But alas, my security team knows better (I
++guess).
++
++So, in this post and from painful experience, I am going to show you a very
++cool tool you can use to intercept and modify requests to your APIs, so that
++you know what insidious vulnerabilities are hiding before the security guys.
++
++The tool in question is <a href="https://www.charlesproxy.com/">Charles</a>.
++
++## Installation and setup
++
++It's pretty freaking easy to set up. First, install it following the
++instructions here: https://www.charlesproxy.com/documentation/installation/.
++Then just run it!
++
++Capturing web traffic should work out of the box, but you have to configure the
++tool to allow for SSL capturing (HTTP<i>S</i>). For that, you can follow these
++instructions:
++https://www.charlesproxy.com/documentation/proxying/ssl-proxying/.
++
++You should add each hostname for which you want to enable SSL proxying in the
++configuration.
++
++## Configuring you mobile device for capturing
++
++Now, I was more interested in capturing mobile traffic from the emulator
++running on my machine. The steps are equally easy, if a little bit more
++involved.
++
++Actually no, it's dead simple. Basically, it should work out of the box. The <a
++href="https://www.charlesproxy.com/documentation/configuration/browser-and-system-configuration/">
++documentation</a> says that if you are not seeing your mobile traffic in
++Charles, you should make sure that Charles is <i>already running</i> before
++launching your simulator.
++
++Once that's done, you should be able to start intercepting requests coming from
++you emulator.
++
++## Intercepting requests (AKA Breakpoints)
++
++You can either set breakpoints at the host level or at the request level. For
++my use case, I wanted to intercept all requests going to my backend, so I
++activated breakpoints on the host.
++
++To do this, go to the TODO view, right click on your host and toggle the
++"Breakpoints" option. Then make a request and you should see execution pause a
++new window open in Charles where you can do things like aborting or canceling
++the request, allowing it through, or, in our case, modify it before sending it.
++
++You can select the option to modify the request and then alter the JSON
++payload.
++
++So that's it. I hope you found these instructions clear enough and sorry for
++not using images. I haven't gotten to decide where I would host such images
++yet.
index 31c317230a78512ceef13a963845f57a69d26e74,03b89e4113ae6c3ab7b68f27de52ba8832e68656..19a4f74b2b4d68dffa1d3d8946265a251c700422
  <!DOCTYPE html>
  <html>
+       <head id="head">
+               <meta charset="utf-8">
+               <meta name="viewport" content="initial-scale=1">
+     <meta name="author" content="Alexander Goussas">
+     <meta name="description" content="Blog about programming">
+     <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
+     <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
+               <title>Alexander Goussas</title>
+               <link type="text/css" rel="stylesheet" href="/styles.css">
+               <link type="text/css" rel="stylesheet" href="/highlight.css">
+               <!-- mathtex -->
+               <link type="text/css" rel="stylesheet" href="/Temml-Local.css">
+               <script defer src="/temml.min.js"></script>
+               <script defer src="/render-mathtex.js"></script>
+               <!-- /mathtex -->
+               
  
++<<<<<<< HEAD
 +<head>
 +  <meta charset="utf-8">
 +  <title>Alexander Goussas | Programming & Friends</title>
 +  <meta name="author" content="Alexander Goussas">
 +  <meta name="description" content="Blog about programming">
 +  <meta name="viewport" content="width=device-width, initial-scale=1">
 +  <link href="./styles.css" rel="stylesheet">
 +  <script defer src="https://analytics.frustrated-labs.net/script.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35"></script>
 +  <script defer src="https://analytics.frustrated-labs.net/recorder.js" data-website-id="07e8f3db-bd2d-4186-a202-e4fda5684b35" data-sample-rate="0.15" data-mask-level="moderate" data-max-duration="300000"></script>
 +</head>
 +
 +<body>
 +  <header>
 +    <nav>
 +      <ul>
 +        <li class="nav-item" style="background-color: yellow; color: black;">
 +          <a href="/">home</a>
 +        </li>
 +        <li class="nav-item">
 +          <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
 +        </li>
 +        <li class="nav-item" style="background-color: purple;">
 +          <a href="https://github.com/aloussase" target="_blank">github</a>
 +        </li>
 +        <li class="nav-item" style="background-color: blue;">
 +          <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
 +        </li>
 +      </ul>
 +    </nav>
 +  </header>
 +
 +  <h1 style="color: yellow;">Alexander Goussas</h1>
 +  <h2 style="color: green; text-align: center;">Blog about programming & friends</h2>
 +
 +  <img id="logo" src="./logo.png" />
 +  <img id="hornet" src="./hornet.png" />
 +
 +  <section id="posts">
 +    <h2 style="color: yellow;">Posts</h2>
 +    <ul>
 +      <li><a href="./2026-05-05-on-linkedin-connections.md.html">On LinkedIn Connections</a></li>
 +      <li><a href="./2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md.html">How I cut my expenses by a freaking lot</a></li>
 +      <li><a href="./2026-04-30-how-i-manage-my-blog.md.html">How I manage my blog with my own Git server and Kubernetes</a></li>
 +      <li><a href="./2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md.html">One of the best skills I've learned as a programmer</a></li>
 +    </ul>
 +  </section>
 +  <script src="js/script.js"></script>
 +</body>
++=======
+       </head>
+       <body id="body">
+     <img id="logo" src="/logo.png">
+     <img id="hornet" src="/hornet.png">
+     <header>
+       <nav>
+         <ul>
+           <li class="nav-item" style="background-color: yellow; color: black;">
+                             <a href="/">home</a>
+           </li>
+           <li class="nav-item">
+             <a href="https://youtube.com/@aloussase" target="_blank">youtube</a>
+           </li>
+           <li class="nav-item" style="background-color: purple;">
+             <a href="https://github.com/aloussase" target="_blank">github</a>
+           </li>
+           <li class="nav-item" style="background-color: blue;">
+             <a href="https://linkedin.com/in/alexander-goussas" target="_blank">linkedin</a>
+           </li>
+           <li class="nav-item" style="background-color: red;">
+             <a href="/rss.xml" target="_blank">rss</a>
+           </li>
+         </ul>
+       </nav>
+     </header>
+               
+       <h1>Programming and Friends</h1>
+       <div></div>
+       <div>
+               <h2>Posts</h2>
+               <div>
+       <div class="post-preview">
+                         <span class="date">May 02, 2026</span>
+                         <a href="/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/">
+                               <h3>How I cut my expenses by a freaking lot</h3>
+                         </a>
+       </div>
+               
+       <div class="post-preview">
+                         <span class="date">April 30, 2026</span>
+                         <a href="/2026-04-30-how-i-manage-my-blog/">
+                               <h3>How I Manage my Blog</h3>
+                         </a>
+       </div>
+               
+       <div class="post-preview">
+                         <span class="date">April 19, 2026</span>
+                         <a href="/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/">
+                               <h3>One of the best Skills I&apos;ve learned as a Programmer</h3>
+                         </a>
+       </div>
+               </div>
+       </div>
++>>>>>>> rss-feed
  
+               <footer>
+                       <hr>
+               </footer>
+       </body>
  </html>