<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: europeanplaice</title>
    <description>The latest articles on DEV Community by europeanplaice (@europeanplaice).</description>
    <link>https://dev.to/europeanplaice</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1109939%2Fba78d8f8-2d77-46a2-9b77-2180b12f5f5d.jpeg</url>
      <title>DEV Community: europeanplaice</title>
      <link>https://dev.to/europeanplaice</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/europeanplaice"/>
    <language>en</language>
    <item>
      <title>Let AI Explain traceroute with the Laws of Physics</title>
      <dc:creator>europeanplaice</dc:creator>
      <pubDate>Sat, 15 Aug 2026 15:34:09 +0000</pubDate>
      <link>https://dev.to/europeanplaice/let-ai-explain-traceroute-with-the-laws-of-physics-2ckh</link>
      <guid>https://dev.to/europeanplaice/let-ai-explain-traceroute-with-the-laws-of-physics-2ckh</guid>
      <description>&lt;p&gt;I built and open-sourced &lt;strong&gt;PacketVoyage&lt;/strong&gt;—an Agent Skill &amp;amp; MCP server that turns boring &lt;code&gt;traceroute&lt;/code&gt; outputs into fascinating stories about physics, geography, and undersea cables.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/europeanplaice" rel="noopener noreferrer"&gt;
        europeanplaice
      &lt;/a&gt; / &lt;a href="https://github.com/europeanplaice/packetvoyage" rel="noopener noreferrer"&gt;
        packetvoyage
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      MCP server &amp;amp; Agent Skill for educational network traceroute analysis, fiber-optic physics verification, and packet voyage storytelling
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚢 PacketVoyage&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/europeanplaice/packetvoyage/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/europeanplaice/packetvoyage/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cf55cbac5f914fc811f560580159d6821f43c3a96362321d39ca2a269feb67ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e3130253230253743253230332e3131253230253743253230332e3132253230253743253230332e31332d626c75652e737667" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://github.com/europeanplaice/packetvoyage/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Model Context Protocol (MCP) Server &amp;amp; Agent Skill for educational network traceroute analysis, fiber-optic physics verification, and packet voyage storytelling.&lt;/strong&gt;
&lt;em&gt;Zero external commercial APIs, zero bundled copyright data — pure physical laws and detective insight.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏛️ Architecture: The Two Pillars&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;PacketVoyage is built around two complementary layers designed specifically for AI-native workflows:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐
│                   AI Agent (LLM)                       │
└──────────────┬──────────────────────────┬──────────────┘
               │                          │
               ▼                          ▼
┌──────────────────────────────┐ ┌──────────────────────────────┐
│       🧠 Agent Skill         │ │        🛠️ MCP Server         │
│     (Knowledge / Playbook)   │ │    (Capabilities / Execution)│
├──────────────────────────────┤ ├──────────────────────────────┤
│ • Speed of Light in Fiber    │ │ • analyze_voyage_text        │
│   (~0.67c, ~10ms / 1,000km)  │ │ • voyage_investigate         │
│ • Control vs Data Plane math │ │ • run_protocol_experiment    │
│ • Disproving GeoIP illusions │ │ • research_host              │
│ • Decision Flow &amp;amp; Heuristics │ │ • list_known_iata_airports   │
└──────────────────────────────┘ └──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🛠️ MCP Server (Capabilities &amp;amp;&lt;/strong&gt;…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/europeanplaice/packetvoyage" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Ever wondered what’s actually happening behind a trace like this?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;     1  gateway (192.168.1.1)                 0.8 ms
     2  * * *
     3  ae-1.tokyo-hnd.bb.net (203.0.113.1)    2.1 ms
     4  xe-0-0.sjc-core.bb.net (198.51.100.25) 88.5 ms
     5  one.one.one.one (1.1.1.1)             88.7 ms
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Behind these lines lies real-world physics:&lt;/p&gt;

&lt;p&gt;• The * * * at Hop 2 isn't packet loss: Normal traffic runs at line rate in hardware ASICs (Data Plane), while diagnostic ICMP responses are rate limited by router CPUs (Control Plane).&lt;br&gt;
  • The +86ms jump: Light travels in silica glass fiber at ~200,000 km/s (~10 ms RTT per 1,000 km). Tokyo to Silicon Valley is ~8,300 km, so ~83 ms is the theoretical speed-of-light limit across the Pacific ocean floor.&lt;br&gt;
  • Hidden IATA codes: Hostnames like tokyo-hnd (Haneda) and sjc-core (San Jose) reveal the subsea cable route (e.g., JUNO / PC-1).&lt;/p&gt;

&lt;p&gt;For students and general engineers, understanding what happens inside traceroute can be difficult. Let’s have AI explain it instead.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;  ### 🚢 Example AI Output

  Feed that trace to Claude or any MCP-enabled AI agent by packetvoyage skill

  │ 📍 Route: Tokyo (HND) 🌊 [JUNO Submarine Cable] ➔ San Jose (SJC) (~8,335 km)
  │ 🌊 Physics Check: Latency spiked from 2.1 ms ➔ 88.5 ms (+86.4 ms), perfectly matching the speed of light in transpacific optical fiber. Hop 2
  │ asterisks are standard CPU control-plane rate limiting.
  ──────
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 Quickstart
&lt;/h3&gt;

&lt;p&gt;Add it to Claude Code with one command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude mcp add packetvoyage -- uvx --from git+https://github.com/europeanplaice/packetvoyage.git packetvoyage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For Claude Desktop / Cursor / Antigravity, add this to your MCP config:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "packetvoyage": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/europeanplaice/packetvoyage.git", "packetvoyage"]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Check out the repo and give your next traceroute a physical voyage!&lt;br&gt;
  👉 GitHub: europeanplaice/packetvoyage &lt;a href="https://github.com/europeanplaice/packetvoyage" rel="noopener noreferrer"&gt;https://github.com/europeanplaice/packetvoyage&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>networking</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stop Paying for Overpriced PDM: A 100% Free, Open-Source Drawing Management System</title>
      <dc:creator>europeanplaice</dc:creator>
      <pubDate>Sat, 28 Feb 2026 15:39:45 +0000</pubDate>
      <link>https://dev.to/europeanplaice/stop-paying-for-overpriced-pdm-a-100-free-open-source-drawing-management-system-39no</link>
      <guid>https://dev.to/europeanplaice/stop-paying-for-overpriced-pdm-a-100-free-open-source-drawing-management-system-39no</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: The "Enterprise Tax" on Drawing Management
&lt;/h2&gt;

&lt;p&gt;If you've ever looked for a professional way to manage engineering drawings (PDFs) and their revisions, you've likely hit a wall: The Price Tag.&lt;/p&gt;

&lt;p&gt;Enterprise PDM (Product Data Management) and PLM systems are notoriously expensive. They charge heavy per-seat license fees, require complex maintenance,&lt;br&gt;
  and are often overkill for small to medium-sized teams.&lt;/p&gt;

&lt;p&gt;On the other hand, using simple shared folders or Google Drive is a recipe for disaster—"Version Hell," overwritten files, and zero metadata search.&lt;/p&gt;

&lt;p&gt;I believe that managing your design documents shouldn't cost a fortune. So I built Open Blueprint Vault—a completely free, open-source alternative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Open Blueprint Vault: $0 License Fees, Forever.
&lt;/h2&gt;

&lt;p&gt;Open Blueprint Vault is a self-hosted drawing management system that gives you the core features of professional PDM software without the enterprise&lt;br&gt;
  price tag.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/europeanplaice/open-blueprint-vault" rel="noopener noreferrer"&gt;https://github.com/europeanplaice/open-blueprint-vault&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose Open Blueprint Vault?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; 100% Free &amp;amp; Open-Source: No hidden costs, no "Pro" tiers, and no per-user pricing.&lt;/li&gt;
&lt;li&gt; Self-Hosted Control: You own your data. Use MinIO or AWS S3 for storage.&lt;/li&gt;
&lt;li&gt; Professional Revision Control: Track drawing history safely without losing previous versions.&lt;/li&gt;
&lt;li&gt; Powerful Metadata Search: Find what you need in seconds by part number, name, or custom attributes.&lt;/li&gt;
&lt;li&gt; Modern, Fast UI: A snappy interface built with Next.js 16 (includes Dark Mode!).&lt;/li&gt;
&lt;li&gt; One-Command Deployment: Launch the entire stack in seconds with Docker Compose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it for Free in 2 Minutes
&lt;/h2&gt;

&lt;p&gt;If you have Docker installed, you can spin up your own private vault right now:&lt;/p&gt;

&lt;p&gt;1 &lt;code&gt;git clone https://github.com/europeanplaice/open-blueprint-vault.git&lt;/code&gt;&lt;br&gt;
   2 &lt;code&gt;cd open-blueprint-vault&lt;/code&gt;&lt;br&gt;
   3 &lt;code&gt;cp .env.example .env&lt;/code&gt;&lt;br&gt;
   4 &lt;code&gt;npm run up&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Access your new dashboard at &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It costs $0 to start, and $0 to scale.&lt;/p&gt;

&lt;p&gt;Since this is an open-source project, I rely on feedback from the community to make it better. Whether you are a hardware startup, a hobbyist with a 3D&lt;br&gt;
  printer, or a manufacturing professional, I’d love to hear how you use it.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Introducing VSCode News Headline</title>
      <dc:creator>europeanplaice</dc:creator>
      <pubDate>Wed, 05 Jul 2023 14:14:46 +0000</pubDate>
      <link>https://dev.to/europeanplaice/introducing-vscode-news-headline-36j5</link>
      <guid>https://dev.to/europeanplaice/introducing-vscode-news-headline-36j5</guid>
      <description>&lt;p&gt;Have you ever found yourself wanting to stay informed about the latest world events while writing code in a programming editor like Visual Studio Code? Here's a plugin that displays news headlines on the status bar of VS Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=TomohiroEndo.newsheadlines" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=TomohiroEndo.newsheadlines&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0ciznrgzs3ta7rgnj7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0ciznrgzs3ta7rgnj7c.png" alt=" " width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although it can only accept RSS 2.0, you have the flexibility to add any news sources in the settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"newsheadlines.newsSource": [
    "https://news.google.com/rss/search?q=inurl:www.reuters.com&amp;amp;hl=en-US&amp;amp;gl=US&amp;amp;ceid=US:en",
    "https://news.google.com/rss/search?q=inurl:www.cnn.com&amp;amp;hl=en-US&amp;amp;gl=US&amp;amp;ceid=US:en",
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the default setting. By adding or editing URLs, you can receive news updates on the status bar.&lt;/p&gt;

&lt;p&gt;My colleague has used it and mentioned that this tool is great for taking a break when he becomes slightly fatigued from coding.&lt;/p&gt;

&lt;p&gt;I hope it brings you some enjoyment.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Model business logic in Prolog</title>
      <dc:creator>europeanplaice</dc:creator>
      <pubDate>Sat, 01 Jul 2023 14:42:06 +0000</pubDate>
      <link>https://dev.to/europeanplaice/model-business-logic-in-prolog-2ifb</link>
      <guid>https://dev.to/europeanplaice/model-business-logic-in-prolog-2ifb</guid>
      <description>&lt;p&gt;Prolog is a logic programming language that offers a concise approach to modeling systems with minimal lines of code. This has benefits that extend beyond engineers. Non-engineering professionals, such as sales teams, can leverage Prolog's modeling capabilities to understand and navigate complex systems.&lt;/p&gt;

&lt;p&gt;Assume that you are going to design customers' discount rules. You first come up with a customer should possess a member's card to be eligible for discounts and your boss has specified that each customer should receive the discount only once.&lt;/p&gt;

&lt;p&gt;You model the rules in Prolog.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight prolog"&gt;&lt;code&gt;&lt;span class="ss"&gt;have_discount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:-&lt;/span&gt; &lt;span class="ss"&gt;have_members_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ss"&gt;discount_received&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;no&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your first customer, Tom, has member's card and hasn't received discounts ever, you can express it in Prolog,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight prolog"&gt;&lt;code&gt;&lt;span class="ss"&gt;have_discount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:-&lt;/span&gt; &lt;span class="ss"&gt;have_members_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ss"&gt;discount_received&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;no&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;

&lt;span class="ss"&gt;have_members_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;tom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="ss"&gt;discount_received&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;tom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;no&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try to run it in your console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;swipl business_logic.pl
?- have_discount(tom).
true.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You finished the first rule implementation in Prolog.&lt;/p&gt;

&lt;p&gt;If you need the rule to be expressed as natural sentences, ChatGPT helps you much.&lt;/p&gt;

&lt;p&gt;You&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;have_discount(X) :- have_members_card(X, yes), discount_received(X, no).

Please translate the rule into English sentences.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ChatGPT&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The rule "have_discount(X) :- have_members_card(X, yes), discount_received(X, no)" can be translated into English as follows:

"If a person (represented by 'X') has a membership card and has not yet received a discount, then they have a discount."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hope you have a great time working with the Prolog programming language!&lt;/p&gt;

</description>
      <category>prolog</category>
      <category>business</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Start Prolog with Docker</title>
      <dc:creator>europeanplaice</dc:creator>
      <pubDate>Thu, 29 Jun 2023 14:12:39 +0000</pubDate>
      <link>https://dev.to/europeanplaice/start-prolog-with-docker-c0m</link>
      <guid>https://dev.to/europeanplaice/start-prolog-with-docker-c0m</guid>
      <description>&lt;p&gt;Prolog is a programming language that was born in 1972 and known as a logic programming language.&lt;/p&gt;

&lt;p&gt;To run Prolog programs on your computer, using docker is the easiest way. It helps you set up and manage the environment.&lt;/p&gt;

&lt;p&gt;Assuming that you already have docker installed, pull the SWI-Prolog Docker image by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull swipl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and run a container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --name swipl -it swipl /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that in a docker container you started, create a Prolog code. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight prolog"&gt;&lt;code&gt;&lt;span class="ss"&gt;likes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;lisa&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="ss"&gt;likes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;james&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="ss"&gt;likes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;jiro&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;james&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and save it as &lt;code&gt;main.pl&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And then load your Prolog code by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;swipl main.pl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the terminal, you will see a prompt like below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@4d1dad014ee6:~# swipl main.pl
Welcome to SWI-Prolog (threaded, 64 bits, version 9.1.10)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now type Prolog queries at the prompt and receive answers. For example, try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;?- likes(X, lisa).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Prolog interpreter will provide the answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X = sam.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enjoy exploring Prolog!&lt;/p&gt;

</description>
      <category>prolog</category>
      <category>docker</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
