<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>JussMor&#39;s Blog</title>
  <subtitle>I am writing about my experiences as a naval navel-gazer.</subtitle>
  <link href="https://www.jussmor.com/feed/feed.xml" rel="self" />
  <link href="https://www.jussmor.com/" />
  <updated>2025-10-14T00:00:00Z</updated>
  <id>https://www.jussmor.com/</id>
  <author>
    <name>Junior Moreira</name>
    <email>contact@jussmor.com</email>
  </author>
  <entry>
    <title>What is Data Engineering?</title>
    <link href="https://www.jussmor.com/insights/blog/Data%20Engineering/" />
    <updated>2025-10-14T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Data%20Engineering/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;/insights/blog/Data Engineering/EmtpZOnwXq-1920.avif 1920w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;/insights/blog/Data Engineering/EmtpZOnwXq-1920.webp 1920w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.jussmor.com/insights/blog/Data%20Engineering/EmtpZOnwXq-1920.png&quot; alt=&quot;&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We live in an era overflowing with data.&lt;br&gt;
From social media to smart devices, information is generated at an unprecedented pace.&lt;br&gt;
But raw data alone is like a messy room: it&#39;s there, but not very useful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data engineering&lt;/strong&gt; is the discipline that collects, processes, and organizes this data to make it &lt;strong&gt;useful and accessible&lt;/strong&gt;.&lt;br&gt;
Data engineers build the pipelines that move information from multiple sources to storage systems, making it ready for analysis, machine learning, and decision-making.&lt;/p&gt;
&lt;h2 id=&quot;history-and-origins&quot;&gt;History and Origins&lt;/h2&gt;
&lt;p&gt;Data engineering has deep roots:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1970s:&lt;/strong&gt; First &lt;strong&gt;data warehouses&lt;/strong&gt; with IBM and Oracle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1990–2000:&lt;/strong&gt; Internet boom and dot-com era; ETL pipelines become essential.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2010s:&lt;/strong&gt; Big Data explosion with technologies like &lt;strong&gt;Hadoop&lt;/strong&gt; and &lt;strong&gt;Spark&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Today:&lt;/strong&gt; Modern cloud stacks, real-time streaming, data lakehouses, and advanced analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While technologies change, the &lt;strong&gt;core principles&lt;/strong&gt;—organization, quality, and accessibility—remain constant.&lt;/p&gt;
&lt;h2 id=&quot;data-engineering-vs-data-science&quot;&gt;Data Engineering vs. Data Science&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Data Engineering&lt;/th&gt;
&lt;th&gt;Data Science&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build systems to collect and process data&lt;/td&gt;
&lt;td&gt;Analyze and model data for insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pipelines, warehouses, lakehouses&lt;/td&gt;
&lt;td&gt;Reports, ML models, predictions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Databases, ETL, cloud, programming&lt;/td&gt;
&lt;td&gt;Statistics, ML, visualization, storytelling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prepare data foundation&lt;/td&gt;
&lt;td&gt;Generate value from prepared data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;data-engineering-lifecycle&quot;&gt;Data Engineering Lifecycle&lt;/h2&gt;
&lt;h3 id=&quot;source-systems&quot;&gt;Source Systems&lt;/h3&gt;
&lt;p&gt;Data comes from everywhere: websites, apps, IoT devices, and third-party APIs.&lt;br&gt;
It is raw and unorganized: structured vs. unstructured, batch vs. streaming.&lt;br&gt;
These characteristics affect all downstream processes.&lt;/p&gt;
&lt;h3 id=&quot;storage&quot;&gt;Storage&lt;/h3&gt;
&lt;p&gt;Once captured, data needs a reliable home.&lt;br&gt;
Storage must be secure, durable, and fast to access. Options include object stores, SQL databases, data warehouses, data lakes, or combinations.&lt;br&gt;
The choice depends on &lt;strong&gt;use cases&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;ingestion&quot;&gt;Ingestion&lt;/h3&gt;
&lt;p&gt;This is the process of moving data from its sources to storage.&lt;br&gt;
It can involve API calls, file transfers, streaming pipelines (Kafka, message queues), or secure connectors.&lt;br&gt;
The goal: &lt;strong&gt;reliability, error handling, and data integrity&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;transformation&quot;&gt;Transformation&lt;/h3&gt;
&lt;p&gt;Raw data is turned into valuable information.&lt;br&gt;
We clean, normalize, apply business logic, and standardize formats.&lt;br&gt;
The aim: ensure data is &lt;strong&gt;useful and trustworthy&lt;/strong&gt; for analysis.&lt;/p&gt;
&lt;h3 id=&quot;data-serving&quot;&gt;Data Serving&lt;/h3&gt;
&lt;p&gt;Finally, data is delivered for use: dashboards, analytics, ML models, or reverse ETL in applications.&lt;br&gt;
The objective: make data &lt;strong&gt;accessible, performant, and reliable&lt;/strong&gt; for all users.&lt;/p&gt;
&lt;h2 id=&quot;key-principles-throughout&quot;&gt;Key Principles Throughout&lt;/h2&gt;
&lt;p&gt;Every stage is guided by core principles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;DataOps&lt;/li&gt;
&lt;li&gt;Metadata management&lt;/li&gt;
&lt;li&gt;Data architecture&lt;/li&gt;
&lt;li&gt;Software engineering best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These principles determine whether a pipeline is robust, scalable, and trustworthy.&lt;/p&gt;
&lt;h2 id=&quot;why-data-engineering-matters&quot;&gt;Why Data Engineering Matters&lt;/h2&gt;
&lt;p&gt;Without data engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Information is disorganized and unusable&lt;/li&gt;
&lt;li&gt;AI lacks reliable training data&lt;/li&gt;
&lt;li&gt;Decision-making is less informed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With data engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data becomes a &lt;strong&gt;strategic asset&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Organizations make data-driven decisions&lt;/li&gt;
&lt;li&gt;Advanced analytics and AI become feasible&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Data engineering is the backbone of the modern digital economy.&lt;br&gt;
Its mission: &lt;strong&gt;deliver trustworthy, scalable data ready for use&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Next time you see an impressive data visualization or a revolutionary AI model, remember: it all started with the foundation built by data engineers.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>AI Agents Explained: From Monolithic Models to Your Digital Co-Pilots</title>
    <link href="https://www.jussmor.com/insights/blog/AI%20Agents%20Explained/" />
    <updated>2025-10-07T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/AI%20Agents%20Explained/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;/insights/blog/AI Agents Explained/vTsI5i68uW-624.avif 624w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;/insights/blog/AI Agents Explained/vTsI5i68uW-624.webp 624w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.jussmor.com/insights/blog/AI%20Agents%20Explained/vTsI5i68uW-624.png&quot; alt=&quot;&quot; width=&quot;624&quot; height=&quot;349&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;2024 is being called the &lt;strong&gt;Year of AI Agents&lt;/strong&gt;. But what does that really mean? And how will these agents change the way we interact with technology? AI is evolving rapidly, and the next generation of AI is designed to act as &lt;strong&gt;personal digital co-pilots&lt;/strong&gt;, helping us navigate complex tasks that go beyond traditional models.&lt;/p&gt;
&lt;h2 id=&quot;from-monolithic-models-to-compound-systems&quot;&gt;From Monolithic Models to Compound Systems&lt;/h2&gt;
&lt;p&gt;Traditional language models like ChatGPT are &lt;strong&gt;monolithic&lt;/strong&gt;: trained on massive datasets but limited to the knowledge they have at training time. They cannot access your real-time personal data, which often results in generic or incorrect answers.&lt;/p&gt;
&lt;p&gt;Compound AI systems combine a model with databases, APIs, and verification modules. For example, a compound system can query a company’s vacation policy database to provide a precise answer:&lt;br&gt;
&lt;em&gt;&amp;quot;Maya, you have 10 vacation days left.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Compound systems = Model + Data + Verification.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;rag-systems-retrieval-augmented-generation&quot;&gt;RAG Systems: Retrieval Augmented Generation&lt;/h2&gt;
&lt;p&gt;Retrieval Augmented Generation (RAG) is a popular compound system. Imagine a medical assistant AI that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Combines a language model with the latest research papers and patient records.&lt;/li&gt;
&lt;li&gt;Fetches up-to-date information while respecting privacy regulations like HIPAA.&lt;/li&gt;
&lt;li&gt;Summarizes findings accurately and efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RAG systems are modular, combining &lt;strong&gt;tuned models, image generators, databases, and verification modules&lt;/strong&gt; to solve complex problems more effectively than a single model.&lt;/p&gt;
&lt;h2 id=&quot;enter-ai-agents-the-next-evolution&quot;&gt;Enter AI Agents: The Next Evolution&lt;/h2&gt;
&lt;p&gt;AI agents are advanced systems where the &lt;strong&gt;control logic is handled by the model itself&lt;/strong&gt;. They have three core capabilities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reasoning:&lt;/strong&gt; Break down complex problems into manageable steps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Use:&lt;/strong&gt; Know when and how to call external tools—APIs, databases, or calculators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory:&lt;/strong&gt; Remember past interactions for a more personalized experience.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These abilities allow AI agents to act autonomously across multiple steps and tools, effectively managing tasks from start to finish.&lt;/p&gt;
&lt;h2 id=&quot;deep-dive-travel-planning-example&quot;&gt;Deep Dive: Travel Planning Example&lt;/h2&gt;
&lt;p&gt;Imagine asking an AI agent:&lt;br&gt;
&lt;em&gt;&amp;quot;Plan a 7-day ski trip in Colorado for 2 adults and 1 child with a $5K budget.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The agent will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check flight APIs&lt;/li&gt;
&lt;li&gt;Verify resort policies (age restrictions, availability)&lt;/li&gt;
&lt;li&gt;Compare equipment rental prices&lt;/li&gt;
&lt;li&gt;Calculate baggage limits&lt;/li&gt;
&lt;li&gt;Assemble a final itinerary with weather-adjusted activities and a detailed budget&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; A fully optimized plan executed autonomously, with adjustments along the way.&lt;/p&gt;
&lt;h2 id=&quot;real-world-applications&quot;&gt;Real-World Applications&lt;/h2&gt;
&lt;p&gt;AI agents are versatile and can be applied across industries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finance:&lt;/strong&gt; Personal finance agents that securely connect to bank accounts and suggest savings strategies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Healthcare:&lt;/strong&gt; Agents that integrate wearables, cross-reference symptoms with medical databases, and suggest telemedicine options.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Travel &amp;amp; Planning:&lt;/strong&gt; Agents that manage logistics, pricing, and personalized recommendations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Key Idea:&lt;/strong&gt; AI agents handle complex, open-ended tasks far beyond static systems.&lt;/p&gt;
&lt;h2 id=&quot;the-autonomy-spectrum&quot;&gt;The Autonomy Spectrum&lt;/h2&gt;
&lt;p&gt;AI autonomy ranges from &lt;strong&gt;programmatic systems&lt;/strong&gt; to &lt;strong&gt;agentic systems&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Programmatic:&lt;/strong&gt; Efficient for narrow, well-defined tasks (e.g., HR chatbots answering fixed policies).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentic:&lt;/strong&gt; Ideal for complex, multifaceted problems (e.g., business assistants negotiating vendors).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choose the approach that matches the complexity and flexibility required by the task.&lt;/p&gt;
&lt;h2 id=&quot;looking-ahead-the-future-of-ai-agents&quot;&gt;Looking Ahead: The Future of AI Agents&lt;/h2&gt;
&lt;p&gt;AI agents are poised to become &lt;strong&gt;personalized co-pilots&lt;/strong&gt;, tackling complex problems and learning from each interaction. The challenge will be balancing &lt;strong&gt;human oversight&lt;/strong&gt; with their autonomous capabilities.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;AI agents represent the next evolution in artificial intelligence moving from monolithic models to modular, autonomous systems capable of reasoning, tool use, and memory. They extend the potential of AI far beyond static answers, enabling smarter, faster, and more adaptable solutions.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Data Lakehouse 101: A Simple Guide for 12-Year-Olds!</title>
    <link href="https://www.jussmor.com/insights/blog/Data%20Lake%20House%20101/" />
    <updated>2025-09-16T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Data%20Lake%20House%20101/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;/insights/blog/Data Lake House 101/0z2W0jsTy_-1920.avif 1920w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;/insights/blog/Data Lake House 101/0z2W0jsTy_-1920.webp 1920w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.jussmor.com/insights/blog/Data%20Lake%20House%20101/0z2W0jsTy_-1920.png&quot; alt=&quot;&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In today’s information-driven world, organizations are drowning in data. To make sense of it and gain valuable insights, they need efficient ways to &lt;strong&gt;store, manage, and access information&lt;/strong&gt;. Think of it like a massive library and archive: to make the most of all that knowledge, we need a system that’s both &lt;strong&gt;comprehensive and organized&lt;/strong&gt;. This is where the concept of a &lt;strong&gt;data lakehouse&lt;/strong&gt; comes in.&lt;/p&gt;
&lt;h2 id=&quot;from-data-lakes-to-data-warehouses&quot;&gt;From Data Lakes to Data Warehouses&lt;/h2&gt;
&lt;p&gt;Traditionally, businesses have relied on &lt;strong&gt;two main types of data repositories&lt;/strong&gt;: data lakes and data warehouses. Each served its purpose, but neither was perfect on its own.&lt;/p&gt;
&lt;h2 id=&quot;comparative-overview-lake-vs-warehouse-vs-lakehouse&quot;&gt;Comparative Overview: Lake vs Warehouse vs Lakehouse&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Data Lake&lt;/th&gt;
&lt;th&gt;Data Warehouse&lt;/th&gt;
&lt;th&gt;Data Lakehouse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw, unstructured, diverse&lt;/td&gt;
&lt;td&gt;Structured, curated&lt;/td&gt;
&lt;td&gt;Both structured &amp;amp; unstructured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Organization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Strict, indexed&lt;/td&gt;
&lt;td&gt;Flexible + structured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low storage cost&lt;/td&gt;
&lt;td&gt;Higher due to structured storage&lt;/td&gt;
&lt;td&gt;Moderate; combines cost-efficiency and structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Query Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Slow for complex queries&lt;/td&gt;
&lt;td&gt;Fast for specific queries&lt;/td&gt;
&lt;td&gt;Fast for analytics; balances flexibility &amp;amp; performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Archiving all raw data&lt;/td&gt;
&lt;td&gt;Business intelligence &amp;amp; reporting&lt;/td&gt;
&lt;td&gt;Unified analytics, ML, advanced insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analogy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Archive&lt;/td&gt;
&lt;td&gt;Cataloged library&lt;/td&gt;
&lt;td&gt;Integrated knowledge hub&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;data-lakes-the-unprocessed-archive&quot;&gt;Data Lakes: The Unprocessed Archive&lt;/h3&gt;
&lt;p&gt;Imagine a data lake as a &lt;strong&gt;vast, unprocessed archive&lt;/strong&gt;. All types of raw information are deposited here – emails, videos, images, social media posts, sensor readings, and more.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Stores massive amounts of data cheaply and flexibly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; Raw, unstructured, chaotic, and comprehensive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analogy:&lt;/strong&gt; Like having an enormous storage space where everything is kept without strict organization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Data lakes excel at keeping &lt;strong&gt;all data types in their original form&lt;/strong&gt;, but retrieving and analyzing data efficiently can be difficult without additional processing.&lt;/p&gt;
&lt;h3 id=&quot;data-warehouses-the-cataloged-library&quot;&gt;Data Warehouses: The Cataloged Library&lt;/h3&gt;
&lt;p&gt;Now, consider a data warehouse as a &lt;strong&gt;meticulously organized library&lt;/strong&gt;. Here, information is curated, indexed, and structured according to rules.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Provides fast, reliable answers to specific queries, perfect for reporting and business intelligence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; Structured, curated, searchable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analogy:&lt;/strong&gt; Like a library where books are labeled and organized so you can quickly find exactly what you need.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While warehouses are great for &lt;strong&gt;structured data and quick retrieval&lt;/strong&gt;, they are less flexible when it comes to handling diverse or raw data types.&lt;/p&gt;
&lt;h3 id=&quot;data-lakehouses-the-modern-knowledge-hub&quot;&gt;Data Lakehouses: The Modern Knowledge Hub&lt;/h3&gt;
&lt;p&gt;What if we could &lt;strong&gt;combine the best of both worlds&lt;/strong&gt;? That’s exactly what a &lt;strong&gt;data lakehouse&lt;/strong&gt; does.&lt;/p&gt;
&lt;p&gt;Think of it as a &lt;strong&gt;modern knowledge hub&lt;/strong&gt; that integrates the vastness of a data lake with the organization of a data warehouse.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexibility of a lake:&lt;/strong&gt; Store diverse data types affordably, without strict upfront processing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structure of a warehouse:&lt;/strong&gt; Apply governance, indexing, and optimization techniques for fast, reliable access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analogy:&lt;/strong&gt; A hub where raw archives meet structured libraries – everything stored, searchable, and actionable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;benefits-of-data-lakehouses&quot;&gt;Benefits of Data Lakehouses&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cost-efficient storage&lt;/strong&gt; – store raw data cheaply like a lake.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast insights&lt;/strong&gt; – analyze structured or unstructured data efficiently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced analytics &amp;amp; ML&lt;/strong&gt; – perform machine learning and predictive modeling within the same platform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved governance&lt;/strong&gt; – maintain compliance, auditing, and security controls.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Data lakehouses empower organizations across industries: from &lt;strong&gt;research and education&lt;/strong&gt; to &lt;strong&gt;government and business&lt;/strong&gt;, enabling them to gain insights from historical and real-time data simultaneously.&lt;/p&gt;
&lt;h2 id=&quot;why-data-lakehouses-matter&quot;&gt;Why Data Lakehouses Matter&lt;/h2&gt;
&lt;p&gt;Data lakehouses are more than a technical trend – they represent a &lt;strong&gt;fundamental shift in how organizations handle data&lt;/strong&gt;. By bridging the gap between lakes and warehouses, they allow companies to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore diverse data sources together&lt;/li&gt;
&lt;li&gt;Conduct deep, data-driven analysis&lt;/li&gt;
&lt;li&gt;Deliver personalized insights and services&lt;/li&gt;
&lt;li&gt;Operate more efficiently and make faster decisions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, a well-implemented &lt;strong&gt;data lakehouse&lt;/strong&gt; becomes a &lt;strong&gt;central knowledge hub&lt;/strong&gt;, crucial for thriving in a data-rich world.&lt;/p&gt;
&lt;p&gt;💡 &lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A data lakehouse is like a library that also serves as an archive – storing everything, yet keeping it organized and usable. For modern businesses aiming to leverage data for growth, innovation, and competitive advantage, the lakehouse is quickly becoming &lt;strong&gt;the go-to architecture&lt;/strong&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Which Data Pipeline Wins? ETL vs. ELT</title>
    <link href="https://www.jussmor.com/insights/blog/ETL%20vs.%20ELT/" />
    <updated>2025-09-09T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/ETL%20vs.%20ELT/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;/insights/blog/ETL vs. ELT/WcrZSDAGGN-1920.avif 1920w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;/insights/blog/ETL vs. ELT/WcrZSDAGGN-1920.webp 1920w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://www.jussmor.com/insights/blog/ETL%20vs.%20ELT/WcrZSDAGGN-1920.png&quot; alt=&quot;&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In the modern data world, two approaches dominate the construction of a data warehouse: &lt;strong&gt;ETL&lt;/strong&gt; and &lt;strong&gt;ELT&lt;/strong&gt;. Both extract, transform, and load data; the difference lies in the order and where the heavy lifting happens. Here’s a direct breakdown with a high-volume practical example.&lt;/p&gt;
&lt;h2 id=&quot;etl-in-a-nutshell&quot;&gt;ETL in a Nutshell&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flow:&lt;/strong&gt; Extract → Transform → Load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How it works:&lt;/strong&gt; You pull data from the source, transform it according to business rules, and then load it into destination tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Where transformations happen:&lt;/strong&gt; Outside the destination (ETL servers or dedicated engines), often using staging areas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advantages:&lt;/strong&gt; Fine control over data quality before loading, great for smaller loads and frequent updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Common tools:&lt;/strong&gt; SSIS, Informatica, Talend&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;elt-in-a-nutshell&quot;&gt;ELT in a Nutshell&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flow:&lt;/strong&gt; Extract → Load → Transform&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How it works:&lt;/strong&gt; You load raw data directly into permanent storage (data lake/warehouse) and then transform it later, leveraging the analytical engine’s power.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Where transformations happen:&lt;/strong&gt; Inside the warehouse/lakehouse using SQL or orchestrators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advantages:&lt;/strong&gt; Preserves full history, enables fast iteration, scales extremely well in the cloud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Common tools:&lt;/strong&gt; Fivetran or Stitch for ingestion, dbt for transformations, Kafka/Firehose for near real-time events&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;key-differences-and-trends&quot;&gt;Key Differences and Trends&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;ETL&lt;/th&gt;
&lt;th&gt;ELT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;When transformation happens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Before loading&lt;/td&gt;
&lt;td&gt;After loading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited by ETL servers&lt;/td&gt;
&lt;td&gt;Cloud warehouses scale elastically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Higher infra/maintenance costs&lt;/td&gt;
&lt;td&gt;Cheaper storage + on-demand compute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data freshness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good for small, frequent updates&lt;/td&gt;
&lt;td&gt;Supports CDC, incremental, and streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best fit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Legacy on-premises, strict validation before load&lt;/td&gt;
&lt;td&gt;Cloud-native, high-volume, experimental workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Market reality:&lt;/strong&gt; Many legacy systems still rely on ETL, but most new projects lean toward ELT.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mini-case-elt-with-10-million-records&quot;&gt;Mini Case: ELT with 10 Million Records&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; An app generates 10M events per day. Data is ingested via Fivetran into Snowflake (or BigQuery) in raw, date-partitioned tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transformation:&lt;/strong&gt; Incremental dbt models apply business rules, deduplication, and enrichment on the daily partitions, leveraging clustering/partitioning for performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; Analytics across months of history without full reprocessing every day. Raw data remains for auditing and &lt;em&gt;time travel&lt;/em&gt;. Costs stay controlled by paying only for compute used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; For hot upserts (e.g., fixing a few thousand rows), incremental MERGE or streams/CDC are applied. If latency must be in seconds, add an event layer (Kafka/Kinesis) and materialized views.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;which-one-to-choose&quot;&gt;Which One to Choose?&lt;/h2&gt;
&lt;p&gt;Choose &lt;strong&gt;ELT&lt;/strong&gt; if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You’re building cloud-native systems from scratch.&lt;/li&gt;
&lt;li&gt;You need complete history and rapid experimentation.&lt;/li&gt;
&lt;li&gt;You handle massive volumes (millions to billions of rows) with variable peaks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stick with or choose &lt;strong&gt;ETL&lt;/strong&gt; if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You’re running on-prem with strict dependencies.&lt;/li&gt;
&lt;li&gt;You need complex validations before loading or very predictable small batch latency.&lt;/li&gt;
&lt;li&gt;Your team/tools are already optimized for ETL stacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;suggested-tools-and-stack&quot;&gt;Suggested Tools and Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ingestion:&lt;/strong&gt; Fivetran, Stitch, Airbyte; streaming with Kafka, Kinesis, or Firehose&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage / Compute:&lt;/strong&gt; BigQuery, Snowflake, Databricks, Redshift, Lakehouse on S3/ADLS/GCS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transformation:&lt;/strong&gt; dbt (SQL models, tests, lineage), notebooks for advanced use cases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orchestration:&lt;/strong&gt; Airflow, Dagster, Prefect&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability / Data Quality:&lt;/strong&gt; Great Expectations, Monte Carlo, Soda, OpenLineage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BI &amp;amp; Consumption:&lt;/strong&gt; Power BI, Tableau, Looker, Metabase&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;If you’re starting today, &lt;strong&gt;ELT usually wins&lt;/strong&gt; thanks to scalability, flexibility, and lower total cost.&lt;br&gt;
Still, &lt;strong&gt;ETL remains valid&lt;/strong&gt; in legacy environments or when requirements demand tight pre-load control.&lt;/p&gt;
&lt;p&gt;👉 The best choice depends on your sources, volumes, SLAs, and team capabilities.&lt;br&gt;
&lt;strong&gt;Which one do you prefer, and why?&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Learn Bash in the AI Era: Essential Commands &amp; Cheat Sheet</title>
    <link href="https://www.jussmor.com/insights/blog/Learn%20Bash%20in%20the%20AI%20Era/" />
    <updated>2025-08-27T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Learn%20Bash%20in%20the%20AI%20Era/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20Bash%20in%20the%20AI%20Era/96FHX556Ty-1344.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1344&quot; height=&quot;768&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-bash-still-matters-in-2025&quot;&gt;Why Bash Still Matters in 2025&lt;/h2&gt;
&lt;p&gt;Imagine this: you’re setting up an AI pipeline, deploying containers, or just trying to automate repetitive file operations. Without Bash, you’d be stuck clicking around or writing verbose scripts.&lt;/p&gt;
&lt;p&gt;Even in the &lt;strong&gt;age of AI assistants&lt;/strong&gt;, Bash remains the &lt;strong&gt;universal language of automation&lt;/strong&gt;. AI tools can generate commands for you, but &lt;strong&gt;knowing Bash means you can understand, debug, and optimize&lt;/strong&gt; them in seconds.&lt;/p&gt;
&lt;h2 id=&quot;the-origin-and-relevance-of-bash&quot;&gt;The Origin and Relevance of Bash&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bash (&lt;strong&gt;Bourne Again SHell&lt;/strong&gt;) was created in &lt;strong&gt;1989&lt;/strong&gt; as a free replacement for the Unix Bourne Shell.&lt;/li&gt;
&lt;li&gt;It quickly became the &lt;strong&gt;default shell&lt;/strong&gt; for most Linux distributions and macOS.&lt;/li&gt;
&lt;li&gt;Today, Bash powers &lt;strong&gt;servers, DevOps pipelines, data engineering, AI workflows, and everyday productivity hacks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;core-concepts-of-bash&quot;&gt;Core Concepts of Bash&lt;/h2&gt;
&lt;p&gt;Like SQL has queries and clauses, Bash has a few fundamentals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commands:&lt;/strong&gt; Built-in or external programs you run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arguments &amp;amp; options:&lt;/strong&gt; Modify what commands do.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables:&lt;/strong&gt; Key/value pairs that define system state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipes (&lt;code&gt;|&lt;/code&gt;):&lt;/strong&gt; Pass the output of one command into another.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redirection (&lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;):&lt;/strong&gt; Control input/output of commands.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scripts:&lt;/strong&gt; Collections of commands saved in a &lt;code&gt;.sh&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;basic-bash-commands-you-ll-use-daily&quot;&gt;Basic Bash Commands You’ll Use Daily&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Check current directory:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;pwd&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;List files:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-la&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Change directory:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; /path/to/folder&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Create a directory:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; projects&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Create an empty file:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; notes.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Copy a file:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; notes.txt backup.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Move or rename a file:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; notes.txt archive.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Delete a file or folder:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; notes.txt
&lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; projects/&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;advanced-bash-concepts-worth-mastering&quot;&gt;Advanced Bash Concepts Worth Mastering&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pipes and Redirection:&lt;/strong&gt; Combine commands (&lt;code&gt;cat file.txt | grep &amp;quot;error&amp;quot;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wildcards &amp;amp; Globbing:&lt;/strong&gt; Match files with patterns (&lt;code&gt;*.txt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variables:&lt;/strong&gt; Store values (&lt;code&gt;NAME=&amp;quot;Junior&amp;quot;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loops:&lt;/strong&gt; Automate repetition (&lt;code&gt;for file in *.txt; do echo $file; done&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditionals:&lt;/strong&gt; Run logic (&lt;code&gt;if [ -f file.txt ]; then echo &amp;quot;Exists&amp;quot;; fi&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions:&lt;/strong&gt; Reusable code blocks inside scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scripting:&lt;/strong&gt; Automate tasks with &lt;code&gt;.sh&lt;/code&gt; scripts and &lt;code&gt;#!/bin/bash&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bash-ai-real-world-scenarios&quot;&gt;Bash + AI: Real-World Scenarios&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI-generated commands:&lt;/strong&gt; Tools like ChatGPT can suggest Bash one-liners, but you must verify and adapt them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automating AI workflows:&lt;/strong&gt; Run preprocessing, training, and deployment steps with Bash scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System automation:&lt;/strong&gt; Schedule jobs with &lt;code&gt;cron&lt;/code&gt; to retrain models or clean logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data wrangling:&lt;/strong&gt; Use Bash + &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, or &lt;code&gt;grep&lt;/code&gt; for quick data transformations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;recommended-resources&quot;&gt;Recommended Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;📄 Download my &lt;strong&gt;Bash Cheat Sheet&lt;/strong&gt;  (&lt;a href=&quot;https://photos.jussmor.com/insights/blog/Cheat%20sheet/BASH%201.pdf&quot;&gt;Download the Cheat Sheet HERE!&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20Bash%20in%20the%20AI%20Era/kGAJApsoPq-1440.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1030&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Bash is not just an old shell—it’s the &lt;strong&gt;backbone of automation&lt;/strong&gt;. Mastering it empowers you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work faster on &lt;strong&gt;Linux, macOS, and servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Automate &lt;strong&gt;repetitive tasks&lt;/strong&gt; with one-liners or scripts.&lt;/li&gt;
&lt;li&gt;Integrate with &lt;strong&gt;Docker, Git, AI pipelines, and cloud services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Understand and refine &lt;strong&gt;AI-suggested commands&lt;/strong&gt; instead of blindly trusting them.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Learn Docker in the AI Era: Essential Commands &amp; Cheat Sheet</title>
    <link href="https://www.jussmor.com/insights/blog/Learn%20Docker%20in%20the%20AI%20Era/" />
    <updated>2025-08-26T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Learn%20Docker%20in%20the%20AI%20Era/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20Docker%20in%20the%20AI%20Era/Yb5YIB2tc--1920.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-docker-still-matters-in-2025&quot;&gt;Why Docker Still Matters in 2025&lt;/h2&gt;
&lt;p&gt;Picture this: you’re in a team meeting, the application crashes, and everyone scrambles to fix it. In minutes, questions fly: &lt;em&gt;“Does it work on your machine?”&lt;/em&gt; or &lt;em&gt;“Maybe it’s a dependency issue?”&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;With Docker, those excuses vanish. In seconds, you can spin up the &lt;strong&gt;same environment&lt;/strong&gt; anywhere—locally, in the cloud, or on AI pipelines.&lt;/p&gt;
&lt;p&gt;Even in the &lt;strong&gt;era of AI-generated code&lt;/strong&gt;, Docker remains a &lt;strong&gt;critical skill&lt;/strong&gt;. AI can draft a &lt;code&gt;Dockerfile&lt;/code&gt; for you, but only you can understand, optimize, and debug it when things break.&lt;/p&gt;
&lt;h2 id=&quot;the-origin-and-relevance-of-docker&quot;&gt;The Origin and Relevance of Docker&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Released in &lt;strong&gt;2013&lt;/strong&gt;, Docker introduced a breakthrough: &lt;strong&gt;consistent, portable apps&lt;/strong&gt; across environments.&lt;/li&gt;
&lt;li&gt;It reshaped DevOps and enabled the rise of &lt;strong&gt;microservices&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Today, it’s at the heart of &lt;strong&gt;cloud-native development&lt;/strong&gt; and &lt;strong&gt;AI infrastructure&lt;/strong&gt;—from ML training pipelines to scalable inference services.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;core-components-of-docker&quot;&gt;Core Components of Docker&lt;/h2&gt;
&lt;p&gt;Think of Docker like building blocks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Images:&lt;/strong&gt; Read-only templates defining what goes into a container (OS, dependencies, app code).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Containers:&lt;/strong&gt; Running instances of images.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dockerfile:&lt;/strong&gt; Blueprint for building images.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volumes:&lt;/strong&gt; Persistent data storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networks:&lt;/strong&gt; Enable container-to-container communication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registry:&lt;/strong&gt; Repositories to store and share images (e.g., Docker Hub).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;basic-docker-commands-you-ll-use-daily&quot;&gt;Basic Docker Commands You’ll Use Daily&lt;/h2&gt;
&lt;h3 id=&quot;check-installation&quot;&gt;Check installation&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Run your first container:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;List containers:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Build an image from a Dockerfile:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; build &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; my-app &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Run an app container with ports:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt;:3000 my-app&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Manage containers and images:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; stop &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;container_id&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; 
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;container_id&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; 
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; rmi &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;image_id&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;advanced-docker-concepts-worth-mastering&quot;&gt;Advanced Docker Concepts Worth Mastering&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose:&lt;/strong&gt; Orchestrate multiple containers with a single &lt;code&gt;docker-compose.yml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking:&lt;/strong&gt; Build private networks to connect microservices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared Volumes:&lt;/strong&gt; Persist and share data across containers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-stage builds:&lt;/strong&gt; Optimize image size and security.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes integration:&lt;/strong&gt; Orchestrate containers at scale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best practices:&lt;/strong&gt; Minimize base images, scan vulnerabilities, manage secrets.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-yml&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yml&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# docker-compose.yml&lt;/span&gt;

&lt;span class=&quot;token key atrule&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ./web
    &lt;span class=&quot;token key atrule&quot;&gt;ports&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 string&quot;&gt;&quot;3000:3000&quot;&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;DATABASE_URL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgres&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;//postgres&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;postgres@db&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;5432/app
    &lt;span class=&quot;token key atrule&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;condition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; service_healthy

  &lt;span class=&quot;token key atrule&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgres&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;16&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;alpine
    &lt;span class=&quot;token key atrule&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;POSTGRES_DB&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; app
      &lt;span class=&quot;token key atrule&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgres
      &lt;span class=&quot;token key atrule&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; postgres
    &lt;span class=&quot;token key atrule&quot;&gt;volumes&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; db&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;/var/lib/postgresql/data
    &lt;span class=&quot;token key atrule&quot;&gt;healthcheck&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;test&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 string&quot;&gt;&quot;CMD-SHELL&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;pg_isready -U postgres -d app&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;interval&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 5s
      &lt;span class=&quot;token key atrule&quot;&gt;timeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 3s
      &lt;span class=&quot;token key atrule&quot;&gt;retries&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;

&lt;span class=&quot;token key atrule&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;db-data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;docker-ai-real-world-scenarios&quot;&gt;Docker + AI: Real-World Scenarios&lt;/h2&gt;
&lt;p&gt;This is where it gets exciting. AI isn’t replacing Docker. it’s accelerating how you use it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI-generated Dockerfiles:&lt;/strong&gt; Tools like ChatGPT can draft configs, while you refine them for production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ML pipelines in Docker:&lt;/strong&gt; Package TensorFlow or PyTorch environments for reproducible training.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model deployment:&lt;/strong&gt; Serve an AI model in a container with an API (&lt;code&gt;docker run -p 8080:8080 model-service&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scaling inference:&lt;/strong&gt; Pair Docker with Kubernetes to handle thousands of predictions per second.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;recommended-resources&quot;&gt;Recommended Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;📄 Download my &lt;strong&gt;Docker Cheat Sheet&lt;/strong&gt;  (&lt;a href=&quot;https://photos.jussmor.com/insights/blog/Cheat%20sheet/DOCKER_.pdf&quot;&gt;Download the Cheat Sheet HERE!&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20Docker%20in%20the%20AI%20Era/88dCJI2Ozt-1440.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1000&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Docker isn’t just another tool it’s the &lt;strong&gt;universal language of infrastructure&lt;/strong&gt;. Mastering it enables you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build portable environments for &lt;strong&gt;development and production&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Power &lt;strong&gt;AI and ML workflows&lt;/strong&gt; with reproducibility.&lt;/li&gt;
&lt;li&gt;Scale apps in seconds.&lt;/li&gt;
&lt;li&gt;Use AI to generate Docker configurations, while relying on your own knowledge to &lt;strong&gt;debug and optimize&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If SQL is the universal language of data, &lt;strong&gt;Docker is the universal language of infrastructure&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>SQL Has 230 Keywords – With AI, These Are the Only Ones You Need to Know!</title>
    <link href="https://www.jussmor.com/insights/blog/Learn%20SQL%20In%20The%20AI%20Era/" />
    <updated>2025-08-21T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Learn%20SQL%20In%20The%20AI%20Era/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20SQL%20In%20The%20AI%20Era/zh4ZAeKCud-624.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;624&quot; height=&quot;352&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;will-ai-replace-sql-knowledge&quot;&gt;Will AI Replace SQL Knowledge?&lt;/h2&gt;
&lt;p&gt;Many believe that with AI tools, learning SQL is no longer necessary. The truth is different: &lt;strong&gt;SQL remains an essential skill&lt;/strong&gt; for anyone working with data. Mastering the basics allows you to make the most of AI tools and solve problems in real time.&lt;/p&gt;
&lt;p&gt;Imagine being in a meeting and your boss asks for a quick report… would you only rely on ChatGPT, or would you know how to write the query in seconds?&lt;/p&gt;
&lt;h2 id=&quot;what-is-sql&quot;&gt;What is SQL?&lt;/h2&gt;
&lt;p&gt;SQL (Structured Query Language) was developed in the 1970s at IBM and became an ANSI and ISO standard in 1986.&lt;br&gt;
It’s the most widely used language for &lt;strong&gt;querying, manipulating, and structuring data&lt;/strong&gt; in relational databases.&lt;/p&gt;
&lt;h2 id=&quot;main-components-of-sql&quot;&gt;Main Components of SQL&lt;/h2&gt;
&lt;p&gt;Before diving into examples, let’s review the key building blocks of SQL:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Queries:&lt;/strong&gt; Instructions to retrieve data from the database.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clauses:&lt;/strong&gt; Parts of a query (e.g., SELECT, FROM, WHERE).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Predicates:&lt;/strong&gt; Logical conditions that return true or false.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expressions:&lt;/strong&gt; Values or calculations used inside queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Statements:&lt;/strong&gt; Complete blocks of code that perform an action.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;White Space:&lt;/strong&gt; Spaces, tabs, and line breaks that make code readable (ignored by SQL).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;creating-databases-and-tables&quot;&gt;Creating Databases and Tables&lt;/h2&gt;
&lt;h3 id=&quot;create-a-database&quot;&gt;Create a Database&lt;/h3&gt;
&lt;p&gt;Depending on the database engine, syntax may vary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MySQL:&lt;/strong&gt; Allows character sets and collations.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;DATABASE&lt;/span&gt; my_database_name 
  &lt;span class=&quot;token keyword&quot;&gt;CHARACTER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;SET&lt;/span&gt; utf8mb4
  &lt;span class=&quot;token keyword&quot;&gt;COLLATE&lt;/span&gt; utf8mb4_unicode_ci&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SQL Server:&lt;/strong&gt; Often includes file specifications and configurations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PostgreSQL:&lt;/strong&gt; Offers flexible encoding and settings.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;create-a-table&quot;&gt;Create a Table&lt;/h3&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; Customers &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  CustomerID &lt;span class=&quot;token keyword&quot;&gt;INT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  FirstName &lt;span class=&quot;token keyword&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&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;
  LastName &lt;span class=&quot;token keyword&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&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;
  Age &lt;span class=&quot;token keyword&quot;&gt;INT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  Email &lt;span class=&quot;token keyword&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;255&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;
  RegistrationDate &lt;span class=&quot;token keyword&quot;&gt;DATE&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;hr&gt;
&lt;h2 id=&quot;basic-sql-queries&quot;&gt;Basic SQL Queries&lt;/h2&gt;
&lt;h3 id=&quot;select-data&quot;&gt;Select Data&lt;/h3&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; CustomerID&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; FirstName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; LastName
&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; Customers
&lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; City &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;London&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; Country &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;UK&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; LastName &lt;span class=&quot;token keyword&quot;&gt;ASC&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SELECT&lt;/code&gt;: columns to retrieve&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FROM&lt;/code&gt;: source table&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WHERE&lt;/code&gt;: filters results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ORDER BY&lt;/code&gt;: sorts results&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;insert-data&quot;&gt;Insert Data&lt;/h3&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;INTO&lt;/span&gt; Customers &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;FirstName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; LastName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Age&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Email&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Ana&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Lopez&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;28&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ana@example.com&#39;&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 id=&quot;update-records&quot;&gt;Update Records&lt;/h3&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;UPDATE&lt;/span&gt; Customers
&lt;span class=&quot;token keyword&quot;&gt;SET&lt;/span&gt; Age &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;29&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; CustomerID &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;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;delete-records&quot;&gt;Delete Records&lt;/h3&gt;
&lt;pre class=&quot;language-sql&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;DELETE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; Customers
&lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; CustomerID &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;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;beyond-the-basics&quot;&gt;Beyond the Basics&lt;/h2&gt;
&lt;p&gt;Once you’ve mastered the essentials, explore advanced SQL concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Joins:&lt;/strong&gt; Combine data from multiple tables (INNER, LEFT, RIGHT, FULL, CROSS).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subqueries:&lt;/strong&gt; Queries nested inside other queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aggregate Functions:&lt;/strong&gt; &lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;AVG&lt;/code&gt;, &lt;code&gt;MIN&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt; with &lt;code&gt;GROUP BY&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Window Functions:&lt;/strong&gt; Advanced calculations across related rows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CTEs (Common Table Expressions):&lt;/strong&gt; Temporary result sets for reuse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recursive Queries:&lt;/strong&gt; Handle hierarchical data structures.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;recommended-resources&quot;&gt;Recommended Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;📄 Download my &lt;strong&gt;SQL Cheat Sheet&lt;/strong&gt; (&lt;a href=&quot;https://photos.jussmor.com/insights/blog/Cheat%20sheet/pdf/SQL.pdf&quot;&gt;Download the Cheat Sheet HERE!&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Learn%20SQL%20In%20The%20AI%20Era/JF-i4sG2GW-1440.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1024&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📖 &lt;em&gt;Learning SQL&lt;/em&gt; by Alan Beaulieu (great for beginners and advanced users).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;SQL is far from obsolete — it’s still the &lt;strong&gt;universal language of data&lt;/strong&gt;. By learning it, you’ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Respond quickly to data requests at work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Complement the power of AI tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build a solid foundation for roles like analyst, engineer, or data scientist.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 What SQL topic are you most interested in? DM me if you have questions or visit my &lt;a href=&quot;https://www.linkedin.com/in/jussmor/&quot;&gt;LinkendIn &lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>4 Years as a Remote Tech Worker; My Journey</title>
    <link href="https://www.jussmor.com/insights/blog/4%20Years%20as%20a%20Remote%20Tech%20Worker;%20My%20Journey/" />
    <updated>2025-07-14T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/4%20Years%20as%20a%20Remote%20Tech%20Worker;%20My%20Journey/</id>
    <content type="html">&lt;p&gt;It’s been four years since my story as a remote tech worker began.&lt;/p&gt;
&lt;p&gt;When I was a teenager, I never thought much about my future. I didn’t know what I wanted or what I should do with my life. As a kid, I was more interested in stars, the universe, fantasy, and honestly, in destroying everything around me just because I was curious.&lt;/p&gt;
&lt;p&gt;I grew up in a low-income family in a poor country in South America, and going to university seemed expensive and, at times, even irrelevant. But thanks to a stroke of luck or the alignment of the stars, I was able to go, and I became a mechanical engineer. I chose that path because it aligned with my curiosity. I still remember how fascinated I was by physics, chemistry, thermodynamics, electronics, and even the basics of programming.&lt;/p&gt;
&lt;p&gt;I also remember my second year of university vividly. I failed my first programming course. I was furious. I couldn&#39;t understand why programming was so difficult for me. I cried because I had promised my parents I would never fail a course. Time was precious, and money was limited.&lt;/p&gt;
&lt;p&gt;I never really asked where my parents got the money for my education. I often chose not to think about it. During those years, a friend and I joined an NGO program, and we ended up winning a trip to the U.S. for an entrepreneurship event. That opportunity allowed my professor to approve my failed course. I still remember I had a ticket to attend a program at Hult Business School in Boston, but no money to go. That year, I worked hard and sold many things just to fund the experience.&lt;/p&gt;
&lt;p&gt;When I arrived in the U.S., I didn’t speak English, I had no money, and I was just a kid with dreams. Dreams of becoming an entrepreneur. Seeing the projects and ideas from the other participants opened my eyes to what I needed to change in my life. I was tired of trying to create opportunities in Ecuador, where bureaucracy crushed motivation. That trip gave me clarity and direction.&lt;/p&gt;
&lt;p&gt;Over the years, I used every free moment to gain the skills I needed. I learned English, and I returned to programming because I refused to accept that I couldn’t understand it. Throughout my life, I worked as a designer, painter, agricultural laborer, and construction worker. I met people and learned from them in ways that you can&#39;t even imagine. Today, I believe that desperation can be a powerful weapon when channeled correctly.&lt;/p&gt;
&lt;h2 id=&quot;my-first-job&quot;&gt;My First Job&lt;/h2&gt;
&lt;p&gt;My first job came from a reference. Someone called me and said, “Someone told me you&#39;re smart. I need to build a web app. Can you help me?”&lt;/p&gt;
&lt;p&gt;My first instinct was panic. I thought, I don’t have the skills for this. But then, for the first time, I changed my mindset. I said, I don’t know how to do it, but I know someone who does.&lt;/p&gt;
&lt;p&gt;So, I called a friend, and he agreed to help. Together, we built a platform to help students with their homework. It was a great success during the COVID-19 pandemic, even though the platform doesn’t exist anymore.&lt;/p&gt;
&lt;p&gt;That project eventually ended, and I had to look for new opportunities.&lt;/p&gt;
&lt;h2 id=&quot;the-path-to-a-new-challenge-working-abroad&quot;&gt;The Path to a New Challenge: Working Abroad&lt;/h2&gt;
&lt;p&gt;I still remember how hard it was to tell my parents I didn’t want to work in the field I had studied for five years. Their dream was for me to get a government job, but that wasn’t my path. My first tech job was a secret. When I landed my first international contract, they thought it was just a phase, but it wasn’t.&lt;/p&gt;
&lt;p&gt;At the end of that year, I set a resolution to find a new job. I sent out countless resumes, mostly to Spanish-speaking companies, but received no responses. Then it hit me. I knew English. I wasn’t fluent, but I had enough to try. So, I started applying for jobs that required English.&lt;/p&gt;
&lt;p&gt;After a few weeks, I received several interview invitations, but I rejected many of them out of fear. Eventually, I realized I couldn’t keep running from opportunities. I had to face the fear. Impostor syndrome was real and powerful, but I couldn’t let it sabotage me anymore. It&#39;s like being in a dark cave with a door you know how to open but still choosing not to.&lt;/p&gt;
&lt;p&gt;My first interview was a disaster. But then came another, and another. I improved a little each time. One day, I received a message: “Junior, you look like a perfect match for us. We’re looking for someone with basic dev knowledge but great potential to grow.” - Jobsity&lt;/p&gt;
&lt;p&gt;I completed the recruitment process, and it was a success. After many failures, I often forget how hard it was to reach that level of professionalism. Writing this now reminds me that with consistency and passion, we can do anything we set our minds to.&lt;/p&gt;
&lt;h2 id=&quot;my-first-international-experience&quot;&gt;My First International Experience&lt;/h2&gt;
&lt;p&gt;It came with many insecurities and doubts. We can’t know or control everything. At the start of this experience, I thought I was a failure who didn’t deserve the job. When we read job descriptions, we often believe we must know everything, but that’s impossible.&lt;/p&gt;
&lt;p&gt;What we can do is master the basics and build from there. If you understand the fundamentals, you can learn anything quickly. Trust yourself.&lt;/p&gt;
&lt;p&gt;I remember those first meetings, speaking in English, thinking, they can’t understand me. But discomfort is where growth begins. I chose not to complain but to look for solutions. I ended each workday with a walk, talking to myself about what I did that day and what I would do tomorrow. The more you practice, the better you become.&lt;/p&gt;
&lt;p&gt;Starting is always hard. But if I compare who I was then to who I am now and what I can solve today, I’m proud.&lt;/p&gt;
&lt;p&gt;Thanks to dedication during these three amazing years, I’ve been able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improve my English&lt;/li&gt;
&lt;li&gt;Collaborate with international teams&lt;/li&gt;
&lt;li&gt;Learn new technologies&lt;/li&gt;
&lt;li&gt;Manage complex projects from start to finish&lt;/li&gt;
&lt;li&gt;Strengthen my soft skills across departments&lt;/li&gt;
&lt;li&gt;Work with AI from its early stages&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion-where-i-am-and-what-i-m-doing&quot;&gt;Conclusion: Where I Am and What I’m Doing&lt;/h2&gt;
&lt;p&gt;Today, I work in the healthcare sector. I’m learning Portuguese because I work with developers from Brazil, and it’s been a fascinating experience. I still live in my small town, but I’m building things that are making a difference around the world.&lt;/p&gt;
&lt;p&gt;If you&#39;re a developer looking for your next challenge, my best advice is: never give up. Make a commitment to yourself and take the next step in your career. Even when you’re afraid. Especially when you’re afraid. Because that’s where real growth begins.&lt;/p&gt;
&lt;p&gt;This article is special because I would like to see more Ecuadorian developer working aboard if you reading this let me give you an advice give an opportunity to this type of jobs and if you wanna learn more or if you have doubts hit my DM. I&#39;m open to help.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to deal with Panic Attacks, Anxiety as a Remote Tech Worker.</title>
    <link href="https://www.jussmor.com/insights/blog/How%20to%20deal%20with%20Panic%20Attacks,%20Anxiety%20as%20a%20Remote%20Tech%20Worker./" />
    <updated>2025-06-30T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/How%20to%20deal%20with%20Panic%20Attacks,%20Anxiety%20as%20a%20Remote%20Tech%20Worker./</id>
    <content type="html">&lt;p&gt;It’s been a year since my nightmare began, and now I’m ready to write this story. A story about me. About how I fell down and how I got back up. About how someone&#39;s life can be destroyed in seconds. A story about how your own mind can become your worst enemy.&lt;/p&gt;
&lt;p&gt;I&#39;m Junior, a 26-year-old man who loves hiking, the gym, dancing, and computers. I&#39;ve been working as a software engineer from a small town in Ecuador for companies in the United States. I remember my first day as a software engineer, full of happiness, full of expectations, full of dreams. As a mechanical engineer recently graduated who switched to software, this job felt like a dream.&lt;/p&gt;
&lt;p&gt;In Ecuador, being a mechanical engineer is not a bad career, but it comes with sacrifices. The jobs usually require moving to a big city or working near oil companies in the Amazon. The working hours are often rotational, like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;30 days on, then one week off&lt;/li&gt;
&lt;li&gt;30 days switching between day and night shifts, then fifteen days off&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are just examples. Not all jobs follow this, but they give you an idea.&lt;/p&gt;
&lt;p&gt;Before I graduated, I started thinking about those scenarios. I decided to switch careers because I&#39;m a family-centered man. I love my parents and brothers. I like to stay close to them. So working from home, staying near my family, and making money sounded perfect.&lt;/p&gt;
&lt;p&gt;What a job. Sometimes amazing, sometimes not. But thankfully, I was able to switch and start my new career.&lt;/p&gt;
&lt;p&gt;First of all, I don&#39;t regret any of my decisions. But during this process, which has not been easy, I started struggling with my mental health. I decided to write this article to help the community or anyone who may be going through something similar. I hope it brings clarity and support.&lt;/p&gt;
&lt;h2 id=&quot;my-first-panic&quot;&gt;My First Panic&lt;/h2&gt;
&lt;p&gt;I still don’t know exactly which moment was my first panic attack, but I have some ideas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;During COVID-19, when I coughed blood. It turned out I was just coughing too hard. It was a regular flu.&lt;/li&gt;
&lt;li&gt;During a gym workout when I felt numbness in my hand. That was carpal tunnel syndrome.&lt;/li&gt;
&lt;li&gt;After a hike where I had to stay in a cave with many tourists due to a rising river.&lt;/li&gt;
&lt;li&gt;At the gym when I thought I couldn’t breathe, but it was just my rhinitis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last three happened during the last quarter of 2024. The strange thing is that I never felt anxiety or panic in those situations. I discovered that later in therapy. I didn&#39;t recognize them as threats in the moment.&lt;/p&gt;
&lt;p&gt;What I clearly remember was being at the gym, feeling relaxed, and suddenly not being able to breathe. Someone told me my face was pale. I got really scared.&lt;/p&gt;
&lt;h2 id=&quot;the-triggers&quot;&gt;The Triggers&lt;/h2&gt;
&lt;p&gt;After that moment, I thought I was going to die. But I didn’t. I kept waking up every day, still alive. It felt cruel. I’m joking, of course.&lt;/p&gt;
&lt;p&gt;I felt desperate. I started looking for doctors, treatments, even other careers. But nothing seemed to help. A part of me thought it might be anxiety. Another part refused to believe it. I was working out. I was doing everything to stay well. Anxiety didn’t fit into that picture. In my mind, I was doing everything right.&lt;/p&gt;
&lt;p&gt;I felt terrible. No matter what I did, I couldn’t get back to the gym or feel like myself. That destroyed me. I didn’t know what to do. I stopped eating, felt depressed, and was constantly anxious.&lt;/p&gt;
&lt;p&gt;I was still able to do my job, but only the bare minimum. I completed tasks quickly, then went straight back to bed.&lt;/p&gt;
&lt;p&gt;One friend told me, maybe therapy could help. He said, go see this doctor. If he tells you you&#39;re fine, then call this therapist. She’s the one I go to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Insight 1&lt;/strong&gt;: If you’re a remote worker, don’t look for a remote therapist.&lt;/p&gt;
&lt;p&gt;I did call her, but only after my body gave me some “gifts,” as in panic attacks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chest pressure&lt;/li&gt;
&lt;li&gt;Extreme tachycardia&lt;/li&gt;
&lt;li&gt;Shortness of breath&lt;/li&gt;
&lt;li&gt;Dry mouth&lt;/li&gt;
&lt;li&gt;Cold hands&lt;/li&gt;
&lt;li&gt;And other symptoms that kept changing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because I’m stubborn, I waited too long. I thought I could solve it alone. But I couldn’t. The remote therapist helped for a while, but something still didn’t feel right. So I switched to in-person sessions.&lt;/p&gt;
&lt;p&gt;It’s amazing how the nervous system reacts. When it&#39;s out of balance, anything can trigger fight-or-flight: a word, a sound, something you read, a scene on TV, a social media post. For example, one of my triggers was air conditioning. My brain connected that cold feeling with the cave where I had been trapped during the hike.&lt;/p&gt;
&lt;h2 id=&quot;the-treatments&quot;&gt;The Treatments&lt;/h2&gt;
&lt;p&gt;Not everyone reacts the same to treatment. It depends on the person&#39;s nervous system. Mine has been slow to reset. This is not medical advice. I’m just sharing what worked for me during my recovery.&lt;/p&gt;
&lt;p&gt;The psychiatrist gave me medication, but after noticing how my body reacted, I decided to stop. I wanted to overcome this in my own way, and maybe that’s why it took longer.&lt;/p&gt;
&lt;p&gt;What worked for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Taking things calmly. Everyone heals at their own pace.&lt;/li&gt;
&lt;li&gt;Practicing yoga twice a week to learn how to breathe properly.&lt;/li&gt;
&lt;li&gt;Journaling every day, writing down key thoughts and accomplishments.&lt;/li&gt;
&lt;li&gt;Practicing gratitude before going to bed.&lt;/li&gt;
&lt;li&gt;Training my brain to stop creating fear-based thoughts, as my therapist says.&lt;/li&gt;
&lt;li&gt;Identifying my triggers. I had two traumatic moments, one at the gym and one in the mountains. Slowly, I returned to the gym. For the mountain trauma, my therapist recommended the Wim Hof method. I didn’t do cold plunges, but I did take cold showers. It helped a lot in resetting my nervous system and stimulating the vagus nerve.&lt;/li&gt;
&lt;li&gt;Reconnecting with my spiritual side. I started praying more and going to church again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Anxiety is not just a disease. I think overcoming it requires commitment to yourself and a willingness to grow. This experience taught me that things can always get worse, but I have to get up anyway. Even with fear, I must keep moving. The best way to deal with anxiety is to face your fears.&lt;/p&gt;
&lt;p&gt;I’m proud of myself. I stopped the storm. I went back to the gym. I completed an 8km hike to reach a beautiful waterfall. When I got there, I felt proud. The monsters I feared were just creations of my brain. They were never real.&lt;/p&gt;
&lt;p&gt;So if you’re going through something like this, wake up. You’re not alone. I’m with you. And may the force be with you as well.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Crafting My Blog Oasis; Empowering with Qwik, Nx, and Basehub.</title>
    <link href="https://www.jussmor.com/insights/blog/Crafting%20My%20Blog%20Oasis;%20Empowering%20With%20Qwik,%20Nx,%20And%20Basehub/" />
    <updated>2024-06-28T00:00:00Z</updated>
    <id>https://www.jussmor.com/insights/blog/Crafting%20My%20Blog%20Oasis;%20Empowering%20With%20Qwik,%20Nx,%20And%20Basehub/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Crafting%20My%20Blog%20Oasis;%20Empowering%20With%20Qwik,%20Nx,%20And%20Basehub/au--1Wb7VA-1800.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;Oh yeah! Another blog about how to build a blog (redundancy). Boring? Maybe, or maybe not! I’m going to share my journey building my personal blog using NX (monorepo), Qwik for the frontend, and Basehub as our CMS (Content Management System).&lt;/p&gt;
&lt;p&gt;All of us know how hard this can be depending on the stack and the requirements you or your clients have. Let me start.&lt;/p&gt;
&lt;h2 id=&quot;basehub&quot;&gt;Basehub&lt;/h2&gt;
&lt;p&gt;The main problem that I found during my career developing fully customizable blogs quickly was finding a reliable CMS. The CMS should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Be easy to use.&lt;/li&gt;
&lt;li&gt;Be customizable.&lt;/li&gt;
&lt;li&gt;Have SEO features.&lt;/li&gt;
&lt;li&gt;Support multimedia.&lt;/li&gt;
&lt;li&gt;Manage users.&lt;/li&gt;
&lt;li&gt;Control versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I know that there are a lot of CMSs out there with these capabilities, but they don’t fully fulfill my wishes. Primarily, when I’m choosing a CMS, my perspective is that I’m looking for something extensible and able to add new features in the least time possible, and obviously writing the least code possible to see my results.&lt;/p&gt;
&lt;p&gt;Until here, it looks a bit like a dream from a developer&#39;s perspective, but this is not completely about us. It’s about the users of the CMS. The users, in this case, are our marketing team:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They must be able to move the content and place it anywhere in the UI with the least effort possible.&lt;/li&gt;
&lt;li&gt;They must be able to track their changes in case something goes wrong and make a rollback.&lt;/li&gt;
&lt;li&gt;They must have the security of knowing they have a system that can scale without extensive effort.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, what &lt;a href=&quot;https://basehub.com/&quot;&gt;&lt;strong&gt;BaseHub&lt;/strong&gt;&lt;/a&gt; can do for us? To get all these advantages, let me show you what’s possible inside this platform:&lt;/p&gt;
&lt;h2 id=&quot;version-control-tracking&quot;&gt;Version Control Tracking&lt;/h2&gt;
&lt;p&gt;The feature that I love is the version control tracking, similar to Git. You can make your changes and, when ready, publish them. It’s literally a smooth experience to review content changes and perform rollbacks when needed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Crafting%20My%20Blog%20Oasis;%20Empowering%20With%20Qwik,%20Nx,%20And%20Basehub/eaminPgW0Q-3216.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3216&quot; height=&quot;1978&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;build-content-structures-according-to-your-needs&quot;&gt;Build Content Structures According To Your Needs&lt;/h2&gt;
&lt;p&gt;If you’ve used &lt;strong&gt;Strapi&lt;/strong&gt; you’re familiar with the concept of Single Types and Collection Types. It is the same inside  &lt;strong&gt;&lt;a href=&quot;https://basehub.com/&quot;&gt;BaseHub&lt;/a&gt;****.&lt;/strong&gt; The only difference is that each field created is treated as a block. So, we have:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.jussmor.com/insights/blog/Crafting%20My%20Blog%20Oasis;%20Empowering%20With%20Qwik,%20Nx,%20And%20Basehub/KpSoQE-1n9-1800.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Components&lt;/strong&gt;: It’s an independent and reusable structure that can be used multiple times to avoid repetition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collections&lt;/strong&gt;: Similar to a Collection Type in Strapi, used to create repetitive structures that can be displayed as a list in the UI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instance&lt;/strong&gt;: The structure of an instance is tied to the main component. In this case, SEO is an instance of the SEO component. You can edit the content but not the structure of the instance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents&lt;/strong&gt;: Similar to single types in Strapi, it is ideal for building pages like a Homepage, About Page, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The components can be reorganized with a smooth drag and drop. I’m not going to speak about the AI features because you should try them yourself; they’re simply amazing.&lt;/p&gt;
&lt;h2 id=&quot;easy-development&quot;&gt;Easy Development&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://basehub.com/&quot;&gt;&lt;strong&gt;BaseHub&lt;/strong&gt;&lt;/a&gt;  gives us the power to develop pages and retrieve data using the &lt;a href=&quot;https://basehub.com/docs/api-reference/query-api&quot;&gt;&lt;strong&gt;FETCH API&lt;/strong&gt;&lt;/a&gt; &lt;a href=&quot;https://basehub.com/docs/api-reference/query-api&quot;&gt;&lt;/a&gt;. However, from my point of view, it is not ideal because they provide us with their own &lt;strong&gt;&lt;a href=&quot;https://basehub.com/docs/api-reference/basehub-sdk&quot;&gt;Basehub SDK&lt;/a&gt;&lt;/strong&gt;, which is super easy to use.&lt;/p&gt;
&lt;p&gt;Just execute:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;npm i basehub&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, follow the instructions provided in  &lt;a href=&quot;https://basehub.com/docs/api-reference/basehub-sdk&quot;&gt;&lt;strong&gt;BaseHub SDK Docs&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; If you want to learn more, see the real implementation, or if you have doubts about how to apply filters, visit: &lt;a href=&quot;https://github.com/JussMor/jussmor&quot;&gt;&lt;strong&gt;My Repository&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;qwik-and-nx-monorepo&quot;&gt;Qwik And NX Monorepo&lt;/h2&gt;
&lt;p&gt;First of all, why a monorepo?&lt;/p&gt;
&lt;p&gt;A monorepo is ideal if you want to continue building new side projects because you can reuse components and build new projects with less effort. However, it was not easy to find information about how to integrate these two technologies.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://qwik.dev/&quot;&gt;&lt;strong&gt;Qwik&lt;/strong&gt;&lt;/a&gt; is a relatively young framework with a growing community. I’m sure that Qwik is going to have an incredible future because the concept of resumability is impressive, and the benefits it offers are fantastic.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nx.dev/&quot;&gt;&lt;strong&gt;Nx Monorepo&lt;/strong&gt;&lt;/a&gt; , on the other hand, offers an extensive array of tools that can speed up your development setup. You can set up an entire project in a few clicks, and the best part is that it works seamlessly inside VSCode.&lt;/p&gt;
&lt;h2 id=&quot;how-to-start&quot;&gt;How To Start:&lt;/h2&gt;
&lt;p&gt;First, install this package in your existing project o generate a new one:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;npm install &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;D&lt;/span&gt; qwik&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, to generate nx-proyect with The Qwik Framework execute:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;npx create&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;workspace@latest org&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;workspace &lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;preset&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;qwik&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, generate an application:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;nx generate qwik&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;app&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want to generate an library:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;nx generate qwik&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;lib&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, you can run your Qwik app with the Nx using:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;nx run&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;command project&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;name 

&lt;span class=&quot;token literal-property property&quot;&gt;Example&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
nx serve website&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ui  &lt;span class=&quot;token comment&quot;&gt;// To run development server&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, if wanna add more features like setup tailwindscss, configure a deployment in Cloudflare the generators can be found here: &lt;a href=&quot;https://www.jussmor.com/insights/blog/crafting-my-blog-oasis-empowering-with-qwik-nx-and-basehub/packages/qwik-nx/generators.json&quot;&gt;Generators&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To use a automatic generator just execute:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;nx generate qwik&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nx&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;generator&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;the-challenge&quot;&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;Currently &lt;a href=&quot;https://basehub.com/&quot;&gt;&lt;strong&gt;BaseHub&lt;/strong&gt;&lt;/a&gt; only provides a Rich Text Editor that works with React.js, but it’s not a problem. I updated the library to work natively inside &lt;a href=&quot;https://qwik.dev/&quot;&gt;&lt;strong&gt;Qwik&lt;/strong&gt;&lt;/a&gt;. I’m not going to publish the library because I made some modifications according to my needs, but if you want to experiment, you can use the code that you can find here: &lt;a href=&quot;https://github.com/JussMor/jussmor/tree/main/libs/ui/src/richtext&quot;&gt;&lt;strong&gt;RichText&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Rich Text Editor provided by BaseHub is extensible, which is impressive because you can work with custom components that you can generate inside the platform. The only limit I’ve found so far has been my imagination.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Building a personal blog with NX monorepo, Qwik, and BaseHub CMS has been rewarding. BaseHub offers user-friendly features like version control and customizable content structures. Qwik, integrated with NX, provides efficient development tools and component reusability. Despite challenges integrating BaseHub&#39;s Rich Text Editor with Qwik, the project&#39;s success showcases the potential of this tech stack for creating dynamic websites.&lt;/p&gt;
</content>
  </entry>
</feed>