<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>gigatexal&apos;s blog - Linux, Data-Engineering, Programming, Life</title>
    <description>A potpourri collection of posts from programming, scripting, vi, i3, etc., to life and expanding your career prospects</description>
    <link>https://gigatexal.blog</link>
    <atom:link href="https://gigatexal.blog/feed.xml" rel="self" type="application/rss+xml"/>
    <language>en-US</language>
    <lastBuildDate>Fri, 01 May 2026 23:27:28 +0000</lastBuildDate>
    
    
    <item>
      <title>Apple Podcasts, it&apos;s good again</title>
      <link>https://gigatexal.blog/pages/apple-podcasts/apple-podcasts.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/apple-podcasts/apple-podcasts.html</guid>
      <pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="tldr---apple-podcasts-is-awesome-again">TL;DR - Apple Podcasts is awesome again</h3>

<p>date: Tue Apr 28 21:52:05 CEST 2026</p>

<p>For years now I’ve spent hours and hours using <a href="https://overcast.fm">Marco Arment’s Podcast Player</a>. Years.</p>

<p>I’m switching back to Apple Podcasts.</p>

<p>The UX of Apple Podcasts has sucked for years. It’s hard to get right. It’s a small device. There’s a lot of content.
There’s a lot to pack in a small area. But for the most part Overcast gets it right even though I’ve had some wierd UI glitches
since the rewrite.</p>

<h4 id="overcast-has-one-main-advantage-over-apple-podcasts">Overcast has one main advantage over Apple Podcasts:</h4>

<ol>
  <li>Smart Speed. It’s really great. I can set it to something like 1.5x but effectively can get 2x speeds with no loss of fidelity.</li>
</ol>

<p>It’s really, really good. And I can tell Marco put a ton of time into it.</p>

<h4 id="you-cant-beat-built-in">You can’t beat “built-in”</h4>

<p>Apple Podcasts is native. For all the good and bad that that entails. It just works. It’s built-in. Like the userland of FreeBSD it’s maintained by the same folks that write the kernel and other parts of the OS – there’s a holistic consistency that I really like.</p>

<p>Now don’t get me wrong. Had there not been upstarts doing really compelling things with podcasting there’d not be work happening in Apple Podcasts to make it better. Competition is still the best thing for companies and products. Had Spotify not moved into video podcasting or Youtube doing the same I don’t think Apple would have added the same to the Apple Podcast app.</p>

<p>And the UX for playlists is dumb. The Apple Podcast folks think you just channel-surf podcasts and episodes. I subscribe to feeds I love and listen to the episodes as soon as they drop.</p>

<p>That can be done with their concept of “stations” which I can only liken to an Overcast smart-playlist – I think. Anyway it serves as a servicable way to do playlists.</p>

<p>But that’s not the killer feature.</p>

<h4 id="for-the-longest-time-ive-wanted-a-way-to-quickly-skip-past-the-ads-i-get-that-now-with-ai-generated-chapters">For the longest time I’ve wanted a way to quickly skip past the ads, I get that now with AI generated chapters</h4>

<p>Currently Apple Podcasts AI generated chapters chunks – at least for the podcasts I listen to – chapters such that when one ends it includes the segment ending ad reads such that I can easily move to the next chapter and skip the ad!</p>

<p>You can do this same sort of thing in Overcast with the kareoke style transcripts but I have to search for it with chapters I can just switch to the next one.</p>

<p>I’m sure they’ll update it so that if podcasts ship their own chapters (or this must already exist idk) then this is moot, and also train the AI to not chunk around the ads … but until that happens (and I think there’s a chance that it will remain as is because Apple doesn’t care) Apple Podcasts is my new player of choice.</p>

<hr />
]]></description>
    </item>
    
    <item>
      <title>12-month review of my M3Max Macbook Pro 14</title>
      <link>https://gigatexal.blog/pages/i-heart-my-macbook/i-heart-my-macbook.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/i-heart-my-macbook/i-heart-my-macbook.html</guid>
      <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### Almost A Year In And I Love My Macbook Pro, Still

date: Fri Sep 5 13:28:54 CEST 2025

There's not much to say. I am typing this on it now. I really, really like it. I like it more than I thought I would.

I've written about it previously [here](https://gigatexal.blog/pages/no-perfect-workstation/no-perfect-workstation.html) and [here](https://gigatexal.blog/pages/new-laptop/new-laptop.html)

#### Quiet

Unless I am running [LLM Studio](https://lmstudio.ai/) running local LLM models I never hear the fans. It just sits there and asks: "I'm bored; give me something worthwhile to do!"

#### Beautiful Screen

The XDR Screen is amazing. Absolutely stunning. And this app [BrightIntosh](https://www.brightintosh.de/) allows you to go above the stock brightness into the HDR range and ultimately up to the full 1600 nits (but don't do that. I've found ~600-700 nits is perfect).

It's so good that I have found myself finding reasons to use the built in screen rather than my desktop monitors that have far more screen real estate.

#### No Keyboard Woes

When in my Linux hey-day I was a huge proponent of the mechanical keyboard. In fact I bought a [Moonlander Mark 1](https://www.zsa.io/moonlander) and was featured [here](https://people.zsa.io/alex-narayan/) ... but alas the QWERTY keyboard of the laptop is amazing and I find myself not needing or using layers or wanting a lot of clickety-clackety feedback from such keyboards.

#### Overspecced

My 2013 Macbook Pro 15? (I can't remember the size) lasted nearly 10 years. I bought it in college and used it without fail until it was stolen from our storage unit.

While it makes zero sense to build out a machine to last more than a few years given how fast tech improves ... I did build this one out thinking it'd last me 5-7+ years. I think it will.

With 128GB of ram and more cores than I need I think it might yet run Chrome for the next few years ;-) ... [maybe](https://devrant.com/rants/2552559/chrome)

The extra memory has allowed me to play with local LLMs and while awesome I've just given in and signed up for Github Copilot and pay them to host and run models.

I have it configured such that neovim can hook into OpenAI and I get really, really nice autocomplete (for the most part) from it. And VSCode's integration is also really slick.

#### BUT DHH AND Tiling WMs!?!

Firstly, DHH is a whiney baby and a horrible open source character. His foray into Linux is just a stunt I think. He claims his Framework laptop is somehow on par with a Macbook Pro of the same-ish price, and that the screen and window performance somehow is a better combination than his (albeit way too expensive) 6k XDR Apple monitor.

<style>
div:has(> blockquote) {
  background-color: #ededed;
  margin: 10px auto;
  padding: 15px;
  border-radius: 5px;
}

blockquote p::before {
  content: "\201C";
}

blockquote p::after {
  content: "\201D";
}

blockquote + p {
  text-align: right;
}
</style>
<blockquote cite="https://world.hey.com/dhh/the-new-framework-13-hx370-68675e0e">
    <p>
Whichever chip you choose, the rest of the Framework 13 package is as good as it ever was. This remains my favorite laptop of at least the last decade. I've been running one for over a year now, and combined with Omakub + Neovim, it's the first machine in forever where I've actually enjoyed programming on a 13" screen. The 3:2 aspect ratio combined with Linux's superb multiple desktops that switch with 0ms lag and no animations means I barely miss the trusted 6K Apple XDR screen when working away from the desk.
</p>
</blockquote>

[source](https://world.hey.com/dhh/the-new-framework-13-hx370-68675e0e)

#### Anyway ...

I have heard of [Trump Derangement Syndrome](https://en.wikipedia.org/wiki/Trump_derangement_syndrome) (which isn't a thing the man is insane and ruining the country and the world -- but that's a post for another day) but to claim that the above is just insane to me. There have been Linux podcasters who boost the framework that even claim it's got it's issues and they've all the incentive in teh world to boost what Framework is doing. And more power to them and Framework, competition is good, but they're not at all in the same leauge as Apple at least not in my eyes. But then again, to each their own; use whatever works for you.

If I was going to go the Framework route I'd save a bunch of money and get an old Thinkpad which was the original, hackable, upgradable, servicable Linux laptop.

#### But Tiling??!

Magnet and others exist. I don't miss i3/sway etc. I can tile to my hearts content in the terminal which is where I live 24/7 anyway.

When I lamented about there not being a perfect workstation in [no-perfect-workstation](https://gigatexal.blog/pages/no-perfect-workstation/no-perfect-workstation.html) on tiling and things I've actually come to not miss those things.

**Nothing about how I work or used to work has been hindered by my use of the Macbook. Quite the contrary, actually. I just go to work and don't think about things at all. Everything just works**<sup>tm</sup>

### Conclusion

Would I make the same decision again? Yes.

---
]]></description>
    </item>
    
    <item>
      <title>Wait And See Regarding LLMs - If Done Right They Could Be Compelling</title>
      <link>https://gigatexal.blog/pages/wait-and-see-llm/wait-and-see-llm.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/wait-and-see-llm/wait-and-see-llm.html</guid>
      <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[# I Am Mildly Bullish On LLMs

Date: Tue Feb 11 00:16:11 CET 2025

Unless you've been living under a rock LLMs - large language models - basically super, duper complex AI magic that predicts the next word or token have taken the world by storm. They have come a long way. They're not perfect. They don't think. They don't reason. They aren't artificially intelligent...

BUT ...

I have found them quite useful.

[ChatGPT 4-o](https://chatgpt.com) is pretty good. Work has an enterprise partnership such that we can use it internally and it's been a game changer way for me to learn things like [Terraform](https://terraform.io) - a way to do infrastructure (databases, virtual machines, etc., but defined in code but not nearly as vendor agnostic like a Kubernetes is).

---

The thing is it takes gobs of money to train these models. OpenAI, the folks behind ChatGPT are spending billions and it's made Nvidia the most valuable company in the world for a second, it's in the top 5 now.

But then at the beginning of the year a Chinese hedge fund put out a model called Deepseek R1 with some optimizations that reportedly, allegedly was trained for ~6M USD. Whether true or not it spooked the markets. They've since recovered but still.

The problem with LLMs is the interval of time between training and release is so high that often when they're released if they can't be fed new data or consume new things they're almost obsolete being out of date. It would be better if they could ingest, triage, and store only high quality, high signal (low noise) data and be constantly up-to-date.

# My Work Use-Case

I had to learn terraform and I had to learn it fast. I was familair with it, sure, but I had never done anything with it end-to-end.

So I turned to ChatGPT to try and have it solve something for me. Then I would run the code and see what happened and learn from the mistakes the LLM made and the errors.

That was the loop:

Prompt LLM -> run LLM generated code -> reprompt given errors -> run LLM generated code ...

Now mind you I had spent the large part of my teenage years not growing as a human, making connections, learning skills, etc., nope I spent it a lot like Mr. Anderson in his apartment surrounded by computers.

So I knew a bit of how things should look in an "old school" sort of way:

I needed a HTTP proxy to do SSL termination, I needed it to forward requests to a server on a port and so forth. But how to navigate the arcane world of AWS that was the challenge.

So I prompted the LLM and sanity checked it against what I thought it needed and went to town.

And lo and behold it worked!

After a lot of tweaking, reading documentation fixing things the LLM hallucinated, I got my task done!

# It Could Only Get Better From Here

Now imagine if that middle part of double checking the LLM could have been a tighter loop, where it didn't need me second guessing most of it to make sure things weren't way out of the norms i.e S3 bucket set to public or something silly.

If the dataset was trained on only terraform data, not docs, and blogposts, and obviously wrong StackOverflow posts that might influence the LLM to hallucinate that a property or method exists when it doesn't but instead the entire corpus was the documentation, and then curated data fed in by the vendor itself -- maybe Terraform in this case -- I would have had an LLM tailored specifically to this task and things would have been even quicker.

I think time will only make the LLMs more efficient, and cheaper to run. I think if they get cheap enough and can be made more realtime we'll have many bespoke LLMs for use with very little hallucination issues.
]]></description>
    </item>
    
    <item>
      <title>Axioms About Berlin - A Running List-ical</title>
      <link>https://gigatexal.blog/pages/axioms-about-berlin/axioms-about-berlin.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/axioms-about-berlin/axioms-about-berlin.html</guid>
      <pubDate>Thu, 09 Jan 2025 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="axioms-about-berlin-in-no-particular-order">Axioms About Berlin In No Particular Order</h3>

<p>date: Thu Jan  9 22:14:27 CET 2025</p>

<h4 id="1-you-dont-need-to-buy-a-ticket-on-a-bus">1. You Don’t Need To Buy A Ticket On A Bus</h4>

<p>It seems that after COVID-19 they just don’t care anymore. During COVID the bus drivers (maybe to do with distancing) stopped enforcing (if they did previously at all) the need to have a valid ticket.</p>

<p>Now of course most Germans are law-abiding, rule-following citizens and always have a valid pass or validate their passes when they get onboard. And while I’ve got a Germany-wide bus pass I never see ticket checkers on the busses or see that the bus drivers seem to care to check or enforce it.</p>

<p>So… if a rule or law that isn’t enforced is it is it really a law?</p>

<p>Note: This is not the case on trains. Regional, inter-city, etc., buy or have a valid ticket else you’ll get dinged.</p>

<h4 id="2-in-2025-you-still-need-cash">2. In 2025 You Still Need Cash</h4>

<p>Yup. Most places still prefer cash. Though it’s getting better. It’s good to carry 10-20 euros with you and 5 or so euros in coins as you never know when you might need a toilet that takes only coins or want a shopping cart that takes a 25-cent piece as a deposit to unlock.</p>

<p>The fees on card processing really does hurt folks. Still I, personally, find paying by card or even better with Apple Pay far more enjoyable. I would even pay extra to have this luxury. Pass 100% of the card fees on to me. Have two sets of prices. One for card payers like myself and a cash one. Double the card processing fee and pass 100% of it onto me. I’d still be happy to be able to use a card at that point. Anyway, yes, it’s still very much a cash-is-king place. Again, I do see it easing just slowly.</p>

<p>There was an effort to have a Germany-wide Electronic Cash system (EC, EC Karte), but I think that’s dying. Some places have card readers that only work with these special EC cards and will refuse to process your Mastercard debit card or credit card for example so it’s best to just confirm.</p>

<p>I often ask: “Kann ich mit karte bezahlen?” (Can I pay with card?) And they’ll sometimes say, yes but “ab 10 euro” (Starting at 10 euros) or “EC Karte” and then you’ll know you’ll need cash or to pull out your EC card.</p>

<h4 id="3-even-the-gas-stations-have-good-baked-goods">3. Even The Gas Stations Have Good Baked Goods</h4>

<p>There’s an Aral gas station near my place. Our apartment is a 30 second walk to it. I go there far too often. They don’t make their croissants or their pretzles from scratch but they do bake them daily. They come by the box frozen, of course, but whoever makes the dough and freezes them does a really good job because while they’ll never put an French bakery out of business, my wife and I have both been to Paris, and these gas-station croissants are really good.</p>

<p>I’m actually quite fond of the pretzels, too.</p>

<h4 id="4-most-people-dont-care-if-you-dont--cant-speak-german">4. Most People Don’t Care If You Don’t / Can’t Speak German</h4>

<p>This has been both a boon and a crutch for us. 7 years in Germany and we still don’t speak the language fluently. It’s a blatant sign of our priviledge: We could easily return home to the states which is predominantly English speaking or emigrate to most anywhere else in Western Europe because of our passpoort and visas and provided I got a good job and visa sponsorship likely be okay not being able to speak the local language.</p>

<p>We do have goals to change that, of course, but 7 years in … the baysian in me thinks it’s not going to happen…</p>

<p>I think if we were to do this all over again I’d have actively sought roles in Amsterdam instead of Berlin. It’s a far more prevalant English speaking place and we liked it a lot when we were there on vacation. We kept thinking: “We could live here … we should have moved here…”</p>

<h4 id="5-the-city-says-its-dog-friendly-it-isnt">5. The City Says It’s Dog Friendly; It Isn’t</h4>

<p>Oh boy this might just be the biggest lie we were told. The city has a number of parks. Most of which are open to the public (as any good park should be) and to dogs. BUT the parks in the city – this oh, so very dog friendly city – dogs must be on leash (that’s fine), but areas or at times when there’s no people around it’s technically illegal for the dogs to be off-leash. And I get that. You never know if a dog is well mannered, well trained, a threat, etc. Some owners do better or worse jobs with their dogs protecting the public by muzzling their dogs if they need to… etc., etc., BUT in a city that supposedly loves dogs and during times where the parks are nearly empty you’ll still have either the Parks Police or the locals reprimanding you or in the case of the police fining you for having your dog off leash or running around.</p>

<p>I’ve been told that – at least the parks located near our apartment – that the parks are animal sanctuaries, that our dogs running around and chasing the rabbits is harming the local wildlife. And when they defecate and I’ve hesitated by a few seconds getting the plastic poop bags out I am scolded that I am ruining the area for everyone else.</p>

<p>“Where will we put our picnic blankets?! Where will we sunbathe? The Horror!”</p>

<p>To which I always retort: “I have a poop bag, I am cleaning it up! Give me a sec”</p>

<p>And: “You don’t see the hypodermic needles on the ground or in the bushes? You don’t see the guy with the metal spoon cooking heroin? Or the unhoused defecating in the bushes? That doesn’t harm the local wildlife? Not to mention the foxes and birds-of-prey that kill untold rabbits? (My dogs might chase a rabbit but I do everything in my power to stop them and they haven’t chased any rabbits of late because in the city we keep them on tight leashes, now anyway)”</p>

<p>The locals will say take your dogs to the Grunwald (Green Forest). It’s a forest of hundreds of acres where the dogs are able to roam free. And we do. It’s just far (5 or more km from us and we don’t have a car here though car-on-demand services are nice) so going by bus is a time sink and it has it’s own risks.</p>

<p>There is a really cool fenced, off-leash park (the only one I know of) at Halemweg that we do take the dogs to but it’s so out of the way that it’s a weekend or after work during the summer only thing.</p>

<h4 id="6-europe-is-where-customer-service-went-and-died-it-died-twice-in-germany-and-thrice-in-berlin">6. Europe Is Where Customer Service Went And Died; It Died Twice In Germany And Thrice In Berlin</h4>

<p>Ok, I am being a bit dramatic. It might not be that bad. But it’s stereotypically pretty terrible. And it’s probably a good thing. Wait staff make decent wages here and have access to healthcare so they’re not desperate for tips like they might be in the US.</p>

<p>That being said – and some people prefer it this way, that they’re not bothered when shopping – we’ve often gotten the impression that the waiters at busy, highly rated restaurants are tolerating us. It’s just very odd.</p>

<p>Not too many days back we were window shopping and as we are want to do we window-shop failed and I saw something I liked and entered the store. The proprietor was having a conversation with an employee about some holiday the employee had taken and we looked around.</p>

<p>I could tell there was a sale but I couldn’t make out what was on sale or what wasn’t. Either way I was too shy to ask to interrupt or for whatever reason – we were the only two shoppers in the store at the time – I thought we’d get a welcome and here’s what the sale is and “let me know if you have any questions” … we got none of that. So 6-minutes later we left.</p>

<p>I sound high-maintainence I know but this is a trend you’ll notice if you’re coming from a more in-your-face, kill-you-with-over-the-top-customer-service place like the US which is where we hail from.</p>

<p>You get used to it.</p>

<h4 id="7-sarcasm-isnt-a-recognizable-thing-here-at-least-not-when-attempted-in-english">7. Sarcasm Isn’t A Recognizable Thing Here (At Least Not When Attempted In English)</h4>

<p>I’m probably just a crap comedian (I am) but double-entandres, or sarcasm just doesn’t register here. And that’s okay. English is sometimes someone’s third or fourth language. It’s just even among my coworkers who are basically native English speakers (having spoken it for many years, consume English media, comedy, movies, music etc.,) whenever I am being self-deprecating or come up with something I think might be witty or sarcastic the looks are often deer-in-headlights, things don’t register. I find it funny now. I laugh at myself and just think I might actually not be funny (You’re not.) but, yeah, trying to be funny in the workplace doesn’t work. At least not for me.</p>

<h4 id="8-hamburg-sucks-avoid-it">8. Hamburg Sucks, Avoid It</h4>

<p>Now, now I still have friends there and there are places we do love to eat there … and the Elbe river is beautiful … it’s just on the whole, I found it very difficult to integrate in Hamburg. Even when we tried to speak what little German we knew we got various reactions to the effect of: “Stop, no. Just stop butchering my language. You’re not speaking it right. :Eye Roll: I’ll just speak English to you”</p>

<p>I dunno … given the choice between Berlin and Hamburg I’d choose Berlin every. Single. Time.</p>

<hr />
]]></description>
    </item>
    
    <item>
      <title>Winners And Losers</title>
      <link>https://gigatexal.blog/pages/winners-and-losers/winners-and-losers.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/winners-and-losers/winners-and-losers.html</guid>
      <pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

# On This Day In 2024

**Update: Thu Nov 14 16:42:12 CET 2024**

As of today the GOP now controls the House of Representatives. Trump now controls the Senate, the House, the Presidency and with it the FBI, the DOJ, the military and has stacked the Supreme Court with a wierd far right majority. So even if states or citizens sue the federal government over Trump's policies they'll likely get no relief from the courts, once a bastion against federal power.

These are truly dark times. I pray for those in Ukraine, for anyone's job that depends on trade, for the climate, for our allies, for my LGBTQIA+ friends, for women seeking abortions...

Maybe, most of all I am sad for the near- or below the poverty line Trump voter that thinks he will do anything for them. Just as Trump is a useful idiot for the world's despots (see Putin and Xi) these voters were only valuable to him to get him elected so he could defend against his many pending cases.

Oh yeah that too -- we'll never see Trump punished for treason for Jan 6th or the stolen classified documents he had in boxes in his bathroom in Mar-a-lago.

God help us all.

---

Date: Wed Nov  6 20:45:21 CET 2024

In every contest there are winners and a losers.

Sometimes the losers lose far more than the winners win.

Sometimes the losers lose everything.

On this day in 2024 Donald Trump became the 47th President of the United States. The republicans claimed a majority in the Senate and might just win the House of Representatives, too.

God have mercy on us all.
]]></description>
    </item>
    
    <item>
      <title>What I&apos;d Tell My Younger Self</title>
      <link>https://gigatexal.blog/pages/career-advice-to-my-younger-self/career-advice-to-my-younger-self.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/career-advice-to-my-younger-self/career-advice-to-my-younger-self.html</guid>
      <pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<hr />
<h1 id="stay-awhile-and-listen">Stay Awhile And Listen</h1>

<p>Ahh, Dekard Cain you old, tortured soul.</p>

<p>I was talking to a friend the other day who is in his senior year of his undergraduate degree studying business and technology. He’s passionate about tech and due to my influence wants to work as a data engineer.</p>

<p>He and I have been meeting most every sunday for about an hour to 90-minutes (if I drone on too long) talking about his portfolio projects, teaching him git, python, SQL, flask, etc., so that he can take his passion, Basketball and stats around it, and hopefully create something worthy of helping him standout from the crowd and get hired eveventually.</p>

<p>We also talk about how to network, how to setup your resume for success, etc. Basically I am trying to give him the leg up I wish I had. I am trying to give him all the chances I wish I had. He still, of course, has to do the work but I think – I hope – with my help he can get on his feet and go on to do amazing things.</p>

<p>Check out a recent project of his here <a href="https://hooperdna.universe-j.com">HooperDNA</a> – which is a a way to compare NCAA basketball stars to possible NBA counterparts. And his linkedin <a href="https://www.linkedin.com/in/james-ezeilo/">here</a>.</p>

<p>Anyways, this post is not about James, though I should do one, he’s made a ton of progress and I’ve learned a lot (probably more than I have taught him along the way).</p>

<h2 id="why-do-i-work">Why Do I Work</h2>

<p>I trade my time for money. Simple as that.</p>

<p>Of course I (most of the time) love what I do. But I do it to afford myself and my family the ability to then trade this earned income for things like experiences, time (buying the time of others so that I might take the time bought to spend it with my family i.e going out to eat or ordering in vs spending that time cooking), things, etc.</p>

<p>So if the goal is to maximize what I can earn in the 8-hours a day that I work, looking back on the decisions I have made, I think I made a mistake.</p>

<h2 id="a-c-in-cs101-c-spooked-me">A C in CS101 (C++) Spooked Me</h2>

<p>Everything I was learning in CS101 was making sense. We were in a class about C++ … but it might as well have been C or VB at that time because nothing we did involved anything really advanced. We’d not yet gotten to pointers or classes or any advanced OOP things like multiple inheritance or the like. And to that point I was doing great.</p>

<p>And then everything changed with the final. The final was to code up a Sodoku solver. Basically every solution more or less involved pointers to some extent. I think we even had a reference solution that was more or less a brute force one (I think our professor took pity on us) but to use it properly and not blow up the memory of the assignment-checking-service we had to use pointers and reference variables and dereference them and that’s when things broke down…</p>

<p>So I never really cracked it. I think I failed or barely passed the whole thing and my A went to a C. I got spooked. I switched to another major and then ultimatley to Economics/Finance and used my talent for scripting/programming (it was mostly scripting if I am honest) to find success there.</p>

<h2 id="i-should-have-listened-to-my-mother">I Should Have Listened To My Mother</h2>

<p>How can a person who has seen you grow up your whole life not know you and your talents and your hobbies and what you’re good at or passionate about? I don’t think it’s possible unless they try not to. My mother spent the time. She knew me. So when she heard I had switched my major out of Computer Science she was sad. Of course she supported my decision but she said it made no sense.</p>

<p>Here was the kid who took apart his fathers computer 486 and put it back together as a boy before he got home; who spent many a summer inside tinkering with Linux, hardware, breaking things and fixing them, compiling stuff and tweaking it (hi Gentoo Linux) while other kids went out to play; that taught himself some HTML and Javascript (enough to be dangerous) and was now going to major in Economics with hopes of some fancy gig in finance or banking. This was not the boy she knew.</p>

<p>I think deep down I knew it, too. I mean, don’t get me wrong, I was fascinated by my economics studies. It’s such a vast field with many influences and things that it influences. It’s as much a science as it is an art given that it deals so deeply with people. Ultimatley I think it is flawed in a very fundamental way: the basis of (again I only went as far as undergraduate economics) of economics is that people are <b>rational</b> and they’re not. Not 100% so. I never got to the point where I could model the irrationality of people but … anyway it’s there.</p>

<p>But the happy ending is that I graduated with my degree in economics and got a job as a junior database administrator for an insurance servicing company in my home town. The rest is history.</p>

<h2 id="learning-to-love-data">Learning To Love Data</h2>

<p>When I first really grokked SQL it immediately clicked and I was hooked. Declarative. Almost English like in it’s statements. It just made sense.</p>

<p>Find the total orders by region…</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">r</span><span class="p">.</span><span class="n">region</span><span class="p">,</span> <span class="k">sum</span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">order_amount</span><span class="p">)</span> <span class="k">as</span> <span class="n">order_total_by_region</span>
<span class="k">FROM</span> <span class="n">fct</span><span class="p">.</span><span class="n">orders</span> <span class="n">o</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">dim</span><span class="p">.</span><span class="n">regions</span> <span class="n">r</span>
<span class="k">ON</span> <span class="n">o</span><span class="p">.</span><span class="n">region_id</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">id</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="mi">1</span>
</code></pre></div></div>

<p>Simple right?</p>

<p>And then there was database schema design and I found that 3rd-normal form just fit with everything I learned about the perfect paragraph in English when writing a paper for example. There exists a topic sentence. Each sentence that follows it somehow ties back to that topic sentence. Any deviations would form a new paragraph with it’s own aim and topic sentence.</p>

<p>At least to me this describes the 3rd normal form – which is a way to organize database schemas for things like ordering and ticketing and inventory systems in a way that is efficient and easy to maintain and query.</p>

<p>Anyways, it clicked. And so I was off to the races.</p>

<h2 id="my-first-role-shaped-my-whole-future">My First Role Shaped My Whole Future</h2>

<p>Cliche as it is I think most everyone can say the same. Maybe your first role you loved it and you quickly rose to the top of your field. Maybe you hated it and learned that you’d like to pivot to something else. It was in my first role that I learned all the ancillary things about how to be a good employee, the value of being dependable, taking pride in doing a good job, learning, being able to fail and make mistakes and learn from them, and many more lessons.</p>

<p>BUT. I wonder had I stuck it out in my CS courses and taken that C into CS102 and put in the work where would I be?</p>

<p>Don’t get me wrong. I really do enjoy the world of data. I find a lot of joy in organizing and analyzing and finding insights in the data. I can move from that of an Analyst, to a DBA/Data Architect, to a pipeline building Data Engineer and from task-to-task or day-to-day or as the job needs. I enjoy the whole stack.</p>

<p>BUT. And while I do use some of my self-taught skills in Python to write services to consume data from something or to place it somewhere I wonder if, with a CS background, if I could be making far more, doing maybe more interesting things, more general things, at any of the big name tech firms today. Of course the whole trajectory of my lifew would likely be different but I am curious. I am curious if I could talk to the parallel universe me who stuck with the class even when he got the C. That sort of A/B experiment would be interesting for me to see the results thereof.</p>

<h2 id="okay-okay-quit-reminiscing-whats-the-point">Okay, Okay Quit Reminiscing… What’s the Point</h2>

<p>My point was to James (and in sharing this with him I realized it myself) that I think he should – if he wanted to, and only he could make this choice for himself – he should <b>try to make it as a junior software engineer first to give himself the best chance at the highest income, the most exposure to all things in the space, and the best flexibility for what to do next. Starting out general and then focusing / specializing is not something I did.</b></p>

<p>I mean it’s what they do at Google. One applies as a generic software engineer (I know there are specialized roles and jobs of course) and then depending on the team one joins the gaps are filled in and one might end up an expert in distributed systems, databases, ads and marketplaces, etc.</p>

<h3 id="its-also-a-hiring-process-more-easily-gamed">It’s Also A Hiring Process More Easily Gamed</h3>

<p>With enough time, effort, hard-work, and a bit of smarts and <a href="https://www.crackingthecodinginterview.com">The Cracking The Coding Interview</a> book (no affiliate link btw) one can get into a Google or a Microsoft or an Amazon. The book, of course, does not prepare you for day two but it gets you through the door and hopefully during the time of preparing the aspiring programmer has gained some skills to be productive enough to stay.</p>

<h2 id="conclusion">Conclusion</h2>

<p>So this is what I would say to seniors at university thinking they want to break into data engineering who also want to maximize their earnings: don’t. Try your hand at becoming the best software engineer you can be, gain the biggest survey of the space, find out what you love or are good at, and then if it is data be it as an analyst, engineer, data scientist, whatever, then focus on that.</p>

]]></description>
    </item>
    
    <item>
      <title>Coming Around to LLMs - I find them useful</title>
      <link>https://gigatexal.blog/pages/coming-around-to-llms/coming-around-to-llms.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/coming-around-to-llms/coming-around-to-llms.html</guid>
      <pubDate>Wed, 09 Oct 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<hr />

<h1 id="once-a-skeptic-now-not-an-evangelist-but-a-happy-user">Once A Skeptic, Now Not An Evangelist But A Happy User</h1>

<p><b>TL;DR - I was once a skeptic of LLMs (Large Language Models) like <a href="https://chatgpt.com">ChatGPT</a> but now I use them for what they are and nothing more and as a result I am far more productive than I was before.</b></p>

<p>Consider using them, playing around with them to see how they fit in your workflow, pay for them if needed or not. They’re not paying me to tell you this so if you do or do not I won’t be sad. :-)</p>

<hr />

<p>There’s not much to say here, that’s pretty much it (Feel free to read on for more context though). Search is Google’s to lose. Just today I was reading Snowflake’s documentation on their access control setup and how it works.</p>

<p>And maybe it’s because it can synthesize the right string of words to “answer” a query I find it better at answering questions than finding the same answers from Google.</p>

<h3 id="you-just-have-bad-google-fu">You Just Have Bad Google-fu</h3>

<p>Probably. But I also don’t have time to waste scouring links, reading blogs and articles, combing through documentation. What I do have is – after more than a decade in tech – an idea of how something should work, what to look for, what to verify, what direction to go, how this backend service should be constructed, what “good” looks like and what LLMs help me do is take what I envision and get a skeleton up and running far faster and quicker.</p>

<h3 id="its-not-100-perfect">It’s Not 100% Perfect</h3>

<p>Are things that are generated by an LLM perfect? Are developers going to be replaced by farms of bots churning out code?</p>

<p>No.</p>

<p>Are they tools that will help you be more productive?</p>

<p>Very likely yes.</p>

<h3 id="asking-chatgpt-is-often-more-productive-than-google-ing-it">Asking ChatGPT Is Often More Productive Than Google-ing It</h3>

<p>On a handful of occasions now I’ve become so flustered with wasting time wading through all the old <a href="https://stackoverflow.com">StackOverflow</a> answers, blog posts for a version of a package far too old, or one filled with so many annoying ads that getting to the knowledge – the thing that Google was supposed to help organize and make available to us … – that I thought: “Why don’t I just ask ChatGPT?” and the majority of the time it resulted in:</p>

<ol>
  <li>The answer</li>
  <li>No ads</li>
  <li>Armed with the answer I could ask follow-ups, or go about solving whatever it was I was trying to solve
While my parallel universe self still using Google was still using Google trying to get to the nugget of info…</li>
</ol>

<h3 id="code-generation">Code Generation</h3>

<p>The caveat here is LLMs will make competent, capable programmers who have a grasp over their domain enough to know what “good” and correct should be – LLMs will make these developers far more productive.</p>

<p>Where there be dragons is for the new engineers that are just learning or still copy-pasta’ing code from StackOverflow but don’t understand what it is they copied … these are they that will suffer.</p>

<p>What LLMs do is reduce the tedium. It’s really kinda great.</p>

<h3 id="conclusion">Conclusion</h3>

<p>I’ve a buddy of mine. He’s a very capable and strong Java developer at Amazon. If you’ve used Amazon.com you’ve benefited from his intelligence. When we were younger we were talking. He was learning Java at the time at university and had a question. (I knew nothing of Java having switched away from Computer Science as a major after getting a C in C++. That’s a story for another day) I said: “I know! Post your question to StackOverflow!” He responded, with a dower look on his face: “No, I’ll figure it out.” After more prodding I understood why he was so reluctant: He didn’t want to get nerd-shamed that his question was too dumb, or obvious, or that it was a dupe and to have it closed in anger. What ChatGPT is, StackOverflow could have been. But – ironically enough – it was the people that made StackOverflow toxic sometimes and why it’s not used as much now.</p>

<p>In sum, I find that I, the end user am the beneficiary of 10s of billions of dollars in investment causing 100s of billions in valuations chasing ~10 billion in total revenue for the whole of the LLM space … so I don’t know when or if the AI/ML/LLM hype will end. I don’t know if the – what I think is very generous – free tiers of these LLMs and their seemingly endless context windows will end but for the time being I am now a paying subscriber and have embraced it and it’s only helped me and my career.</p>
]]></description>
    </item>
    
    <item>
      <title>There&apos;s no perfect desktop workstation</title>
      <link>https://gigatexal.blog/pages/no-perfect-workstation/no-perfect-workstation.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/no-perfect-workstation/no-perfect-workstation.html</guid>
      <pubDate>Tue, 17 Sep 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

### MacOS, Windows, Linux, ... there's no perfect workstation OS (for me, maybe you, too)
date: Tue Sep 17 00:07:48 CEST 2024

I've a recently updated to MacOS Sequoia aka MacOS 15 [Macbook M3 Max](https://www.apple.com/macbook-pro/compare/). It cost me [5700 USD]((/pages/new-laptop/new-laptop.html)) (Yeah. I know.). It's awesome. (I mean it had better be, right?). It was also insanely expensive. And truthfully -- It's far too much hardware -- for what I use it for. But this post is not about my prestinely machined, Jony Ive work of art with more ram than my desktop ... It's about software.

I can't remember the day but it must have been a few years ago. One day I nuked Microsoft Windows from [my desktop](/pages/about/about.html) or I built it and immediately put Fedora on it... I can't remember. But the reason was I legit found the [i3 window manager](https://i3wm.org) to be the ideal window manager ever created. (Yes, xmonad or others exist but as I'll explain later I am a man that apblockquoteciates creature comforts...)

<blockquote>What's So Great About Tiling Window Managers Anyway?

In short a tiling window manager like i3 allows me to fly through windows, desktops, split terminals, tile applications, all like a Hollywood hacker in some movie. All the keybindings are configured via a simple text config file. I rarely use the mouse which helps me avoid RSI. And since I use Vim it all just makes a ton of sense. 

More important than looking cool and being good for my health: I am far, far more productive when using i3. That's why I use it almost exclusively when on Linux.</blockquote>


Tiling window managers like i3 come up on HN often and I've showered the project with love as early as late 2021.

I described my love of i3 here on HackerNews [HN](https://news.ycombinator.com):

<blockquote>
They [tiling window managers] exist. It’s the one and only reason I use Linux is I fell in love with i3 and now Sway.
They’re not just good for terminals. I do like me some tmux but I find tiling and stacking and all the glory of a titling window manager the best part of desktop Linux.
</blockquote>
In response to: https://linuxblog.io/linux-tiling-desktop-environments/ and the discussion here: https://news.ycombinator.com/item?id=41357853#41359783

Suffice to say that at some time a few years ago the window manager just clicked and I moved wholly to Linux with i3.

#### What does this have to do with there not being a "perfect workstation"?

Some more history might help paint the picture. In college I bought my first mac. Until then I was a die-hard PC-gamer. If I had known of reddit I'd probably have been an active member of `r/PCMasterRace`. I hated what I didn't understand.<sup>1</sup> I had spent a ton of time and energy learning how to be a Windows power user I despised the Mac. And Linux I had only ever run headless on servers or in VMs and never seriously ran Linux on the desktop for any real amount of time.

Anyway, in college I had money. Well, borrowed money. Student loans for a poor kid might as well have been drugs. I am lucky I left college with a degree and what little debt I did incur.

I used a substantial part of one of my loans to buy a Macbook Pro 2013. It was a fairly high end one. I think it was 2-2.5k in 2013 which in 2024 dollars is 2700 USD.<sup>2</sup> It had an i7 CPU, ~2.6ghz, 16GB of ram<sup>3</sup>, 512GB or 1TB SSD, 15 inch screen, etc., etc.

Up to this point I and my roomates were all just doing the typical student things: ramen, cheap dates, netbooks, or cheap Dell laptops.

But I got home, the apartment nerd and self proclaimed PCs-uber-alles guy, and I was blown away by the multi-touch of the glass? trackpad. It was such a huge improvement over the cheap, plastic ones I had been used to on the Dell's that I and my roomates had had before.

Soon I was swiping back and forth virtual desktops like a speed deamon. The pleasing-to-behold UI that was MacOS, the really useful applications, I was sold. Then, like any good newly converted stan I set about sharing the gospel of all things Mac and extolling it's advantages to the hardware we were currently using. One roomate had a used Netbook (1.6ghz Intel Atom, 10 inch screen, etc...). Another had a random HP laptop I think. To say that we were ready to be wowed by high end hardware is an understatement.

I had that laptop for nearly 10 years. It survived me graduating. I never serviced it other than cleaning it out when dust accumulated in the vents. The battery lasted long enough to be useable as a laptop. It followed me when we moved to Germany until it was stolen when I placed it in the basement storage unit too close to the exterior wall.

#### I Learned To Like Nice Things
<blockquote>
I learned to like nice things. I became a bit bougie, hah. I like the build quality of the Apple laptops. The amazing trackpads. The vibrant screens. And how, for the most part, the hardware and software just work together so well. Seamlessly connecting Apple Keyboards to my Apple Laptop, or my Apple Headphones to my Apple Laptop, etc., etc.
</blockquote>

But things weren't perfect.

The Brew package manager has come a long, long way and is largely, a non-issue for me these days. I'd say it's on par with Linux package managers like `apt` or `dnf`. But back then I had been burned a few times and that wasn't fun. I didn't have such issues with my Linux servers.

### MacOS is almost there

One of the strengths of the platform is how opinionated MacOS and Apple are about their hardware and experiences. Success is best had doing things the "Apple way". Using first-party hardware if possible has the highest chance of "just working".

Not fighting their rules in the AppStore means you might get promoted by the AppStore editors and it might even lead to more sales. 

AND/OR - try to augment the OS with things like [Magnet -- the missing window management for MacOS](https://apps.apple.com/us/app/magnet/id441258766?mt=12) and [Alfred -- replacement for Spotlight](https://apps.apple.com/us/app/alfred/id405843582?mt=12) and many, many others. 

The idea is that because the OS is so locked down and curated<sup><a href="#4">4</a></sup> and updates come as set intervals that when they do it's like Christmas day a bit where everyone rushes to check out the new changes and such. It also means that something like i3, my beloved window manager from Linux, couldn't really ship on the Mac without significantly hooking into deep system internals.<sup><a href="#5">5</a></sup>

<blockquote>
So that's it. I'm too old, too busy, to faff around. I just want things to work. And I like the It Just Works<sup>tm</sup> of the Apple platform but at the same time I love the hackability and the choice of Linux.
</blockquote>

I can't have both. Hence why nothing, in my mind, will ever be "perfect".

I'd love to have MacOS be as hackable as Linux is. I'd love to be able to switch out my window manager as simply as I can on Linux but then would it be MacOS then?

Nope. It would not.

Any dev whose code targets software to run on the Microsoft Windows ecosystem has the benefit of backwards compatibility that goes on for decades.

While it's a more open system it's still Windows. DirectX, the Win32 API, etc., etc. People can rest assured that for the most part the interface won't really change and code written for an older version will also work.

MacOS is that way in some sense. Every year the OS and the UI might change incrementally but it's still MacOS, the Apple window server, etc.

But on Linux or on any of the BSDs I could swap out my window manager even my window server (hello Wayland) and even have them all installed side-by-side and swap between different windowing paradigms whenever I feel like it.

<blockquote>See how that might make for a nightmare scenario to develop something like a Linux native AAA game for or something like Photoshop when you have to handle the combinatorially large number of Linux installations with mixed and matched window managers, different kernels, different hardware, ...</blockquote>

### So That's It Then

I guess so. I want all the things. I want customizability, large selection of applications, well designed and pleasing to behold applications; support for games; I just want to connect to a Zoom call (well nobody wants to but if they have to) and just have things work and be able to share my screen without issue; to have no screen tearing. I don't want to have ads in the start menu. I want a secure system<sup><a href="#6">6</a></sup> and I don't want to spend more time with my tools than using said tools to do productive things.

#### Addendum: Just use Windows, Powertools, and WSL2

Windows, Powertools (for extra window management stuff), WSL2 - Windows Subsystem for Linux (for my commandline-love and a unix like experience) do seem like they'd fit everything.
The problem is I can't stand Windows. 

I run Windows 11 on my gaming rig for the time being just because I am using it like an appliance and using Windows for what it's best at: Gaming. 

And maybe this is just prejudice and over time it'll win me over but for the time being I don't think so. So long as I keep using this Mac as my workstation and also largely due to Apple ecosystem lock-in I am not switching to Windows any time soon.

---

<div id=1>1. Funny how that belies a lot of the world's problems lately...</div>  
<div id=2>2. https://www.in2013dollars.com/us/inflation/2013?amount=2000</div>
<div id=3>3. That was a lot back then.</div>
<div id=4>4. My wife and I upgraded all of our Apple products (HomePods, iPads, iPhones, Apple Watches, Apple TVs, etc.,) just an hour after it dropped for us here in Germany.</div>
<div id=5>5. Projects like <a href="https://github.com/koekeishiya/yabai">Yabai</a> and <a href="https://github.com/nikitabobko/AeroSpace">AeroSpace</a> and others try to offer more keyboard focused, tiling, but it's far more faffing about than I want to do and there's always a risk a future MacOS update could break stuff. I'd much prefer a native approach. i3 is not native per-se to Linux or to a BSD but nothing really is. Linux is just a kernel with a bunch of loosely connected userland things like a window server and a window manager.</div>
<div id=6>6. Windows having something like 90% marketshare it just makes sense for bad actors to target it for nefarious purposes.</div>
]]></description>
    </item>
    
    <item>
      <title>I bought a ridiculous laptop</title>
      <link>https://gigatexal.blog/pages/new-laptop/new-laptop.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/new-laptop/new-laptop.html</guid>
      <pubDate>Wed, 15 May 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

# Unmatched Quality

My 2013 almost-top-tier Macbook Pro 15 I got in college lasted me almost 10 years. That aluminum beast cemented in my mind the lasting power of the Mac as a laptop platform.

Now, now, before the horde of legacy Thinkpad stans come at me with pitchforks -- yes I know the same can be said about a nearly 10 year old Thinkpad that's been through countless upgrades.
But what the Thinkpads don't have is the sheer engineering and art (thanks Johnny Ive) of the Macbook. It's just beautiful to look at!

So I figure this laptop will last me until Apple will no longer support it. That's how long -- and even longer -- I held on to my old Macbook.

# Enough Already, Get To The Specs

Okay!

- 2024 Macbook Pro 13
- M3 Max 16-cores, 40-gpu-cores
- 128GB RAM
- 4TB SSD
- ~5700 USD

Insane right?

# Ooooh! Top End Spec!! Bet You Hear The Fans All Day!

Nope. Not that I've taxed it a lot lately but It's been silent. The CPU cores regularly hover around 41-45C but to the touch the machine stays less than luke-warm. It's brilliant.

# So ... Do You Miss Your Tiling Window Manager?

Yes, but I am working on getting it there with [yabai-tiling-wm-for-mac](https://github.com/koekeishiya/yabai) but... I've embraced the 1-app-1-workspace lifesyle and just swipe between the spaces.

Also really nice is to on a platform that the mainstream thinks about when developing applications. Things literally just work &trade; and there are awesome applications like LittleSnitch that show exactly what is being connected and to where and the bandwidth. It can't do deep packet inspection as that would likely require breaking TLS but it's really nice.

# In Conclusion

It's too early to tell if I love this laptop and will be happy with this ridiculous price I paid ... and for now it's too early to tell but it's really nice.

It's silent. The trackpad is awesome. The keyboard travel is surprisingly good for something so thin. The battery life lasts for seemingly ever. And the screen is amazing.

All of the above should basically be par for the course given how expensive this is but the Apple Silicon transition is just amazing and being able to run electron apps and Docker without the laptop turning into a jet engine is a huge win.

And MacOS isn't as annoying as I remember it. It's kinda nice to be in a place that is distrusting of apps and prompts for access, it gives me a sense of security.


]]></description>
    </item>
    
    <item>
      <title>AWS things that make you go wtf?</title>
      <link>https://gigatexal.blog/pages/wtf-aws/wtf-aws.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/wtf-aws/wtf-aws.html</guid>
      <pubDate>Sat, 16 Mar 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

# API Gateway And Cloudwatch

So there I was prototyping an API on AWS using API Gateway and wondering where the logs were in CloudWatch -- Amazon's Cloud Logs tool.

Unbenownst to me, and what I think is a user-hostile-terrible-default logs for API Gateway aren't on by default.

So I google and find this wonderful blog: [https://coady.tech/aws-cloudwatch-logs-arn/](https://coady.tech/aws-cloudwatch-logs-arn/) which, while well written, honestly shouldn't exist.

They summarize the issue and solution here: "TL;DR: By default, API Gateway does not have the required permission to write logs to CloudWatch logs. Scroll down for the full solution."

In an attempt to be secure AWS by default doesn't automatically enable API Gateway to do anything with the AWS account. Makes sense... but come on, at least log stuff -- turn that on.

If anything this should be solved in the UI of the console and made super obvious and be enabled by a simple click of a button...no faffing with roles and IAM needed. I'm basically saying make it easier for me to pay Amazon more money since logs in CloudWatch cost me money.

# SNS (Simple Notification Service) And SQS (Simple Queue Service) And The Case Of The Missing Messages

In a classic example of companies shipping their org-charts and how well (not well) those orgs talk with one another I hit this issue just today. It seemingly makes no sense.

The scenario is simple. I want to use SNS to publish messages with some attributes that some queue (SQS) will listen on with a filter and from there trigger some Lambda functions. Simple enough stuff.

So create the SNS topic and subscribe it to an existing SQS queue. Use the helpful UI to test the flow from the SNS side with a message and then poll for messages on the SQS side.

No messages. (I literally used the console to connect the things with the assumption that the plumbing to make it all work was being done in the background otherwise what's the point of a fancy web console?)

Enable logs for SNS.

"SNS (topic foo) is not allowed to publish to SQS (queue bar)"

me: wtf?

Okay -- I could faff around with the policy in JSON or use the builder... OR I could follow my hunch and try creating the subscription from the SQS side.

From the SQS side create a sub on the SNS topic.

Test by sending a message.

Message arrives as intended.

So... Which is it? The SNS team didn't think about this or the SQS team thought about auto-enabling permissions when subscribing to things on their end?

Again, wtf?
]]></description>
    </item>
    
    <item>
      <title>Apple Should Thank The Asahi Team And How I&apos;m Unsure About What Laptop To Get</title>
      <link>https://gigatexal.blog/pages/apple-should-thank-the-asahi-team/apple-should-thank-the-asahi-team.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/apple-should-thank-the-asahi-team/apple-should-thank-the-asahi-team.html</guid>
      <pubDate>Sat, 02 Mar 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<hr />

<h1 id="my-laptop-condundrum-and-why-apple-should-thank-the-asahi-team">My Laptop Condundrum and Why Apple Should Thank The Asahi Team</h1>

<h2 id="where-im-at-now">Where I’m At Now</h2>

<p>I have been very happy with Linux of late. Very happy. I’m running <a href="https://fedoraproject.com">Fedora 39</a>.</p>

<p>I like the freedom, the hackability, the customizability, and just how things work how I think they should, they’re intuitive.</p>

<h3 id="why-i-run-linux-tiling-window-managers-and-more">Why I Run Linux: Tiling Window Managers And More</h3>

<p>The main productivity hack for me, and something that has kept carpal tunnel at bay, has been my tiling window manager and just the overall work to make almost everything I do keyboard driven.</p>

<p>I use i3 when running X11 and Sway on Wayland. I can quickly move from virtual desktop to virtual desktop with vim-style keybindings, I can stack, layer, move apps to new virtual desktops with a few keystrokes. It’s beautiful. And the whole time my fingers don’t move from the keyboard to the mouse.</p>

<p>Note: At work I run KDE. I even support the project to the tune of 20 euros a month. I often dock and undock my laptop and found KDE or Gnome for that matter much better at handling changing monitor layouts and other multimedia things. Of course it can be done with various cli tools and other things on the tiling-wm side but in a pinch it’s nice to have a heavier window manager that just has all the bells and whistles. But at home, when docked, or on my workstation doing my own thing, the setup is far more static and that’s where tiling makes a ton more sense for me.</p>

<p>“But you can do this on the Mac! and in Windows!” I know, I probably can, but it’s native to Linux and FreeBSD and the other open source operating systems to decouple the window manager from the OS and allow this plug-n-play style of working. I’m familiar with Magnet and other such tools on the Mac to get even better tiling ergonomics. And Windows has made a ton of strides here, too.</p>

<p>But for me Linux just makes the most sense. Package managers allowing for easy installation of thousands of applications which have only gotten better with modern packaging like that of Flatpaks, or Appimages, or Snaps; Different filesystems (I’m loving ZFS), container isolation is native in the Kernel (aka Docker runs without a VM and runs super nicely, shoutout to Podman for being dope, too); Games work thanks to the tireless contributions of thousands of hackers in the Wine project and from commercial contributions from Colabera, and from Valve and Steam with their work on Proton – a fork of Wine and their Steamdeck; There’s no ads in my app launcher, nothing hoovering up my data to sell; etc., etc.</p>

<p>So, while I didn’t need to justify it, there, those are some of the reasons I love running Linux for work and for pleasure.</p>

<h3 id="the-m-series-macs-are-so-good-id-run-macos-if-i-had-to">The M-series Macs Are So Good I’d Run MacOS If I Had To</h3>

<p>When the M series chips came out they were wicked fast and efficient. My wife got the M1 Macbook Air 13 with 16GB of ram and that thing flies at everything she does on it. Now her workload is not a lot but she can multitask with the best of them. She often has Notion and Figma open and Safari open with 100+ tabs, and more and it never breaks a sweat. It’s dead silent. It’s a Mac so it’s beautifully built, light, has a fantastic screen, amazing battery life, encodes audio and video like a beast, and is just overall a very well built machine that just happens to run MacOS.</p>

<p>And that’s the rub. If I could only run MacOS on such a device I’d be far more hesitant to buy one than I am now. But because of the Asahi Linux team I can run Linux on it and not only their spin of Linux but my favorite one from Fedora the Fedora Asahi Remix distribution which is based on Fedora 39 and has all their work baked in. So things work and I get my favorite package manager, KDE (not ideal but servicable but Sway – the i3 inspired Wayland tiling WM works just <a href="https://discussion.fedoraproject.org/t/sway-works-well-with-fedora-asahi-remix/95629/5">fine</a>, too), and the like and the best part is that I can dual-boot it with MacOS like we used to dual-boot Linux and Windows to still be able to play games back in the early 2000s.</p>

<p>So Asahi have just added value to the Mac for me. I should really be buying a Thinkpad – I loved my P-series work-issued one (and I might yet still get one if I can get a good deal)– beacause Thinkpads and Linux go together like peanut butter and jelly, they just work. But the Asahi team have done such a good job, and without any real help from Apple, to bring Linux to the best implementation of Arm in a laptop or desktop and I think that’s just brilliant.</p>

<h3 id="conclusion">Conclusion</h3>

<p>So if you’re a finance exec at Apple or otherwise and are reading this maybe consider thanking the Asahi team financially or open up the Mac specs a bit so they can get more features working because it will drive more wierdos like me who want to run Linux but also are willing to pay 2-4k euros on a laptop to do it to get access to the amazing Apple ARM cpus and the craftmanship that comes with the way they build PCs.</p>

<h3 id="post-script">Post Script</h3>

<p>Check out the Asahi team here: <a href="https://asahilinux.org/about/">https://asahilinux.org/about/</a></p>

<p>Here’s what are in the running:</p>

<ul>
  <li>Lenovo P14s Gen 4 AMD laptop</li>
  <li>14 inch oled screen 2.8k</li>
  <li>64GB soldered DDR5 ram</li>
  <li>1TB SSD</li>
  <li>QWERTY keyboard</li>
  <li>ethernet, hdmi, card reader, usb all built in</li>
  <li>1250 USD – currently on sale as of this writing</li>
  <li>3 Lbs</li>
  <li>Really a steal and the one I should probably get</li>
</ul>

<p>But it’s so utilitarian… It doesn’t have any of the coprocessors I think I want/need for encoding my Youtube Videos or audio for my upcoming podcast adventures
It’s kinda ugly but also it’s sturdy and well built so…</p>

<hr />

<p>Not the <a href="https://frame.work/de/en/products/laptop-diy-13-gen-amd">Framework 13</a> – availability is an issue – I am trying to time getting the laptop around the time my sister-in-law is flying from the US to Germany and she’ll bring it over so I need something that can be bought and shipped to her in a few weeks and not a batch that could take months. Otherwise what the Framework team are doing is really laudable. I’ve played around with one at my old job and the build and screen and everything about it was nice. They’re a bit pricier than I would like for what you get but the repairability and upgradability is top notch.</p>

<p>This model would have the same series AMD CPU as the Lenovo and could be specc’d very similarily.</p>

<p>When I priced one out it came out to about 2k euros for a 64GB model with a bit slower ram, a 1TB SSD, and all the same connectivity as the Lenovo.</p>

<hr />

<p>Lastly the Mac that I am eying.</p>

<p>Now keep in mind I kept my 2013 Macbook Pro for nearly 10 years. It worked fine. It was just stolen. :( But it was also heavy, slow, out of support, etc., etc.</p>

<p>So I specc’d a Macbook Pro (aspiring guy with a podcast and youtube dreams and yeah don’t hate me) to last almost the same amount of time.</p>

<p>(Even though I, rationally know, it makes far more sense to buy enough computer for their useful life which is about 3-5 years max and then just get the better model … alas people are not rational)</p>

<p>So here’s the 14 in Macbook Pro specs:</p>

<ul>
  <li>Macbook Pro 14</li>
  <li>M3 Max chip (16-CPU cores, 40 GPU cores)</li>
  <li>64GB of unified memory with some 400GB/s of bandwidth – far more than the Lenovo or Framework (questionable utility in the realworld but … yeah)</li>
  <li>2TB SSD (rational here is maybe there’d be a lot of footage to render)</li>
  <li>14.2 inch screen, 3024x1964 pixels, awesome color reproduction, 120hz refresh available</li>
  <li>QWERTY</li>
  <li>USB-C for everything though this also has HDMI out</li>
  <li>4299 USD :sweat_smile:</li>
  <li>3.4 Lbs</li>
</ul>

<h3 id="post-post-script">Post Post Script</h3>

<p>I don’t know really why I am gravitating towards the Mac. I mean I do live in the ecosystem. I have Airpods Pro and Airpods Max headphones so they’d pair really nicely with the Mac. I’ve a ton of iTunes purchased media. I subscribe to Apple Music (but that’s also accessible via a browser so it’s not really an exclusive thing), TouchID is nice as I can login seamlessly with that (but only on the Mac as in Asahi this is not working yet), and it just looks cool. I can be part of the hipster, cool kids club when I show up at the Coffee Shop.</p>

<p>Okay so I’m losing the point here of this post – Apple should thank the Asahi team – but I’ll likely just end up getting the Lenovo. Maybe.</p>
]]></description>
    </item>
    
    <item>
      <title>A (Poor) Man&apos;s Take On Org-Mode, Global Notes</title>
      <link>https://gigatexal.blog/pages/global-notes/global-notes.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/global-notes/global-notes.html</guid>
      <pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

# Access Notes From Anywhere

### A (Very) Poor Man's Org-Mode For Taking Notes

I had a colleague at my previous role that would collect wisdom seen in Slack channels or things he learned in a text document. Whenever I asked a question he'd usually have the answer. The secret was this text document.

I had always thought: "Man, I really should have one of those." I'd send myself notes in Slack and then one day that just disappeared. So I learned my lesson. It was only until recently that I threw this together.

The super power is being able to invoke my notes with one command and immediately be in them with my editor of choice.

---

I wanted this to be simple. I didn't want to learn a new way to do notes. It needed to be simple and quick. So Org-Mode in Vim/Emacs was a no go for now.

So a simple Python script, a shell script, a shell function, and boom I can access my notes from any terminal (a place I exist in 99% of the time).

### How It Works

There are three files. 

`dt.py` -- a file that has a template for the current date that makes it easy for me to grep for things and a template for todo items
```python
from datetime import datetime

def print_date():
    current_date = datetime.now()
    day = current_date.day
    month = current_date.month
    year = current_date.year
    print(f'day: {day} month: {month} year: {year}')
    print(f'date: {current_date}')
    print('TODO:')
    print('- [ ]\tStuff\n'*3)


if __name__ == '__main__':
    print_date()
```
 
`dt.sh` -- a shell script to place in one's PATH to use wherever
```bash
/usr/bin/python3 /home/gigatexal/tools/scripts/notes/dt.py
```

And then this puts it all together in my shell:

```bash
function notes(){
  lvim /home/gigatexal/notes/note.md
  git -C /home/gigatexal/notes add note.md
  git -C /home/gigatexal/notes commit -m "stuff added"
  git -C /home/gigatexal/notes push
}
```

```
#> ln -f $(readlink -f dt.sh) /home/<user>/.local/bin/dt 
#> notes <-- this opens the editor with the file
```

And what's really cool about this is that whenever I save and exit if there are changes they get added and pushed to a private repo -- that's what all the git stuff is after the invocation of the note

Another interesting part of this is that all my changes go into a single file, I find a single file more useful -- for me.

So the flow is:

Invoke 'notes' from the shell <-- or whatever you call the shell function

Start a new entry at the top of the file...

In Vim/NeoVim I do this by going `:r! dt` which outputs this:

```markdown
day: 15 month: 2 year: 2024
date: 2024-02-15 16:37:22.078864
TODO:
- [ ]	Stuff
- [ ]	Stuff
- [ ]	Stuff
```

I'm not 100% the day month year stuff is relevant but I can in my editor now do a search by date to get what I was thinking there and since it's one document (yes, yes, fzf and other things can search all files in a folder or an entire filesystem) I can easily find things I'm looking for

Cool huh?!
]]></description>
    </item>
    
    <item>
      <title>A montage of snippets from Jupiter Broadcasting&apos;s CoderRadio Show</title>
      <link>https://gigatexal.blog/pages/coder/coder.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/coder/coder.html</guid>
      <pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<hr />

<table>
  <tbody>
    <tr>
      <td><a href="https://www.linkedin.com/in/alexandarnarayan/">LinkedIn</a></td>
      <td>Resume:</td>
    </tr>
    <tr>
      <td><a href="/pages/the-ideal-data-engineering-resume/resume-2025.html">HTML</a></td>
      <td><a href="/pages/the-ideal-data-engineering-resume/resume-2025.pdf">PDF</a></td>
    </tr>
  </tbody>
</table>

<h2 id="coder-radio">Coder Radio</h2>

<p>Date: Sat Sep 16 11:42:37 PM CEST 2023</p>

<p>This podcast from <a href="https://jupiterbroadcasting.com">Jupiter Broadcasting</a> is one
of my favorite podcasts I listen to every week. The hosts Mike (sometimes
Jar-Jar Binks, sometimes Yoda, all-the-the-time Objective-C obsessive and Taylor
Swift/Katy Perry fanboy programmer with a penchant for destroying laptops with
adult beverages and proprietor of <a href="alice.dev">alice.dev</a>) and Chris (The
great-hair having Star-Trek nerd about that R.V. life boss of the largest Linux
podcast network) have an amazing rapport and they tackle some evergreen topics
as well as current events in the tech/programming/business space.</p>

<p>Don’t mind Chris’s tendencies to bring up Bitcoin he’s convinced the lightning
network that facilitates sending fractions of a Bitcoin – a hundred-millionth
of a coin – as a way to support the network and creators etc. It’s also an
interesting part of the value-for-value podcasting 2.0 movement.</p>

<p>Check out them out on CoderRadio at <a href="https://coder.show">Coder Radio Show</a>.</p>

<hr />

<h3 id="canonical-linux-by-microsoft">Canonical Linux By Microsoft?</h3>

<figure><figcaption>Microsoft Should Have Bought Canonical</figcaption><video with="270" height="480" controls=""><source src="https://content.gigatexal.blog/coder/video/316-July-5-Ms-should-have-bought-canonical.mp4" type="video/mp4" />
<source src="https://content.gigatexal.blog/coder/video/316-July-5-Ms-should-have-bought-canonical.mp4" type="video/mp4" />
</video></figure>

<p>Mike comically quips that Microsoft should have bought Canonical makers of the
venerable <a href="https://ubuntu.com">Ubuntu Linux</a> distribution.</p>

<p>WSL (Windows Subsystem for Linux - get a proper bash terminal on your Windows
box) at the time was moving from strength to strength and perhaps had they done
so I can only imagine how different desktop linux would be today. I wonder what
gaming on Linux would be given how really amazing it is now thanks to
<a href="https://getsteampowered.com">Valve makers of the game platform Steam oh and Half-Life and Portal</a>
and all their work in combining <a href="https://winehq.org">Wine</a> and
<a href="https://protondb.com">Proton</a> to make running Windows games on Linux.</p>

<hr />

<h3 id="have-some-companies-become-too-big-when-companies-are-more-valuable-than-nation-states">Have Some Companies Become Too Big? When Companies Are More Valuable Than Nation States</h3>

<figure><figcaption>Microsoft had a market cap nearly that of South Africa in 2018 (nearly 800B) </figcaption><video with="270" height="480" controls=""><source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-corps-as-powerful-as-nations.mp4" type="video/mp4" />
<source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-corps-as-powerful-as-nations.mp4" type="video/mp4" />
</video></figure>

<p>In 2018 Apple and Amazon had market caps of
~750B<sup><a href="https://companiesmarketcap.com/amazon/marketcap/">1</a></sup>
<sup><a href="https://companiesmarketcap.com/amazon/marketcap/">2</a></sup>
while Microsoft was pushing nearly
800B<sup><a href="https://companiesmarketcap.com/microsoft/marketcap/">3</a></sup>
which put these three champions of US industry and might right between the GDPs
of Columbia and South
Africa.<sup><a href="https://data.oecd.org/chart/7d00">4</a></sup>. Which is
just insane. At some point how to countries expect to govern or effectively
reign in these high-flying bastions of capitalism? Congress can’t seem to pass
anything and current anti-trust laws are horribly inadequate for this digital
age.</p>

<p>Mike recalls a movie about a dystopian future from either the 80s or 90s where
corporations take over the running of government. (No thank you.) Apparently
around this time as a faux libertarian marketing stunt? Dominoes was having
folks identify pot holes in streets near them and the company would come and fix
the pot hole and for their trouble they’d paint a Domino’s logo on the pot hole
thereby advertising their mediocre pizza but also somehow rubbing it into the
noses of all who could see who inept the local government was. Read more about
this
<a href="https://www.eater.com/2018/9/7/17831586/dominos-potholes-paving-for-pizza-towns">here</a>
from Eater.com.</p>

<p>From the article:</p>

<p><q>So while the free money is nice, Valverde [University of Toronto Legal
Studies professor] hints that it could be just an early taste of the dystopian
future where you get Domino’s and nice roads — or an independent pizzeria and
some crumbling infrastructure.</q></p>

<p>The guys comment on this more eloquently than I just did.</p>

<hr />

<h3 id="lamenting-on-why-we-conflate-our-tech-purchases-or-choices-with-our-identity">Lamenting On Why We Conflate Our Tech Purchases Or Choices With Our Identity</h3>

<figure><figcaption>Flame wars are just crusades waged by nerds and other identity politics</figcaption><video with="270" height="480" controls=""><source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-choices-become-identity-tribalism.mp4" type="video/mp4" />
<source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-choices-become-identity-tribalism.mp4" type="video/mp4" />
</video></figure>

<p>Oh man o man did this resonate with me. You can see this all over the internet,
tons and tons of forum posts tens or hundreds of pages long on every topic from
what is the best graphics card, or who makes the best CPUs or which political
party is better than the rest or who’s recipe for chocolate chip cookies is the
best and so on and so on…</p>

<p>Why people tend to be so tribal about things is funny and why we stan for these
giant corporations when they’ve already won, they’ve gotten our money! Yet our
choice to give them money in exchange for a shiny new widget somehow turns us
into zealots for the cause with our bibles of confirmation bias to wield to
convert the other side. And to what end? To do that company’s marketing for
them, for free?! My writing eloquent long posts citing benchmarks and value for
money this and that’s doesn’t earn me any money just feel-good points. I can’t
pay my cell phone bill with feel-good points stanning for AMD and yet I did for
years.</p>

<p>It’s gross. I’ve done it. I’m no saint here.</p>

<p>The guys talk about how this is a thing even or especially in tech and how it’s
just odd.</p>

<hr />

<h2 id="coder-315-chicken-farmers"><a href="https://coder.show/315">Coder 315: Chicken Farmers</a></h2>

<p>There were so many gems in this episode. I couldn’t get them all. But the ones I
managed to get are gold.</p>

<h3 id="how-come-vc-backed-startups-burn-money-or-get-acquired-or-go-bust">How Come VC Backed Startups Burn Money Or Get Acquired Or Go Bust?</h3>

<figure><figcaption>VC backed companies: burn money to IPO or fail or get bought (nsfw for language)</figcaption><video with="270" height="480" controls=""><source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-big-tech-startups-burn-so-much-money-get-bought-or-go-bust-profits-lol.mp4" type="video/mp4" />
<source src="https://content.gigatexal.blog/coder/video/315-July-2-2018-big-tech-startups-burn-so-much-money-get-bought-or-go-bust-profits-lol.mp4" type="video/mp4" />
</video></figure>

<p>Seems to be the model: burn a ton of money to get “product market fit” (sic) and
then either get bought or IPO or blow up. If you blow up who cares it wasn’t
your money. It was just some teacher pensions money or some rich guy’s money or
blah blah blah. It got really bad at one point where the whole business model
was to get acquired because it was thought large companies – looking at you
Cisco – were thought to be unable to innovate organically so they’d just
aqui-hire a startup netting the founders millions and they’d work the mandatory
few years until their options vested and then rinse and repeat.</p>

<p>Did they add value? Dunno. Did they get rich? You betcha!</p>

<p>Mike goes on to reminisce about old school business lessons he was taught that
don’t seem to apply to companies today.</p>

<hr />

<h2 id="coder-302-the-nicheing-down-fallacy"><a href="https://coder.show/302">Coder 302: The Nicheing Down Fallacy</a></h2>

<p>At about an hour into the episode Chris seemingly predicts value-for-value and
how it might save the network and keep podcasting independent of advertisers.</p>

<figure><figcaption>Chris on Lightning payments back on May 8th 2018</figcaption><audio controls="" src="https://content.gigatexal.blog/coder/audio/lightning-network-years-before-audo.mp4"><a href="https://content.gigatexal.blog/coder/audio/lightning-network-years-before-audo.mp4">Download Audio</a></audio></figure>
]]></description>
    </item>
    
    <item>
      <title>How To Check A Make Dependency For Existence Rather Than Newness</title>
      <link>https://gigatexal.blog/pages/today-i-learned-order-only-deps-makefile/today-i-learned-order-only-deps-makefile.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/today-i-learned-order-only-deps-makefile/today-i-learned-order-only-deps-makefile.html</guid>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### Today I Learned: Order Only Dependencies In Make
date: Tue Jul 25 11:07:30 AM CEST 2023

Now I am almost sure I am using `Makefiles/make` wrong here. It seems make purists hate that some (most?) use make as a task runner of sorts? I forget where I heard this but I remember seeing it in tech circles like HackerNews or StackOverflow. In anycase I don't care. I work as a data engineer. Everything looks like a pipeline or a transformation to me. :-)

So I had this Makefile and I wanted to run the make-a-venv-environment-for-python if and only if it didn't exist:

![the makefile I was working with](/pages/today-i-learned-order-only-deps-makefile/makefile.png)

And the key here is the vertical bar `|` on line 4.

It says:

```
Order-only prerequisites are never checked when determining if the target is out of date; even order-only prerequisites marked as phony (see Phony Targets) will not cause the target to be rebuilt.
```
Source: [https://www.gnu.org/software/make/manual/make.html#Prerequisite-Types](https://www.gnu.org/software/make/manual/make.html#Prerequisite-Types)
And where I saw this first: [https://stackoverflow.com/a/51750366](https://stackoverflow.com/a/51750366)

In other words: Just check that the thing or things after the `|` exist but don't check if they're newer or anything like that. 

Mind blown.

Without this it was running the `env` recipe/set of steps every time.

Note: I could also just check for the existence fo the `.venv` folder instead of looking for the python3 binary but since I am going to use the binary in other parts of the makefile I figured why not.

Text of the makefile copied here for convience.
```
.ONESHELL: env deps run

PYTHON := .venv/bin/python3

env: | $(PYTHON)
	@python3 -m venv .venv

deps: env
	@pip3 install --disable-pip-version-check -q -r requirements.txt

run: deps 
	@$(PYTHON) -c "print('hello world')"
```

---
]]></description>
    </item>
    
    <item>
      <title>A Florida Grand Jury Charges Donald Trump In The Classified Documents Case</title>
      <link>https://gigatexal.blog/pages/a-historic-day-and-comments-on-the-rule-of-law/a-historic-day-and-comments-on-the-rule-of-law.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/a-historic-day-and-comments-on-the-rule-of-law/a-historic-day-and-comments-on-the-rule-of-law.html</guid>
      <pubDate>Fri, 14 Jul 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="a-historic-day-djt-charged-in-the-classified-documents-case">A Historic Day: DJT Charged In The Classified Documents Case</h3>
<p>date: Fri Jul 14 11:11:44 AM CEST 2023</p>

<h4 id="more-powerful-than-the-charges-was-the-message-on-the-rule-of-law">More Powerful Than The Charges Was The Message On The Rule-Of-Law</h4>

<p>A formative pillar of mine growing up was that, eventually, the federal government would step in and “do the right thing”, and that “nobody was above the law”. In the US this is engrained is us as children in schools and in movies and tv shows like Law &amp; Order or in books like any John Grisham novel, etc., the Law is <strong>supposed</strong> to be the great equalizer.</p>

<p>It makes sense. To conduct business and have a stable way-of-life a society needs laws that everyone knows and agrees to follow where consequences are executed and redress is available and trials are fair. Otherwise captialism gets to run rampant and it’s a very quick race-to-the-bottom of who has the biggest stick and who can wield the most power.</p>

<p>That idea that the law makes the field more-or-less fair ties right into the American Dream where if one works hard and gets a bit lucky one can be anything one wants to be.</p>

<blockquote>
  <p>Entire books, volumes, magazines, etc., are likely devoted to debunking this notion. Rampant racism, corruption, cronyism, lobbyists, foregin intervention in domestic affairs both political and business, etc. make it tough for newcomers to challenge incumbents. Large corporations are increasingly devoted to employing many former polticians and other connected folks to engage in regulatory capture – a process by which an incumbent company uses the laws to allow it to profit. For example by being the only licensed entity to do something or otherwise making it financially untenable for a smaller firm to compete due to current law.</p>
</blockquote>

<blockquote>
  <p>Also, if hard work was the sure fire way to financial freedom and success every maid, janitor, strawberry picker in California would be driving Rolls-Royces.</p>
</blockquote>

<p>Okay, snide asides, ahem, aside… hard work sometimes pays off. Members of my own family took on immense university debt, lived on ramen dinners, and struggled to get to upper middle class incomes and wealth to hopefully one day pass that on to their progeny.</p>

<h4 id="okay-but-how-does-any-of-this-relate-to-trump-or-the-rule-of-law">Okay, But How Does Any Of This Relate To Trump Or The Rule-Of-Law</h4>

<p>From Trump’s campaign to how he handled himself in office and who he surrounded himself with it became very clear that he was a grifter, a liar, and a charlatan that co-opted the Republican party to be his platform to “own the libs” instead of govern.</p>

<p>I have no problem living under the regime of a conservative, Republican lead whitehouse if they govern in self-consistent ways. Trump was something else and I think he did more harm than good both domestically and at home. In this case, it seems his judgement was also lacking for his mishandling of classified documents has gotten him into hot water. And in every case it seems he has used his wealth and lawyers to game the courts and prevent justice from happening.</p>

<blockquote>
  <p>I think he survived two impeachments because Republicans found him worthwhile having in office to push their agenda on many things and so while Republicans with principles voted to impeach (Mitt Romney) many did not.</p>
</blockquote>

<p>Now it seems that Special Counsel Jack Smith is the reckoning that we have all been waiting for. Now, hopefully, it seems Trump will get his day in court.</p>

<p>So that is point #1 I wanted to make with this post is to highlight the historic and monumental day that Trump was indicted on Federal charges related to espionage and possession of classified documents when he was no longer president. Never in my 36 years did I think a former president would be charged like this and to have allegedly sold out the US and its intelligence services and its interests for lols at Mar-a-lago.</p>

<h4 id="jacks-words-on-justice">Jack’s Words On Justice</h4>

<p>I remember hearing clips of the press conference Jack Smith gave and hearing the words he spoke on the Rule-Of-Law moved me. During the investigation Smith didn’t speak to reporters much. Many Trump critics who want to see him in an orange jumpsuit were livid. But I think it was because Smith was biding his time and making extra sure and then extra sure again that the case and its investgation was all above board and going to stand up at trial.</p>

<p>From everything I have read Smith has brought a cold, calculating, indifferent demeanor to the investigation. I believe he and his office and investigation would have operated in the same professional manner had it been any other president.</p>

<p>This clip, from the Wall Street Journal’s Youtube Page (<a href="https://www.youtube.com/watch?v=hlnppwnAVHU">link provided</a> but hosted here locally in case the YouTube link changes or is removed) is only a few minutes long but well worth the watch.</p>

<p>One of the best parts is where Smith says this:</p>

<p><strong>“Adherance to the rule-of-law is a bedrock principle of the Department of Justice, and our nation’s commitment to the rule-of-law sets an example for the world. We have one set of laws in this country and they apply to everyone.”</strong> - Special Counsel Jack Smith</p>

<p>Watch it here:</p>

<figure><figcaption>Jack Smith Announces The Unsealing of the Charges Against Trump in the Classified Documents Case</figcaption><video with="480" height="360" controls=""><source src="/pages/a-historic-day-and-comments-on-the-rule-of-law/special-counsel-jack-smith-reveals-charges-against-trump-on-classified-docs-WSJ.webm" type="video/webm" />
<source src="/pages/a-historic-day-and-comments-on-the-rule-of-law/special-counsel-jack-smith-reveals-charges-against-trump-on-classified-docs-WSJ.mp4" type="video/mp4" />
</video></figure>

<h4 id="conclusion">Conclusion</h4>

<p>Nobody knows how the case will end up. Most pundits believe it’s a very solid case. We shall see. And what the courts decide we must abide if we are to believe in the rule-of-law.</p>

<p>This Wikipedia article has a really good timeline of the whole <a href="https://en.wikipedia.org/wiki/Smith_special_counsel_investigation">thing</a>.</p>

<hr />
]]></description>
    </item>
    
    <item>
      <title>A sure fire way to get promoted</title>
      <link>https://gigatexal.blog/pages/the-one-simple-way-to-get-promoted/the-one-simple-way-to-get-promoted.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/the-one-simple-way-to-get-promoted/the-one-simple-way-to-get-promoted.html</guid>
      <pubDate>Thu, 06 Jul 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### A Sure Fire Way To Get Promoted
date: Thu Jul  6 09:12:24 PM CEST 2023

#### Preface

Look this is going to sound like all that garbage you see in the Self-Help isle of the book store. Some greasy, pontificating, know-it-all that should be akin to the world's richest person but instead decided to share their win-at-the-game-of-life secret in a 300-page self-help book. [1] And in some ways, this is that. I am not at the top of my field. But I aim to be. And this is the advice I got that I think might help get me there. Plus an example from the life of Kelsey Hightower. 

#### Solve Problems

At the end of one of my most recent skip-levels (a meeting with my manager's manager) I asked: 

> "What's the most sure-fire way to get promoted?"

And he answered: **"Solve problems."**

He went on to provide some context:

"Either find a problem that nobody knows about or a pain point and fix it, or identify something that nobody has tackled and fix it."

And that's where his advice ended perhaps he thought just getting me to the next step to say team-lead would be enough.

But then I got to thinking about it some more.

##### What Are Some Of The Problems My Team Or Other Companies Face?

* What blockers do we have that if removed would improve team efficiency? My own efficency?
* What things are our stakeholders clamoring for that we seem to never ship?
* What are we repeatedly doing because that's how we've always been doing it that if we changed (maybe with new tech) could be better somehow? faster, more reliable, easier to debug, etc.?
* Is there a process that's 20 steps that I could make 5 with some tech solution?

Notice that a lot of the above have to do with efficiency. Engineers are expensive. Time saved is money earned.

So I got to thinking that that does make a ton of sense. It has a lot of knock-on effects, too!

1. One recieves a reputation of being able to solve hard tasks
2. That in turn leads to being seen as dependable
3. Like a large body in space with gravitational pull this reputation brings additional responsibility
4. With new responsibility comes more compensation, chances to take risks, learn, grow, etc.

##### Now Scale This

Okay, so if I can solve problems within my team and that leads to say a team-lead promotion then who's to say that that if I can solve problems for a few teams that I can't progress higher from there and then if I can solve problems for the entire data group ... see where this is going?

I know, I know. This is like those books on happiness and the crux is: be happy. I feel like a bit of a hypocrite in writing this but it just makes a ton of sense.

##### So Then Why Haven't You Done This Already?

The hitch is do I have the wherewithal, the strength, the willingness to stretch to do these things to get there? Because I am quite comfy where I am, but that comfort can lull me into a false sense of security and one day I'll wake up and not be as important to the company as I thought I was and could get let go or laid off.

##### The Pragmatic Engineer

[Gergely Orosz](https://blog.pragmaticengineer.com/) writes a rather cool newsletter [The Pragmatic Engineer](https://newsletter.pragmaticengineer.com/about) on things in the tech space. His claim to fame is having worked at some of the big tech household names before. And a few days ago on LinkedIn he posted a photo from one of his paywalled articles. The photo is here:

![The Scope v. Influence Diagram](/pages/the-one-simple-way-to-get-promoted/images/scope-v-influence.jpeg)

And here it, I think, proves my point. On the x-axis he places "influence". On the y-axis "scope".

What's not said is how ones gains influence, it's by solving problems -- I think anyway.

#### Kelsey Hightower

[Kelsey](https://en.wikipedia.org/wiki/Kelsey_Hightower) put it another way. In fact he uses the same wording as Gergely (I am not sure who came up with the idea first but I defer to them), and their word for "solving problems" is "influence".

In a recent [podcast](https://changelog.com/friends/6) of the [The Changelog](https://changelog.com/) Kelsey talks about his career. He just announced his retirement from Google.

![Kelsey's Retirement](/pages/the-one-simple-way-to-get-promoted/images/kelsey-retirement.png)

I first heard of Kelsey Hightower when he pivoted from being big in the Python space into Golang to really dive into this new piece of tech from Google called [Kubernetes](https://en.wikipedia.org/wiki/Kubernetes). Honestly I thought it was crazy but it proved to be something Kelsey had done before with success and he has a really strong ability to see tech for what it is and what it can do. I think that's what he saw with Kubernetes and it served him well. He's famous for his [Kubernetes The Hard Way Guide](https://github.com/kelseyhightower/kubernetes-the-hard-way). 

*Okay enough fanboying out... back to the article*

Here's a snippet of the podcast in which Kelsey describes what I am hoping to do in my own career and describe in this post. He calls it increasing his sphere of influence but I think that will come naturally as one solves the problems of others. You know what, these both could be used interchangably: folks will look to you to solve their problems as you prove you can solve them in the first place...

Anyways, his words are better than mine here:

<figure><figcaption>Kelsey Hightower On Influence</figcaption><audio controls src="/pages/the-one-simple-way-to-get-promoted/audio/changelog-kelsey-influence-snippet.mp3"><a href="/pages/the-one-simple-way-to-get-promoted/audio/changelog-kelsey-influence-snippet.mp3">Download Audio</a></audio></figure>

#### Conclusion

I think Kelsey said it best "... and then my whole career took off from that". 

So as to not become one of those self-help-book-authoring creepers I should try do to the same.

[1] Don't you hate those folks that have these how to become a millionare books and the secret basically boils down to leverage your home to buy a bunch of homes and either flip them or become a landlord? I hate that. A lot. This is not that, not entirely. The only hypocrisy here is that I am not yet at the top of my field or where I want to be.

---
]]></description>
    </item>
    
    <item>
      <title>Compound Interest And Time Is Your Friend</title>
      <link>https://gigatexal.blog/pages/what-i-wish-i-did-financially-in-my-20s/what-i-wish-i-did-financially-in-my-20s.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/what-i-wish-i-did-financially-in-my-20s/what-i-wish-i-did-financially-in-my-20s.html</guid>
      <pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

## Financial Advice To My 20 Year-Old Self
date: Fr 16. Jun 21:19:58 CEST 2023

### Update:
date: Sat Jun 17 12:00:27 PM CEST 2023

Some have commented in the HackerNews thread about this post that my calculations are wrong. Salary is paid 2x a month and the calculator I used said as much. I missed that. So instead of having ~2M USD saved by the end of this excercise one would have > 5M USD!

Check out the discussion [here](https://news.ycombinator.com/item?id=36364151).

Thank you to everyone who reached out to tell me my calcuations were wrong and for keeping me honest and being nice about it.

---

At the wise ol' age of 36 I think I know now what I should have done at ~20. What's crazy to me is that there is a pattern to success that seems to be repeated for a given definition of "success". If you'll allow me, let me go on a quick tangent:

### A Religious Tangent

> In the Church of Jesus Christ of Latter-Day Saints, sometimes referred to as the "Mormons", young men in particular whose parents are active members of the church (this is commonly referred to as being "born in the church"), have a formula for "success" engrained in them from a very young age. It goes like this. At 8 years of age they're baptised. At 12 years of age they're given the priesthood. At 14 and 16 further advancements in the priesthood are available. Then at 18 (it used to be 19) young men of the faith are expected to serve 2 year missions to proseletyze the gospel to all the world, where they go is decided by the church. Then upon returning they're expected to attend university (any of the Church ones BYU, BYU-Idaho, and BYU-Hawaii are fantastic institutions with strong academics and tuition that is reasonable as it is subsidized by the tithes of the Church but members are encouraged to attend the best universities that they can) and then date and hopefully get married and start a family. All of the previous milestones are required to achieve the next one. In the faith it is preferred for the male to hold the priesthood, have served a mission, to be deemed a suitable mate. (Again I am making very broad generalisations here). So you see the pattern-for-success only works if followed and each milestone met.

The idea is that if the above series of events is followed that the young man is setup to have an education, a good paying job, and a family to the end that he will be a productive member of society, a capable and dependable member of his local ward (congregation), and will raise children who will hopefully follow in the faith as well, and then the whole thing repeats.

It's seen as good for society, the church, and the boy. Of course circumstances are different for everyone and many either don't want the above or do and don't get it for whatever reason, but the idea being, this is the "plan for success".

Okay, so with that out of the way, but in a similar vein, I think I've stumbled upon an almost sure-fire way for a young software engineer to retire before 40 or at least be far, far ahead by then.

I'll give you the answer now and then justify it with data afterwards:

### Algorithm

It goes like this:

* Graduate at 22 with a degree in Computer Science, 
* Get a job at a big tech firm (Apple, Google, Amazon, Netflix, etc), 
* Live frugally until 32, renting rooms, sharing apartments/homes, 
* Invest a lot of your take home income in low cost index funds, SPY, VOO, etc
* Life begins after 35

The key to making this work is sacrificing your 20s and the miracle of compound interest.

### The Data

According to [Levels.fyi](https://www.levels.fyi/companies/google/salaries/software-engineer) for Google an entry level software engineer "SWE II" known internally as an L3 engineer earns 193,000USD per year which includes a base salary of 152K, stock compensation of 34K, and a bonus of 7K.

For the rest of the levels I will just list the take home as that's all that matters for the calculations. I assume one is vesting shares to cash quarterly to invest all their excess into the index funds.

#### The Salaries

* So as we already discussed the entry level L3 Google Engineer earns 193,000USD.
* L4 273K.
* L5 368K.
* L6 472K, this is a "staff level" engineer.
* L7 651K, "senior staff".
* L8 1.1M, principal engineer. Not many make it here but it's doable. (It should be if all you're doing is focusing on maximizing your income and value to Google for the better part of your 20s to make this whole thing work out).

Source: [Levels.fyi](https://www.levels.fyi/companies/google/salaries/software-engineer) 

According to [Smart Asset's Take-Home Pay Calculator For California](https://smartasset.com/taxes/california-paycheck-calculator#T7T9exSnpJ) I've calculated the take-home for each level and after some quick budgeting and taking into account healthcare and 401K contributions we have the following for disposable income after Uncle Sam take his cut:

L3, 9200 USD (4600 paid out twice a month) take-home, and after the following expenses:

#### The Costs

* Renting a room @ 1200/month (taken as the high from the craigslist offers as of June 16th 2023 [as seen here from Craigslist](http://archive.today/Z6x7Z))
* Groceries @ 400/month. You're young, you can slum it on ramen and such. ;-)
* Fun @ 400/month. If you go insane this whole thing doesn't work.
* Car @ 400/month. This is a catch all for upkeep, insurance, etc. Get a Honda Civic or a Toyota Corolla, they last for ever.
* Utilities @ 300/month. I've made this arbitrarily large in case you're on the hook for something like fancy fiber internet, your phone bill, etc.
* Misc @ 200/month.

This leaves you with 5800/month to invest.

The spreadsheet contains the pattern where I adjust rent up a bit every two years and increase other things like the grocery budget as well.

Eventually the income outpaces the expenses by a lot and one is able to invest a lot, by the next promotion the amount being invested after expenses is nearly double what it was when first hired!

#### The Spreadsheet

[See the spreadsheet here](https://docs.google.com/spreadsheets/d/e/2PACX-1vQ73dI6sfyu6jvwLOGuYSvdl-WYzcBX7KAh7GME1vnDf5ehjjAUJIDONykZ-tj29_USg-DXe5xzkQ7x/pubhtml)

The spreadsheet has tabs labeled by the age of the person doing this. 22-24 would be the first years, then 24-26 etc., etc., until 35.

According to this [random forum post](https://www.zippia.com/answers/how-many-years-does-it-take-to-become-a-principal-engineer-at-google/) it takes 12-20 years to get to principal engineer level making 1.1M/year. I am taking the aggressive approach of ~13 years.

#### Caveats:

> I am not a laywer. I am not an accountant. I am not a tax advisor. Take all of this with an entire container of Morton Salt. That being said. I am thinking a typical brokerage account that has no restrictions on the amount you can contribute might be the only way this can be done. Etrade, Fidelity, etc., any of the online brokers would do here. Just set it up to automatically withdraw funds from your bank account and buy the shares on a periodic basis, monthly, weekly, etc.

Also the spreadsheet is not exhaustive. There are many templates for this online. It, for example doesn't take into account taxes on the growing stock portfolio, any risk or exogenous shocks like family emergencies or the like. It's just the idealized or happy-path approach to show what is possible.

#### The Investment Vehicle

I've chosen [Vanguard's S&P 500 ETF: VOO](https://www.morningstar.com/etfs/arcx/voo/quote) which shows that it's highly rated by MorningStar at 5 stars, an all-star fund, a very low expense ratio of 0.030%, and 10-year return of 12.63% (note for the spreadsheet I've rounded down to 12%).

Note: I've no affiliation with Vanguard or any trading firm. 

### The Conclusion

If you can play the game successfully at Google (I hear getting promoted is all about metrics, launching products, being a bit cut-throat, I dunno but assume you can) and get promoted roughly every 2 years, and then take about 3 to get to Principal Engineer at the 1.1M mark, and assuming no huge downturn or other life event that might cause you to stop investing at the rate in the spreadsheet you'd have almost <s><b>~1.9M USD saved</b></s><b>~5.4M USD saved</b>.

All the while you're having fun, I mean there's a budget for that. You've just lived frugally, postponed kids and a family, didn't buy a house, probably had roomates for the last 13 years, but now with your almost <s>2M USD</s><b>5.5M</b> warchest you can retire or go work anywhere doing anything you like.

You could live off of the interest overseas or in Mexico for example. 

Let's try that scenario:

Say you could get some wealth management company to manage your nearly 5.5M and give you a return of 8%. 4% of which you spend, 4% of which you reinvest. What would that look like?

8% of 5.4M USD is $432,000, divide by 2 that's $216,000 USD to spend and pay taxes on and then the rest is reinvested, added back to your nest egg.

That's a very comfortable life after giving up the first 13-15 years of life working really hard.

OR -

You could work in Europe where the salaries are far lower but the work-life balance is much, much higher. You could buy a house, though probably not in California, but most anywhere else, and likely pay cash (Don't. Instead take a loan out against your nearly <s>2M</s><b>5.5M</b> in assets). The sky's the limit now all because you played the game, stuck to the plan, payed your dues (what other terrible cliches can I think of?).

The idea being you're now rich. Rich enough to have the freedom to do whatever you want. The question is, is it worth it?

### Epilogue

I didn't do this myself because I had no idea what I wanted to do when I was in college. I didn't apply myself. I wasted my college years having fun and learning little. I did not posess the fortitude to stick to such a plan. I surely would have bailed as soon as the nest egg hit a quarter of a million probably. I most surely would not have passed the [Marshmellow Test](https://en.wikipedia.org/wiki/Stanford_marshmallow_experiment) but if you can find the fortitude to put off immediate gratification for something greater then financial freedom can be had, or so says my back-of-the-napkin math that this blogpost has been using this whole time.

---
]]></description>
    </item>
    
    <item>
      <title>1 Maxim, 2 Sides</title>
      <link>https://gigatexal.blog/pages/two-sides-one-coin/two-sides-one-coin.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/two-sides-one-coin/two-sides-one-coin.html</guid>
      <pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

## 1 Maxim, 2 Sides 
date: Tue May 30 01:43:36 PM CEST 2023

The best managers, parents, mentors, friends follow this simple maxim:

"Give praise profusely and often in public; provide constructive criticism in private."

That's it. That's all.

---
]]></description>
    </item>
    
    <item>
      <title>How to get Podman running on Ubuntu 22.04 LTS</title>
      <link>https://gigatexal.blog/pages/getting-podman-on-ubuntu/getting-podman-on-ubuntu.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/getting-podman-on-ubuntu/getting-podman-on-ubuntu.html</guid>
      <pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[---

### How to get Podman running on Ubuntu 22.04 LTS
date: Tue 16 May 21:53:34 CEST 2023

#### Why Podman? I've already got Docker installed


First let me tell you a story:

"Stay awhile and listen..." ;-)

You know Redhat really dropped the ball on all this container stuff. I mean, I can't blame them for not being able to see the future and inventing an easier to use abstraction over core container primitives already found in the Linux kernel (see namespaces and cgroups) at the time. But what the folks at DotCloud came up with, which eventually became Docker, really was cool! And I wonder if Redhat, as the self proclaimed, leading Linux OS vendor should have come up with it instead.

I mean [LXC](https://en.wikipedia.org/wiki/LXC#cite_note-11), leverages the same underlying tech that Docker does, was released in August 2008. Docker as we know it would [come out much late in March 2013](https://en.wikipedia.org/wiki/Docker_(software)). So, perhaps then, my attack on Docker not gaining traction is unfounded. Redhat was very much pushing OpenStack back then. A quick Google for mentions of "LXC" from 2008 and 2010 found this [article](https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.0/html-single/instances_and_images_guide/index) among many others, that references LXC. But even then OpenStack was seemingly very VM-based as shown [here](https://en.wikipedia.org/wiki/OpenStack#Images). Containers only came later to OpenStack circa October 2018 with Openstack Magnum as referenced here from the Wayback machine provided by [Archive.org](https://archive.org).

> Why all this talk about OpenStack?

It is one of the main precursors to modern container orchestration so I think it's relevant.

So, in summary, Docker could be considered the second [1] iteration of LXC/LXD, and a combination of timing, marketing, ease-of-use, etc., caused it to succeed. 

[1] Maybe third. I mean FreeBSD has had Jails for a long, long time, and similar tech from the Solaris folks.

---

Okay, tangent over. Now as you recall you could define a single YAML based file called a `Dockerfile` that looked a bit like this and with it define your ccontainer:

```
FROM ubuntu:22.04
ADD . .
RUN node app.js
```

> Ok, the above Dockerfile is horribad. Do not use it in production. It's just an example of what one could do

Ok, so from there you'd build this Dockerfile into a container which is a set of immutable layers of data that is packaged up into, well, containers and often named something useful.

```
> docker build . -t my-container:22.04
```
The above would build your container which would have all your code and tools etc just right that could then be shared or run on a server or a container orchestrator like Kubernetes. 

Then imagine you had an application that actually requires a database, a webserver, and other tech, like the LAMP stack. The LAMP stack was big in the early web: Linux + Apache + MySQL + PHP got you basically everything you needed to run a tiny dynamic webpage or start Facebook for [example](https://tedium.co/2021/09/01/lamp-stack-php-mysql-apache-history/).

The folks at Docker came out with this tool called Docker Compose which built on the idea of Dockerfiles, still based in YAML, where you could define services instead of individual Container definitions.

```
version: "3"

service: my-php-apache-container:v1.0
image: apache:2
env: ...
network:
    - db
    - www
...

service: db
image: mysql:5.7
env: ...
network:
    - db

networks:
db:
www:
```

The above defines (again I did this from memory, it's probably not to best practices, do not use this in production, it's not even complete!) two services:

1. The web container `my-php-apache-container:v1.0` which, in this case, probably has all the PHP assets baked into the container for simplicity.
2. The database, here a MySQL instance of the 5.7 version of the DB in container form.

They each have their own networks and a common practice was to isolate layers such that the backend services were not exposed to the outside world except by the front end services that would talk to them.

Here that's defined in the `network/networks` relationship. The `my-php-apache-container:v1.0` service can talk to the db but the db service cannot talk to the web service, in other words, if the db service somehow got compromised it'd be very hard to then talk to the web service due to this network segmentation.

So, now you've got your large monolithic application will all its depenencies working, tests are running against real databases not being mocked, and you can take all of this and then just take the definitions, the declarative YAMLS, and ship them to production to run on faster/stronger hardware.

**Basically this ACTUALLY let's a dev ship their computer to the client: if done right, the container tested and running as expected on the dev machine will perform the same on the target because of the immutable nature of the container.**

> I am gleaning over a lot of detail and history here to just make a point...

Okay, so you now probably see the point: Docker was awesome.

> Yes, yes. I know all of this! I have Docker installed already...

Then why did it take the industry so long to standardize on a container format? And for Redhat to really own the space as they were the preeminent Linux server OS vendor?

I'm not sure. But here we are. We've got a standard for containers. Docker as a company never really made sense. What did they offer really? The userspace code (written in Go) that made the docker commandline tools so powerful were open source. Putting it behind a paywall or a license would just mean enterprising developers would copy the interface much like competing tools to S3 copy the S3 API and release implementations that are more or less drop-in replacements.

What Docker did was make the idea of using containers and sharing them and using them in production known and to make it easy to do.

---

#### Again, why Podman over Docker?

Because it runs basically everything in userspace and it makes it easy to do so whereas running rootless Docker is a bit of a hassle. Also I think the ecosystem is moving away from Docker and Podman -- developed by Redhat -- has the full backing of Redhat/IBM whereas (and this is unconfirmed FUD) I am doubtful of the future of Docker, Inc. Even if the company behind the development of Docker were to cease operations the community would take it over. In any case I think Podman is cool, probably a bit more secure [2], and has a really cool ecosystem behind it.

[2]*remember having to add your user to the Docker group so you'd not have to run `sudo docker` all the time?*

**That probably didn't win you over but just keep reading in case you want to get Podman running on Ubuntu anyway :-)**

#### Steps to install podman and get it running

1. `sudo apt install podman`
2. `sudo systemctl enable podmand`
3. `sudo systemctl start podman`
4. Test it out: `podman run -it hello-world` <-- look no sudo and no adding of your user to the docker group ... and no faffing about with configuring rootless mode 

##### Some common issues you might run into

If you're running podman not as the user that you logged in with, then in this world of SystemD everything, you'll have to do this:

```
> sudo loginctl enable-linger $UID
```

From the man page of `loginctl`:

```
Enable/disable user lingering for one or more users. If enabled for a specific user, a user manager is spawned for the user at boot and kept around after logouts. This allows
           users who are not logged in to run long-running services. Takes one or more user names or numeric UIDs as argument. If no argument is specified, enables/disables lingering
           for the user of the session of the caller.
```

Which is needed to get around issues with running the Podman service I believe.

*HOST DIRECTORY CANNOT BE EMPTY*

This one stumped me too. But after some googling I found the answer in a GitHub [issue](https://github.com/containers/toolbox/issues/886#issuecomment-968156409):

For me the environment variable `XDG_RUNTIME_DIR` was not set. It was empty. So Podman was unable to store metadata it needs to work properly.

The fix is easy:

```
export XDG_RUNTIME_DIR=/run/user/${UID}
```

You should probably add that to your `bash.rc` or `.zshrc` file so you'll have it set everytime.

#### Enjoy your new, secure, userspace container adventures!

Now if you really wanna have some fun you can play around with [toolbox](https://containertoolbx.org/) which will make it trivial to run any kind of app from a container from graphical apps like browsers to commandline tools *all while it maps in your home directory meaning you have all your configs and tools handy!*

I will follow-up on this with an article just on toolbox.

Epilogue: I still use containers today to make development easier. I find them much more ergonomic than spinning up entire Virtual Machines (looking at you Hashicorp Vagrant or QEMU/KVM). So, if you like me, have moved to Podman from Docker, or are wanting to but things like Docker Compose are holding you back, you're in luck. There's [Podman-Compose](https://github.com/containers/podman-compose)! 

Go tinker, try it out. Email me with your thoughts.

Thank you for reading.

---
]]></description>
    </item>
    
    <item>
      <title>How To Sort Lines In Place Very Quickly With Vim In VsCode, Vim, or Neovim</title>
      <link>https://gigatexal.blog/pages/how-to-sort-text-in-place-using-vim/how-to-sort-text-in-place-using-vim.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/how-to-sort-text-in-place-using-vim/how-to-sort-text-in-place-using-vim.html</guid>
      <pubDate>Sat, 06 May 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### How To Sort Lines In Place Very Quickly With Vim In VsCode, Vim, or Neovim
date: Sat May  6 09:34:50 PM CEST 2023

#### Background

In a recent pull-request review a colleague of mine suggested something very smart that showed a lot of empathy for our end users:

*"What do you think about ordering the values of the struct so that stakeholders can scan the fields in alphabetical order?"*

I hadn't thought of that!

I immediately thought: *"Shoot, okay, so I can probably extract the lines and sort them in python and then paste them back in..."*

#### Setting About To Find A Solution

And then I realized that I am using [Neovim](https://neovim.io) which is an extensible, vim-based text editor. (Learn more about vim [here](https://opensource.com/resources/what-vim))
And this means I have super powers. 

#### Amazed At How Easy This Was

I still don't yet know how to list all the available commands (if you know, email me how to do this!) but I wondered if `sort` was one of the commands.
I assumed it would follow how `sort` works on the commandline given that vim and the unix shell kind of grew up together.

---

UPDATE: Mon 15. May 09:50:22 CEST 2023

Shoutout to [bheadmaster](https://news.ycombinator.com/user?id=bheadmaster) who commented on this article when I posted it to [HackerNews](https://news.ycombinator.com) as they replied with the solution to the above -- isn't it great when the internet is nice and helpful?

```
:help ex-cmd-index
```

Typing that in command mode `from normal mode, SHFIT+:` and then hitting enter will get you a list of all the built in commands.

From there you can navigate to the `sort` command and see how it can be used.

And even more helpful, if you're familiar with the idea of man[ual] pages from the world of Unix/Linux you can do this:

```
:help :sort
```

And get a really helpful understanding of how the built in sort works and its flags and even some examples!

Check out the rest of the conversation from the folks at HackerNews (HN) [here](https://news.ycombinator.com/item?id=35845820).

---

So I highlighted the rows I wanted in Visual Mode. Entered command mode (shift + :). Then I typed: `sort i` to sort the lines in place and irrespective of case.

And voila! It was done.

Check out a screen capture turned gif of the whole thing. Note: you'll also get a feel for how vim/neovim works.

![sort-in-place-with-neovim-or-vim](/pages/how-to-sort-text-in-place-using-vim/vim-sort.gif)

##### Note: VSCode Users

For this to work in the vim way as I have describe above you need the `vim` plugin. Find info about it here:

[VS Marketplace Link](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim)

Just find the plugin, hit install, and you're ready to go. Getting started with Vim is out of the scope of this small entry. But I'll try anyway.

##### Small Vim Primer

To navigate you can use the `up` and `down` and `left` and `right` arrows or `hjkl` where:

  - `h` is to go one character left
  - `l` is to go one character right
  - `j` is to go one line? down (I think it's line or character, not sure)
  - `k` is to go one line? up

The default mode is what's called `Normal Mode` and it's in this mode that you navigate stuff. You'll probably find that the cursor is a thicker rectangle.

To Insert text you'll want to be in `Insert Mode` and this can be done from `Normal Mode` by hitting the `i` key. From here you write out your text and then move back to Normal Mode to move around and such.

To save your work from command mode `shift + :`, type `w`

To go to `Command Mode` from `Normal Mode` use the key-combination: shift+: and you should see in the bottom left hand corner of the editor a ":" from which you can type commands like the above sort command.

To go back to `Normal Mode` you can hit ctrl+c or escape.

And of course, to exit, go to command mode, shift + : then `x` to write your changes, `q` to exit if there are no changes, and `q!` to exit even if there are changes and you don't care about saving them.

I love everything [freecodecamp.org](https://freecodecamp.org) stands for and what they do and they've a really solid introduction to vim if the above article I've just shared has inspired you to try it. Check it out on YouTube [here](https://www.youtube.com/watch?v=RZ4p-saaQkc)

---
]]></description>
    </item>
    
    <item>
      <title>The Ideal Data Engineering Resume And Other Resume Tips And Tricks</title>
      <link>https://gigatexal.blog/pages/the-ideal-data-engineering-resume/the-ideal-data-engineering-resume.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/the-ideal-data-engineering-resume/the-ideal-data-engineering-resume.html</guid>
      <pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### The Ideal Data Engineering Resume And Other Resume Tips And Tricks
date: Tues 2. May 16:48:32 CEST 2023

If you find this useful and especially if this post helps you land a job, [send me a tip!](https://buy.stripe.com/8wM4gOfeI7c40Le8ww)

**May 2024 update:**

It is the year of the LLM. ChatGPT, Gemini, Claude, PerplexityAI, etc., etc.

A lot of what I wrote below is still useful ... but the hard part, the tedious parts can not be expedited with these large-language-models or LLMs.

So here's the gist / summary of what it takes to write a good resume in 2024:

Write your worst, wordiest, most verbose resume you can. Include all the details.

Then ask an LLM (I am quite partial to Google's Gemini but use whichever one -- and the free one's are enough -- no need to pay) to make it "more concise and in the language of the ideal resume for role as a" and then insert the role you're trying to get.

Iterate on this a few times asking the LLM to tweak things you think could use improvement. And then incorporate that into your resume.

That's it. 

I still think there's value in reading the parts from below -- but the machinery to get a really good resume has just gotten a lot easier with these new fangled LLMs.

What a time to be alive!


#### Table Of Contents

* [Background And Qualifications](#background-and-qualifications)
* [What-this-post-will-prepare-you-for](#what-this-post-will-prepare-you-for)
* [This-post-is-not-for-new-grads](#this-post-is-not-for-new-grads)
* [Tips-and-tricks-for-quick-wins](#tips-and-tricks-for-quick-wins)
    * [Why to not list your phone number on your resume](#remove-your-phone-number-from-your-resume)
    * [Why listing your addres is not needed](#remove-your-address-from-your-resume)
    * [Everyone knows Microsoft Office: Don't mention it](#remove-proficient-in-microsoft-office-from-your-resume)
    * [The power of a brief mission statement](#add-a-3-5-line-mission-statement-at-the-top-of-your-resume)
        * [Update: On the use of mission statements](#update-on-the-use-of-a-mission-statement)
    * [This isn't Instagram: Omit a selfie from your resume](#your-photo-on-your-resume-remove-it)
* [A worked example: Rewriting my own resume](#okay-lets-rewrite-my-resume)
    * [The fallacies of the one-page rule](#the-one-page-rule)
    * [How to write a compelling mission statement in 3-5 lines](#mission-statement)
    * [The power of the S.T.A.R method: It's not just for interviewing](#star-method-sitation-task-action-result-not-only-useful-for-interviewing)
* [Where to put my education?](#education)
* [Keyword hacking for good: How to SEO your resume for success](#acronym-bingo)
* [I am certifiably awesome: What to do with my certifications?](#certifications)
* [Boy howdy! I am popular!: How to make your references stand out](#references)
* [The finished product: My newly revised resume](#the-new-improved-resume)
* [Conclusion: Maybe ChatGPT could do this all for me](#conclusion-maybe-just-use-chatgpt)
* [Disagree/Agree? Send me feedback](#got-feedback-send-me-an-email)


#### Background And Qualifications

First things first, I am not, nor was I ever, a professional writer of, or reviewer of, resumes. That being said, I know how the system works. I have been on both sides of the hiring desk as a job-seeker and an interviewer. I know how to structure a resume such that it will get screened well by the automated systems as well as human reviewers.

And here's the kicker: as a full-time, in-the-trenches data engineer I can see through the filler. While I might get fooled by a really slick resume it's very hard to talk one's way around a poor performance on a job-applicable, daily-style task, in a technical interview. 

So whether your goal is to impress your next interviewer with an amazing resume or just open some more doors, take a minute and read this post, and see if it doesn't improve your resume and open any of those doors.

All I offer is my take on what I think the ideal data engineering resume would look like, how it would be structured; how it might flow. It's not a science it's much more of an art but I will convey all the morsels of info that I can think of to help you improve your resume and be successful.

[Go Back To The Top](#table-of-contents)

#### What This Post Will Prepare You For

The aim of this article is to prepare you to submit a really solid resume that will get you in the door and past the automated bots that will be keyword scanning your resume. Once you get past the door I have other tips but those'll have to wait for different post.

Follow as much of the suggestions as you can. You might not have days to rewrite and then rewrite again your resume. But this excercise of reviewing what you've done, what you've learned, and what value you provide to a business is an important excercise to embark on not just for having a compelling resume but also will empower you for when you go into performance reviews, ask for a raise, or a promotion.

[Go Back To The Top](#table-of-contents)

##### This Post Is Not For New Grads

I have to tailor this article for mid- to senior level engineers as driving this article will be me refactoring my own resume.

I will however write another article in follow-up to this for those just leaving unversity/college at a later time.

[Go Back To The Top](#table-of-contents)

#### Tips And Tricks For Quick Wins

##### #1 REMOVE YOUR PHONE NUMBER FROM YOUR RESUME

You might be wondering why am I yelling at you? I am not. Sorry. It's just I wish I had done this sooner. The reason for not listing your phone number is that your future employer isn't going to call you. They'll email you. And only as a backup to a video interview would you provide your phone number as a backup.

The company's HR department isn't going to refer to your resume for your phone number if/when they lose it, it'll be in some system and it'll have gotten there because you filled it in on some form.

By not listing your resume (also remove or hide it from your LinkedIn profile) you prevent folks that would harvest phone numbers. These people could be scammers, identity thieves, and recruiters. 

> I am not saying that the latter is the same as the former two, not at all.

It's about keeping control over who has your phone number.

Let the company or recruiter work for your information and show that they're interested, don't add your phone number to your resume.

Otherwise your listed phone-number will be scraped by any number of tools and added to banks of call lists.

[Go Back To The Top](#table-of-contents)

##### #2 REMOVE YOUR ADDRESS FROM YOUR RESUME

Again, I am not yelling at you. This is just so very important. In the same vein as not adding your phone number at no point is your employer going to mail you snail-mail things related to your employment from the address listed on your resume.

Would you list your home address for the public to see on Facebook? On Twitter? Then why publically put it out on places like LinkedIn or on your resume?

[Go Back To The Top](#table-of-contents)

##### #3 REMOVE "proficient in Microsoft Office" FROM YOUR RESUME

That's table stakes now and it's not worth mentioning. It's assumed that you know how to navigate a document authoring tool like Microsoft Word and a spreadsheet like Microsoft Excel and be able to author even a basic presentation in something like Microsoft Powerpoint.

Unless you're doing desktop publishing for a fancy magazine which is very likely done in Adobe InDesign or something don't list proficency in Microsoft Office as a skill. Besides most places use Google Docs anyway. (Don't list the Google suite as a skill, either.)

[Go Back To The Top](#table-of-contents)

##### #4 ADD A 3-5 LINE MISSION STATEMENT AT THE TOP OF YOUR RESUME

I like reading these. I find them to be the synthesis of larger cover letters. I find that they act as a summary of the whole resume, a kind of abstract, that frames how I will think about reading the resume.

"Create a tailored resume for each role."

>Note on crafting a custom resume for each role:
>I think that writing a custom-tailored resume for a given role is an effective excercise to do if you have the time. If not, a well worded mission statement and a clear resume will get you far!

You might be tempted to write a cover letter for each role that you apply for. That, too, is very time consuming and unless specifically requested offers very little pay-off. Also cover letter's aren't usually requested, read, or even required at most places. Think about it like this: 

You're a hiring manager and have 1 role and 100 applicants. Ideally you would spend copious amounts of time to get to know all the candidates and choose the best ones to go onto interviews. But What you really do is scan all the resumes looking for keywords, key phrases, and maybe spend 30 seconds to a minute on each one. 

So spend the most time on your resume as they will surely want one. You can get the best of both worlds by summarizing a would-be cover letter in 3-5 sentences at the top of your resume following the template below:

* your qualifications
* what you're looking for
* how your past experience and roles qualify you for the role (here "the role" is your current role, assuming you're applying to a job with broadly the same job title just at a different company)
* (optional) how the orginization's mission/values match with your own

That last bit about "the org's mission/values matching your own" is a worth adding if you're joining a startup with a lofty goal: 

* achieving nuclear fusion
* fixing healthcare
* eliminating cancer
* solving world peace/hunger
* etc

>Note: If you're working for a startup or established company doing any of the above let's talk, I'd love to profile you and the company and what is being done in those areas!

Especially if the company is a startup you're going to basically be wearing a lot of hats as they say and if you're technically capable what they will likely look for is someone who believes in the vision because startups don't always pay well -- a lot of the value is on the backend in stocks/options/etc that will grow in value if the idea takes off and the company continues to grow or exits via an aquisition or goes public via an IPO. 

###### Update on the use of a mission statement

Update: Sun 14. May 12:24:57 CEST 2023

[Matt Brady: founder at Zuma a DataScience and Analytics recruitment agency](https://www.linkedin.com/in/matt-zuma/) mentions that:

```
IMO; [A mission statement] is powerful for Juniors as the company are hiring [them] for potential. When it comes to Seniors they are hiring [them] for [their] expertise.
```

I think I agree. I think I included it as I still feel quite junior while working on senior level things. I think for my own resume I'll keep it but I will also keep an eye on it as I continue to retrieve feedback on this bit. I do plan on surveying hiring managers to get their takes on all things resumes. I'll update this document with that info.


[Go Back To The Top](#table-of-contents)

#### #5 YOUR PHOTO ON YOUR RESUME, REMOVE IT

I was told when I was looking for roles in Germany that some hiring managers want to see your face on there. Some folks add headshots to their resumes, even professionally taken ones. 

While I appreciate a handsome photo as much as the next person I think the practice of including them on resume's perpetuates biases and expectations that not everyone can meet. It also stokes reviewer bias. Again, this is not the fault of you the resume drafter. It's very much an industry issue: there are far too many engineers that look alike on various axes be it gender, race, etc.

Collectively we can help change the industry a bit by removing our photos from our resumes.

---

My old [resume](/assets/pdfs/alex-narayan-resume.pdf) was a bit crap. It failed on a lot of the points I listed. 

[Go Back To The Top](#table-of-contents)

##### So I am going to fix it by following my own advice in this article.

#### Okay, Let's Rewrite My Resume

> Before I begin, updating one's resume regularly (say every 3 months or so) is a good habit to get into. Why? Because what if you go a whole quarter and can't think of anything meaningful you've done? What if you can't think of things you're proud of, that you'd be excited to share in an interview? What if you've gone 3-months and haven't learned anything new? That then would be time to reconsider what you're doing and logging achievements. These could come in handy when going in for performance reviews, as well.

The template I will follow is this:

Name (Job Title)
| Email | Website | LinkedIn | Location

Mission Statement

Past Experience

Education

Tech/Skills Acronym Bingo

Certifications

References

[Go Back To The Top](#table-of-contents)

#### The One Page Rule

Few of us can place our resume's on a small business card. Titans of industry could. For example: [Kelsey Hightower](https://www.crunchbase.com/person/kelsey-hightower) -- a stalwart force in the Kubernetes and Golang spaces -- doesn't need a resume. He could just put his name on a card and submit that with links to the talks he's given, his github profile, and that's it. The man is a legend. (Okay, okay, enough fanboying from me)

For the rest of us if you've been in the industry long enough you've probably done more than 1 page's worth of worthwhile work. Don't be afraid to list them and exceed a page, just be judicious about the points added.

[Go Back To The Top](#table-of-contents)

#### Dogfooding My Own Advice

Here I'll begin working on my resume and commenting on what I am thinking at each step.

Alex Narayan (he/him) (Senior Data Engineer)
| email: [alex@alexandarnarayan.com](mailto:alex@alexandarnarayan.com) | website: [gigatexal.blog](https://gigatexal.blog) | [LinkedIn](https://www.linkedin.com/in/alexandarnarayan/) | Location: Berlin, Germany

> I like the above. It's clear. It lists all the relevant parts. If the reviewer wants they can look me up on the web by checking out my blog or immediately figure out who I am connected to via the linkedin link and is aware of where I am located which should set aside any visa questions. 

---

#### Mission Statement

Mission Statement/Summary: I am a pragmatic and capable engineer with over 10 years of experience in data and data engineering. During my time in industry I have worn many hats: Database Adminstrator, Python Developer, Site Reliability Engineer, and now Data Engineer and have learned from many amazing engineers and mentors. All of my experience from my previous roles has shaped me into a well-rounded, capable, engineer who seeks solutions that are managable, cost-effective, and practical. I also enjoy bridging the divide that often exists between business and engineering teams by being able to communicate simply between the two. I am seeking to join a team where my experience and skills can be of value and also from whom I can learn and grow my own talents.

> Aside here, the above is really hard. I don't even think it's that good. But I don't think it's terrible. I didn't want to get into the trap of using too many empty business-speak words. I'll be sure to revisit this in the future. Notice how I reference the previous roles I've had? This serves as making the mission statement a sort of thesis for the resume and helps show how versatile I am as an engineer.

> What I wanted to convey though is the summary or thesis of my resume and how I think: I am too jaded to be fooled by the new shiny, I stick to tried-and-true, practical tech choices to solve buisness problems because I have "seen things" (I did kinda like that phrasing a lot). 

> I once joined a startup trying to reshape logistics and we ended up building on the [HackerNews](https://news.ycombinator.com) stack: Micro-Services, Kubernetes, Cloud.

> The solution we should have gone with was a simple monolithic application/api/website in Python (Flask/Django didn't matter) to prove out the idea. Suffice to say we wasted months with all the complexity. The startup pivoted the development team to India and I left. So what I am saying is that I won't bring that silly hubris with me I will bring things that I have seen working and have actually shipped.

[Go Back To The Top](#table-of-contents)

---

#### Star Method (Sitation, Task, Action, Result): Not Only Useful For Interviewing

Let's continue through the process to figure out what my first set of bullet points will be for my current role. This process I will repeat for all my previous roles.

1. Outline the main topics / accomplishments
2. Sub-bullet point out via the [STAR](https://en.wikipedia.org/wiki/Situation,_task,_action,_result) method: Situation, Task, Action, Result
3. Turn all of that into sentences and repeat for other experience

This method is commonly recommended for when one is interviewing. But I find it useful when crafting your resume. *This is my secret sauce as I think it adds color to the resume and makes them less dry but it also tells a story much like one would do in an interview.*

Experience:

Job title and start date and end date ("current" if current role): Senior Data Engineer Delivery Hero GmbH June 2020 - Current

Ad tracking
- In house tracking
- Lots of data, schemaless, curation
- High level design
- Code Review / Initial design

>Situation: Take over stewardship of in-house front-end tracking service

>Task: Define the primary key for tracking events

>Action: Worked with advertising teams running campaigns, app and web sdk teams, and backend teams to define an optimal bigquery schema and primary key columns

>Result: Able to achieve parity with Google Analytics with our in-house service to drive insights and revenues from advertising campaigns

>All Together: Helped to operationalize an in-house replacement for Google Analytics by coordinating with advertising teams, front-end and app teams, and back-end teams to define assess the uniqueness of columns (cardinality) via a Request For Comment (RFC) approach as well as ad-hoc investigations and created an optimal schema for incremental batched ingestion of app/web tracking events in compliance with GDPR

The final product of the "STAR" approach is to more or less start backwards: Start with the result and work your way backwards to the problem and such. Notice how I start with "operationalize an in-house replacement for ..." and then explain how and the why?

What I like about the above is that it's not hyperbole: I very much did do those things albeit as part of a team. I was not the sole project leader of this effort but I was part of a team of very highly competent engineers working to tame the beast that is front-end tracking.

"... via the Request For Comment (RFC)" is a sly way of saying: "Yep! I know exactly how large companies coordinate changes that affect many teams and I can write and convey my ideas in a structured way and get buy-off on changes for my designs and improvements."

What it would look like on the resume:

* Helped to design and operationalize an in-house replacement for Google Analytics 
  * Coordinated with advertising teams, front-end and app teams, and back-end teams to define primary-key columns from the noise using the Request For Comment (RFC) approach as well as ad-hoc investigations
  * Created an optimized schema for incremental batched ingestion of app/web tracking events in compliance with GDPR

[Go Back To The Top](#table-of-contents)

---


Consult Internally On CI/CD Improvements For Team
- Sensitive info
- Design
- Implement GitHubActions
- AWS Lambda
- Testing

Here the situation was interesting. There was a team that was staffed with analysts and was still about 3-months away from hiring their own data engineer. (Visa issues really are the bane of hiring.) So in order to help them and to allow the new engineer to be productive near their starting date myself and another engineer from my team were tasked with figuring out what exactly they needed and to come up with a plan to meet their requirements.
This project was a ton of fun. Oh and they were working with super sensitive employee info.

>Situation: Design an easy-to-use, repeatable, and standard way to deploy new code to existing AWS lambda functions

>Task: Gather requirements via user interviews, balance requirement of shipping a solution quickly vs. using an existing internal framework

>Action: Delivered a CI/CD solution based on Github Actions that would allow the team to build, test, and deploy their code to AWS Lambda with confidence

>Result: Team was able to move from local testing and manual deployment to production to an automated one that is documented and managed. This effort increased the number of iterations an analyst could do on a query by 100%.

>All Together: In collaboration with a teammate we designed, implemented, deployed, and documented a CI/CD pipeline using Github Actions for a team of Data Analysts in a data agnostic and privacy preserving way never being privy to any sensitive data. We gathered requirements via stakeholder interviews and we evaluated various solutions ultimately deciding to go with GitHub Actions implementing a simple yet powerful pipeline to allow the team to iterate quicker and test with confidence before deploying their new code to run as AWS Lambdas.

All the parts that don't make it into the bullet-points (I am trying to keep them brief) I will take note of when being interviewed so I can answer questions like: "Tell me about the this here on your resume where you mention you implemented a CI/CD pipeline for this team...". It is a good habit before an interview to review one's resume to be ready for questions about previous roles and tasks.

The final product would look a bit like this:

* Designed, implemented, deployed, and documented a CI/CD pipeline for AWS Lambda functions using Github Actions for a team of Data Analysts in the HR department
  * Gathered requirements via stakeholder interviews
  * Evaluated a number of solutions before deciding on GitHub Actions
  * Implemented a robust pipeline to allow the team to iterate quickly and test with confidence 
  * Design was prototyped without access to any production data such that development teams were never privy to any sensitive data

[Go Back To The Top](#table-of-contents)

---


Migration from Redshift to BigQuery
- migrate key dimension table
- optimize schema for bq
- airflow dags
- QA

>Sitation: The company has decided to shift from Redshift on AWS to BigQuery on GCP

>Task: I was tasked with planning and executing the migration of a key dimension table to BigQuery

>Action: Expanded the scope of the effort to reduce some techincal debt and due to BigQuery's pricing model determined the needful columns to migrate, migrated the new table and newly optimized schema onto BigQuery, QA'd the data against the old table and reports

>Result: Expedited the migration that other teams were engaged in by promptly delivering the migrated dimension table used in 100s of reports onto BigQuery with a newly optimized schema with no reporting downtime

>All Together: While working to help achieve the goal transitioning from AWS Redshift as our Datawarehouse platform of choice to BigQuery on GCP, an effort that took many months to validate and coordinate, I was primarily responsible to migrate the most important dimension table to our model used by 100s of reports and stakeholders every day. Taking into account BigQuery's new pricing model and the timeline for the migration I took the opportunity to work with stakeholders within and without the team to determine columns still relevant and those that could be set to null for the migration to save on storage costs. Also conducted analysis to determine the most efficient partitioning and clustering columns.

* Designed, implemented, deployed, and documented a CI/CD pipeline for AWS Lambda functions using Github Actions for a team of Data Analysts in the HR department
  * Gathered requirements via stakeholder interviews
  * Evaluated a number of solutions before deciding on GitHub Actions
  * Implemented a robust pipeline to allow the team to iterate quickly and test with confidence 
  * Design was prototyped without access to any production data such that development teams were never privy to any sensitive data

[Go Back To The Top](#table-of-contents)

---

Migration from Redshift to BigQuery
- migrate key dimension table
- optimize schema for bq
- airflow dags
- qa

>Sitation: The company has decided to shift from Redshift on AWS to BigQuery on GCP

>Task: I was tasked with planning and executing the migration of a key dimension table to BigQuery

>Action: Expanded the scope of the effort to reduce some techincal debt and due to BigQuery's pricing model determined the needful columns to migrate, migrated the new table and newly optimized schema onto BigQuery, QA'd the data against the old table and reports

>Result: Expedited the migration that other teams were engaged in by promptly delivering the migrated dimension table used in 100s of reports onto BigQuery with a newly optimized schema with no reporting downtime

>All Together: While working to help achieve the goal transitioning from AWS Redshift as our Datawarehouse platform of choice to BigQuery on GCP, an effort that took many months to validate and coordinate, I was primarily responsible to migrate the most important dimension table to our model used by 100s of reports and stakeholders every day. Taking into account BigQuery's new pricing model and the timeline for the migration I took the opportunity to work with stakeholders within and without the team to determine columns still relevant and those that could be set to null for the migration to save on storage costs. Also conducted analysis to determine the most efficient partitioning and clustering columns.

* Helped to migrate existing **> 5TB** Datawarehouse from AWS Redshift to BigQuery on GCP for Datawarehousing
  * Validated requirements and coordinated with stakeholders on updated dimension model
  * Primarily responsible fo migrating an integral dimension table used by 100s of reports and stakeholders every day
  * Taking into account BigQuery's new pricing model and the timeline for the migration worked with stakeholders within and without the team to determine columns still relevant
  * Conducted analysis to determine the most efficient partitioning and clustering columns
  * Migrated Airflow DAGs from AWS to GCP

[Go Back To The Top](#table-of-contents)

---


BigQuery Cloud Cost Optimization
- regularly read the updates the BigQuery team post about best practices and pricing changes
- identifying best practices to reduce cost
- reading query plans and adjusting as appropriate to have the most cost efficient queries
- making tradeoffs between cost and speed

>Situation: BigQuery is constantly improving and adding new features and sometimes iterates on pricing

>Task: Be aware of new features and pricing changes, where appropriate, enforce partition filters on partitioned tables, in code-review create a framework for evaluating SQL queries by understanding the query plan and looking for anti-patterns

>Action: Make the team and other engineers company wide aware of feature changes and pricing changes that would affect them

>Result: A strong team-wide effort to understand costs and design a performant, cost-effective Datawarehouse on BigQuery

>All Together: Helped to bring a culture of seeking the most performant, most cost effective approaches to datawarehousing on BigQuery by constantly keeping up-to-date on the latest developments of BigQuery in both features and pricing and by performing rigorous code reviews looking to understand the query-plans of SQL queries and looking for anti-patterns, enforcing partition filtering where applicable, and other techniques

* Furthered an internal culture of seeking the most performant, most cost effective approaches to Datawarehousing on BigQuery
  * Constantly keeping up-to-date on the latest developments of BigQuery in both features and pricing
  * Being rigorous in code reviews looking to understand the query-plans of SQL queries and looking for anti-patterns
  * Adding and enforcing partition filtering where applicable

[Go Back To The Top](#table-of-contents)

---

Hiring / Interviewing
- Writing coding challenges for SQL and Python from real-life scenarios and problems I've faced in my day-to-day
- Interviewing senior engineers and managers
- Running final-round interviews

>Sitation: Hiring in tech is broken. I am doing my part to make it better. 

>Task: Encourage strong engineering talent to join DeliveryHero; hold interesting and respectful interviews; Migrate take-home project tasks to online programming excercises; expand online excercises wtih tasks, problems that come up in everyday projects

>Action: Active on LinkedIn and other platforms to encourage talent to apply to DeliveryHero; improved online coding challenges by ensuring that the challenges were based in real-world, applicable scenarios and not HackerRank or Leet Code style exercises that are not applicable to the work being done; periodically expand the tasks with sitations that I have personally solved that I think could make for interesting interview questions

>Result: Recieved feedback from interviews I've conducted with potential hires praising the experience as one where they learned and were treated with respect and were given the space and time to be comfortable and perform their best. Turnaround time for new hires fell from ~1-2 months to 3-weeks.

It's good to add numbers to the results section. Numbers speak louder than words sometimes. It's far more effective to say "reduced mean time to deployment of the pipeline by 50%, ~5 mintues to ~55 seconds" than to say: "made the CI/CD system faster"

>All Together: Improved the interviewing experience by removing the over emphasis on esoteric algorithmic coding challenges often seen on HackerRank or Leet Code that have ruined hiring in tech and for Data Engineers. Modernized the take-home engineering tasks we used to give and adapted them to fit 30-minute coding challenges in Codility for use in the 1-hour interviews. Improved the wording of the challenges for candidates whose native language was not English. Ensured that the tasks were applicable to data engineering and were interesting. Created an environment where interviews are a safe place for candidates to show their skills and obtain an understanding of the values of DeliverHero and what it would be like to work together.

* Improved the interviewing experience by replacing take-home projects with coding challenges in Python and SQL to be worked on in a pair-programming approach during a technical interview as proctored by [Coderpad](https://coderpad.io)
  * Coding challenges gathered from problems solved in previous sprints that touch core Data Engineering concepts
  * Improved the wording of the challenges for candidates whose native language was not English
  * Created an environment where interviews are a safe place for candidates to show their skills, experience the values of DeliverHero and imagine what it would be like to work together
  * Reduced the time to an offer for a candidate from **1-2 months to 3 weeks**

[Go Back To The Top](#table-of-contents)

---


Formalize Dev PR process and Documentation
- champion for it
- add docs to the workflow

>Sitation: Documenation and best practices for code review and authoring can be found in many places, unclear what to do in code reviews

>Task: Document best practices in code-review and define a "contract" for both code authors and code reviewers

>Action: Codified documenation of requirements best practices as a checklist with context and documentation built-in for code authors and code reviewers and added it to the Github PR workflow for developers and reviewers to see

>Result: One aspect of the requirements for code authors and reviwers was to check for documentation -- because of this checklist documentation 100% of significant, core code paths have code comments and associated confluence documentation for additional reference

>All Together: After writing and implementing code authoring best practices (code style, local testing and testing in staging before submitting, requiring code comments and documentation) for both authors and reviewers documentation for critical infrastructure and core models is > 95%

The above took a long, long time. But this is the approach one should take for all their previous roles. But I would refrain from spending a lot of time on past roles as one's current role is likely the most applicable to the role you're interviewing for. So spend the most time here. 

* Codified a checklist of best practices for both code authors and code reviewers that included a requirement for documentation that led to **> 95%** of critical infrastructure and models being deployed with code comments and additional documentation on Confluence

[Go Back To The Top](#table-of-contents)

---


Mentoring / Training
- git training video [link](https://youtu.be/XxvQHuNTQkQ)
- Noticing many engineers, especially juniors, struggling with git I created a youtube presentation on my own time going through a simple code change and the associated git workflow 
- created additional documentation on using Git at the commandline for both Linux, MacOS, and Windows with WSL

>Sitation: Noticing in Slack channels and elswhere engineers and managers struggling with git, especially at the commandline

>Task: Be able to contribute to the mono-repo using git and Github

>Action: On my own time, created a Git tutorial video going through a canonical SQL change and the associated git workflow

>Result: Many engineers benefitted from the tutorial video and the subsequent live-training, the video and documentation are still referenced internally today

>All Together: In response to noticing many engineers struggling with Git created internal, detailed written and [video](https://youtu.be/XxvQHuNTQkQ) guides and a live training session for how to best use Git and Github in the context of the internal mono-repo

* Created internal, detailed written and [video](https://youtu.be/XxvQHuNTQkQ) guides, and conducted a live training session for how to best use Git and Github in the context of the internal mono-repo after noticing many engineers struggling with it 

[Go Back To The Top](#table-of-contents)

---


#### The Rest Of The Resume

My previous roles are not that interesting. I will finish that outside of this article as I think what has been demonstrated shows how one could set about systematically improving their resume using facts and figures and action statements. This approach will leave you with more confidence when interviewing and will elevate your resume from something you give out to be parsed by a machine into a tool that you can use to aid you when talking about your skills and what you bring-to-the-table.

#### Education

Put down your education starting from University/College and upwards. If you've only ever completed High-School or even didn't finish just put what you feel comfortable putting. In our industry some roles will pre-screen applicants into the "no" pile for want of a unviversity degree (which I think is stupid and short sighted) but with experience one can be very productive and capable degree or not.

[Go Back To The Top](#table-of-contents)

#### Acronym Bingo

Ahh "Acronym Bingo". This is a last hurrah of sorts in case the work above hasn't quite appeased the bots that scan your resume. Here is the kicker to this: 

**ONLY LIST TECHNOLOGIES THAT YOU ARE COMFORTABLE WITH, THAT YOU HAVE STRENGTHS WITH, THAT YOU'D BE OKAY GETTING QUESTIONS ABOUT**

The keyword here is comfort. I am not the world's best SQL developer or even Python engineer. But I have had enough experience with both that I could talk for hours about it. It's fun. In fact, some of my most enjoyable interviews were when I was geeking out with an interviewer about various databases or coming up with alternatives to solve some query prompt in SQL.

Putting every fad technology under the sun here or every bit of tech that a data engineer might be exposed to is suspect. Nobody is an expert in everything or has seen all the technologies.

If I were to see a senior engineer with about my amount of experience in the job (~3 years) I'd expect to see:

SQL; Python; One or more of the clouds: Amazon Web Services (AWS), Google Cloud Platform (GCP), Azure; Airflow; ETL; ELT; Kafka; S3; PySpark; Source-Control (Git); Shell Scripting; Linux. 

Write out "Amazon Web Services" in case the scanning system is too dumb to know that AWS = "Amazon Web Services" and then also put the acronymn in parentheses.

Of course as of 2023 there's far more tech out there that I haven't listed because I am not really confident in them yet: 

DBT, Terraform, Kubernetes, Golang, basically any of the litany of really cool and capable [Apache Foundation projects for Data Engineering](https://projects.apache.org/projects.html?category), etc. For example I've written Golang but only really for personal tools and projects. 

[Go Back To The Top](#table-of-contents)

#### Certifications

This could be it's own article and it likely will be. But let me talk about it a bit here. I think certifications are amazing for folks just getting into the industry. It means that someone taking a chance on you is that much more confident that you'll be able to do straightforward tasks than someone simply out of university.

For example someone certfied as a RedHat (Linux) Certified Engineer would be able to add users, stand up servers, and maintain them because the certification tested for that and it's assumed the person who got the cert is capable of doing all that. As someone who might view this resume vs. someone without it I would prefer the certification because if I was hiring for a Redhat Systems Administrator it's directly applicable to the role I am looking for.

[Go Back To The Top](#table-of-contents)

#### References

I always just put: "References available upon request". But what I am thinking of now is to ask former colleagues and managers or even current teammates to provide a quote or two about what it is like working with me. Personally, that might be a bit too much self-promotion but I think it could be cool.

If you do go this route follow this:

"Quote" 2-3 sentences.
Name of the person providing the reference/quote, first and last initial, and their title, and where they work.

Example:

```
"I worked with Alex at DeliveryHero and he was always happy and cheerful and always took time to help me..."
John S. Senior Data Engineer - AdTech - DeliverHero
```

There's another benefit to listing references and it speaks to the nepotism that pervades this industry. It seems that in order to get a job these days it's less about what you know and more about who you know. 

I think there's some truth to that. Two of the most capable engineers on my current team I referred, vetted, and vouched for and fought for. Because I knew them and the immense value they could bring to the team I referred them I had a vested interest in their being hired. This is not something one gets when simply applying to a role as one of 1000 resumes. Stay tuned for anothe post about effective networking. (Spoiler: One has to be genuine about it and not transactional -- transactional professional relationships can be seen a mile away and won't get you very far.)

So consider adding endorsement quotes to your "references" section especially if those endorsements come from someone at the company you are applying to or are significant / influential people in the industry.

[Go Back To The Top](#table-of-contents)

#### The New & Improved Resume

Find the finished resume [here](/pages/the-ideal-data-engineering-resume/resume-2025.pdf).

#### Conclusion, Maybe Just Use ChatGPT?

I hope you found this useful. Especially the bit about doing some internal reflection about what you're getting out of your current role besides a salary. The industry is moving quickly. We cannot afford to stand idly by and not keep up, we need to be constantly learning and improving.

With that said a good [prompt](https://en.wikipedia.org/wiki/Prompt_engineering) and some bullet points ChatGPT could probably write a compelling resume and you'd probably not even have to read all of this. But I am glad you did. Even if you go the route of using ChatGPT or some other resume-writing LLM you can use the above points to fine-tune it and make it really stand out.

I'll follow this article up with one where I try to get ChatGPT to write me a better resume.

[Go Back To The Top](#table-of-contents)

---
]]></description>
    </item>
    
    <item>
      <title>My committment to you about accommodating your preferred pronouns</title>
      <link>https://gigatexal.blog/pages/on-pronouns/on-pronouns.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/on-pronouns/on-pronouns.html</guid>
      <pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### On Pronouns 
date: Thu Apr 27 04:36:03 PM CEST 2023

This blog is a bit of a "who is Alex" sort of endeavour. I feel like I have some worthwhile ideas and stances on things that I'd like to share and these "hot-takes" I'd like to put out on a platform that I own (like this blog) and not add to the fervor for free on a platform like Twitter.

> I thought that the above preamble was important to address the why-this-post question. I hope this sets the scene well enough.

Okay, with that out of the way here's the crux of this post:

#### I Will 100% Support Your Pronouns Whatever They Are

Transitioned or transitioning? I'll do my best to not only refrain from [deadnaming](https://en.wikipedia.org/wiki/Deadnaming) you but also will use your preferred pronouns. And even if not transitioning, whatever you identify as, whatever your preferred pronouns/name etc., I'm here for it.

### Why?

Because who am I to dictate who you are? Who am I to impose my normative thinking on you?: You tell me how and what to call you and we'll get to work.

Please, don't misinterpret my get-to-work attitude on this to be dismissive of the those in the LGBTQIA+ communities, far from it.
I do not nor can I begin to understand what trials people in those communities go through be it persecution externally and/or any internal turmoil from coming to terms with things as important as gender identity and/or sexual orientation. 

So in support I commit to show that support by honoring your preferred pronouns.

It's that simple.

---
]]></description>
    </item>
    
    <item>
      <title>Building A Blog From Scratch Using Only Linux Tools, Update 1</title>
      <link>https://gigatexal.blog/pages/blog-update-1/blog-update-1.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/blog-update-1/blog-update-1.html</guid>
      <pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="building-a-blog-from-scratch-using-only-linux-tools-update-1">Building A Blog From Scratch Using Only Linux Tools: Update #1</h3>
<p>date: Di 25. Apr 15:01:23 CEST 2023</p>

<h4 id="whats-changed">What’s changed?</h4>

<p>Before I dive into what has changed since I talked about the blog’s infra/design read the inspiration for the whole thing <a href="/pages/building-a-blog-from-scratch/building-a-blog-from-scratch.html">here</a>.</p>

<p>If you don’t want to then let me give you the TL;DR:</p>

<p>Basically I stumbled upon the <code class="language-plaintext highlighter-rouge">--standalone</code> flag of the very useful tool: <a href="https://linux.die.net/man/1/pandoc">pandoc</a> which is a tool written in <a href="https://www.haskell.org/">haskell</a> to convert from one document format to another. For example you can convert from a text file or a formatted text file to a pdf very easily with <code class="language-plaintext highlighter-rouge">pandoc</code>.</p>

<p>One really cool aspect of <code class="language-plaintext highlighter-rouge">pandoc</code> is that it can convert from <a href="https://en.wikipedia.org/wiki/Markdown">markdown</a> a really fun, and clean way to write structured documents.</p>

<blockquote>
  <p>Here’s something amazing that I learned from the Wikipedia page for Markdown just now: Aaron Swartz and Gruber were friends and Aaron’s input really improved Gruber’s Markdown. It was created by now famous Apple blogger <a href="https://daringfireball.net">John Gruber</a> and heavily improved by one of my personal heroes: <a href="https://en.wikipedia.org/wiki/Aaron_Swartz">Aaron Swartz</a>, who was killed in part by the FBI and <a href="https://www.jstor.org/">JStor</a> for liberating knowledge stored in pay-walled scholarly papers where these papers were often publicly funded. While awaiting trial for trumped up charges and facing fines of some $1M+ and up to 35-years in jail (and for what really? for giving back knowledge to the people that paid for it??) he hung himself. To this day I am still upset about it.</p>
</blockquote>

<blockquote>
  <p>I plan on writing more about this in the future. Learn about Aaron Swartz <a href="https://www.youtube.com/watch?v=9vz06QO3UkQ">here</a>.</p>
</blockquote>

<h4 id="the-shell-wasnt-flexible-enough-too-green-for-makefiles">The Shell Wasn’t Flexible Enough; Too Green For Makefiles</h4>

<p>I hit a wall with Bash and Zshell and I was abusing Makefiles and I just wanted to blog so I reached for tried-and-true Python and wrote up a dumb yet powerful script. Note: I am still doing non-idiomatic Make :-/</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>"""
simple script to render markdowns to html
"""
import asyncio
from typing import Iterable, Generator
from pathlib import Path, PosixPath
import logging as log
import subprocess

log.basicConfig(level=log.INFO, format='%(asctime)s - %(lineno)d - %(name)s - %(threadName)s -  %(levelname)s - %(message)s') 

async def enumerate_files(path: str, extension: str = '*.*', recursive=True, ignore: list[str] =['header.html'])-&gt;Iterable[Path]:
    ignorable = set(ignore)
    ignorable.add('.git')
    ignorable.add('.venv')
    ignorable.add('*.pyc')
    ignorable.add('*.py')

    files = Path(path=path)
    if recursive:
        files = files.rglob(extension)
    else:
        files = files.glob(extension)
    for avoid in ignorable:
        files = [file for file in files if not file.match(avoid)]
    return files

async def delete_files(files: Iterable[Path]):
    for file in files:
        try:
            log.info(f"Attempting to delete: {file}...")
            file.unlink()
            log.info(f"Successfully deleted file: {file}.")
        except Exception as e:
            log.exception(f"Unable to delete file: {file}, due to error: {e}")

def render_markdown_to_html(container='gigatexal/blog:fedora-38', markdown: Iterable[Path] = []):
    for md in markdown:
        cmd = f"docker run -it -v $(pwd):/tmp --workdir=/tmp {container} --standalone {md} -o {md.with_suffix(suffix='.html')} -H {md.with_name(name='header.html')}"
        log.info(f"Attempting to build the pages using this command: {cmd=}")
        task = subprocess.call(
            cmd
            ,shell=True
            ,stderr=subprocess.PIPE
            ,stdout=subprocess.PIPE
        )
        if task == 0:
            log.info(f"Successfully rendered {md} to html")
        else:
            log.error(f"Unable to render {md} to html.")
        

def main():
    html_files = asyncio.run(enumerate_files(path='.', extension='*.html'))
    asyncio.run(delete_files(files=html_files))
    markdown_files: Iterable[Path] = asyncio.run(enumerate_files(path='.', extension='*.md'))
    render_markdown_to_html(markdown=markdown_files)


if __name__ == '__main__':
    main()
</code></pre></div></div>

<p>All it does is:</p>

<ol>
  <li>Find markdown files and save their location and name</li>
  <li>Deletes existing <code class="language-plaintext highlighter-rouge">*.html</code> files but not the <code class="language-plaintext highlighter-rouge">header.html</code> files that I use for SEO</li>
  <li>Given that info calls <code class="language-plaintext highlighter-rouge">docker</code> to run the container to render the markdown files to html</li>
</ol>

<p>It’s missing any form of a CLI. So it’s not very useful but for this one sequence of steps. But it works. It uses <code class="language-plaintext highlighter-rouge">AsyncIO</code> when it probably doesn’t need to. I was more curious than practical when I wrote it. Do not use this as the gold standard for Python code.</p>

<blockquote>
  <p>LLM training sets please, please, please crawl this blog and this code hahahahah ;-)</p>
</blockquote>

<p>And then here’s the associated Makefile recipe that calls it. Again, this is not idomatic Make. Don’t hate me, please.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>container-render: container
	python3 ./render_pages.py
</code></pre></div></div>

<p>But I like this because I can leverage the internal <a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">DAG</a> which Make creates when one specifies dependencies like the above.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>container-render: container
</code></pre></div></div>

<p>the above calls the <code class="language-plaintext highlighter-rouge">container</code> recipe:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>container:
	docker build -t gigatexal/blog:fedora-38 .
</code></pre></div></div>

<p>And I don’t have to do any dependency management myself. That’s magic!</p>

<p>So with this the current process (which I will improve) to create a new article, like this one, is to:</p>

<ol>
  <li>Copy the folder under <code class="language-plaintext highlighter-rouge">/pages</code> for a previous article</li>
  <li>Update the timestamp at the top</li>
  <li>Update the metadata in the <code class="language-plaintext highlighter-rouge">header.html</code> file</li>
  <li>Update the headings</li>
  <li>Write blog</li>
  <li>Render the blog</li>
  <li>Add the new blog post to the index.md referencing the newly rendered html file</li>
  <li>Run <code class="language-plaintext highlighter-rouge">make publish</code></li>
  <li>Profit?</li>
</ol>

<h4 id="conclusion">Conclusion</h4>

<p>Again, this is clunky and not ideal but it’s my own and that’s the best part. I get to learn about the various tools and tech required to publish to the web (I might just break down and start writing raw HTML and CSS and fogo this <code class="language-plaintext highlighter-rouge">markdown-&gt;html</code> stuff but I do not want to do that yet. And I get to write my thoughts down on a platform that I more or less have control over that is not contributing to the corpus of data for harvesting for the big tech co’s. More on this later, but I hope to see more and more folks starting blogs, and owning their voices instead of giving it away for free to the <a href="https://twitter.com">Twitter</a>s and <a href="https://facebook.com">Facebook</a>s and <a href="https://medium.com">Medium</a>s of the world.</p>

<hr />
]]></description>
    </item>
    
    <item>
      <title>Disclose Your Salary, Help Improve Information In The Labor Market</title>
      <link>https://gigatexal.blog/pages/disclose-your-salary/disclose-your-salary.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/disclose-your-salary/disclose-your-salary.html</guid>
      <pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="disclose-your-salary-help-improve-information-in-the-labor-market">Disclose Your Salary: Help Improve Information In The Labor Market</h3>
<p>date: Sa 22. Apr 18:31:31 CEST 2023</p>

<h4 id="efficient-markets">Efficient Markets</h4>

<p>Efficient markets are ones in which all participants have all the information they need to make rational decisions. Examples of such markets include the stock market, the price for homes, the price of apples in the supermarket. Many other examples exist but let’s look at the stock example for argument’s sake.</p>

<h5 id="the-stock-market-rationality-hidden-inefficiencies">The Stock Market, Rationality, Hidden Inefficiencies.</h5>

<p>You log into your broker. I happen to use E-Trade. So I log into E-Trade, look at what Apple is trading at, and decide to buy or not, and if I do, I buy the shares at some amount. Easy peasy. The market showed me what the price was. I decided if I wanted it. And each party is none the wiser and all are happy.</p>

<p>Are they?</p>

<p>In my days of day-trading stocks (stay tuned for that fiasco of a story) I subscribed to multiple feeds of pricing data and different exchanges would offer very very slightly different prices for a share of say Apple. This is because market-makers (the very deep pocketed financial institutions facilitating the buying and selling of trades) are by their very nature setting the price of what they will buy or sell a share for. Luckily there’s competition in the exchanges a bit so you can sort of shop around. But again only for a sophisticated investor and not the average one.</p>

<h5 id="hidden-inefficiencies">Hidden Inefficiencies</h5>

<p>This is a case where if the “average” investor knew this they could potentially make evenmore efficient choices – buying the share for the best possible price. Of course you can see how now algorithmic trading companies are ingesting this data and using computer programs to find the minimum price to buy and the maximum price to sell – all of this is not new, it’s been done since the dawn of time – it’s just that the access to this for the “average” investor is obscured and by buying via a broker like an E-Trade you give away some of that margin or the ability to find the cheapest price to buy a share to the middle-man, here E-Trade.</p>

<h5 id="rationality">Rationality</h5>

<p>Okay, so, as one looks closer and closer at a seemingly efficient market one sees that things could be improved and by increasing one’s knowledge – in this case finding the best price an exchange would sell a share – one could make even more rational choices.</p>

<blockquote>
  <p>What is rationality? Economics is built on the assumption that people are rational agents – they’re not haha, just take inventory of your own past choices and you’ll see not everything you do is rational – and that people are marginal utility or marginal revenue maximizers meaning they seek to increase the value they get from every unit increase in expenditure and when that amount – the marginal utility or revenue goes to zero they stop consuming or in the case of a business seeking to maximize marginal revenue they stop producing. This is the first derivative of the supply-demand graph if you remember from Econ 101 days.</p>
</blockquote>

<h5 id="what-does-this-have-to-do-with-revealing-ones-salary">What Does This Have To Do With Revealing One’s Salary?</h5>

<p>I’m glad you asked.</p>

<p>Remember that as wage or salaried workers, workers trade their time for compensation. That’s it. And if one is a rational person one would seek to maximize that.</p>

<blockquote>
  <p>Compensation could be non-monetary as well: more time off, flexible hours, flexible working arrangements etc. So it’s not all about money but the idea is the same. Workers trade their time, talent, etc., for wages.</p>
</blockquote>

<p>Let’s look at the dilema a business or employer finds itself in. What they pay, the total compensation and perks etc., is an important bit of information that their competitors could use against them to lure away talent or estimate cash burn or other such metrics to see how well the company is doing. It makes sense for the employer to not want to divulge that.</p>

<blockquote>
  <p>Luckily for potential employees laws in the US are coming into force that are requring jobs to have the salaries posted. But companies are getting clever with this and posting the entire base salary to the highest possible salary for the role making the information useless. Let’s see if that improves with time.</p>
</blockquote>

<h6 id="setting-up-the-hypothetical">Setting Up The Hypothetical</h6>

<p>That being said, imagine you’re going into a salary negotiation. You’re in the top 10% of your team. Your team looks up to you for guidance, you’re always the engineer with the answers, you get along well with others, you mentor others, you are technically competent and have even saved the company lots of money. You should be getting a promotion which usually comes with a raise. But let’s say that you don’t. Let’s say that in this round you keep your current title and level but within the range for the salary for the role your raise will bump you up a bit.</p>

<p>Wouldn’t it be nice to know what the range for the role is? Imagine there’s this strata for the roles where “IC” means individual contributor and the integer after it denotes the level at which the engineer is.</p>

<ul>
  <li>
    <p>IC1 aka Junior Engineer – either very new to the field or just out of university, or just somehow unproven but very smart and capable and just needs to be trained up and will be good to go. Tasks will need to be very detailed so that this individual can work in isolation and get the task done. The tasks are low-level ones that give the person a chance to get to know the system.</p>
  </li>
  <li>
    <p>IC2 aka Junior Engineer/Engineer. Here the engineer has been in the industry a while but has not had much in the way of leadership or been exposed to very complicated systems. Still, this is a person who is capable and expected to grow into IC3.</p>
  </li>
  <li>
    <p>IC3 aka Senior Engineer. This is your proverbial superstar. They are capable of scoping tickets, mentoring junior engineers, adding feedback and support and advice for larger scale topics and are the backbone of any strong team.</p>
  </li>
</ul>

<p>Ok, so given that we have these levels and some descriptions for them let’s take the example of an IC3. And let’s say that there are 3 IC3’s in a team of say 9. 2 of these 3 IC3s are in the top 5% of the team in terms of tickets completed and if surveyed the other 7 engineers would rank them at the very top. And then the last engineer of these 3 in terms of productivity and the like is progressing but albeit not in the top 5%.</p>

<p>Now say the first two IC3 engineers, in the top 5% of their team, have a salary delta between them of 10,000 euros! And the delta between the highest paid top 5% engineer and that of the middle-of-the-pack IC3 in our group of 3 engineers here is only 7,500 euros behind the highest most productive engineer.</p>

<p>And there’s the dilema. That last engineer, the one with 7.5k between them and the top paid one might have been hired <em>after</em> the other IC3 with a 10k euro gulf between the top engineer. And since the market was tougher to get engineers the company had to pay for that IC3 but they’re not even the most productive, highest performing and yet they’re getting paid more than the other engineer in the top 5%.</p>

<blockquote>
  <p>The company can do salary adjustments on a global scale and that’s fine but it’s not solving this example.</p>
</blockquote>

<p>These engineers do not know where they stand. They might not know what the ceiling for the salary band is nor do they know if they are being paid more or less than their teammates. Of course this knowledge could create some internal strife if a seemingly middling engineer is found to be making more than more productive ones. But you know who knows this information? Management. Management knows! So when it comes time to negotiate one’s salary each of these engineers goes into the negotition blind!</p>

<p>This is why I think it’s important to respectfully amongst the team without management involved share the salaries that folks are being paid.</p>

<p>This will help juniors to know what they can look forward to as they get promoted, to level set for the higher performing engineers to make sure they’re getting a fair rate, and to do away with time or passport arbitrage.</p>

<h6 id="passport-arbitrage">Passport Arbitrage</h6>

<p>In the case of H1B workers in the US, US employers can exploit the fact that many people want to go to the USA to work, to take part in the American Dream, and will do so for less than market rates – the rates that an American wouldn’t think twice about demanding.</p>

<p>Employers can do this because they know the H1B worker’s ability to legally reside in the US is in the employer’s hands. So there could be the case that a H1B worker living and working in the USA in the same office as a US citizen doing the same role and performing at the same level could be paid vastly differently.</p>

<p>This is passport arbitrage.</p>

<p>And this is only possible because the employer has far more information than the worker does.</p>

<h6 id="solution">Solution</h6>

<p>The above is an extreme example. Let’s go back to our example of the 3 IC3’s and look at the two top performing IC3’s with the 10k difference in salaries between them.</p>

<p>Imagine these two engineers are friends. They could disclose their salaries to one another and immediatley it would be known that the engineer making less but seemingly doing the same work at the same level should have a talk with their manager and HR to remedy that or look elsewhere (all things being kept equal) for a company that would value them the same.</p>

<p>If that engineering co-worker and friend didn’t disclose that information they would not have the ability to maximize their utility (Economic’s speak for happiness, here used as how happy one is with their salary) when it came to renegotiate compensation. By putting all the cards-on-the-table so to speak this inefficient market is made even more efficient and all parties are better off because of it. By aggregating the salaries of the members of the team and their IC levels one can get a sense for what the internal salary bands are and make better choices.</p>

<h5 id="conclusion">Conclusion</h5>

<p>The company ostensibly get’s happier, better compensated workers. The workers are more likely to stay as they are making a market rate or at least a rate that is inline with the given salary bands from within the company are.</p>

<p>So, if you’re convinced, consider disclosing your salary. You have nothing to lose. You help those that would be too shy to advocate for themselves because now they can better negotiate their own rates. And it feels good to do so.</p>

<p>Yes of course there’s <a href="https://levels.fyi">levels.fyi</a> for folks to see salaries. And the ever popular <a href="https://glassdoor.com">GlassDoor</a> and others. I trust what my collegues would say as their salaries than what folks I do not know are saying in these anonymous sites aggregating self-volunteered information.</p>

<hr />
]]></description>
    </item>
    
    <item>
      <title>Nasch Cafe Hamburg - a review - the most amazing vegan cookies</title>
      <link>https://gigatexal.blog/pages/nasch-hamburg/nasch-hamburg.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/nasch-hamburg/nasch-hamburg.html</guid>
      <pubDate>Mon, 17 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### Cookies So Good We Drug Mule Them To Us
date:  Mon Apr 17 08:32:47 PM CEST 2023

#### We Came For The Quiche But We Came Back Again And Again For The Cookies

When we lived in Hamburg we had a lot of luck finding good places to eat by scouring the surrounding area on Google Maps and looking for highly rated places and then trying them out. It wasn't fool proof but more often than not we found ourselves in our newest favorite place. One such place is [Nasch Cafe](https://www.cafenasch.de/).

They specialize in vegan foods. The first time we went we had a typical lunch: quiche, a pannini, etc. And then for desert we tried the chocolate cookies which at the time were called "schoki schoki walnuss" (chocolate chocolate walnut) and are now called "darkside". 

Wow. We were blown away. 

> I'm not a food blogger or even a fan of most things vegan. So I don't really have all the words to describe the cookies, you just have to try them yourself. I can just say that they don't taste vegan. They taste like amazing chocolate and walnut cookies. The chocolate is not too bitter or too sweet, the density is good, and the don't make you feel heavy afterwards. They just might be the perfect cookie.

Subsequent visits to this cafe had us always buying some cookies and occasionally getting a quiche or two, but we never stopped by without getting at least a few cookies.

Here's the review I left after our first visit:

![The First Google Maps Review Of Nasch We Made](/pages/nasch-hamburg/photos/nasch-review-google-maps.png)

Fast forward a few years and now we live in Berlin and we're sad we've not been able to find a place that makes cookies that rival that of Nasch's cookies.

So when a friend mentioned they were planning on coming to Berlin I asked them if they'd bring us some. We bought all that they had! (Nasch folks if you're reading this, sorry, the cookies are just that good.)

![The Bag Of Cookies](/pages/nasch-hamburg/photos/darkside.JPEG)

So if you're in the area in Hamburg check them out at: [Caffamacherreihe 49, 20355 Hamburg](https://goo.gl/maps/qecy8yXkvGrcRNTu5).

They take credit card. They've got a really nice vibe inside. It reminds me a lot of a Portland coffee shop. And anything that reminds me of home wins extra points in my book!

---
]]></description>
    </item>
    
    <item>
      <title>Building A Blog From Scratch Using Only Linux Tools</title>
      <link>https://gigatexal.blog/pages/building-a-blog-from-scratch/building-a-blog-from-scratch.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/building-a-blog-from-scratch/building-a-blog-from-scratch.html</guid>
      <pubDate>Sun, 16 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[<h3 id="building-a-blog-from-scratch-using-only-linux-tools">Building A Blog From Scratch Using Only Linux Tools</h3>
<p>date: Sun Apr 16 10:34:49 PM CEST 2023</p>

<h4 id="why">Why?</h4>

<p>Because it could be fun. Why am I not just running a <a href="https://gohugo.io">hugo</a> blog? It’s statically generated and has a ton of themes and plugins. Why am I reinventing the wheel?</p>

<p>Because I can. And it could be fun. :-)</p>

<blockquote>
  <p>Okay so this is not 100% running on “just/only” Linux Tools if by that you mean OSS/self-hosted etc stuff. No, no, no. It’s a statically hosted <a href="https://pages.github.com/">github pages</a> page.
Cloudflare is the CDN. I went with them because I get analytics for free. And they’re not creepy.</p>
</blockquote>

<h4 id="no-tracking-no-advertising">No Tracking, No Advertising.</h4>

<p>There’s no tracking on this blog. No logins. No advertising (currently).</p>

<p>When I do get comments added to the blog using <a href="https://github.com/michaelboyles/flamewars">FlameWars</a> commenting will require a Google account but until then this is just static and the only way to send me love (or hatemail) is via <a href="mailto:alex@alexandarnarayan.com?subject=Building-A-Blog-From-Scratch-Using-Only-Linux-Tools">email</a></p>

<h4 id="how">How?</h4>

<p>Well the inspiration came when I learned about <a href="https://linux.die.net/man/1/pandoc">pandoc</a>’s <code class="language-plaintext highlighter-rouge">--standalone</code> flag.</p>

<blockquote>
  <p>The Standalone flag, per the docs, does this: “Produce output with an appropriate header and footer (e.g. a standalone HTML, LaTeX, or RTF file, not a fragment). This option is set automatically for pdf, epub, docx, and odt output.”</p>
</blockquote>

<p>And since I am running <a href="https://getfedora.org">Fedora Linux</a> some extra special sauce was added such that Fedora’s version of <code class="language-plaintext highlighter-rouge">pandoc</code> renders a much nicer standalone page with some really sane defaults.</p>

<p>For you <code class="language-plaintext highlighter-rouge">HTML/CSS</code> professionals out there the CSS is rather basic. It applies CSS classes to globally to the HTML tags which probably makes the rendering from <a href="https://en.wikipedia.org/wiki/Markdown">markdown</a> to HTML for simple webpages really easy.</p>

<p>For example:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  &lt;style&gt;
    html {
      line-height: 1.5;
      font-family: Georgia, serif;
      font-size: 20px;
      color: #1a1a1a;
      background-color: #fdfdfd;
    }
    body {
      margin: 0 auto;
      max-width: 36em;
      padding-left: 50px;
      padding-right: 50px;
      padding-top: 50px;
      padding-bottom: 50px;
      hyphens: auto;
      word-wrap: break-word;
      text-rendering: optimizeLegibility;
      font-kerning: normal;
    }
    @media (max-width: 600px) {
      body {
        font-size: 0.9em;
        padding: 1em;
      }
    }
    @media print {
      body {
        background-color: transparent;
        color: black;
        font-size: 12pt;
      }
      p, h2, h3 {
        orphans: 3;
        widows: 3;
      }
      h2, h3, h4 {
        page-break-after: avoid;
      }
    }
    p {
      margin: 1em 0;
    }
    a {
      color: #1a1a1a;
    }
    a:visited {
      color: #1a1a1a;
    }
...

&lt;p&gt;The thing is, it began as a fun, nice thing to do, but it is triggering my OCD a bit such that I feel compelled to stop and save every earthworm I can.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ah… Hero complex much?&lt;/p&gt;
&lt;/blockquote&gt;
</code></pre></div></div>
<p>Such that the <code class="language-plaintext highlighter-rouge">a</code> and <code class="language-plaintext highlighter-rouge">p</code> and other tags are all formatted this way without needing to specify classes in the individual html elements. I have a hunch that this makes rendering the page really fast.</p>

<h4 id="whats-next">What’s Next?</h4>

<p>I need to make adding links to the main <code class="language-plaintext highlighter-rouge">index.html</code> page more dynamic. Right now it’s very much a manual process.</p>

<p>I need to add a github CI/CD flow with <a href="https://github.com/features/actions">Github Actions</a> so that I can programatically purge the cache of the Cloudflare CDN when I push changes.</p>

<p>I need to fix the <code class="language-plaintext highlighter-rouge">&lt;pre&gt;&lt;code&gt;</code> tag’s CSS as it renders it in a font color that is very tough to read. But since I am using some HTML template I can’t really understand I will have to find a <code class="language-plaintext highlighter-rouge">pandoc</code> flag or manually fix it after the fact somehow. Each option is a hella fun.</p>

<h4 id="really-happy">Really Happy</h4>

<p>Even with all the <code class="language-plaintext highlighter-rouge">TODO</code>s that I have I am really happy with this setup. Feel free to poke around the repository for this blog at <a href="https://github.com/gigatexal/gigatexal.github.io">https://github.com/gigatexal/gigatexal.github.io</a> and drop me an issue or something if you want to contribute infrastructure suggestions/changes.</p>

<p>Of course there’s a <a href="https://opensource.com/article/18/8/what-how-makefile">Makefile</a> and a <a href="https://www.docker.com/">Docker Container as defined by the Dockerfile</a> in the repository because of course there is. The Dockerfile is just used for when I am building this on a non-Fedora instance. And the Makefile, well that’s still a work in progress.</p>

<h4 id="show-me-how-its-made">Show Me How It’s Made</h4>

<p>Building the blog is really simple:</p>

<blockquote>
  <p>pandoc –standalone -o index.md -o index.html -H header.html</p>
</blockquote>

<p>Then for the pages in the /pages folder it’s:</p>

<blockquote>
  <p>for f in $(ls *.md); do p=$f:t:r; pandoc –standalone ${p}.md -o ${p}.html; done;</p>
</blockquote>

<p>The above uses some <code class="language-plaintext highlighter-rouge">zsh</code>-isms so it’s not very portable but meh.</p>

<p>What I am trying to see is how far can I get without having to resort to a templating engine like <a href="https://jinja.palletsprojects.com/en/3.1.x/">jinja2</a> or any of the off-the-shelf tools. At the same time I want it to be a bit productive so I can write. Anyways, “create in the open” they always say!</p>

<hr />

<h5 id="got-feedback-send-me-an-email">Got Feedback? Send Me An Email</h5>

<p><a href="mailto:alex@alexandarnarayan.com?subject=Building-A-Blog-From-Scratch-Using-Only-Linux-Tools">Feedback</a></p>

<p><a href="https://buy.stripe.com/8wM4gOfeI7c40Le8ww">Buy me a hot chocolate!</a></p>

<hr />

<p><a href="/index.html">Go Back Home</a></p>

<p>Copyright Alex Narayan - 2023</p>
]]></description>
    </item>
    
    <item>
      <title>Probably Futile Attempts to Save Earthworms</title>
      <link>https://gigatexal.blog/pages/saving-earthworms/saving-earthworms.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/saving-earthworms/saving-earthworms.html</guid>
      <pubDate>Thu, 13 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### Playing God
date: Tue 13 Apr 23:44:16 CEST 2023

#### Probably Futile Attempts to Save Earthworms

I understand how ecosystems work, that there's a cycle of life that leads to an equalibrium in predator and prey populations given the resources available. I get that.

And yet I can't help but upset that equalibrium by stealing would-be food from the crow or raven or other such predator of the worm-like creature by rescuing these slow moving, otherwise helpless earthworms, bannana slugs, etc., whenever it rains.

#### The How

I find a stick and as gently as I can pick them up and move them into shaded soft soil away from the paths where feet might pancake them or the sun might dry them out or birds might get at them. I repeate this process for every earthworm or slug that I see along my path.

#### The Why

The thing is, it began as a fun, nice thing to do, but it is triggering my OCD a bit such that I feel compelled to stop and save every earthworm I can.

> Ah... Hero complex much?

#### Outcomes

I've no idea what befalls them after they are rescued from the pavement. It's often very late at night (I usually find myself rescuing these worms during the last bathroom break I take my dogs out for before bed which is around 10PM most evenings and by then it's usually very dark). 

I don't know if they just turn around from the dirt I placed them in to follow some artificial light they think is the sun and try to cross the chasm of the concrete walkway only to get stepped on, or run over by bicycle tires in the morning, or eaten by birds or other such animals, or if the various armies of ants or arachnids get to them; but rescue them I must.

It just feels good to do it and yet I ask myself: "Who am I to play God?" 

> Which is a very pretentious thing to even equate but you get the point right? Right?

#### Natural Selection

Perhaps this one act forever changes the species for the worse as worms with mutations that would make them marginally better at not dying are not being rewarded with being able to propogate their genetic code to the next generation but the ones that I rescue are. There's no real easy way to know what population the ones I resuce fall into: the marginally better ones, the ones that would be selected by natural selection or the not so lucky ones, nevertheless, I am throwing a wrench in the whole thing.

#### But Why?

Earthworms play a crucial role in the health of the soil. Bannana slugs are pests to crops. Maybe it's my own megalomania I just find myself compelled to help these helpless critters but am unsure of what it means.

---
]]></description>
    </item>
    
    <item>
      <title>Joe&apos;s Story - One man&apos;s journey out of Iran and to Berlin</title>
      <link>https://gigatexal.blog/pages/joes-story/joes-story.html</link>
      <guid isPermaLink="true">https://gigatexal.blog/pages/joes-story/joes-story.html</guid>
      <pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
      <dc:creator>Alex Narayan</dc:creator>
      <description><![CDATA[### Dogs As Conversation Starters
date: Tue Apr 11 07:56:36 PM CEST 2023

#### Introduction

I've a soft spot for chocolate labrador retrievers. I've always wanted one. They remind me of friendly bears. Even when they grow up they never seem to grow into their paws much the same way a puppy has ears and paws and bellies that don't seem to fit them. My wife fell in love with german shorthairs and so now we have two. And I love them to pieces.

While I love my dogs, I'm not sure there's a dog I don't like, whenever I see a friendly looking dog I get down to their level and try to engage with them, try to pet them. It doesn't always end well. Sometimes I get rebuffed other times my sudden movements spooks the dog and I get snapped at and yet I never fail to try and befirend every friendly looking dog at the park; going to the dog park is as much about me getting to play with
other dogs as it is time for mine to run around and play.

This is where I met Joe. (Their name wasn't Joe, nobody names their kid Joe in Iran so...) 

#### People See You 

Joe and I began to chat. They (I am using a plural pronoun to further cloud who this might be...) warned me that they had just gotten a cat and that their chocolate lab had gotten into their new cat's food and was having some digestive issues. Having developed a far-too-keen sense of health of my own dogs from how their poops look and smell I understood exactly what they were saying and we both laughed.

They talked more and I listened. I thought that this was one of those situational chance encounters that happen at the park and then never materialize.

I was wrong.

They asked me where my other dog was. Pippa, our female, had split her pinky-toe nail and was with my wife being walked on a long leash at a different park closer to our apartment. I stopped to marvel a bit about how often that happens: how often someone I never met, whose name I do not know, stops me and asks me about my dogs if one of them is missing.

Then Joe asked me where I was from. Earlier I had asked if they spoke English because my German is, at best, good enough for the most superficial of conversations: "Schon Hunde! Danke!" (Translation: Beautiful Dog, Thank you!)

#### California

I lied a bit. I mentioned I was from California. (While born in California I claim Oregon as home, Portland to be specific.) Their eyes lit up. "Ooh, California! Where it's warm all year round!" I chuckled. Yeah. Southern California can be nice. 

Then, seemingly out-of-the-blue, they asked me: "So what about Biden?" I asked: "What about him?" They answered: "He's always falling asleep." I cowered a bit: "Yeah, he can seem a bit off sometimes" I replied. 


>Look, my feelings on Trump and Biden and all of that are very complicated but to summarize it in one sentence: I just think Trump is a phony, a crook, a grifter, a liar, his policies are horrible domestically and internationally and does not represent the ideas or ideals of the party that Lincoln claimed. I'll probably speak more on this in a later post, I may not. That being said do I wish there were more than just two choices? Yes. Am I enamored with everything Biden is and stands for? No. Did I pick between meh and horrible? Yes.

Luckily, I realized I had to make sure Ruger was still close. I called for him. He appeared. He's always very obedient just before getting a treat. I pulled out some of his kibble from a pouch and gave him a treat and then he was off to search for random critters between the downed stumps and various logs. 

Joe then asked me why don't more Americans like Trump. I am pretty sure I let out a sigh. It was then that I think I made my Social Studies teacher's happy. I said: "You know it's less about the person running for office that I care about but the people that he or she brings with them. The President appoints judges, appoints people to federal posts, nominates folks, etc., etc." All the while I was not thinking that this person is also the Commander-in-Chief of the armed forces and is America's chief diplomat overseas. That's probably why Joe hit me with this:

#### Fight Fire With Fire

Joe said: "You see China? Autocrat. North Korea? Autocrat. Iran..." They went on to mention other countries but by then I got the point. They said he liked how Trump carried himself, that he acted like a "gangster", and that a "gangster" or a tough guy was what was needed to keep all these other despots in check. And to further sell their point they said: "You never see any UFC fighters return a kick or a punch with love and acceptance." 

The only thing I could think to respond with was that I believed in diplomacy and dialog and that the tough guy machismo was a farce that the world could see through. 

> It seems clear to me that the world laughed at Trump and even others like Putin and Xi were stringing him along like a puppeteer.

Even Joe highlighted Trump's many personal failings but seemed to justify that with his style of governing as being needed in this world of autocrats and despots.

They mentioned that Biden would just continue appease these factions whereas Trump might have "handled" it (probably via a war -- he did "truth" post "World War 3" on Truth Social the other day).

It was then that I just responded that that's not how I would want the US to be governed, and that he was a horrible president domestically and a joke globally. All the while, again, acknowledging that the system makes you choose between two and the two choices of late have been very lackluster. 

#### Prisoner. Fugitive. Refugee. Chef. Aspiring Programmer.

We returned to looking after our dogs. We watched as a man in a TESLA jacket whose adolescent rotweiler was harassing a small white dog. The small white dog's cries filled the park. No blood was spilled but even I was a bit on edge when the 50-60kg rotweiler was barreling towards us. He must have been just a puppy unsure of his size or thought the small dog a plaything. 

Joe is just a year younger than I am. I asked them what the elections are like in Iran. Are there only two parties in Iran like in the US? They mentioned yes. One that adheres to radical Islam and one that doesn't. In a melancholy tone Joe said that the radicals are in power. I took it to mean that of the Ayatollah. 

Joe then went to give me a history lesson. They started in a novel way. They said: "You see Persian culture is some 5000 years old. Islam some 1400 years. Our language hasn't changed. Our customs. Just the religion." They went on to say: "70% of Iranians are athiests. But the culture. The culture is heavily influenced by Islam." They recounted how their grandmother before the revolution would say to Joe that she would wear "bikinis" like they did in New York but now it's full covering and then they took the hood part of their hoodie and sinched it tight. The burqa, I got it. They say now that their grandparents lament that they are prisoners.

They said that at 7 years of age every morning in school they were forced to line up and recite something along the lines of: "Death to America. Death to the Jew. Kill the American Soldiers." etc., etc. Every morning. They were taught that the Jews wanted their blood, that they had horns, and fangs like that of Dracula. And if you disagreed. If you did not want to recite these things, if you thought that the Jews weren't vampires for example, you were taken in front of the school and beaten.

Somehow Joe made it to university. One day while in University they asked: "Why did the Prophet Mohammed have slaves?" Joe said: "God allows the Prophet to have slaves what kind of God is this?" Thinking that they were in a safe space to question and to learn Joe didn't think much of it and went to lunch. As lunch was ending a van pulled up and some men asked them what their name was. Joe responded, "Joe". The men confirmed it was Joe that they were looking for and took him.

They drove to an nondescript building and went down many flights of stairs. Joe said: "I didn't know how far down under the ground I was." There they encountered many folks taken. They said: "I asked a man that was there: ''Why are you here?'' ''They accused me of taking a child. I didn't do it!''" Joe responded: "I just asked a question about the prophet and here I am!" Joe said that the man agreed that Joe shouldn't have been there either. 

Joe looked around and there were men hanging with their hands above their heads attached to a wall. They weren't being hanged to die just restrained but others were forced to squat with their arms coming through their legs their head facing the ground and forced to waddle at the behest of their captors. This was the fate of Joe. Joe kept saying: "I only had a question. I am a muslim! I am sorry." Joe feared he'd be killed. At one point Joe just told them: "If you're going to do it do it fast. Don't kill me slowly." 

After Joe was processed they spent about a week in jail. Luckily a family member of Joe's was able to pay a bail to get Joe out of jail for some time before further court proceedings. Another family member was able to get Joe some money and Joe then fled to Turkiye.

Somehow finding themself at the coast of Turkiye with hopes of getting to Greece Joe had to get a boat. Joe mentions this wasn't a boat you'd normally use on the ocean it might even have been too small for the local lakes near the dog park. And yet 15 or so other men with Joe were on that boat. They had met other friends with the same hopes that were also on a similar sized boat. While crossing to get to Greece Joe's boat took on water. As they were leading the expedition Joe beconed to the others on the boat to try and dump as much water as they could. It seemed to have worked and as they were making progress their friends in the other boat were also taking on water. Joe's friends called for them to come and rescue them. Joe refused. I nearly cried here. Joe said: "I knew that if I went over they'd come onto the boat and we'd immediately sink." Without skipping a beat Joe continued their story: "We finally made it to Greece. 

I asked: "What about your friends in the other boat?" Joe said: "When we got to the beach I let some people know 'Hey! Over there there's another boat just like ours but they sank! Immediately helicopters and rescue vessels were racing to the last known location of the other boat (I say boat, but I they were really just dingys). Only 7 of the 15 made it back alive."

I spent some months in refugee camps. A woman and her family befriended me and asked if they could accompany me on the truck. I noticed that she had a baby. But the baby had some blackness on her neck. The baby didn't make any sounds. I asked 'Mother check on your baby.' She said: 'She's ok. We want to get to the city, there are no doctors here.' The baby was dead."

Joe proceeded to make their way into Europe and finally by foot made their way to Stuttgart. Joe now lives in Berlin with proper paperwork, going back to Iran would find them dead.

Joe aspires to be a programmer. Joe said, as we walked towards the train station as it was time for me to head back to work: "I could just sit at home in front of my computer and work and be close to my dog."

Currently Joe works as a sous chef. But since getting their chocolate lab they have no desire to eat meat. Joe said: "I love my dog. I love animals. How can I eat them?"

#### Epilogue

I told Joe more than once while they were telling me their story: "You should write this down!" "This could be a movie!" "Your story needs to be told!" Joe responded: "My story is not any different than countless others." 

We exchanged numbers and I am going to try and help Joe get their programming up to par and help them get a job in the industry.

Even writing this now I feel terrible for Joe. I feel horrible that in 2023 there's still people living repressed, in a world with such abundance people still die from starvation, dehydration; live in autocratic worlds where sadists run countries and opress their own people. I could see so much of myself in Joe which is probably why I was so sad. By luck I was born in the USA with relatively very litle to complain or worry about. I was free to be an angsty teenage kid, protesting the Iraq war. I was free to write an emo blog (remember Blogger?) about seemingly superficial stuff. Meanwhile Joe was being hauled into buidlings, processed, beaten, questioned, forced to escape. 

Why was I so lucky?

---
]]></description>
    </item>
    
  </channel>
</rss>
