<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://yeldar.org/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
  <atom:link rel="self" type="application/rss+xml" href="https://feed.yeldar.org/blog" />
    <title>Yeldar Kudaibergen</title>
    <link>https://yeldar.org/</link>
    <atom:link href="https://yeldar.org/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Self-taught developer</description>
    <language>en</language>
      <item>
        <title>Learn programming through undestanding</title>
        <link>https://yeldar.org/blog/lptu/</link>
        <description>&lt;p&gt;Sometimes I think about writing a blog post and then suddenly it feels like: “this is so banal”, “who would even care about this, let alone find it useful.” But still, let me try to explain what I’m experiencing right now in my programming journey.&lt;/p&gt;
&lt;p&gt;It’s strange. I realized that even though I already built ProxyFeed (backend in TS), it feels like I’ve never actually programmed before. It turned out that, in my current understanding, programming is when you write code yourself and run the program to see whether it works or not. And a person becomes a programmer exactly at that moment. A professional programmer becomes one when somebody pays them for it — usually money, by agreement.&lt;/p&gt;
&lt;p&gt;So yeah, I came up with something again. And I’m 100% going to build it. It’s one of those “projects” that simply deserves to exist, and &lt;a href=&quot;https://yeldar.org/blog/ai-study-buddy/&quot;&gt;my buddy&lt;/a&gt; confirmed it too. The funniest and most dramatic part is that I literally cannot not build it. So yes, in a more or less sane state of mind, I’m voluntarily getting myself into this story. Let’s see what happens.&lt;/p&gt;
&lt;p&gt;Even though I had never written a single line of Go in my life, I decided that Go would become the main backend language for &lt;a href=&quot;https://directflow.app/&quot;&gt;DirectFlow&lt;/a&gt;. I looked at the situation from many different angles and it seems that, at this moment, Go is the most suitable language for me. I even realized why. It’s strange to understand the difference between TypeScript and Go not only through syntax, but through the character, logic, explanations, and style of the language itself.&lt;/p&gt;
&lt;p&gt;I was immediately surprised that &lt;code&gt;:=&lt;/code&gt; in Go means both creating and assigning a value. Previously, I had creation and assignment both through &lt;code&gt;=&lt;/code&gt;, meaning one action represented two completely different things. Anyway, I liked Go because it feels like the language is built similarly to how I am as a person. I don’t fully understand it yet myself, but I like that it works.&lt;/p&gt;
&lt;p&gt;My next realization is that we learn programming by doing it. By writing code, creating programs, and running them. Previously, it felt to me like first you learn, and &lt;em&gt;only&lt;/em&gt; then you program. As if you cannot program until you’ve learned how. Sounds logical, right?&lt;/p&gt;
&lt;p&gt;But here’s what I discovered: computers do not grow naturally like trees. Humans created computers, languages, and embedded their logic into them. Our job is simply to &lt;em&gt;understand&lt;/em&gt; how things work — not memorize syntax. Then write code. Realize why it&#39;s wrong I mean error. Again and again. That’s it.&lt;/p&gt;
&lt;p&gt;But here’s what I discovered: computers do not grow naturally like trees. Humans created computers, programming languages, and embedded their logic into them. Our job is simply to understand how things work, not memorize syntax. Then write code. See why it’s wrong, fix the error, understand it. Then write code again. Again and again. That’s what a developer’s job is, right? And apparently, this is how a person becomes a programmer. You simply write code, understand it, and when you run the program — you are a programmer.&lt;/p&gt;
&lt;p&gt;I partially understand that the “writing code” part may sound old-fashioned now, especially when it feels like AI writes code for everyone. But this is my current understanding, and I’m sure it will evolve further. And I will definitely keep writing about it here.&lt;/p&gt;
&lt;p&gt;Follow my blog directly on DirectFlow: &lt;a href=&quot;https://directflow.app/follow?url=https://yeldar.org&quot;&gt;https://directflow.app/follow?url=https://yeldar.org&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 09 May 2026 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/lptu/</guid>
      </item>
      <item>
        <title>Start a podcast before anyone listens</title>
        <link>https://yeldar.org/blog/podcen-start-before/</link>
        <description>&lt;p&gt;When you study at university, most things pass through you. Classes, notes, exams - and in the end, you’re left with a diploma that doesn’t show &lt;em&gt;how&lt;/em&gt; you think. Now imagine recording your journey from the first year every week, honestly: what you learn, what confuses you, what starts to make sense. You can talk to classmates, ask questions, reach out to people in the field. You’re creating content and thinking out loud.&lt;/p&gt;
&lt;p&gt;At first, no one listens - and that’s the advantage. No pressure, no need to perform. You can be wrong, change your mind, and figure things out. Over time, your thinking becomes clearer, and you build a record of your growth. After a few years, you don’t just study a subject - you understand it.&lt;/p&gt;
&lt;p&gt;People say “no one will listen.” I used to think that was a problem. Now I see it as freedom.&lt;/p&gt;
&lt;p&gt;Following this idea, I’m starting my own podcast about my podcasting journey, this time in English, to document the process of figuring things out.&lt;/p&gt;
&lt;p&gt;In this podcast, I’ll be talking about how I’m building it from zero, step by step. I’ll share the process of writing my book about podcasting, and also the ideas behind &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;ProxyFeed&lt;/a&gt; - a tool I’m working on.&lt;/p&gt;
&lt;p&gt;I know it might sound like I think too much about podcasting. Maybe I do. I just really care about freedom and independence - and podcasting, for me, is exactly about that.&lt;/p&gt;
&lt;p&gt;Recently, I started sharing this idea while working on UberX, aka a &amp;quot;classic immigrant job&amp;quot;, talking to students from USC and professionals. I realized these conversations shouldn’t just disappear, so I began offering my email if they ever wanted to start a podcast or continue the conversation. A couple of people wrote it down - that’s when it clicked: this idea resonates because it’s real.&lt;/p&gt;
</description>
        <pubDate>Thu, 09 Apr 2026 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/podcen-start-before/</guid>
      </item>
      <item>
        <title>Why does C have so many compilers?</title>
        <link>https://yeldar.org/blog/c-compilers/</link>
        <description>&lt;p&gt;When you first start learning C, you quickly find out that C is a compiled language. Compilation can feel like an &lt;em&gt;extra&lt;/em&gt; step after writing the code, unlike, for example, JavaScript. In JS, you don’t need to compile anything manually - compilation happens under the hood, making the process feel automatic, so the language appears to simply interpret your code.&lt;/p&gt;
&lt;p&gt;Compared to that, compilation in C can initially feel like an unnecessary and redundant step.&lt;/p&gt;
&lt;p&gt;But recently, I accidentally went deeper into the topic of compilers, and it slightly shifted my understanding of C.&lt;/p&gt;
&lt;p&gt;Have you ever noticed that the code written in C is the same, yet there are multiple compilers: &lt;code&gt;gcc&lt;/code&gt;, &lt;code&gt;clang&lt;/code&gt;, and so on? A natural question comes up - if the language is one, why does it need different compilers?&lt;/p&gt;
&lt;p&gt;It turns out the key point is that a compiler translates code for &lt;em&gt;specific hardware&lt;/em&gt;. This universality - a language built with portability across different architectures in mind - is exactly what made C so important in the first place. Since compilers are different, they can behave differently when compiling the same code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;they report errors differently&lt;/li&gt;
&lt;li&gt;they produce warnings differently&lt;/li&gt;
&lt;li&gt;they optimize code differently&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...while the source code itself remains the same. And for the same reason, data types in C can have different sizes - depending on the architecture and the compiler.&lt;/p&gt;
&lt;p&gt;If you think about it, it’s a brilliant solution: the same code can be compiled for different hardware. That’s why C has so many compilers.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Dec 2025 16:00:00 PST</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/c-compilers/</guid>
      </item>
      <item>
        <title>A deep cleanup of ProxyFeed</title>
        <link>https://yeldar.org/blog/proxyfeed-2-cleanup/</link>
        <description>&lt;p&gt;I realized that while improving &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt; I overloaded it so much that its original purpose began to suffer: providing a stable address for a feed. So I removed &lt;em&gt;almost&lt;/em&gt; all feed modifications. Almost, because feeds have self-tags, and those must be rewritten so the feed reader has no doubts about the canonical source of the proxy feed.&lt;/p&gt;
&lt;p&gt;There is something interesting here: the less you interfere with someone else’s feed, the cleaner the architecture becomes. You remove one piece of logic, and immediately you see that another one is unnecessary. Then another. And step by step the system returns to its natural form. Without trying to “improve” what should not be improved.&lt;/p&gt;
&lt;p&gt;It turns out ProxyFeed should be a stable bridge between the original feed and the platforms. That is its only strength. Everything else is noise that gets in the way.&lt;/p&gt;
&lt;p&gt;Once I removed almost all modifications, it became clear that the true value of ProxyFeed is its reliability. That it does not break the feed. That it does not disappear. That once a stable address is created, it lives and makes it possible to change the original feed URL or even the original feed type without pain.&lt;/p&gt;
&lt;p&gt;And here is the fascinating part: the simpler the system becomes, the clearer the real work becomes. You need to correctly identify the feed type. You need to guarantee no duplicates. You need a cache system that does not fail. You need to ensure that self-tags always point to the proxy feed. You need proper support for JSON, Atom, and whatever comes next.&lt;/p&gt;
&lt;p&gt;Here is what was actually done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fully removed all feed content modifications, no element edits and no attempts to &amp;quot;improve&amp;quot; the original feed;&lt;/li&gt;
&lt;li&gt;implemented feed type detection (RSS, Atom, JSON Feed) before parsing;&lt;/li&gt;
&lt;li&gt;kept only the essential rewriting of self-tags (rss/atom/json) so feed readers treat the proxy feed as canonical;&lt;/li&gt;
&lt;li&gt;added a strict check preventing the same original feed from being connected twice;&lt;/li&gt;
&lt;li&gt;added validation ensuring publicUrl is unique and never conflicts;&lt;/li&gt;
&lt;li&gt;added proper handling of JSON Feed without trying to mimic XML;&lt;/li&gt;
&lt;li&gt;improved XML normalization: remove BOM, add declaration only when missing;&lt;/li&gt;
&lt;li&gt;removed &lt;code&gt;itunes:new-feed-url&lt;/code&gt; so no player can redirect subscribers back to the original;&lt;/li&gt;
&lt;li&gt;rewritten caching logic: correct handling of hash, unchanged, partial and ok states;&lt;/li&gt;
&lt;li&gt;added atomic guarantees for cache and backup creation;&lt;/li&gt;
&lt;li&gt;moved the whole project closer to the “as-is” principle: minimal interference, maximum stability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m self-taught dev, and I have to learn from my own experience from trying to improve things that, as it turns out, didn’t need to be touched. That’s okay. ProxyFeed grows together with me. And every time I simplify it, I understand the architecture, the responsibility, and the path itself a little better. I want this service to live a long life, and for the people who choose it to be able to rely on it with confidence.&lt;/p&gt;
</description>
        <pubDate>Fri, 14 Nov 2025 16:00:00 PST</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/proxyfeed-2-cleanup/</guid>
      </item>
      <item>
        <title>Is it a podcast? But why?</title>
        <link>https://yeldar.org/blog/definitions/</link>
        <description>&lt;p&gt;For the past 10 years, I’ve been exploring podcasting — as a trend, as a business, and as something that has changed my life.&lt;/p&gt;
&lt;p&gt;This post — grew out of a desire to understand and explain what a podcast is, and what podcasting is. To understand — for myself. To explain — for anyone who one day asks the same question. What I do here is simple: I think out loud and write it down. Because for me, words — text — are the foundation of understanding.&lt;/p&gt;
&lt;p&gt;At the beginning, I just wanted to know what exactly I was doing. What does it mean when I say “I’m a podcaster”? I didn’t want to just repeat trendy words — I wanted to &lt;em&gt;understand&lt;/em&gt;. And it didn’t happen right away. Like many others, I tried to understand podcasting through other people’s definitions: articles, conferences, videos, opinions. But they left me uneasy. Something didn’t fit, something was confusing, something just felt off. I kept feeling that the definitions weren’t getting to the core.&lt;/p&gt;
&lt;p&gt;I met people who said, “Oh, a podcast is just a conversation on YouTube,” or others who insisted it’s simply an RSS feed — and that’s it. All of that is part of the journey.&lt;/p&gt;
&lt;p&gt;And so, after years of practice, conversations, research, debates — and especially the need to be heard (for some reason, that really mattered to me at the time) — I came to my own clear and simple definitions. They’re built on logic, evidence, history, and hands-on experience. These definitions answer today’s key questions about podcasts and podcasting. They don’t try to make someone right or wrong — they just clarify what’s what, without the noise.&lt;/p&gt;
&lt;p&gt;Most importantly, they finally gave me peace of mind. Now I know exactly what I do. And when I explain what a podcast is, I don’t hesitate, second-guess, or doubt. It’s clear. It’s simple. I’ve seen it many times — after I explain it, people feel free, light, clear.&lt;/p&gt;
&lt;p&gt;I’ve worked with large commercial companies and industry experts, as well as students and school kids — and it’s always the same effect. These people go on to create unique, untemplated podcasts. It’s amazing: I explain it the same way to everyone, and the outcomes are always different.&lt;/p&gt;
&lt;p&gt;I still don’t know exactly why I’m so passionate about podcasts and podcasting. It just happened. I have friends who obsessively photograph airplanes — I’ll probably never understand them. But I respect their passion and their attempts to explain it to me. Or like a chef who knows the subtle difference between one type of salt and another, and why this dish needs one and not the other. Thankfully, we don’t have to understand all that to enjoy a great meal. And you don’t have to dive as deep into podcasting as I have — you can simply enjoy the result.&lt;/p&gt;
&lt;h2&gt;What is podcasting?&lt;/h2&gt;
&lt;p&gt;Podcasting is the distribution of media files via an RSS feed with an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element. These are usually audio or video files. In this context, an RSS feed using the &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element isn’t just a technical choice — it’s a foundation for freedom and independence.&lt;/p&gt;
&lt;p&gt;It could have been built on any other mechanism, but right now, only RSS with &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; gives us that level of openness, portability, and control. The key is that the RSS feed contains an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element with a direct link to the file.&lt;/p&gt;
&lt;p&gt;If we remove RSS — or the &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element — and everything falls apart. We lose the definition of everything. What is podcasting? How is podcasting different from streaming or radio? RSS with an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element is the cornerstone of podcasting. It’s not just a technical detail — it’s the very thing that makes a podcasting &lt;em&gt;a podcasting&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Without this distinction, it becomes impossible to tell podcasting apart from YouTube — or even Dropbox. Sure, those platforms might be more convenient, more intuitive, more centralized, with “smart” recommendations and polished interfaces. But they are also controlled: bound by laws, rules, algorithms, and corporate interests. You can call that many things — but if it doesn’t involve RSS with an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element, it’s not podcasting.&lt;/p&gt;
&lt;p&gt;When does a piece of audio become &lt;em&gt;radio&lt;/em&gt;? When it’s broadcast over the airwaves. Before that, it’s just audio. Why does the same exact text get different names depending on how it’s sent? If sent over SMTP — it’s email. If sent over the SS7 signalling protocol — it’s an SMS. Even though the content is exactly the same.&lt;/p&gt;
&lt;p&gt;Same with the podcasting. It becomes the podcasting only because it distributing files via RSS with an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element. Not content production, feeling, or opinion — just the delivery method.&lt;/p&gt;
&lt;p&gt;Oh, right — podcasting is not about content creation. Recording audio or video is production, with its own stages: pre-production, production, post-production. Podcasting only begins at the moment of publishing via RSS.&lt;/p&gt;
&lt;h2&gt;What is a podcast?&lt;/h2&gt;
&lt;p&gt;A podcast is a media files that is distributed through an RSS feed using the &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element. These are typically audio or video files — they become podcasts when they are distributed through podcasting.&lt;/p&gt;
&lt;p&gt;The main confusion in defining a podcast stems from the tendency to conflate the media file with its content. Many people assume a podcast is a specific &lt;em&gt;genre&lt;/em&gt; or &lt;em&gt;format&lt;/em&gt; — for example, a casual conversation, an interview, a narrative, or an investigative series.&lt;/p&gt;
&lt;p&gt;But this assumption quickly falls apart. If we define a podcast as a free-form conversation, what do we call solo podcasts — monologues recorded by a single person? And what about podcasts that feature no human voice at all, such as audio recordings of elevator sounds or birdsong in a forest?&lt;/p&gt;
&lt;p&gt;Every time we try to shift the definition toward genre or format, we end up creating countless exceptions. Eventually, the definition becomes meaningless — it no longer defines anything clearly.&lt;/p&gt;
&lt;p&gt;So why is it that people so often associate the word “podcast” with a conversation, or with the presence of a human voice, and so on? There are plenty of such labels. I’ve discovered something interesting: whatever kind of podcast someone first encountered — they tend to believe &lt;em&gt;that&lt;/em&gt; is what a podcast is supposed to be. And often, they end up creating podcasts in the same format or genre. And this is absolutely normal.&lt;/p&gt;
&lt;p&gt;If someone’s first exposure to podcasts was The Joe Rogan Experience, then that becomes their definition of what a podcast is — and whatever the host does becomes, for them, what podcasting means. Or if it was This American Life — then &lt;em&gt;that’s&lt;/em&gt; what they think podcast is. It’s not a rule — it’s just an observation of mine.&lt;/p&gt;
&lt;p&gt;Once, just for fun, I created a podcast that contains only a single episode, one second long —
&lt;a href=&quot;https://podcastindex.org/podcast/6521300&quot;&gt;&lt;em&gt;Бір&lt;/em&gt;&lt;/a&gt;. Another example: &lt;a href=&quot;https://podcastindex.org/podcast/4404594&quot;&gt;&lt;em&gt;Elevator&lt;/em&gt;&lt;/a&gt; — a podcast where I post elevator sounds. And these are podcasts. Just as much as &lt;em&gt;Serial&lt;/em&gt; or &lt;em&gt;Podcasting 2.0&lt;/em&gt; are. They have an RSS feed with an &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; element, they can be subscribed to, they’re published on the same platforms as all other podcasts, and so on. And the fact that there’s no human voice in them… well, that’s just the kind of podcast it is.&lt;/p&gt;
&lt;p&gt;I call this the absurd level of freedom. At first, it may seem ridiculous — but then you realize what kind of creative freedom you’ve gained.&lt;/p&gt;
&lt;p&gt;When I say that &lt;em&gt;“something is a podcast”&lt;/em&gt;, I mean one thing only: it&#39;s available via RSS — or distributed to platforms through an RSS feed. No RSS? Then it’s just file on the internet. Even with RSS, it’s still the same file — but now it becomes something more: part of a decentralized flow, powered by automation and driven by the principles of freedom and independence on both ends.&lt;/p&gt;
&lt;!-- Originally posted on definition.wtf in Jun 9 2025. --&gt;</description>
        <pubDate>Tue, 11 Nov 2025 16:00:00 PST</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/definitions/</guid>
      </item>
      <item>
        <title>ProxyFeed devlog: funding tags, bug fixes</title>
        <link>https://yeldar.org/blog/proxyfeed-1-tags-bugs/</link>
        <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I submitted my application for the LinkedIn REACH Backend Apprenticeship and had to write three essays, so I didn’t have much time for coding. Fortunately, I got everything done and sent off — now I’m back to working on &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Originally, ProxyFeed was built specifically for podcast feeds, and even now, I still find remnants of that original thinking when adding new features. But my approach has changed — I now support Podcasting 2.0 tags for any type of RSS feed, not just podcasts. That said, I’ve kept a flag in the database just in case we need to distinguish between podcast and non-podcast feeds.&lt;/p&gt;
&lt;p&gt;One of the updates: I revised how the &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt; tag works. Now, users can only add one funding tag per feed, regardless of whether it’s a podcast. Technically, multiple tags were allowed, but there&#39;s really no point — podcast players usually display just one, and I assume RSS readers will do too. After a tag is added, the feed is immediately re-fetched so the change appears in the proxy without delay. Also, I finally implemented tag deletion, and if a feed already has a funding tag in the original source, we now inform the user on the settings page.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;em&gt;This funding tag comes from the original feed and cannot be edited here. To change it, update your original RSS feed or remove the tag from the original feed — then you’ll be able to edit it here.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What happens if the original feed didn’t have a funding tag, but the user adds one through ProxyFeed — and then the original feed later adds its own funding tag? In that case, ProxyFeed keeps the original intact. The original feed always takes priority over proxy changes.&lt;/p&gt;
&lt;p&gt;This work, even just adding a seemingly simple tag like &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt;, reminded me how complex this project really is.&lt;/p&gt;
&lt;p&gt;Another step: replacing the &lt;code&gt;atom:link&lt;/code&gt; with the URL of the generated proxy feed. This worked perfectly for new feeds, but didn’t apply to older ones — unless the user updated the domain or slug. So, I wrote a script that scanned all feeds and patched the outdated ones.&lt;/p&gt;
&lt;p&gt;I also cleaned up the database — removed old unused tables. At some point, I had the idea to fully parse feeds into structured database tables and reassemble them later. But due to the huge variety in RSS formats (or maybe I just wasn’t ready for it), this approach turned out to be unrealistic. So I deleted all related tables. The database is now clean.&lt;/p&gt;
&lt;p&gt;All of this is part of a gradual preparation for the next major step: adding Podping support.&lt;/p&gt;
&lt;p&gt;Oh, and I fixed another bug: ProxyFeed supports both system and custom domains. When users picked a system domain, I wasn’t generating a &lt;code&gt;slug&lt;/code&gt; for them, since system feeds used &lt;code&gt;feed id&lt;/code&gt;. Now, regardless of domain type, every feed gets a slug.&lt;/p&gt;
</description>
        <pubDate>Tue, 15 Jul 2025 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/proxyfeed-1-tags-bugs/</guid>
      </item>
      <item>
        <title>Cross-social networks</title>
        <link>https://yeldar.org/blog/cross-social-networks/</link>
        <description>&lt;p&gt;All modern social networks are basically the same. You can post text, photos, videos. Some even support audio. But they’re all closed off from each other.&lt;/p&gt;
&lt;p&gt;Now imagine this: you can read TikTok from Mastodon. Or subscribe to a YouTube channel from Bluesky, like it’s just another account in your feed. Or read Substack posts inside Threads.&lt;/p&gt;
&lt;p&gt;The answer already exists. Most platforms already have RSS feeds (some public, some hidden). And many RSS feeds already include rich media: text, images, video, audio — sometimes even files via &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This kind of future is already partially possible — especially in the Fediverse, where bots and parsers can deliver content across platforms. You can follow Bluesky feeds, Mastodon accounts, even podcasts, blogs, or YouTube channels. But right now it all feels like duct tape and magic — servers, APIs, proxies, and background scripts. It really feels like this should be much simpler.&lt;/p&gt;
&lt;p&gt;To be fair, RSS isn’t strictly required — the real goal is for any social network to be able to followproxyfeed-BKTgdpmS any other. No need for cross-posting, duplicate accounts, or “check out my Instagram here” links. You should just be able to read what you want, where you want. That said, right now, RSS is still the most practical and universal tool for this.&lt;/p&gt;
&lt;p&gt;Right now, it&#39;s still a bit of a mess to make it work. But the idea is simple: we just want to subscribe and read, without worrying about formats or protocols. Wherever you are, you follow what interests you — and it shows up in your feed.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Jun 2025 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/cross-social-networks/</guid>
      </item>
      <item>
        <title>A clearer vision for ProxyFeed</title>
        <link>https://yeldar.org/blog/proxyfeed-main/</link>
        <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Note: This post was originally &lt;a href=&quot;https://weblog.kz/blog/proxyfeed-main-entity/&quot;&gt;written&lt;/a&gt; in Kazakh. This is an expanded English translation.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ProxyFeed.io is now powering live feeds — including my own audioblog — and everything is working as expected.&lt;/p&gt;
&lt;p&gt;The biggest difference from the previous version is that I’ve now clearly defined the &lt;em&gt;main entity&lt;/em&gt; of ProxyFeed: the new RSS feed we generate for the user. Every function in the system revolves around this feed. Previously, I don’t think that was entirely clear to me. But this realization helped structure the entire system’s architecture.&lt;/p&gt;
&lt;p&gt;At first, I made a big decision: Users couldn’t register unless they provided a fully valid RSS feed with &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; tags. But as I kept building, my thinking evolved. I realized there’s no real reason to limit ProxyFeed to podcast feeds only — &lt;strong&gt;we can accept any valid RSS feed&lt;/strong&gt;. It doesn’t have to be audio-based. If the feed is valid, ProxyFeed can work with it. This shift helped me open up new use cases I hadn’t even considered before.&lt;/p&gt;
&lt;p&gt;It’s important to be clear about one thing: &lt;strong&gt;ProxyFeed is, first and foremost, a stable feed URL.&lt;/strong&gt; Your RSS feed never changes — even if you change hosts. Everything else — Podcasting 2.0 tags, caching, feed enhancements — is built on top of that foundation.&lt;/p&gt;
&lt;p&gt;Another core principle: If your original feed already includes advanced tags, ProxyFeed doesn’t overwrite or interfere. We only add missing tags — nothing more. That’s intentional: it keeps things simple and shows respect for your existing setup.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. One thought I’ve been toying with: what if we added some Podcasting 2.0 tags to regular blog feeds?&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 11 Jun 2025 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/proxyfeed-main/</guid>
      </item>
      <item>
        <title>ProxyFeed — a permanent URL for any RSS feed</title>
        <link>https://yeldar.org/blog/proxyfeed-v1/</link>
        <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I built &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt; — a tool that gives your podcast (or any RSS feed) a permanent, stable URL, no matter how often your hosting changes. It enhances your feed with Podcasting 2.0 features, supports custom subdomains, and works for any type of RSS. I made it to solve my own problem — now it’s ready for others to use. Core features will stay free; premium options may come later.&lt;/p&gt;
&lt;p&gt;Lately, this blog, podcast, and social channels have gone quiet — but behind the scenes, things have been moving fast. About a three months ago, I built a simple website for my podcast in Kazakh. As part of that, I had to change the RSS feed — a familiar problem in the podcasting world. If you switch podcast hosts, your feed URL changes. Sure, you can set up a 301 redirect, but even that isn’t guaranteed to work forever.&lt;/p&gt;
&lt;p&gt;So I decided to solve this problem once and for all — at least for myself. I built a tool that takes the feed my podcast site generates and republishes it under a stable, fast, permanent link. Now, no matter how often I change hosting platforms, my public feed stays the same. On top of that, the tool can enhance the RSS feed — for example, by adding Podcasting 2.0 tags and other advanced features. I have big plans for the future.&lt;/p&gt;
&lt;p&gt;This idea actually started years ago when I was still living in Kazakhstan. But back then, I didn’t have the knowledge, experience, or courage to follow through. It remained just a conversation. After moving to the U.S., I realized I &lt;em&gt;had&lt;/em&gt; to make it real. I built the first version just for myself — then realized it could help other podcasters too. That’s when I gave it a name — ProxyFeed — and turned it into its own project.&lt;/p&gt;
&lt;p&gt;Today, ProxyFeed is live and working. It’s currently powering the RSS feed for my audio blog, and everything is running smoothly. The core of the system is now clearly defined: the main product is the proxy RSS feed we create for the user. Everything else in the system — features, tools, domains — exists to support that one feed.&lt;/p&gt;
&lt;p&gt;This architectural clarity led to one key decision: if a user doesn&#39;t provide a valid RSS feed with &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; tags (a full podcast feed), they won’t be able to register. If you don’t already have a feed, ProxyFeed isn’t for you.&lt;/p&gt;
&lt;p&gt;Having a clear definition of the system’s core made development much easier. For example, I used to treat the user’s custom subdomain and their original feed as equal. But now I see them both as secondary — just support elements for the main proxy feed we generate.&lt;/p&gt;
&lt;p&gt;One more major update: ProxyFeed no longer works only with podcasts. Now it can handle &lt;em&gt;any&lt;/em&gt; RSS feed. No restrictions. I initially built it from a podcasting perspective, but over time I realized users are much more diverse. For example, this blog now has its own ProxyFeed-powered RSS feed: &lt;a href=&quot;https://feed.yeldar.org/blog&quot;&gt;https://feed.yeldar.org/blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The old feed still works, for now. But if I ever move my blog to a new domain, only the ProxyFeed URL will remain stable. That’s the whole point — to ensure that your feed link never breaks, no matter what happens upstream.&lt;/p&gt;
&lt;p&gt;One area of focus is Podcasting 2.0 support. I’ve started adding new tags, beginning with &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt;, and soon I’ll include &lt;code&gt;&amp;lt;podcast:locked&amp;gt;&lt;/code&gt;. My initial goal is to implement the full Podcast Standards Project &lt;a href=&quot;https://podstandards.org/features/&quot;&gt;feature list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Soon, I plan to share ProxyFeed with the podcasting community. If it solves your problem like it did mine — go ahead and use it. The core functionality will remain free. To be honest, I didn’t build this to make money. I built it to solve a problem I personally faced. Now I’m just sharing it with others.&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Jun 2025 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/proxyfeed-v1/</guid>
      </item>
      <item>
        <title>Now AI is my Study buddy</title>
        <link>https://yeldar.org/blog/ai-study-buddy/</link>
        <description>&lt;p&gt;I&#39;m still reading K&amp;amp;R. As I’ve said before, I &lt;a href=&quot;https://yeldar.org/blog/want-work-c/&quot;&gt;like the book&lt;/a&gt; — it’s concise, clear, but sometimes a bit dry and requires a thoughtful approach. Without context, some things are hard to grasp, especially if you&#39;re learning C from scratch. Sometimes I just want to discuss certain parts with someone. After we moved to Los Angeles, my conversations with my mentor became rare — and to some extent, AI took his place.&lt;/p&gt;
&lt;p&gt;The main drawback of AI, I think, is that it &lt;em&gt;always&lt;/em&gt; tries to answer — even when it doesn’t know. It can &amp;quot;hallucinate&amp;quot; or make things up. So I always double-check its answers, test them, and look for confirmation elsewhere.&lt;/p&gt;
&lt;p&gt;For example, why bother a mentor with a question like “Why is &lt;code&gt;++i&lt;/code&gt; better than &lt;code&gt;i++&lt;/code&gt;?” I find even questions like that interesting, but for someone with decades of experience in commercial programming, it probably feels too basic. This way, if he finds it interesting, he can just read my post — and maybe later we’ll talk about it in person.&lt;/p&gt;
&lt;p&gt;Overall, I’d say this: learning with AI is faster — and more importantly, deeper. This might be the first book I’ve ever read &lt;em&gt;in conversation&lt;/em&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 12 Apr 2025 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/ai-study-buddy/</guid>
      </item>
      <item>
        <title>One shortcut for copy and paste</title>
        <link>https://yeldar.org/blog/dublicate-file/</link>
        <description>&lt;p&gt;When I’m writing posts in &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;11ty&lt;/a&gt;, I often need to create new posts by copying and pasting files into the same folder. While this isn&#39;t difficult, the repetitive nature of the task started to irritate me. I wanted to find a faster way.&lt;/p&gt;
&lt;p&gt;I discovered that while &lt;code&gt;⌘ + D&lt;/code&gt; works for duplicating files in macOS, but it doesn&#39;t work in VSCode. Than I found a way to streamline the process using the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=sleistner.vscode-fileutils&quot;&gt;&amp;quot;File Utils&amp;quot;&lt;/a&gt; extension.&lt;/p&gt;
&lt;p&gt;Here’s how to set it up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the &amp;quot;File Utils extension;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Keyboard Shortcuts settings: go to Code &amp;gt; Settings &amp;gt; Keyboard Shortcuts or just press &lt;code&gt;⌘ + K ⌘ + S&lt;/code&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find the Duplicate File Command: in the Keyboard Shortcuts window, type &amp;quot;Duplicate file&amp;quot; in the search bar;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assign a Keybinding for Duplication.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I wanted to create the shortest keyboard shortcut to duplicate a file: &amp;quot;D&amp;quot; key. However, that didn’t work, as I couldn’t finish any word containing the letter &amp;quot;D&amp;quot; 😁 Every time I pressed &amp;quot;D&amp;quot;, the file duplication command triggered. As a result, I had to resort to using the key combination &lt;code&gt;⌘ + D ⌘ + D&lt;/code&gt;. Yes, twice. You just have to press &lt;code&gt;⌘&lt;/code&gt; and press &lt;code&gt;D&lt;/code&gt; twice.&lt;/p&gt;
&lt;p&gt;Now, when you want to duplicate a file, just select the file in the file explorer, press your newly assigned keybinding, and the file will be duplicated in the same folder. You will only need to enter a new file name.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Sep 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/dublicate-file/</guid>
      </item>
      <item>
        <title>Pointers in C made simple</title>
        <link>https://yeldar.org/blog/pointers-simple/</link>
        <description>&lt;p&gt;When I first came across pointers in C, I thought it was a pretty tricky topic. Even when I was just doing simple pointer exercises, like working with arrays, I didn&#39;t really understand what was going on under the hood. Today, I finally took the plunge and dived into chapter 5 of the &lt;a href=&quot;https://yeldar.org/blog/want-work-c/&quot;&gt;C book&lt;/a&gt;, which explains in detail what pointers are and how to work with them.&lt;/p&gt;
&lt;p&gt;I found this example really helpful in understanding pointers better. It goes like this:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; z&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;token comment&quot;&gt;// Don&#39;t worry about z[10] for now;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    y &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;z&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// I think this point was added to show that a pointer can also change its value; don&#39;t worry about z[10] for now;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Declaring variables and a pointer&lt;/h3&gt;
&lt;p&gt;Let&#39;s dive in and start declaring some variables! We&#39;ll go ahead and create variables: &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;. We also create an &lt;code&gt;ip&lt;/code&gt; pointer that will point to a variable of type &lt;code&gt;int&lt;/code&gt;, which we&#39;ll use to help us keep track of things.&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;d like to draw your attention to the way a pointer is declared: &lt;code&gt;int *ip&lt;/code&gt;. This just means that &lt;code&gt;ip&lt;/code&gt; is a pointer to a variable of the &lt;code&gt;int&lt;/code&gt; type. The asterisk &lt;code&gt;*&lt;/code&gt; here is super helpful because it shows us that &lt;code&gt;ip&lt;/code&gt; is not just a regular variable, but a pointer! This means that it will store the address of a variable of the &lt;code&gt;int&lt;/code&gt; type in memory.&lt;/p&gt;
&lt;p&gt;It&#39;s really important to understand that the &lt;code&gt;*&lt;/code&gt; is referring to &lt;code&gt;ip&lt;/code&gt; and not &lt;code&gt;int&lt;/code&gt;. I&#39;m sure you&#39;ll find this example really helpful in understanding this point:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;w&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; k &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// w – a pointer to a variable of `int` type; k is just a variable of `int` type;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s continue parsing the code from the book...&lt;/p&gt;
&lt;h3&gt;Assigning the address of a variable to a pointer&lt;/h3&gt;
&lt;p&gt;Next, we assign the address of the &lt;code&gt;x&lt;/code&gt; variable to the &lt;code&gt;ip&lt;/code&gt; pointer:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;&amp;amp;&lt;/code&gt; operator before &lt;code&gt;x&lt;/code&gt; means “address of the variable &lt;code&gt;x&lt;/code&gt;”. Thus, now &lt;code&gt;ip&lt;/code&gt; stores the address of the variable &lt;code&gt;x&lt;/code&gt;. This is a key part of understanding pointers: a pointer itself does not store the value of a variable, it only stores its address in memory.&lt;/p&gt;
&lt;h3&gt;Pointer dereferencing&lt;/h3&gt;
&lt;p&gt;The next step is pointer dereferencing:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;y &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, the asterisk &lt;code&gt;*&lt;/code&gt; before &lt;code&gt;ip&lt;/code&gt; means “the value at the address pointed to by the &lt;code&gt;ip&lt;/code&gt; pointer”. Since &lt;code&gt;ip&lt;/code&gt; points to &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;*ip&lt;/code&gt; returns the value of &lt;code&gt;x&lt;/code&gt; which is 1. It means &lt;code&gt;*ip&lt;/code&gt; equal to &lt;code&gt;x&lt;/code&gt; or vice versa.&lt;/p&gt;
&lt;p&gt;Therefore, the variable &lt;code&gt;y&lt;/code&gt; is assigned the value &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Changing the value of a variable through a pointer&lt;/h3&gt;
&lt;p&gt;Now we will change the value of the variable &lt;code&gt;x&lt;/code&gt; through a pointer:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This line means “assign the value &lt;code&gt;0&lt;/code&gt; to the variable pointed to by &lt;code&gt;ip&lt;/code&gt;”. Since &lt;code&gt;ip&lt;/code&gt; points to &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt; becomes 0. That is, the &lt;code&gt;*&lt;/code&gt; in &lt;code&gt;*ip&lt;/code&gt; works both ways. With &lt;code&gt;*ip&lt;/code&gt; you can take out a value, likewise with &lt;code&gt;*ip&lt;/code&gt; you can write a value. In detail: &lt;code&gt;*ip&lt;/code&gt; is &lt;code&gt;x&lt;/code&gt;. Lines &lt;code&gt;printf&lt;/code&gt; in C code work the same way:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;ip&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;token comment&quot;&gt;// 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Important points&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The pointer itself stores only the address of the variable, not its value. This is an important distinction to understand. A pointer points to a memory location where the value of a variable is stored, but the pointer itself stores only the address of that location.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pointer dereferencing, that is, when we write “asterisk variable pointer” - &lt;code&gt;*ip&lt;/code&gt;, we are accessing the value of the variable pointed to by &lt;code&gt;ip&lt;/code&gt;. This is called pointer dereferencing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We can assign the value of the variable through the pointer. That is, dereferencing works both ways.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The asterisk - &lt;code&gt;*&lt;/code&gt; is used to dereference a pointer and the ampersand - &lt;code&gt;&amp;amp;&lt;/code&gt; is used to get the address of a variable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At first glance, pointers in C may seem complicated, but when you begin to understand their essence, they become a powerful tool for memory management.&lt;/p&gt;
&lt;p&gt;This example helped me to better understand how pointers work and how they can be used. I hope my experience will help you learn this topic faster.&lt;/p&gt;
&lt;p&gt;I also suggest you to read the post &lt;a href=&quot;https://yeldar.org/blog/asterisk-in-c/&quot;&gt;The Asterisk * Operator in C&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 30 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/pointers-simple/</guid>
      </item>
      <item>
        <title>Does every memory cell in a computer have its own address?</title>
        <link>https://yeldar.org/blog/mem-cells-addrs/</link>
        <description>&lt;p&gt;By diving into the world of C, I have encountered the concept of memory addresses and how they relate to variables and data storage. This topic intrigued me, and I decided to explore the question: &lt;strong&gt;Does every memory cell in a computer have its own address?&lt;/strong&gt; Here’s what I discovered.&lt;/p&gt;
&lt;p&gt;In the simplest terms, a computer&#39;s memory is organized into a series of storage locations, known as memory cells. Each of these cells can hold a small amount of data, typically one byte. To access and manipulate this data effectively, every memory cell is assigned a unique identifier known as an &lt;strong&gt;address&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When I declared a variable in C, like &lt;code&gt;int num;&lt;/code&gt;, I learned that the compiler allocates a memory address for &lt;code&gt;num&lt;/code&gt;, where its value will be stored. This made me realize that every time I create a variable, I am essentially creating a link to a specific location in memory.&lt;/p&gt;
&lt;p&gt;When a program is executed, the operating system allocates memory for it, dividing it into segments like code, data, and stack. Within these segments, individual variables and data structures are assigned specific addresses sequentially. For example, if a program starts execution at memory address &lt;code&gt;0x00400000&lt;/code&gt;, the first variable might be stored at that address, while subsequent variables get assigned addresses incrementally.&lt;/p&gt;
&lt;p&gt;One surprising fact I came across is that modern computers use something called &lt;strong&gt;virtual memory&lt;/strong&gt;, which creates an abstraction of memory. This means that the addresses used by a program may not correspond directly to physical memory addresses. The operating system manages these mappings, allowing programs to use a larger address space than what is physically available.&lt;/p&gt;
&lt;p&gt;Another interesting tidbit is that the number of unique addresses is determined by the architecture of the CPU. For instance, a 32-bit system can address about 4 billion unique locations, while a 64-bit system can address a significantly larger space. This is why 64-bit systems are now the norm—they can handle much more memory, which is crucial for running modern applications.&lt;/p&gt;
&lt;p&gt;In conclusion, I found that every memory cell in a computer does indeed have its own address, which plays a vital role in how we store and access data. Understanding these concepts is essential for anyone learning C programming, as it lays the groundwork for exploring more advanced topics like pointers and data structures.&lt;/p&gt;
&lt;p&gt;This exploration has given me a deeper appreciation for how computers manage memory and how crucial these addresses are for efficient programming. I’m excited to continue my journey and see where this knowledge takes me!&lt;/p&gt;
</description>
        <pubDate>Mon, 26 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/mem-cells-addrs/</guid>
      </item>
      <item>
        <title>About getchar() in C</title>
        <link>https://yeldar.org/blog/getchar/</link>
        <description>&lt;p&gt;&lt;code&gt;getchar()&lt;/code&gt; is a simple but powerful function from the C standard library that allows you to read characters from standard input.&lt;/p&gt;
&lt;p&gt;It is defined in the header file &lt;code&gt;&amp;lt;stdio.h&amp;gt;&lt;/code&gt; and has the following prototype:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;int&lt;/code&gt; return type is used because &lt;code&gt;getchar()&lt;/code&gt; returns a character from the input stream as an integer. This allows it to handle all possible character values, as well as special values like EOF (end of file). Because in C, characters (&lt;code&gt;char&lt;/code&gt;) are represented as integer values corresponding to their encoding in the ASCII table. For example, the letter &lt;code&gt;&#39;A&#39;&lt;/code&gt; has an ASCII code of 65, and &lt;code&gt;&#39;a&#39;&lt;/code&gt; has 97. And by returning the value as an &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;getchar()&lt;/code&gt; can handle not only all ASCII characters but also special values like EOF.&lt;/p&gt;
&lt;p&gt;EOF (end-of-file) is a special value indicating that the input stream has ended. It is usually represented as &lt;code&gt;-1&lt;/code&gt;. If &lt;code&gt;getchar()&lt;/code&gt; returned a &lt;code&gt;char&lt;/code&gt; type, it would be impossible to distinguish &lt;code&gt;EOF&lt;/code&gt; from valid characters, as &lt;code&gt;char&lt;/code&gt; ranges from -128 to 127 or from 0 to 255 (depending on the implementation). Using &lt;code&gt;int&lt;/code&gt; avoids this issue, as EOF typically has a value that is outside the range of ASCII characters.&lt;/p&gt;
&lt;p&gt;Also, calling &lt;code&gt;getchar()&lt;/code&gt; blocks the program&#39;s execution until a character is entered and the Enter key is pressed. This is convenient for interactive data input.&lt;/p&gt;
&lt;p&gt;Here’s a straightforward example of using &lt;code&gt;getchar()&lt;/code&gt; with two conditions for clarity:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Enter text (to finish, enter Ctrl+D or &#39;d&#39;):&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;d&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; c &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;putchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&#92;nProgram terminated.&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this example, &lt;code&gt;getchar()&lt;/code&gt; is used to read a character from standard input. This character is stored in the variable &lt;code&gt;c&lt;/code&gt;. The &lt;code&gt;while&lt;/code&gt; loop continues as long as the entered character is not &lt;code&gt;&#39;d&#39;&lt;/code&gt; and not EOF. This allows the program to terminate when the user inputs &lt;code&gt;d&lt;/code&gt; or presses &lt;code&gt;Ctrl+D&lt;/code&gt; on macOS. The entered character is output back to the screen using &lt;code&gt;putchar(c)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To fully understand how &lt;code&gt;getchar()&lt;/code&gt; works, try entering single characters as well as whole words and sentences. Input to &lt;code&gt;getchar()&lt;/code&gt; is buffered until you press the Enter key. This means that &lt;code&gt;getchar()&lt;/code&gt; does not receive a character immediately after it is pressed but only after the line of input is complete. So, if you enter &lt;code&gt;kghdkeh&lt;/code&gt;, the program will output only &lt;code&gt;kgh&lt;/code&gt; because it will stop at &lt;code&gt;d&lt;/code&gt; according to the condition.&lt;/p&gt;
</description>
        <pubDate>Tue, 13 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/getchar/</guid>
      </item>
      <item>
        <title>Understanding #define in C</title>
        <link>https://yeldar.org/blog/define-in-c/</link>
        <description>&lt;p&gt;As I dive into the world of programming with C, one of the fundamental concepts I&#39;ve encountered is the &lt;code&gt;#define&lt;/code&gt; preprocessor directive. Learning about &lt;code&gt;#define&lt;/code&gt; from the classic book &amp;quot;The C Programming Language&amp;quot; by Brian Kernighan and Dennis Ritchie has been quite enlightening. Here’s what I’ve understood about it and why it’s an essential tool for writing efficient and readable code.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#define&lt;/code&gt; is a preprocessor directive in C that allows us to create symbolic constants and macros. It essentially instructs the compiler to replace instances of a specific name in the code with a defined value before the actual compilation process begins. This happens during the preprocessing phase, which occurs before the compilation phase.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;#define&lt;/code&gt; allows programmers to give meaningful names to values used in their code. Instead of scattering &amp;quot;magic numbers&amp;quot; throughout the code, which can make it difficult to understand, we can use &lt;code&gt;#define&lt;/code&gt; to give these numbers descriptive names. This makes the code much easier to read and understand, both for myself and others who might read my code.&lt;/p&gt;
&lt;p&gt;By defining constants at the beginning of the program with &lt;code&gt;#define&lt;/code&gt;, it&#39;s easy to update these values in one place if they ever need to change. This single-point change capability greatly simplifies maintenance and reduces the risk of errors. If I need to change a constant value, I can do it by modifying the &lt;code&gt;#define&lt;/code&gt; statement rather than searching through the entire codebase for every instance of that value.&lt;/p&gt;
&lt;p&gt;Kernighan and Ritchie emphasize the dangers of hardcoding values directly in code. Using &lt;code&gt;#define&lt;/code&gt; helps avoid this by abstracting the values into named constants. This abstraction layer is particularly useful in large codebases where the same value might be used in multiple places.&lt;/p&gt;
&lt;p&gt;Another advantage mentioned in the book is that using &lt;code&gt;#define&lt;/code&gt; can sometimes allow the compiler to optimize the code better. Since the compiler replaces the symbolic names with actual values during preprocessing, it can optimize the resulting code more effectively than if variables were used.&lt;/p&gt;
&lt;p&gt;Besides defining constants, &lt;code&gt;#define&lt;/code&gt; can also be used to create macros, which are like functions but are expanded inline. This can improve performance by avoiding the overhead of a function call, although it’s important to use them judiciously to maintain code clarity.&lt;/p&gt;
&lt;p&gt;The power of &lt;code&gt;#define&lt;/code&gt; lies in its simplicity and efficiency. By providing a way to name constants and create macros, it enhances the clarity, maintainability, and performance of C programs. Learning about &lt;code&gt;#define&lt;/code&gt; from Kernighan and Ritchie&#39;s book has taught me to appreciate the importance of writing clean, understandable, and maintainable code—a skill that&#39;s essential for any budding programmer like myself.&lt;/p&gt;
&lt;p&gt;While &lt;code&gt;#define&lt;/code&gt; is a powerful tool, it’s important to use it wisely. Overusing it or using it incorrectly can lead to code that is hard to debug and maintain. As I continue to learn, I aim to apply these principles to write code that is not only functional but also elegant and efficient.&lt;/p&gt;
</description>
        <pubDate>Sun, 11 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/define-in-c/</guid>
      </item>
      <item>
        <title>I want to work with C</title>
        <link>https://yeldar.org/blog/want-work-c/</link>
        <description>&lt;p&gt;Reading the book by Kernighan and Ritchie on the C language, I am beginning to realize how powerful and flexible this language is. One of its main goals was to provide maximum control over memory and program execution efficiency. While I understand this from the text, I am starting to grasp the concept more deeply as I read on.&lt;/p&gt;
&lt;p&gt;Today, I encountered an interesting point: it turns out that the assignment operation in C returns the value itself, not the assignment status, as I had assumed. At first, this seemed illogical to me. However, after researching online, I understood that this design makes sense in the context of low-level programming, where minimizing the number of operations and efficiently working with expressions is crucial.&lt;/p&gt;
&lt;p&gt;The C language assumes that the programmer knows exactly what they are doing and does not attempt to guess their intentions. C requires a deep understanding of its features, and I believe no one can explain it better than the authors of the language themselves. I am glad I found Kernighan and Ritchie&#39;s book from 1992 in the library. The examples from the book still work exactly as intended — it&#39;s impressive.&lt;/p&gt;
</description>
        <pubDate>Fri, 09 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/want-work-c/</guid>
      </item>
      <item>
        <title>Finding the Greatest Number in C</title>
        <link>https://yeldar.org/blog/find-great-num/</link>
        <description>&lt;p&gt;When programming, a common task is to find the greatest of three numbers. There are several ways to achieve this in C. In this blog post, we will explore multiple methods to solve this problem, ranging from simple conditional statements to using standard library functions.&lt;/p&gt;
&lt;h2&gt;Basic Approach Using Nested &lt;code&gt;if&lt;/code&gt; Statements&lt;/h2&gt;
&lt;p&gt;The most straightforward way to find the greatest number among three given numbers is to use nested &lt;code&gt;if&lt;/code&gt; statements. Here&#39;s how you can do it:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This method works well, but it can be made more concise.&lt;/p&gt;
&lt;h2&gt;Using Ternary Operator&lt;/h2&gt;
&lt;p&gt;A more compact way to write the function is by using the ternary operator:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach reduces the number of lines and makes the code more readable.&lt;/p&gt;
&lt;h2&gt;Using Standard Library Functions&lt;/h2&gt;
&lt;p&gt;If you can use the standard library, leveraging &lt;code&gt;fmax&lt;/code&gt; from &lt;code&gt;math.h&lt;/code&gt; can simplify the function:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;math.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fmax&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fmax&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This method uses &lt;code&gt;fmax&lt;/code&gt; to compare two numbers at a time, returning the greatest.&lt;/p&gt;
&lt;h2&gt;Using an Array and Loop&lt;/h2&gt;
&lt;p&gt;Another way is to put the numbers in an array and iterate through it to find the maximum value:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; max &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            max &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; max&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach is useful if you need to handle a larger set of numbers dynamically.&lt;/p&gt;
&lt;h2&gt;Using Utility Functions&lt;/h2&gt;
&lt;p&gt;Creating a utility function to compare two numbers and then using it can also be effective:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; y&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This method promotes code reuse and can be extended easily.&lt;/p&gt;
&lt;h2&gt;Using Non-Nested Conditions&lt;/h2&gt;
&lt;p&gt;Finally, using non-nested conditions can make the function easier to read:&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token macro property&quot;&gt;&lt;span class=&quot;token directive-hash&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token directive keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%d&#92;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;greatest_number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids nested conditions, making the logic clearer.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Finding the greatest of three numbers in C can be accomplished in various ways. The choice of method depends on your specific needs and preferences. Whether you prefer the simplicity of nested &lt;code&gt;if&lt;/code&gt; statements or the compactness of the ternary operator, understanding these different approaches can help you write more efficient and readable code.&lt;/p&gt;
&lt;p&gt;Feel free to experiment with these methods and choose the one that best suits your style and requirements!&lt;/p&gt;
</description>
        <pubDate>Tue, 06 Aug 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/find-great-num/</guid>
      </item>
      <item>
        <title>The Asterisk * Operator in C</title>
        <link>https://yeldar.org/blog/asterisk-in-c/</link>
        <description>&lt;p&gt;The asterisk &lt;code&gt;*&lt;/code&gt; operator in the C programming language is a versatile symbol with multifaceted applications. Understanding its usage across different contexts is essential for proficient programming and efficient code development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pointers:&lt;/strong&gt; Pointers are fundamental in C programming, allowing manipulation of memory addresses and data. The asterisk &lt;code&gt;*&lt;/code&gt; symbol is employed to dereference pointers, enabling access to the value stored at a particular memory address. This dereferencing operation is crucial for tasks such as dynamic memory allocation, data traversal, and passing data by reference to functions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multiplication:&lt;/strong&gt; In arithmetic operations, the asterisk &lt;code&gt;*&lt;/code&gt; serves as the multiplication operator. It is used to perform multiplication between numerical operands, yielding the product of the two values. While seemingly straightforward, understanding operator precedence and the order of operations involving the asterisk &lt;code&gt;*&lt;/code&gt; is essential for accurate mathematical computations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Input-Output Operators:&lt;/strong&gt; Within input-output operations, such as &lt;code&gt;printf&lt;/code&gt; and &lt;code&gt;scanf&lt;/code&gt;, the asterisk &lt;code&gt;*&lt;/code&gt; is used as part of format specifiers to specify the formatting of input and output data. For instance, &lt;code&gt;%&#92;*d&lt;/code&gt; in &lt;code&gt;printf&lt;/code&gt; allows formatting of an integer with a variable field width, providing flexibility in output formatting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Function Pointers:&lt;/strong&gt; Function pointers are pointers that point to functions rather than data. The asterisk &lt;code&gt;*&lt;/code&gt; is crucial for dereferencing function pointers, allowing the invocation of the function they reference. This feature is particularly powerful in scenarios where functions need to be passed as arguments to other functions or stored in data structures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory Allocation:&lt;/strong&gt; Dynamic memory allocation functions like &lt;code&gt;malloc&lt;/code&gt;, &lt;code&gt;calloc&lt;/code&gt;, and &lt;code&gt;realloc&lt;/code&gt; are essential for managing memory dynamically at runtime. The asterisk &lt;code&gt;*&lt;/code&gt; is used in conjunction with these functions to specify the type of data for which memory is allocated. Proper memory management, including allocation and deallocation, is critical for preventing memory leaks and optimizing resource utilization.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pointers to Pointers:&lt;/strong&gt; Pointers to pointers, also known as double pointers, add another layer of indirection in memory management. The asterisk &lt;code&gt;*&lt;/code&gt; is utilized for dereferencing double pointers to access the value or address pointed to by the pointer to a pointer. This concept is often encountered in scenarios where functions need to modify pointer variables or dynamically allocate multi-dimensional arrays.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arrays and Pointers:&lt;/strong&gt; In C, arrays and pointers exhibit close relationships, with arrays being essentially pointers to their first elements. The asterisk &lt;code&gt;*&lt;/code&gt; can be used to access array elements through pointer arithmetic or dereferencing. Understanding the equivalence between arrays and pointers is crucial for efficient data manipulation and memory access in C programming.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Variadic Functions:&lt;/strong&gt; Variadic functions, which accept a variable number of arguments, are prevalent in C programming. The asterisk &lt;code&gt;*&lt;/code&gt; is utilized within these functions to access additional arguments through a pointer to the argument list. Proper handling of variadic functions requires understanding the structure of the argument list and ensuring that arguments are retrieved and processed correctly.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Mastering the asterisk &lt;code&gt;*&lt;/code&gt; operator in C programming unlocks a wealth of capabilities, from efficient memory management and dynamic data structures to flexible function handling and precise arithmetic operations. By delving deep into its diverse applications and understanding its nuances, programmers can harness its power to write robust, efficient, and maintainable code.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 May 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/asterisk-in-c/</guid>
      </item>
      <item>
        <title>The dilemma of first programming language to learn: resolved</title>
        <link>https://yeldar.org/blog/first-prog-lang/</link>
        <description>&lt;p&gt;I would like to share my experience of overcoming the challenge of choosing a first programming language to learn. This is a hurdle that many of us face when embarking on our programming journey. I hope my experience can shed some light on this common dilemma. When I first started learning to program, I felt overwhelmed by the multitude of languages and paths to choose from.&lt;/p&gt;
&lt;p&gt;My initial attempt at learning through a combination of paid and free courses did not yield the desired results. I experienced a degree of discouragement, but I was determined to identify the optimal path. I decided to pursue web development and enrolled in a comprehensive course covering HTML, CSS, and JavaScript. While it provided a solid foundation in web development, I yearned for a deeper understanding of the underlying principles of programming.&lt;/p&gt;
&lt;p&gt;This pursuit of deeper knowledge led me to self-study, where I explored JavaScript, HTML, and CSS through various open courses. However, it wasn&#39;t until I ventured into Ruby that I began to grasp the intricacies of programming on a more profound level. Ruby&#39;s elegant syntax and powerful features sparked my curiosity and propelled me further into the world of programming.&lt;/p&gt;
&lt;p&gt;After careful consideration, we have determined that Python, rather than Ruby, is the optimal choice for achieving my long-term goals. I have identified an online course on the fundamentals of programming in Python from the University of Helsinki that aligns with my needs. My mentor has approved this course and we have set a goal to complete part 12.&lt;/p&gt;
&lt;p&gt;In the course of our discussion, an interesting development occurred: my mentor suggested that I work on exercises in both Python and C. He believes that learning both languages will offer a more comprehensive understanding of programming.&lt;/p&gt;
&lt;p&gt;Thus, the proposed solution to the dilemma of choosing a first programming language is as follows: select a language and course that suits you. At this stage, it doesn’t matter whether the course is online or offline. Then, study this language in parallel with C. The learning process would look like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read the theory on your chosen programming language (language 1).&lt;/li&gt;
&lt;li&gt;Thoroughly review the course assignment.&lt;/li&gt;
&lt;li&gt;Complete the assignment in C.&lt;/li&gt;
&lt;li&gt;Complete the same assignment in language 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here’s why I believe this parallel approach can be highly beneficial:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Studying two languages simultaneously allows you to see how different languages address the same problems, which can lead to a deeper understanding of programming concepts and principles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learning both Python and C in parallel can create a synergy where insights gained from one language enhance your understanding of the other. This can make complex concepts more accessible and intuitive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Engaging with both high-level (Python) and low-level (C) languages can help you better grasp abstract concepts and practical details, making it easier to tackle challenging programming tasks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The variety in tasks and approaches when learning two languages can keep the process dynamic and engaging, preventing monotony and maintaining motivation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-world programming often requires familiarity with multiple languages and technologies. By learning them in parallel, you prepare yourself for this reality, making you more versatile and adaptable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach will help you gain a deeper understanding of fundamental programming concepts and see how these concepts are implemented at different levels of abstraction. This method has truly helped me not only to better understand programming but also to increase my confidence in my skills.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://fullstackopen.com/en/&quot;&gt;Full Stack Open&lt;/a&gt;, University of Helsinki;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theodinproject.com/&quot;&gt;The Odin Project&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://leanpub.com/rubyisforfun/&quot;&gt;Ruby Is For Fun&lt;/a&gt; book;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://programming-24.mooc.fi/&quot;&gt;Python Programming MOOC 2024&lt;/a&gt; University of Helsinki.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 23 May 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/first-prog-lang/</guid>
      </item>
      <item>
        <title>Why does scanf require memory addresses while printf does not?</title>
        <link>https://yeldar.org/blog/scanf-vs-printf/</link>
        <description>&lt;p&gt;In C programming, the functions &lt;code&gt;scanf&lt;/code&gt; and &lt;code&gt;printf&lt;/code&gt; serve different purposes when it comes to input and output operations. One thing that sets them apart is how they handle variable arguments, especially in regard to memory addresses.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;scanf&lt;/code&gt; function is mainly used for input, where it reads data from the user and stores it in variables. So, to achieve this, &lt;code&gt;scanf&lt;/code&gt; requires the memory addresses (pointers) of the variables where the input values will be stored. This is because &lt;code&gt;scanf&lt;/code&gt; needs to know where in memory to write the input values that it reads from the user. By passing the memory address of a variable to &lt;code&gt;scanf&lt;/code&gt;, the function can directly write the user input to that memory location.&lt;/p&gt;
&lt;p&gt;On the other hand, the &lt;code&gt;printf&lt;/code&gt; function is used for outputting data to the console or to a file. Unlike &lt;code&gt;scanf&lt;/code&gt;, &lt;code&gt;printf&lt;/code&gt; doesn&#39;t need to modify the variables passed to it as arguments. It simply displays the values stored in those variables, so it doesn&#39;t require memory addresses as arguments because it doesn&#39;t need to write anything to those memory locations.&lt;/p&gt;
&lt;p&gt;It&#39;s really important for C programmers to understand the difference between passing a variable and passing its address. This helps them work with data in memory more effectively. When you explicitly specify the address of a variable in &lt;code&gt;scanf&lt;/code&gt;, it makes the code more reliable and secure. This prevents unintended data writes to memory.&lt;/p&gt;
&lt;p&gt;It&#39;s also really important to handle errors when using &lt;code&gt;scanf&lt;/code&gt;. If you don&#39;t, you might end up with issues like passing the wrong data type or the wrong variable address. It&#39;s really important for programmers to be aware of these potential pitfalls and to properly validate input to ensure the correctness and robustness of their code.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 May 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/scanf-vs-printf/</guid>
      </item>
      <item>
        <title>Zero in C</title>
        <link>https://yeldar.org/blog/zero-in-c/</link>
        <description>&lt;p&gt;In the C programming language, the value &lt;code&gt;0&lt;/code&gt; holds special significance and is interpreted differently depending on the context:&lt;/p&gt;
&lt;p&gt;In conditional statements (such as &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt;, etc.), the value &lt;code&gt;0&lt;/code&gt; is interpreted as &amp;quot;false,&amp;quot; while any non-zero value is interpreted as &amp;quot;true.&amp;quot; For example, &lt;code&gt;if (0)&lt;/code&gt; will always evaluate to &amp;quot;false&amp;quot;, and the code block inside this statement will not be executed.&lt;/p&gt;
&lt;p&gt;C lacks a built-in boolean data type, as found in more &lt;em&gt;modern&lt;/em&gt; programming languages. Instead, integer values are used, where &lt;strong&gt;&lt;code&gt;0&lt;/code&gt; represents &amp;quot;false&amp;quot;&lt;/strong&gt; and &lt;code&gt;1&lt;/code&gt; (or any non-zero value) represents &amp;quot;true&amp;quot;. The C99 standard introduced the &lt;code&gt;_Bool&lt;/code&gt; type, along with the &lt;code&gt;&amp;lt;stdbool.h&amp;gt;&lt;/code&gt; header file, which allows using &lt;code&gt;bool&lt;/code&gt; as an alias for &lt;code&gt;_Bool&lt;/code&gt;, and &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; as macros for &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;0&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;p&gt;The value &lt;code&gt;0&lt;/code&gt; &lt;strong&gt;for pointers&lt;/strong&gt; is interpreted as a &amp;quot;null pointer,&amp;quot; indicating that the pointer does not point to any object in memory. The &lt;code&gt;NULL&lt;/code&gt; macro is typically used for this purpose in standard C libraries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In functions&lt;/strong&gt;, the value &lt;code&gt;0&lt;/code&gt; is often used as an indicator of successful completion. For instance, the &lt;code&gt;main&lt;/code&gt; function usually returns &lt;code&gt;0&lt;/code&gt; upon successful program termination. Standard C library functions also commonly return &lt;code&gt;0&lt;/code&gt; on success and a non-zero value on error.&lt;/p&gt;
&lt;p&gt;In an &lt;strong&gt;arithmetic context&lt;/strong&gt;, &lt;code&gt;0&lt;/code&gt; simply represents zero, a number without value. When added to any number, it does not change its value, and when multiplied by any number, it yields &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Understanding the context of zero usage helps avoid errors and improve code readability. It&#39;s important to be consistent and clearly define its value in each context to avoid misunderstandings and unexpected results.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://yeldar.org/blog/c-while/&quot;&gt;About While loop in C&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 23 May 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/zero-in-c/</guid>
      </item>
      <item>
        <title>Why does C have a while loop?</title>
        <link>https://yeldar.org/blog/c-while/</link>
        <description>&lt;p&gt;The C programming language is renowned for its efficiency, flexibility and control. One of the key constructs that contributes to these characteristics is the &lt;code&gt;while&lt;/code&gt; loop. But why does C have a while loop, and what makes it so important? In this article, we&#39;ll explore the various reasons and benefits of the &lt;code&gt;while&lt;/code&gt; loop in C.&lt;/p&gt;
&lt;pre class=&quot;language-c&quot;&gt;&lt;code class=&quot;language-c&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;condition&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// code to execute&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One of the main reasons why C includes the &lt;code&gt;while&lt;/code&gt; loop is to &lt;strong&gt;simplify repetitive tasks&lt;/strong&gt;. There are many situations in programming where a block of code needs to be executed several times. The &lt;code&gt;while&lt;/code&gt; loop provides an easy way of repeating a set of instructions until a particular condition is met. This eliminates the need to manually copy and paste code, thereby reducing errors and making the code more maintainable.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;while&lt;/code&gt; loop &lt;strong&gt;improves code readability&lt;/strong&gt; by clearly indicating the start and end of a repeating section of code. With a simple syntax, it makes it easier for developers to understand the flow of the program. For example, the condition within the &lt;code&gt;while&lt;/code&gt; statement explicitly shows when the loop will continue, making it intuitive for others to follow the logic.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;while&lt;/code&gt; loop in C &lt;strong&gt;provides flexibility&lt;/strong&gt; in specifying loop conditions. Unlike other loop constructs, the &lt;code&gt;while&lt;/code&gt; loop allows for conditions that can be checked before entering the loop. This is particularly useful in situations where the number of iterations is not known in advance. The loop continues to execute as long as the condition remains true, providing dynamic control over the flow of execution.&lt;/p&gt;
&lt;p&gt;Another reason C includes the &lt;code&gt;while&lt;/code&gt; loop is for &lt;strong&gt;better control over program flow&lt;/strong&gt;. The &lt;code&gt;while&lt;/code&gt; loop allows for easy integration of control statements such as &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt;, enabling precise management of how and when the loop should terminate or skip iterations. This control is crucial for writing robust and efficient programs.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;while&lt;/code&gt; loop is &lt;strong&gt;resource-efficient&lt;/strong&gt;, especially in scenarios where initialization and increment steps are not required. By focusing solely on the condition and the loop body, the &lt;code&gt;while&lt;/code&gt; loop can be more efficient in terms of both memory and processing power. This efficiency is vital for systems programming and applications where performance is a key concern.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;versatility&lt;/strong&gt; of the &lt;code&gt;while&lt;/code&gt; loop makes it suitable for a wide range of applications. From simple scripts to complex system software, the &lt;code&gt;while&lt;/code&gt; loop can be used to handle various tasks, such as waiting for user input, monitoring system states, and managing background processes. This versatility ensures that the &lt;code&gt;while&lt;/code&gt; loop remains a fundamental tool in the C programmer&#39;s toolkit.&lt;/p&gt;
&lt;p&gt;Finally, the &lt;code&gt;while&lt;/code&gt; loop aids in &lt;strong&gt;debugging and testing&lt;/strong&gt; by allowing specific sections of code to be executed repeatedly under controlled conditions. This repetitive execution helps in isolating and identifying bugs, as well as in testing the behavior of code under different scenarios. The simplicity and predictability of the &lt;code&gt;while&lt;/code&gt; loop make it an ideal construct for these purposes.&lt;/p&gt;
</description>
        <pubDate>Tue, 21 May 2024 17:00:00 PDT</pubDate>
        <dc:creator>Yeldar Kudaibergen</dc:creator>
        <guid>https://yeldar.org/blog/c-while/</guid>
      </item>
  </channel>
</rss>