<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Aymen.notes]]></title><description><![CDATA[Lazy guy that makes software, so that he can be even lazier.]]></description><link>https://blog.aymenhamza.com/</link><image><url>https://blog.aymenhamza.com/favicon.png</url><title>Aymen.notes</title><link>https://blog.aymenhamza.com/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Wed, 22 Apr 2026 12:02:36 GMT</lastBuildDate><atom:link href="https://blog.aymenhamza.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Rawdogging SQL: Unquestionably the Best Solution Right Now]]></title><description><![CDATA[<p></p><p>In recent years, the software development landscape has witnessed a proliferation of Object-Relational Mapping (ORM) tools and various solutions designed to distance developers from direct SQL interaction. While these tools may appear to be convenient for managing database queries and mutations initially, they often reveal their shortcomings as your project</p>]]></description><link>https://blog.aymenhamza.com/rawdogging-sql-is-better-than-any-other-solution-right-now/</link><guid isPermaLink="false">650f7b598dcd5300010de98f</guid><category><![CDATA[Web dev]]></category><category><![CDATA[Tools]]></category><dc:creator><![CDATA[aymen hamza]]></dc:creator><pubDate>Sun, 24 Sep 2023 00:20:11 GMT</pubDate><media:content url="https://blog.aymenhamza.com/content/images/2023/09/raw-dog.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.aymenhamza.com/content/images/2023/09/raw-dog.jpeg" alt="Rawdogging SQL: Unquestionably the Best Solution Right Now"><p></p><p>In recent years, the software development landscape has witnessed a proliferation of Object-Relational Mapping (ORM) tools and various solutions designed to distance developers from direct SQL interaction. While these tools may appear to be convenient for managing database queries and mutations initially, they often reveal their shortcomings as your project scales. To shed light on this topic, let&apos;s delve into the merits of raw SQL and introduce you to a game-changing migration tool called dbmate.</p><p><strong>The ORM Quandary</strong></p><p>Having spent the last decade in the realm of software development, I&apos;ve observed the ascendancy of ORMs like Prisma and similar abstractions. In my experience, Prisma, in particular, boasts an impressive migration tool that undeniably simplifies the database migration process. However, my contention with ORMs doesn&apos;t stem from their technical merits, such as Prisma&apos;s efficient Rust engine. It&apos;s more about the broader concern of ORMs becoming, over time, an unnecessary layer of abstraction.</p><p>Consider this: SQL, at its core, is straightforward and timeless. With a bit of effort upfront, you can craft your CRUD (Create, Read, Update, Delete) functions early in your project, and then hardly need to touch SQL until migration becomes necessary.</p><p><strong>The Quest for the Perfect Migration Tool</strong></p><p>Now, you might wonder, if SQL is so effective, what&apos;s the ideal tool for database migration? Enter dbmate, a transformative solution that has the potential to redefine how you approach database migrations.</p><p><strong>dbmate: The Game Changer</strong></p><p><strong>Why dbmate?</strong></p><p><a href="https://github.com/amacneil/dbmate">Dbmate</a> transcends language barriers, making it compatible with any programming language of your choice. This versatility allows you to work comfortably with your preferred stack while enjoying the benefits of SQL.</p><p><strong>Database Agnosticism</strong></p><p>Furthermore, dbmate doesn&apos;t tie you down to a specific Relational Database Management System (RDBMS). You can employ it seamlessly with various RDBMS options, ensuring flexibility and adaptability in your projects.</p><p><strong>Seamless Migration</strong></p><p>One of dbmate&apos;s standout features is its ability to simplify database migrations. It excels in creating, managing, and evolving your database schema effortlessly. Whether you&apos;re working with PostgreSQL, MySQL, SQLite, or other databases, dbmate just works.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/amacneil/dbmate"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - amacneil/dbmate: :rocket: A lightweight, framework-agnostic database migration tool.</div><div class="kg-bookmark-description">:rocket: A lightweight, framework-agnostic database migration tool. - GitHub - amacneil/dbmate: :rocket: A lightweight, framework-agnostic database migration tool.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Rawdogging SQL: Unquestionably the Best Solution Right Now"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">amacneil</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/941478463ebed468b0580b1537a066386f8eebdf7326da23af13a9f35450bb50/amacneil/dbmate" alt="Rawdogging SQL: Unquestionably the Best Solution Right Now"></div></a></figure><p><strong>Conclusion</strong></p><p>In an era where complexity often overshadows simplicity, it&apos;s refreshing to rediscover the elegance and effectiveness of raw SQL. By embracing SQL and leveraging dbmate as your migration tool, you can strike a balance between ease of use and robust, scalable database management. Say goodbye to the unnecessary abstractions of ORM tools and welcome a more efficient, agile approach to database development with dbmate. It&apos;s time to make your database operations cleaner, more versatile, and perfectly suited to your project&apos;s evolving needs.</p>]]></content:encoded></item><item><title><![CDATA[Notion AI: The Future of Writing]]></title><description><![CDATA[<p>Do you ever find yourself struggling to put your thoughts into words? Do you wish you could just think out loud and have your ideas magically appear on paper? Well, with Notion AI, that dream might just become a reality.</p><p>Notion AI is an artificial intelligence tool that can help</p>]]></description><link>https://blog.aymenhamza.com/notion-ai-the-future-of-writing/</link><guid isPermaLink="false">63f8ac19f5c0e300010fe82b</guid><category><![CDATA[Tools]]></category><dc:creator><![CDATA[aymen hamza]]></dc:creator><pubDate>Fri, 24 Feb 2023 12:25:54 GMT</pubDate><media:content url="https://blog.aymenhamza.com/content/images/2023/02/maxresdefault.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.aymenhamza.com/content/images/2023/02/maxresdefault.jpg" alt="Notion AI: The Future of Writing"><p>Do you ever find yourself struggling to put your thoughts into words? Do you wish you could just think out loud and have your ideas magically appear on paper? Well, with Notion AI, that dream might just become a reality.</p><p>Notion AI is an artificial intelligence tool that can help you write anything from blog posts to professional reports. It works by analyzing your writing style and generating suggestions based on your preferences. Here are just a few ways you can use Notion AI to revolutionize your writing process:</p><h2 id="1-generate-ideas">1. Generate Ideas</h2><p>One of the hardest parts of writing is coming up with ideas. With Notion AI, you can input a topic or keyword and have the AI generate a list of related ideas. This can be a great way to jumpstart your writing process and ensure that your content is relevant and engaging.</p><p>For instance, if you wanted to write a blog post about &quot;programming,&quot; you could input that keyword into the AI, and it would generate a list of related topics to explore. These topics could include things like &quot;how programming works,&quot; &quot;the benefits of learning how to program,&quot; and &quot;examples of successful programmers.&quot; By using the AI to generate ideas, you can save time and ensure that your content is focused and on-topic.</p><h2 id="2-improve-your-writing">2. Improve Your Writing</h2><p>Notion AI can also help you improve your writing by suggesting alternative phrasing, identifying grammatical errors, and even providing synonyms for overused words. This can be especially helpful if you&apos;re a non-native speaker or if you struggle with grammar and spelling.</p><p>For example, if you&apos;re writing a report for work and you&apos;re not sure if a sentence is grammatically correct, you can input that sentence into the AI and it will provide suggestions for how to improve it. This can save you time and help ensure that your writing is clear and concise.</p><h2 id="3-save-time">3. Save Time</h2><p>Writing can be a time-consuming process, especially if you&apos;re working on a long-form piece like a book or a research paper. Notion AI can help you save time by automating some of the more tedious tasks, like formatting and organizing your work. This means you can focus on the creative aspects of writing, like developing your ideas and refining your style.</p><p>For example, if you&apos;re writing a book and you need to format your chapters, you can use the AI to automatically generate headings and subheadings based on your preferences. This can save you hours of time and ensure that your book looks professional and polished.</p><h2 id="4-collaborate-more-effectively">4. Collaborate More Effectively</h2><p>Notion AI can also be a powerful collaboration tool. It allows multiple users to work on the same document simultaneously, making it easier to share ideas and track changes. Plus, the AI can help ensure that everyone is using a consistent style and tone, which can be especially important for projects with multiple contributors.</p><p>For example, if you&apos;re working on a group project and you need to ensure that everyone is using the same terminology, you can use the AI to suggest specific words and phrases to use. This can help ensure that your project is cohesive and that everyone is on the same page.</p><p>In conclusion, Notion AI is a game-changing tool for anyone who wants to improve their writing process. Whether you&apos;re a professional writer or just someone who wants to communicate more effectively, Notion AI can help you achieve your goals. So why not give it a try and see how it can transform the way you write? With Notion AI, the future of writing is here.</p><p>Head to <a href="https://www.notion.so/product/ai">Notion</a> to get started now.</p>]]></content:encoded></item><item><title><![CDATA[Why Neovim is my Primary Editor for Web Development]]></title><description><![CDATA[<h2 id="introduction">Introduction</h2><p>As a web developer, choosing the right text editor is essential for productivity and efficiency. Over the years, I have tried numerous editors, but Neovim has become my go-to editor. Neovim is a fork of the popular Vim text editor that has been enhanced with modern features and performance</p>]]></description><link>https://blog.aymenhamza.com/why-neovim-is-my-primary-editor-for-web-development/</link><guid isPermaLink="false">63f766d5f5c0e300010fe819</guid><category><![CDATA[Web dev]]></category><category><![CDATA[Editor]]></category><category><![CDATA[Vim]]></category><dc:creator><![CDATA[aymen hamza]]></dc:creator><pubDate>Thu, 23 Feb 2023 13:17:44 GMT</pubDate><media:content url="https://blog.aymenhamza.com/content/images/2023/02/qxCYfjVGO.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2><img src="https://blog.aymenhamza.com/content/images/2023/02/qxCYfjVGO.jpg" alt="Why Neovim is my Primary Editor for Web Development"><p>As a web developer, choosing the right text editor is essential for productivity and efficiency. Over the years, I have tried numerous editors, but Neovim has become my go-to editor. Neovim is a fork of the popular Vim text editor that has been enhanced with modern features and performance improvements. In this blog post, I will explain why I believe Neovim is the best editor for web development.</p><h2 id="neovims-customization">Neovim&apos;s Customization</h2><p>One of the main reasons I prefer Neovim is its high level of customization. Neovim uses a scripting language called VimScript, which provides the ability to automate tasks and create custom plugins. With its plugin manager, I can easily install, update, and manage my plugins. Neovim also offers a plugin manager called Vim-Plug, which makes it easier to manage the plugins. This level of customization allows me to tailor my editor to my personal workflow and preferences.</p><p>For example, I can create custom shortcuts for repetitive tasks such as commenting and uncommenting code, and I can assign specific actions to keys for faster navigation. I can also create custom snippets that speed up my coding by inserting frequently used code blocks with ease. And if I need more advanced functionality, I can use Neovim&apos;s built-in scripting language to create custom plugins that automate tasks and integrate with other tools I use.</p><h2 id="speed-and-performance">Speed and Performance</h2><p>Another reason why I prefer Neovim is its speed and performance. Neovim is designed to be lightweight, fast, and efficient. This means that it can handle large files with ease and offers faster startup times. It also has a built-in terminal emulator, which makes it easy to run terminal commands from within the editor. This saves me time and allows me to stay within the editor instead of switching between the editor and the terminal.</p><p>Neovim also offers features such as asynchronous processing, which allows for faster and more responsive autocompletion and other plugins. And with its support for multithreading, Neovim can take advantage of modern processors with multiple cores, resulting in faster performance.</p><h2 id="versatility">Versatility</h2><p>The third reason why Neovim is my go-to editor for web development is its versatility. Neovim supports a wide range of programming languages, including HTML, CSS, JavaScript, Python, and more. It also supports a variety of file formats, including Markdown, YAML, and JSON. This versatility means that I can use Neovim for all my development needs, not just web development.</p><p>In addition to its support for various languages and file formats, Neovim also offers a range of plugins and tools that can be used for tasks such as debugging, linting, and testing. For example, I can use plugins such as Nvim-R for working with R code, and the Vim-Test plugin for running tests from within the editor. This flexibility means that I can use Neovim for all my development tasks, regardless of the language or framework I am using.</p><h2 id="conclusion">Conclusion</h2><p>In conclusion, Neovim is my preferred editor for web development because of its customizability, speed and performance, and versatility. Its extensive plugin ecosystem and lightweight design make it a great choice for developers who want to customize their workflow and increase productivity. If you&apos;re a web developer looking for a new editor, I highly recommend giving Neovim a try. With its advanced features and high level of customization, it has become an essential tool in my development workflow.</p>]]></content:encoded></item><item><title><![CDATA[How to Self-Host n8n with Docker Compose]]></title><description><![CDATA[<h2 id="introduction">Introduction</h2><p>n8n is an open-source workflow automation tool that allows you to automate tasks and integrate various applications, services, and systems. By using n8n, you can create workflows that connect different applications and automate complex tasks. In this article, we will discuss how to self-host n8n using Docker Compose.</p><h2 id="prerequisites">Prerequisites</h2>]]></description><link>https://blog.aymenhamza.com/how-to-self-host-n8n-with-docker-compose/</link><guid isPermaLink="false">63f764bbf5c0e300010fe809</guid><category><![CDATA[Self Hosting]]></category><dc:creator><![CDATA[aymen hamza]]></dc:creator><pubDate>Thu, 23 Feb 2023 13:09:29 GMT</pubDate><media:content url="https://blog.aymenhamza.com/content/images/2023/02/dea504.png" medium="image"/><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2><img src="https://blog.aymenhamza.com/content/images/2023/02/dea504.png" alt="How to Self-Host n8n with Docker Compose"><p>n8n is an open-source workflow automation tool that allows you to automate tasks and integrate various applications, services, and systems. By using n8n, you can create workflows that connect different applications and automate complex tasks. In this article, we will discuss how to self-host n8n using Docker Compose.</p><h2 id="prerequisites">Prerequisites</h2><p>Before we begin, you should have the following prerequisites:</p><ol><li>Docker and Docker Compose installed on your system.</li><li>Basic knowledge of Docker Compose.</li></ol><h2 id="step-1-create-the-docker-compose-file">Step 1: Create the Docker Compose File</h2><p>To start, create a new directory and create a new <code>docker-compose.yaml</code> file with the following content:</p><pre><code>version: &apos;3.8&apos;

services:
  n8n:
    image: n8nio/n8n
    ports:
      - &quot;5678:5678&quot;
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=user
      - N8N_BASIC_AUTH_PASSWORD=password
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=db
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=n8n
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:12
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=n8n
      - POSTGRES_DB=n8n
    restart: unless-stopped

volumes:
  db-data:

</code></pre><p>This file will create two services: <code>n8n</code> and <code>db</code>. The <code>n8n</code> service runs the n8n image and exposes port <code>5678</code>. The <code>db</code> service runs the PostgreSQL 12 image and creates a new database for n8n.</p><p>You can customize the environment variables for n8n and PostgreSQL to fit your needs.</p><h2 id="step-2-run-docker-compose">Step 2: Run Docker Compose</h2><p>To start n8n, run the following command inside the directory where your <code>docker-compose.yaml</code> file is located:</p><pre><code>docker-compose up -d

</code></pre><p>This command will start n8n and PostgreSQL in the background.</p><h2 id="step-3-access-n8n">Step 3: Access n8n</h2><p>Once n8n is running, you can access it by visiting <code>http://localhost:5678</code> in your web browser. If you enabled basic authentication, you will be prompted to enter a username and password.</p><h2 id="step-4-stop-docker-compose">Step 4: Stop Docker Compose</h2><p>To stop n8n and PostgreSQL, run the following command inside the directory where your <code>docker-compose.yaml</code> file is located:</p><pre><code>docker-compose down

</code></pre><p>This command will stop and remove the n8n and PostgreSQL containers.</p><h2 id="conclusion">Conclusion</h2><p>n8n is a powerful workflow automation tool that can help you automate complex tasks and integrate different applications and services. By self-hosting n8n with Docker Compose, you have full control over your data and can ensure that your workflows are secure and reliable. If you&#x2019;re interested in using n8n, follow the steps in this article to get started with self-hosting using Docker Compose.</p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>Welcome to my developer blog! I&apos;m a software developer with a passion for creating and building things. On this blog, I&apos;ll be sharing my thoughts, experiences, and insights on all things development. Whether you&apos;re just starting out in the field or you&apos;re</p>]]></description><link>https://blog.aymenhamza.com/coming-soon/</link><guid isPermaLink="false">63ab0573f5c0e300010fe658</guid><category><![CDATA[News]]></category><category><![CDATA[Announcement]]></category><dc:creator><![CDATA[aymen hamza]]></dc:creator><pubDate>Tue, 27 Dec 2022 14:47:15 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1661961110218-35af7210f803?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNjcyMTUzMzI1&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1661961110218-35af7210f803?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNjcyMTUzMzI1&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Coming soon"><p>Welcome to my developer blog! I&apos;m a software developer with a passion for creating and building things. On this blog, I&apos;ll be sharing my thoughts, experiences, and insights on all things development. Whether you&apos;re just starting out in the field or you&apos;re a seasoned pro, I hope you&apos;ll find something useful and interesting here. I&apos;ll be covering a wide range of topics, including programming languages, software design principles, and best practices for project management. I&apos;ll also be sharing updates on the latest tools and technologies, and offering tips and tricks for improving your skills and staying up to date with the industry. Thanks for stopping by, and I hope you enjoy reading my blog as much as I enjoy writing it!</p>]]></content:encoded></item></channel></rss>