<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Georgios Moustakas</title>
    <description>The latest articles on DEV Community by Georgios Moustakas (@gmoustakas).</description>
    <link>https://dev.to/gmoustakas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F92253%2F6887267d-0547-4884-920b-256ced03a00b.png</url>
      <title>DEV Community: Georgios Moustakas</title>
      <link>https://dev.to/gmoustakas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gmoustakas"/>
    <language>en</language>
    <item>
      <title>LLM API Tokens burning your Bank even on testing ? Not anymore, cuesheet is here to help with that.</title>
      <dc:creator>Georgios Moustakas</dc:creator>
      <pubDate>Wed, 27 May 2026 08:01:26 +0000</pubDate>
      <link>https://dev.to/gmoustakas/llm-api-tokens-burning-your-bank-even-on-testing-not-anymore-cuesheet-is-here-to-help-with-that-4pgc</link>
      <guid>https://dev.to/gmoustakas/llm-api-tokens-burning-your-bank-even-on-testing-not-anymore-cuesheet-is-here-to-help-with-that-4pgc</guid>
      <description>&lt;p&gt;Tests that called &lt;strong&gt;#Claude&lt;/strong&gt; in CI were quietly burning tokens and breaking on every other run.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;cuesheet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One decorator around your test. The first run hits the real API and saves the response to a YAML file you commit to your repo. Every run &lt;br&gt;
after that replays from the file. Byte-identical, no network, no cost.&lt;/p&gt;

&lt;p&gt;It works with any Python SDK that sits on httpx, which is most of them in 2026. #Anthropic, #OpenAI, #Google Gemini, #Mistral AI, #DeepSeek AI, and more, Together. &lt;/p&gt;

&lt;p&gt;The pytest plugin auto-discovers cassettes in tests/cassettes/. Streaming responses get recorded as raw SSE chunks and replayed in order. API keys, JWTs, and emails are scrubbed before write so cassettes are safe to commit.&lt;/p&gt;

&lt;p&gt;There is a local web UI too. Dark + ochre, watches the filesystem, refreshes live as your tests record new conversations. Useful for code review and for the "what did the model actually say" moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v0.2.0 is out today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/gmoustakas/cuesheet" rel="noopener noreferrer"&gt;https://github.com/gmoustakas/cuesheet&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Project Details:&lt;/strong&gt; &lt;a href="https://www.georgemou.gr/projects/cuesheet" rel="noopener noreferrer"&gt;https://www.georgemou.gr/projects/cuesheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Open source, MIT. If you have been writing LLM tests and quietly hating it, this might give you a few hours back.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>claude</category>
      <category>discuss</category>
    </item>
    <item>
      <title>🚀 Why Every Developer Should Think Like a Product Builder (Not Just a Coder)</title>
      <dc:creator>Georgios Moustakas</dc:creator>
      <pubDate>Thu, 21 Aug 2025 19:36:19 +0000</pubDate>
      <link>https://dev.to/gmoustakas/why-every-developer-should-think-like-a-product-builder-not-just-a-coder-17pl</link>
      <guid>https://dev.to/gmoustakas/why-every-developer-should-think-like-a-product-builder-not-just-a-coder-17pl</guid>
      <description>&lt;p&gt;Software development isn’t just about writing lines of code. It’s about solving real problems, making things that people actually use, and shaping the web in ways that impact millions. Too often, we focus only on frameworks, languages, and tools—but forget the bigger picture: &lt;strong&gt;we’re builders.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Trap: Chasing Tech Trends
&lt;/h2&gt;

&lt;p&gt;Every week, Twitter (sorry, X) lights up with debates:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“Is React dead?”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;“Is Rust the new C++?”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;“Will AI replace developers?”&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chasing every new technology can feel like running on a treadmill—you’re moving fast but going nowhere.  &lt;/p&gt;




&lt;h2&gt;
  
  
  The Shift: From Coder to Creator
&lt;/h2&gt;

&lt;p&gt;The best developers I’ve worked with didn’t just know syntax—they thought like product people. They asked:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Who is this feature for?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Does this design make sense?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Is this solving the actual problem?&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This mindset shift transforms your work from “just code” into something meaningful.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Web Development Today: Building With Superpowers
&lt;/h2&gt;

&lt;p&gt;We’re living in a golden age of web development. With tools like &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;Vite&lt;/strong&gt;, and &lt;strong&gt;TailwindCSS&lt;/strong&gt;, spinning up a slick, production-ready app is faster than ever.  &lt;/p&gt;

&lt;p&gt;But with great tools comes a responsibility: &lt;strong&gt;don’t just build cool stuff—build useful stuff.&lt;/strong&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  The Human Side of Development
&lt;/h2&gt;

&lt;p&gt;At the end of the day, code is for people. Whether it’s an e-commerce checkout flow or a developer CLI, real users will interact with what you create. Thinking about their experience is what separates a “good developer” from a “great one.”  &lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Being a developer isn’t about being a “code monkey.” It’s about being a problem solver, a builder, a creator. If you approach every project with the mindset of &lt;em&gt;“how will this actually help someone?”&lt;/em&gt;—you’ll not only stand out as a developer, you’ll make work that matters.&lt;/p&gt;




&lt;p&gt;✍️ &lt;em&gt;If you liked this article, follow me for more thoughts on web development, software, and building products that matter.&lt;/em&gt;  &lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>product</category>
    </item>
    <item>
      <title>Update on my PDF file manipulation Script</title>
      <dc:creator>Georgios Moustakas</dc:creator>
      <pubDate>Mon, 24 Feb 2020 13:43:58 +0000</pubDate>
      <link>https://dev.to/gmoustakas/update-on-my-pdf-file-manipulation-script-44el</link>
      <guid>https://dev.to/gmoustakas/update-on-my-pdf-file-manipulation-script-44el</guid>
      <description>&lt;p&gt;Hi again, in my previous post i had a problem on how to search a large PDF file for a keyword which can be found in multiple pages of the file and in some cases more than once in single page!&lt;/p&gt;

&lt;p&gt;I've used &lt;strong&gt;PyPDF2&lt;/strong&gt; to open a given PDF file, then extract the text page by page, search that text for the given keyword and then check in what page the keyword was found and how many times per page and finally split those pages from the original file and merge them all together to create my final file so it can be printed with the useful data and not with other non-useful data from the original file.&lt;/p&gt;

&lt;p&gt;All works fine with test/dummy data in &lt;strong&gt;English&lt;/strong&gt; Characters but the original file is in &lt;strong&gt;Greek&lt;/strong&gt; and the&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;PdfPageObj.extractText()&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 function of &lt;strong&gt;PyPDF2&lt;/strong&gt; returns an empty string.&lt;/p&gt;

&lt;p&gt;So how would you approach this problem?&lt;br&gt;
Any Suggestions?&lt;/p&gt;

</description>
      <category>python</category>
      <category>help</category>
      <category>problem</category>
      <category>solution</category>
    </item>
    <item>
      <title>PDF file manipulation with python 3 (Problem)</title>
      <dc:creator>Georgios Moustakas</dc:creator>
      <pubDate>Sun, 23 Feb 2020 10:16:19 +0000</pubDate>
      <link>https://dev.to/gmoustakas/pdf-file-manipulation-with-python-3-problem-14l1</link>
      <guid>https://dev.to/gmoustakas/pdf-file-manipulation-with-python-3-problem-14l1</guid>
      <description>&lt;p&gt;Hi, I have a problem I would like help with, i'm working on a project/script with python 3 where I want to manipulate a large PDF file (50-60 plus pages long) where I would like to find a specific keyword in that file, this keyword is repeated multiple times in the file and each time this keyword is referring to a different data set, then save how many times the keyword was found, in what pages was found and then split those pages from the original file and then merge those pages together in a single file.&lt;/p&gt;

&lt;p&gt;I will use multithreading of course, because this script will run alongside other's in a small in-house server and it's already running quite a lot, other scripts.&lt;/p&gt;

&lt;p&gt;I found some things online but no luck in what my problem is, except some python libraries that is possible to do what i'm looking for, but i have no idea how i will found this keyword in the file, because the keyword isn't in the same page order in the files, it's different in every file!! &lt;/p&gt;

</description>
      <category>python</category>
      <category>help</category>
      <category>question</category>
    </item>
  </channel>
</rss>
