<?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.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>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>
