<?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: Niko Sagiadinos</title>
    <description>The latest articles on DEV Community by Niko Sagiadinos (@sagiadinos).</description>
    <link>https://dev.to/sagiadinos</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%2F735814%2F43e7a9c1-e75a-415c-be56-116090c83d6c.png</url>
      <title>DEV Community: Niko Sagiadinos</title>
      <link>https://dev.to/sagiadinos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sagiadinos"/>
    <language>en</language>
    <item>
      <title>Nine Years of Almost: My Raspberry Pi Love and Hate Journey</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Mon, 14 Sep 2026 13:11:53 +0000</pubDate>
      <link>https://dev.to/sagiadinos/nine-years-of-almost-my-raspberry-pi-love-and-hate-journey-3pcc</link>
      <guid>https://dev.to/sagiadinos/nine-years-of-almost-my-raspberry-pi-love-and-hate-journey-3pcc</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;My relationship with the Raspberry Pi has been ambiguous for the last nine years. On the one hand, I think it could be the perfect low-cost digital signage player. But the devil is in the details. And he enjoys fooling people's expectations. In 2019, I even wrote a &lt;a href="https://smil-control.com/magazine/digital-signage-and-raspberry-pi/" rel="noopener noreferrer"&gt;big article for my company&lt;/a&gt; advising against a Raspberry Pi for serious digital signage. Seven years later I published a &lt;a href="https://garlic-signage.com/resources/tutorials/raspberry-pi-digital-signage-setup/" rel="noopener noreferrer"&gt;tutorial&lt;/a&gt; on how to do exactly that. This is the story of what happened in between.&lt;/p&gt;

&lt;p&gt;Since 2017 I have been trying to bring my garlic-player to the Raspberry Pi, and I failed constantly until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pi3 Story
&lt;/h2&gt;

&lt;p&gt;On the Pi 3, FFmpeg accelerated the codec in hardware via the MMAL API, but there was no acceleration for video output. In particular: The Qt lib made the player platform independent. It also had no zero-copy path for display output. The result was crackling video even at 30% CPU load.&lt;/p&gt;

&lt;p&gt;A solution in 2017 was to tinker with Omxplayer. This software decoded completely on the GPU and it worked well for the H.264 codec. A guy named Luca Carlon managed to create a backend which uses parts of FFmpeg and Omxplayer to render videos directly in QML scenes. He named the project &lt;a href="https://github.com/carlonluca/pot" rel="noopener noreferrer"&gt;POT - PiOmxTextures&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first problem: in 2017 garlic-player was based on a QWidget interface, while PoT was QML. It was necessary to split my app in a lib and a player component. Then I coded a QML player as a second option next to the QWidget player part. Days of refactoring just for one video codec. Fortunately, QML was required for Android multimedia anyway. &lt;/p&gt;

&lt;p&gt;In 2018, I managed to stick everything together and got perfectly smooth HD video playback even on a Raspberry Pi Zero. But then another rock hit. For a reason I never found out, it was no longer possible to open a webview component while using PiOmxTextures in QMultimedia. No error. No log. Just nothing.&lt;/p&gt;

&lt;p&gt;Videos now worked great in fullscreen, but &lt;a href="https://garlic-signage.com/garlic-widgets/" rel="noopener noreferrer"&gt;HTML5 Widgets&lt;/a&gt; and websites failed. Multi-zone layouts also became a problem. That meant two garlic-player features which made it different from other free solutions were killed.&lt;/p&gt;

&lt;p&gt;After a few weeks I closed the branch and did not touch it again. The mistake was aiming for perfection. Many companies instead released their Raspberry Pi software and communicated known problems and restrictions. Just to have the marketing line: It runs on a Pi.&lt;/p&gt;

&lt;p&gt;I do not like this style, but that does not mean it did not work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pi4 story
&lt;/h2&gt;

&lt;p&gt;In 2019 the new Pi 4 came out, and I wanted one immediately. Since I lived in Greece at that time, I even asked an expat friend from Munich, who was already in the middle of his travel preparations, to buy a device asap and bring it to Corfu.&lt;/p&gt;

&lt;p&gt;The Pi 4 again came without eMMC flash, but with a new GPU, a much faster CPU and something almost unique for IoT: two HDMI ports.&lt;/p&gt;

&lt;p&gt;The first attempts were promising, as 1080p videos now played without crackling via FFmpeg, but acceleration was available only on the 32-bit OS. The 64-bit Raspbian, which was more interesting for garlic-player, seemed to become an eternal beta, and on top of that without any acceleration. Pick one: modern OS or hardware decoding. Even Luca's solution did not work anymore, as MMAL became deprecated. &lt;/p&gt;

&lt;p&gt;One more disappointment on top: 4K videos worked only in fullscreen in VLC player and only for one specific H.265 profile. No support for 4K with the H.264 codec. 4K in a window and in garlic-player resulted in ugly stuttering, because the hardware overlays were efficient but could not be embedded in complex surfaces like Qt widgets. Garlic-player used FFmpeg via QtAv and additional Qt Multimedia as its multimedia backends at that time. I even added a libvlc implementation as a third backend. It crashed in ways I could not reproduce.&lt;/p&gt;

&lt;p&gt;I soon became frustrated again. On the one hand I was impressed by playing four videos in parallel in the 64-bit beta, but this was software decoding only. Nothing for a serious digital signage project that has to be rolled out on hundreds of remotely maintained screens. A demo is not a product.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/yNVzrWpZ93U" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The machine I technically considered a perfect low-cost 4K digital signage player turned out to be a minefield of pitfalls, "almosts" and "buts".&lt;/p&gt;

&lt;p&gt;In the following years I focused on Android and built the garlic-launcher, because my partner had more and more project requests based on Android hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Years Later
&lt;/h2&gt;

&lt;p&gt;In 2022, I realized for the first time that something had changed significantly. There were some optimization, Wayland, labwc, many small performance enhancements and a V4L2-M2M decoder at least for VLC. I bought a Pi 400, and in 2023 it finally played a surprisingly smooth 4K H.265 video, even in a window. It was not perfect, but it gave me some hope for the next incarnations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pi5 Story
&lt;/h2&gt;

&lt;p&gt;In 2023 Raspberry Pi 5 was released. Although again without eMMC Flash it got at least a battery-buffered real time clock and a PCIe interface. An RTC is crucial for digital signage. After a crash or reboot the player starts with the correct date and time. Playlists now play time-scheduled content correctly even when the player is offline. With the wrong time, TLS certs can fail and the CMS will refuse connections. A two dollar battery fixes all of that.&lt;/p&gt;

&lt;p&gt;But again there were some weird technical decisions: higher energy consumption, which required a fan, and a big slap in the face for digital signage applications, namely hardware acceleration for H.265 only. Everything else was deprecated and decoded on the CPU. The Pi 4 still accelerated h264, the Pi 3 even more. Three generations, and the codec support went down. I realized that the Raspberry Pi would never be the perfect solution for huge digital signage networks, so I lowered my expectations.&lt;/p&gt;

&lt;p&gt;Then Qt5 QWebView started crashing on Raspberry Pi OS based on Debian 12 (Bookworm). The moment you wanted to display a website or an HTML5 widget: crash. No information and no real bug reports, just a recommendation to use Qt6. As far as I know, nobody knows why to this day. So again I was stuck with problems I could not solve for a serious release. &lt;/p&gt;

&lt;p&gt;Qt6 was not an option for me. The migration alone would have been a huge amount of work, and QXmlPatterns was removed in Qt6. The problem is that garlic-player needs XPath 2.0 functions. The only open source C++ library that supports it is XQilla, unmaintained since 2016, badly documented, and dragging in Xerces-C as a second dependency on every platform. Replacing a working XML engine with a dead one plus extra build complexity made no sense. There are other ways to solve this, but not as a side project while chasing a WebView bug.&lt;/p&gt;

&lt;p&gt;I tried to offer experimental images based on pi-gen for the Pi 4, but pi-gen is suboptimal and complex, and after a while it started to produce 32-bit binaries instead of the configured 64-bit ones. At that point I was too annoyed to invest a significant amount of time in finding out why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finally the surprise
&lt;/h2&gt;

&lt;p&gt;In 2026, 3 years after the last stable of garlic-player, which is another story of silly perfectionism claims, I tried again on Bookworm and Trixie. This time with a self compiled version of the last Qt5 lib (5.1.5.19) and surprisingly everything worked. Everything. On the first try. So I decided to release a 1.0 version of garlic-player and offer an official AppImage for the Raspberry Pi. It seems there were some fixes in Qt WebEngine and in Raspberry Pi OS which makes everything working.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what changed after all these years?
&lt;/h2&gt;

&lt;p&gt;Garlic-player on Linux ARM now uses libvlc as its multimedia backend instead of FFmpeg and QMultimedia. That was one of the keys. The setup runs on a Pi 4 and a Pi 5 with a plain SD card. 4K and HD video playback runs smoothly on both devices. And the problem which killed my motivation back in 2018 is gone: multizone with video and webviews at the same time simply works now. The libvlc solved the video part, the Qt fixes solved the webview part.&lt;br&gt;
See the result in this &lt;a href="https://garlic-signage.com/resources/tutorials/raspberry-pi-digital-signage-setup/" rel="noopener noreferrer"&gt;Raspberry Pi Digital Signage Setup Tutorial&lt;/a&gt;, the final conclusion of a journey full of disappointments that I never really gave up on.&lt;/p&gt;

&lt;p&gt;There are known limitations. Libvlc needs X11/xcb, so it only runs in an XWayland context, and there is currently no control daemon for remote restarts or reboots. Both are on the list, but at some point you have to stop nitpicking and ship something that works.&lt;/p&gt;

&lt;p&gt;My biggest lesson was to stop waiting for the perfect version of anything. The obsession with perfection kills ideas, motivation and energy. But as I wrote above, that is another story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pros and Cons of Using a Raspberry Pi for Digital Signage
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frovqc888977epfo3atj8.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frovqc888977epfo3atj8.jpg" alt="Some of my Pi's" width="400" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stable production for years and not permanent new hardware every couple of months like many cheap Android media player overflowing the marketplaces&lt;/li&gt;
&lt;li&gt;A company behind it with a real open source mindset, constantly supporting and updating drivers and the operating system to current versions&lt;/li&gt;
&lt;li&gt;An engaged maker community has created an amazing ecosystem around this device&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Slow hardware and interfaces&lt;/li&gt;
&lt;li&gt;Sometimes poor strategic company decisions&lt;/li&gt;
&lt;li&gt;Lack of eMMC flash&lt;/li&gt;
&lt;li&gt;Poor video acceleration in FFmpeg&lt;/li&gt;
&lt;li&gt;No battery-buffered real time clock until the Pi 5&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What does the Nine Year Older Niko recommend now?
&lt;/h2&gt;

&lt;p&gt;In summary, the difference to my old article from 2019 is not that big. Yes for small installations, no for big ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yes, if:
&lt;/h3&gt;

&lt;p&gt;If you are low on budget, you are able to handle Linux and need to manage a modest number of devices over a network, you can use a Raspberry Pi 4, or better a 5, without any hesitation. Go for it. Especially, as long as you can easily get to the location and fix errors. &lt;/p&gt;

&lt;p&gt;I would say it is even a much better choice than many Android HDMI sticks or the overhyped Amazon Fire Stick. In many HDMI stick projects I have seen overheating problems or Wi-Fi dropouts. My personal opinion, especially about the Amazon stick: they just label a consumer device as digital signage and advertise it as a technical enhancement. Probably some modern Midas touch. Overall it is a black box without easy control over updates and remote maintenance. A Raspberry Pi at least has transparent driver support and continuous updates, proven for over a decade.&lt;/p&gt;

&lt;h3&gt;
  
  
  No, if:
&lt;/h3&gt;

&lt;p&gt;For bigger installations, especially with several far away locations, the risk is too high. In the end, the Raspberry Pi is a tinkering system created for prototyping and makers. Of course, it is usable, but for a big network you need rock solid stability. That is not the place for a tinkering device.&lt;/p&gt;

&lt;p&gt;You should consider serious and proven hardware manufacturers which do not compete just with price. Every buck you obsessively try to save can cost you a multiple of it later, at least when a support team has to travel to the location for a fix. One service trip eats ten Raspberry Pis.&lt;/p&gt;

&lt;p&gt;The Raspberry Pi did not become the perfect digital signage player. I just stopped waiting for it. Finally, after all these years, I still like this little machine.&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>linux</category>
      <category>opensource</category>
      <category>qt</category>
    </item>
    <item>
      <title>Marketing Has Become a Harassment Industry</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Wed, 24 Jun 2026 15:17:10 +0000</pubDate>
      <link>https://dev.to/sagiadinos/marketing-has-become-a-harassment-industry-jd4</link>
      <guid>https://dev.to/sagiadinos/marketing-has-become-a-harassment-industry-jd4</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Cookie dark patterns. Fake urgency. 7 reminder emails. Impossible unsubscribe flows. Marketing isn't helping anymore. It's harassing at an industrial scale.&lt;/p&gt;

&lt;p&gt;I am an open-source programmer in the &lt;a href="https://garlic-signage.com/resources/digital-signage/" rel="noopener noreferrer"&gt;digital signage&lt;/a&gt; industry. I love good marketing. The kind that actually helps. That solves problems. That makes you think, "Damn, I'm glad I found this."&lt;/p&gt;

&lt;p&gt;But let's be honest: That's not what most of us experience anymore.&lt;/p&gt;

&lt;p&gt;What we get instead is a pestering machine. Websites that manipulate you into accepting trackers. Shops that spam you before your order even ships. Services that make cancellation a psychological warfare exercise.&lt;/p&gt;

&lt;p&gt;And the emails? Don't even get me started.&lt;/p&gt;

&lt;p&gt;This isn't marketing. This is what happens when you optimize for metrics instead of humans. When you confuse "reach" with "bombardment." &lt;/p&gt;

&lt;p&gt;So here's my rant about how modern marketing has turned into professional stalking with better automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Websites - Give Me All Your Data
&lt;/h2&gt;

&lt;p&gt;You notice it especially when researching products or writing an article. Do yourself a favor: turn off your ad and tracker blockers. Just once.&lt;/p&gt;

&lt;p&gt;Google makes you land on a page, and BAM — a cookie banner.&lt;/p&gt;

&lt;p&gt;Not just any banner. A manipulative asshole of a dialog, designed to confuse you. "Accept all" in bright blue, bold, and prominent. "Reject"? Hidden. Gray. Small. Or buried three submenus deep so you'll give up and approve every damn tracker.&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%2Fox9n1w5iyuyp4p3dxczn.jpg" 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%2Fox9n1w5iyuyp4p3dxczn.jpg" alt=" " width="799" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You fight your way through. Click through the obstacle course. Finally find what Google promised you at position #1. Start reading and – ZAP – a shitty overlay pops up. &lt;br&gt;
"Subscribe to our Newsletter". Or a dump AI chat wanting to "help" you. Or both at once.&lt;/p&gt;

&lt;p&gt;And then after removing you realize: The article is a scam. The headline had more substance than the entire text. SEO garbage, generated to farm clicks, not to help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fly &amp;amp; Travel
&lt;/h2&gt;

&lt;p&gt;Ever notice how on Agoda, Booking &amp;amp; Co., there's always "only a few rooms left"? What's this permanent manipulative bullshit? Do they think we're that stupid?&lt;/p&gt;

&lt;p&gt;And Agoda? They've perfected the art of being annoying. You open the app. Not to book, just to look, and immediately: Overlay. "Sign up for 10% off!" You close it. Another overlay: "Enable notifications!" Close. "Download our app!" Close. "Last chance for this deal!"&lt;/p&gt;

&lt;p&gt;You haven't even searched yet. You just wanted to check prices.&lt;/p&gt;

&lt;p&gt;But no. Agoda won't let you do what you actually want until you've fought through their gauntlet of interruptions. It's not a travel app anymore; it's an obstacle course with a booking button somewhere at the end. Same for airlines, which manipulate you to book useless insurances, seats, SMS notifications etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shopping
&lt;/h2&gt;

&lt;p&gt;You buy t-shirts. Somewhere. It doesn't matter where. My concrete example was Alpenwert.&lt;/p&gt;

&lt;p&gt;Before the goods arrive, half a dozen emails arrive. And a letter. To my home. Trying to convince you how clever I was to shop there. With a coupon. That I absolutely must leave a review. That I should buy even more.&lt;/p&gt;

&lt;p&gt;After 7 days I asked where the goods were. Response: An AI-generated self-congratulatory email with a hasty apology. PS: "We're proud to be the only ones shipping plastic-free!"&lt;/p&gt;

&lt;p&gt;Two days later: two t-shirts. In DHL plastic bags. Each is individually wrapped in plastic.&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%2F1ijlao26bej0h65i6fiu.jpg" 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%2F1ijlao26bej0h65i6fiu.jpg" alt=" " width="799" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I unsubscribe. Write to support that I will never buy from them again; they should delete my account and want nothing more to read from them.&lt;/p&gt;

&lt;p&gt;A few days later: More mail (snail mail). More email. "Rate your shopping experience!"&lt;/p&gt;

&lt;p&gt;This isn't an isolated case. Almost every online shop thinks they need to keep bombing you. Newsletters that look like help but just scream "Shut up and buy!" "We miss you" emails from portals you visited once.&lt;/p&gt;

&lt;p&gt;A week later: "Come back, here's 15% off!" Another week: "Your cart is waiting!"&lt;/p&gt;

&lt;h3&gt;
  
  
  Side Note: Ecological Bank Advertising
&lt;/h3&gt;

&lt;p&gt;I got an advertising letter from my bank with a printing on the envelope. A green tree with the slogan "Banking ecologically sustainable."&lt;/p&gt;

&lt;p&gt;What drugs are they on?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unsubscribe Hell
&lt;/h2&gt;

&lt;p&gt;Try unsubscribing from Amazon Prime, Canva, or another service.&lt;/p&gt;

&lt;p&gt;Never less than 4 or 5 clicks. At every click you're bombarded with messages about what benefits you're losing. "Are you sure?" "Really sure?" "But look at everything you get!"&lt;/p&gt;

&lt;p&gt;And if you keep using the service until it expires? One wrong click. Bam – subscriber. Again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Email Spam: The Curse of Reach
&lt;/h2&gt;

&lt;p&gt;Apparently I've done something right the past few years. Especially those who think I could be a great customer have discovered me.&lt;/p&gt;

&lt;p&gt;Offer Email. No response.&lt;br&gt;
Reminder email. No response.&lt;br&gt;
Another reminder email. No response.&lt;br&gt;
Another one.&lt;br&gt;
And another.&lt;br&gt;
The logic: "If I just bother him enough, he'll eventually bite."&lt;/p&gt;

&lt;p&gt;Spoiler: No.&lt;/p&gt;

&lt;p&gt;But nobody cares. The main thing is the automation runs. The main thing is the "cadence" is optimized. The main thing is some bullshit metric says that after the 7th email, the conversion rate increases by 0.3%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile Apps
&lt;/h2&gt;

&lt;p&gt;Remember when apps were supposed to make life easier? Yeah, that was cute.&lt;br&gt;
Now you open a free app, and it's just ads. Everywhere. Always.&lt;br&gt;
You want to check the weather? Ad. Want to use a calculator? Ad. Reading an article? Ad between every paragraph. Playing a simple game? Ad after every level. And not just one—forced 30-second video ads you can't skip.&lt;/p&gt;

&lt;p&gt;"Close in 5... 4... 3..." And when you finally can close it? The X button is 2 pixels wide, deliberately placed where you'll accidentally tap the ad instead. Oops, opening App Store. Again.&lt;/p&gt;

&lt;p&gt;But wait, there's more! "Watch this ad for a bonus!" You watch. Another popup: "Double your reward for another ad?" &lt;/p&gt;

&lt;p&gt;You watch. "Triple it?" At this point you've watched more ads than actual content.&lt;br&gt;
And the notifications?&lt;/p&gt;

&lt;p&gt;You're not using the app. The app is using you. You're the product, watching ads, generating data, clicking "Allow notifications" because the app won't work otherwise.&lt;/p&gt;

&lt;p&gt;And the free trial trap? "Start your free trial!" You close it. Open the app again: "Start your free trial!" Every. Single. Time. Until you either pay or delete the app out of pure rage.&lt;/p&gt;

&lt;p&gt;This isn't software. This is a hostage situation with a download button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Social Media
&lt;/h2&gt;

&lt;p&gt;Remember when social media was about connecting with people? Now it's an engagement farm that's perfected the art of manipulating you back into the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  LinkedIn
&lt;/h3&gt;

&lt;p&gt;"People are looking at your profile!" No they're not. It's automated bait. Click through and it's some recruiter from nowhere, or worse. LinkedIn's own algorithm pretending someone viewed you just to boost their metrics. "You appeared in 47 searches this week!" Cool. Who? "Upgrade to Premium to find out!"&lt;/p&gt;

&lt;h3&gt;
  
  
  Facebook &amp;amp; Instagram
&lt;/h3&gt;

&lt;p&gt;Your feed is 80% ads and "suggested content." You look at ONE piece of furniture, and suddenly it's couches for weeks. Want to post a photo? "Boost this post!" Translation: Pay us, or your actual followers won't see it.&lt;/p&gt;

&lt;p&gt;Instagram Stories? Now 50% ads timed perfectly to look like your friend's content until — surprise, surprise — it's crypto trading or weight loss tea.&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%2F6gnv8s2mg196in78m6jv.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%2F6gnv8s2mg196in78m6jv.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  All of them
&lt;/h3&gt;

&lt;p&gt;"Enable notifications so you never miss an update!" Translation: Let us interrupt your life 47 times a day with irrelevant garbage designed to trigger your FOMO.&lt;/p&gt;

&lt;p&gt;You're not using social media. Social media is farming you for engagement, data, and ad impressions. And they've gotten so good at it, you don't even notice anymore.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is drinking paint thinner a job requirement in marketing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Seriously. I now keep a list of companies I will never buy from again. Because they bothered me. Because they couldn't stop. Because they thought reach means constant bombardment.&lt;/p&gt;

&lt;p&gt;But that's not really the point. The point is, they have all forgotten what marketing actually means.&lt;/p&gt;

&lt;p&gt;It's not about assaulting people until they give up. It's about making them happy to hear from you.&lt;/p&gt;

&lt;p&gt;When was the last time a marketing email made you happy?&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can We Do About It?
&lt;/h2&gt;

&lt;p&gt;Here's the thing: We're not powerless.&lt;/p&gt;

&lt;p&gt;Every time you hit unsubscribe, every time you choose a company that doesn't pester you, every time you close an app that's more ads than content, you are voting with your attention. And attention is the only currency these companies actually care about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ad blockers and tracker blockers. Unapologetically.&lt;/li&gt;
&lt;li&gt;Unsubscribe aggressively. Make them work for every email.&lt;/li&gt;
&lt;li&gt;Leave honest reviews mentioning spam and dark patterns.&lt;/li&gt;
&lt;li&gt;Choose companies that respect your time. They exist.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And yeah, about that blacklist idea:&lt;br&gt;
I'm seriously considering building it. A public web app where people can report companies that cross the line from marketing to spamming. With examples. With rankings. A crowd-sourced "wall of shame" for the worst offenders.&lt;/p&gt;

&lt;p&gt;Maybe the only way to make this stop is to make the harassment visible. Public. Documented.&lt;/p&gt;

&lt;p&gt;But I want to hear from you:&lt;/p&gt;

&lt;p&gt;What's your worst marketing assault story? Which companies have you blacklisted? What features would make such an app actually useful? Should it be a wall of shame, a rating system, or something else entirely?&lt;/p&gt;

&lt;p&gt;Drop your ideas in the comments.&lt;/p&gt;

&lt;p&gt;Because marketing isn't dead. But it needs to remember what it's supposed to be: helpful, respectful, and something people are actually glad to receive.&lt;/p&gt;

&lt;p&gt;Until then? Keep that unsubscribe finger ready.&lt;/p&gt;

&lt;p&gt;Originally published at &lt;a href="https://sagiadinos.com/articles/marketing-harassment-industry/" rel="noopener noreferrer"&gt;sagiadinos.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>spam</category>
      <category>privacy</category>
      <category>darkpatterns</category>
    </item>
    <item>
      <title>SaaS or Self-Hosting? What I Would Actually Use?</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Wed, 22 Apr 2026 16:30:06 +0000</pubDate>
      <link>https://dev.to/sagiadinos/saas-or-self-hosting-what-i-would-actually-use-54f</link>
      <guid>https://dev.to/sagiadinos/saas-or-self-hosting-what-i-would-actually-use-54f</guid>
      <description>&lt;p&gt;Since 2011 I've been developing digital signage software, today mostly open source, and I co-own a company that sells both: SaaS licenses and self-hosting support. No hidden agenda here, just 15+ years of watching what actually happens when businesses choose one over the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  When SaaS makes sense
&lt;/h2&gt;

&lt;p&gt;If you're running a handful of screens for a short-term campaign, or you just need something up and running today without touching a server, SaaS is the honest answer. Low upfront cost, automatic updates, nothing to maintain. &lt;/p&gt;

&lt;p&gt;No IT department needed, no server to babysit. For small setups with no sensitive data and no long-term commitment, it's perfectly fine. It's also a legitimate way to test a business idea before committing to infrastructure. A low barrier to entry is a real advantage when you're still figuring out if something works.&lt;/p&gt;

&lt;p&gt;The same applies to identity management. Hooking into an existing SSO or using a provider like Azure AD or Okta means your team can log in from day one without setting up anything. Practical, fast, no friction. Until it isn't anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it gets uncomfortable
&lt;/h2&gt;

&lt;p&gt;The subscription that felt cheap in year one looks different in year three. But that's not even my main concern. What I see more often: vendors get acquired, prices double, roadmaps shift, and suddenly your screens depend on decisions made in a boardroom you have no access to. Your data sits on infrastructure you don't control, often in jurisdictions with different privacy laws than yours. And when the provider has an outage, you wait. That's it. You just wait.&lt;/p&gt;

&lt;p&gt;This isn't a digital signage problem. It's an SaaS and also cloud problem. Broadcom acquired &lt;a href="https://www.computerworld.com/article/1612211/killing-vmware.html" rel="noopener noreferrer"&gt;VMware&lt;/a&gt; and overnight turned reasonable licensing into something many companies simply couldn't afford anymore. Microsoft can lock your entire organization out of Teams and Exchange the moment a license lapses, payment fails, or a political decision is made. &lt;/p&gt;

&lt;p&gt;Twitter &lt;a href="https://techcrunch.com/2023/02/01/twitter-to-end-free-access-to-its-api/" rel="noopener noreferrer"&gt;killed&lt;/a&gt; its API and took dozens of businesses that had built on it down with it. Google has a &lt;a href="https://killedbygoogle.com/" rel="noopener noreferrer"&gt;graveyard&lt;/a&gt; of discontinued products that people and companies relied on. Heroku &lt;a href="https://help.heroku.com/RSBRUH58/removal-of-heroku-free-product-plans-faq" rel="noopener noreferrer"&gt;killed&lt;/a&gt; its free tier and thousands of small projects went dark the same day. The pattern is always the same: it works great until someone else makes a decision.&lt;/p&gt;

&lt;p&gt;In digital signage the consequences are just more visible. Your screens go black. In a hotel lobby, a hospital corridor, a retail store. No workaround, no fallback. You wait for someone else to fix their problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Hosting
&lt;/h2&gt;

&lt;p&gt;Self-hosting means you run the software on your own infrastructure. Your server, your data, your rules. No one can double your prices, kill the product, or lock you out. You decide when to update, whether to update, and what to do with your own data.&lt;br&gt;
That's already a fundamentally different position to be in.&lt;/p&gt;

&lt;h3&gt;
  
  
  With FOSS it goes further
&lt;/h3&gt;

&lt;p&gt;Open source adds another layer. The code is auditable, you're not trusting a black box. If I stop developing &lt;a href="https://garlic-signage.com" rel="noopener noreferrer"&gt;GarlicSignage&lt;/a&gt; tomorrow because I choose to continue my life as a buddhistic monk, the code stays. Someone can fork it, maintain it, build on it. The community doesn't depend on my business decisions. That's not a feature, that's a guarantee.&lt;/p&gt;

&lt;p&gt;For regulated environments like healthcare or the public sector, auditability isn't a nice-to-have. It's often a requirement. You can't put a closed-source black box on a hospital network and call it compliant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part about self-hosting
&lt;/h2&gt;

&lt;p&gt;Self-hosting isn't free in the sense of effortless. Someone has to set it up, keep it running, and deal with it when something breaks. That's a real cost, just not one that shows up on an invoice.&lt;/p&gt;

&lt;p&gt;For a small business with no technical background, "just spin up a server" is not helpful advice. You need someone who knows what they're doing. That might be an employee, a freelancer, or a managed hosting provider. Either way, it's a dependency of a different kind, one you at least have some control over.&lt;/p&gt;

&lt;p&gt;Updates don't happen automatically. That's a feature if you value stability and hate surprises, and a liability if you ignore them for two years and suddenly have a security problem. Self-hosting rewards people who take it seriously and punishes those who don't.&lt;/p&gt;

&lt;p&gt;Backups are your responsibility. Monitoring is your responsibility. If your server goes down at 3am, no one is going to fix it unless you or someone you hired does. There's no support ticket that makes it someone else's problem.&lt;/p&gt;

&lt;p&gt;And then there's the setup itself. Depending on what you're running, it can be straightforward or a rabbit hole. A well-documented open source project with an active community makes a massive difference here. A poorly maintained one with no docs is a different story entirely.&lt;/p&gt;

&lt;p&gt;None of this is a reason to avoid self-hosting. But going in with romantic ideas about full control without understanding what that control costs you in time and attention is how people end up abandoning it halfway through and blaming the software.&lt;/p&gt;

&lt;p&gt;The question isn't whether you can self-host. It's whether you're willing to own it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it Actually Comes Down to
&lt;/h2&gt;

&lt;p&gt;This was never a price discussion. SaaS costs less to start and more to leave. Self-hosting costs more upfront in time and attention and pays off the longer you run it. &lt;/p&gt;

&lt;p&gt;But the real question is how much control you're willing to hand over, and to whom. I offer both models because both have their place. But if you ask me what I'd run my own infrastructure on: something I can see, touch, and own. Not because I'm ideological about it, but because I've watched too many businesses rebuild from scratch after someone else made a decision for them.&lt;/p&gt;

&lt;p&gt;My skepticism about depending on other people's software decisions goes back further than that. In 1992 I was an enthusiastic &lt;a href="https://en.wikipedia.org/wiki/OS/2" rel="noopener noreferrer"&gt;OS/2&lt;/a&gt; user. Technically superior to Windows, great object-orientated GUI concept, backed by IBM, and then slowly strangled. Partly because it wasn't profitable enough, partly because Microsoft &lt;a href="https://en.wikipedia.org/wiki/Halloween_documents" rel="noopener noreferrer"&gt;made sure it wouldn't be&lt;/a&gt;. Everyone who had built on it had to start over. That stuck with me.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://sagiadinos.com/articles/saas-or-self-hosting-what-i-would-use/" rel="noopener noreferrer"&gt;sagiadinos.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>opensource</category>
      <category>saas</category>
      <category>vendorlockin</category>
    </item>
    <item>
      <title>Open Source Digital Signage: What the License Doesn't Tell You</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Thu, 19 Mar 2026 17:51:50 +0000</pubDate>
      <link>https://dev.to/sagiadinos/open-source-digital-signage-what-the-license-doesnt-tell-you-3d15</link>
      <guid>https://dev.to/sagiadinos/open-source-digital-signage-what-the-license-doesnt-tell-you-3d15</guid>
      <description>&lt;p&gt;"Open Source" sounds like control. In practice it often means: free to get in, stuck later.&lt;/p&gt;

&lt;p&gt;The license tells you nothing about whether you can actually run the system yourself, whether your screens keep running when the server goes down, or whether your content is stored in open formats or locked into a proprietary schema. That's decided by the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Matters
&lt;/h2&gt;

&lt;p&gt;Four things separate genuinely independent systems from vendor-dependent ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting&lt;/strong&gt;: Does it run on your own infrastructure, or does it require external servers you don't control?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Player/CMS separation&lt;/strong&gt;: If the server goes down, do your screens go dark? A decoupled architecture means players continue their last schedule independently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open standards&lt;/strong&gt;: Proprietary playlist formats lock your content to one vendor. &lt;a href="https://garlic-signage.com/resources/technology/digital-signage-smil/" rel="noopener noreferrer"&gt;SMIL&lt;/a&gt; is the open W3C alternative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment model&lt;/strong&gt;: Docker or bare-metal vs. vendor-specific runtimes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A system that ticks all four stays portable long-term. One that doesn't will eventually hold you hostage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six Platforms Compared
&lt;/h2&gt;

&lt;p&gt;I evaluated GarlicSignage, Screenly Anthias, Concerto, Xibo, DigitalSignage.com, and signageOS against these criteria.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Software&lt;/th&gt;
&lt;th&gt;Open Source&lt;/th&gt;
&lt;th&gt;Self-hosted&lt;/th&gt;
&lt;th&gt;Vendor Dependency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GarlicSignage&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screenly Anthias&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concerto&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Xibo&lt;/td&gt;
&lt;td&gt;✔ (core)&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalSignage.com&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;signageOS&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screenly Anthias&lt;/strong&gt; is genuinely open source, but designed for single screens. No central CMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concerto&lt;/strong&gt; is best for campuses or organizations where multiple departments manage their own content with a moderation workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xibo&lt;/strong&gt; has the broadest feature set and an active community, but production setups will likely touch paid components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DigitalSignage.com&lt;/strong&gt; uses open source messaging as an acquisition funnel. Core functionality runs on their cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;signageOS&lt;/strong&gt; is enterprise device abstraction across 41+ hardware vendors. Not for self-hosted use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GarlicSignage&lt;/strong&gt; is SMIL-based, fully self-hosted, Player and CMS are strictly separated. Setup requires technical knowledge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Uncomfortable Pattern
&lt;/h2&gt;

&lt;p&gt;Several platforms in this space publish parts of their code as open source while keeping device management, hosting, or core features tied to their own services. Open license, closed system.&lt;/p&gt;

&lt;p&gt;That model is commercially legitimate. But if you're planning to run 50 or 200 screens on a platform, you should know whether you own the infrastructure or you're renting it before you build on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;I'm the developer of GarlicSignage. I've tried to evaluate the other platforms as fairly as possible, but take that context into account.&lt;/p&gt;

&lt;p&gt;The full architectural comparison, including details on Player/CMS decoupling and SMIL support, is in the &lt;a href="https://garlic-signage.com/resources/technology/digital-signage-open-source/" rel="noopener noreferrer"&gt;original article&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>digitalsignage</category>
      <category>selfhosted</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Stop Calling LLMs AI</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Wed, 05 Nov 2025 08:34:43 +0000</pubDate>
      <link>https://dev.to/sagiadinos/stop-calling-llms-ai-1ihk</link>
      <guid>https://dev.to/sagiadinos/stop-calling-llms-ai-1ihk</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;This article explains why LLMs are useful tools, but calling them "AI" is dumb marketing bullshit that leads to bad decisions, wasted money, and unrealistic expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hypes are Everywhere
&lt;/h2&gt;

&lt;p&gt;When I scroll through LinkedIn, Reddit, or various blogs, I always read the same annoying phrases about our future: AI will soon replace nearly every engineer, will change the world, or, depending on who's talking, enslave us.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's Just Marketing, Stupid
&lt;/h3&gt;

&lt;p&gt;AI is just a marketing slogan. Because this is what marketing does. It shouts loud and sells smoke and mirrors.&lt;/p&gt;

&lt;p&gt;What we call AI technically is only a simulation of "intelligence."&lt;/p&gt;

&lt;p&gt;Take Large Language Models, for example. Not magic, not conscious, not smart.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large&lt;/strong&gt;: the immense amount of data it has been trained on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: the primary function is to process and generate human language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt;: it is a statistical model, a computational framework, not a living entity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Same Story with Image Generators
&lt;/h3&gt;

&lt;p&gt;I know it is getting boring, but nothing has changed and nothing will change: the so-called AI trained on the world's knowledge and draws people with three or four fingers. &lt;/p&gt;

&lt;p&gt;I still get this in 2025 with different tools like Dall-E, Gemini, Stable Diffusion, Flux etc. Especially if you need content that is more complex than a simple portrait of a cute smiling person.&lt;/p&gt;

&lt;p&gt;Different tech, same limitation: they're pattern-matching machines, not intelligent creators.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intelligence is a Loaded Term
&lt;/h3&gt;

&lt;p&gt;"Intelligence" in humans is multifaceted, encompassing reasoning, problem-solving, creativity, emotional understanding, social skills, and more.&lt;/p&gt;

&lt;p&gt;An LLM can perform certain tasks that might be considered "intelligent" (like generating coherent text, answering questions, or even writing code). But this "intelligence" is narrow, specific to the data it's trained on and the algorithms that govern the responses.&lt;/p&gt;

&lt;p&gt;Language models lack common sense, intuition, and the ability to truly learn from experience in the same way a human does. Their "understanding" is statistical, not conceptual.&lt;/p&gt;

&lt;p&gt;That's why you get hallucinated facts, broken code, and three-fingered portraits. Sure, there might be &lt;a href="https://www.nature.com/articles/d41586-025-00068-5#:~:text=AI%20hallucinations%20can't%20be,techniques%20can%20limit%20their%20damage" rel="noopener noreferrer"&gt;workarounds&lt;/a&gt;, but you can't patch away a fundamental limitation. These aren't bugs. They're features of a system that mimics understanding without actually having any.&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%2Feazz5s0d4y57osg13lrr.jpg" 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%2Feazz5s0d4y57osg13lrr.jpg" alt=" " width="798" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal Experiences
&lt;/h2&gt;

&lt;p&gt;I have been working with LLMs for years and also use them as support in my current &lt;a href="https://garlic-signage.com/garlic-hub/" rel="noopener noreferrer"&gt;garlic-hub&lt;/a&gt; project. &lt;/p&gt;

&lt;p&gt;They have advantages in researching, translations, summaries, code explanations, concepting, prototyping, and documentation, but not for writing production code. &lt;/p&gt;

&lt;p&gt;Even with precise prompts, you’ll get too often inconsistent, crappy code that breaks the moment you touch it.&lt;/p&gt;

&lt;p&gt;Let's try to write unit tests based on your own classes when they consist of more than getters and setters.&lt;/p&gt;

&lt;p&gt;Among other oddities, you will find the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testing of private methods&lt;/li&gt;
&lt;li&gt;mocking of inherited methods&lt;/li&gt;
&lt;li&gt;even mocking the testing class&lt;/li&gt;
&lt;li&gt;inconsistency in the naming, although prompts are specific&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's be clear: unit tests are designed to test isolated, manageable pieces of code. If a tool marketed as "intelligent" can't even write tests for a single class reliably, how is it supposed to automate software development or rule the world?&lt;/p&gt;

&lt;h3&gt;
  
  
  But You Need to Use it Right
&lt;/h3&gt;

&lt;p&gt;If something doesn't work as expected, the typical response is: "You're using it wrong."&lt;/p&gt;

&lt;p&gt;The AI evangelists insist you need to change how you program; stop being a programmer, start being a software engineer. &lt;/p&gt;

&lt;p&gt;Their vision: create detailed documentation of the modules you need and let the agent do the work, including unit tests.&lt;/p&gt;

&lt;p&gt;If something's buggy or needs to change, you update the documentation, let the agent regenerate the code, and review again. They call this "vibe coding," and according to them, it saves tons of time.&lt;/p&gt;

&lt;p&gt;Sounds reasonable at first glance? Let's dig into that.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Time Saving Myth
&lt;/h3&gt;

&lt;p&gt;Of course, starting something new leads to fast results. At first! Eventually, it consumes more and more time.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical debt:&lt;/strong&gt; AI-generated code is often suboptimal, buggy, difficult to maintain, poorly documented, insecure, or not scalable. It just works is not enough.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging and correction:&lt;/strong&gt; Debugging, fixing bugs, or adding new features to this code base later on is more labor-intensive than writing clean code manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of understanding:&lt;/strong&gt; The reality is that people might review the first times, but as it seems to work as expected at first, often they blindly adopt code without understanding the implementation decisions. This makes maintenance and changes a high risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redevelopment:&lt;/strong&gt; If the system needs to grow or scale, vibe code can become so unusable that a complete redevelopment is necessary – negating all the initial time savings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The immediate productivity gains (rapid prototyping) are essentially a “high-interest loan on the future” of the code base, which will later become due in the form of high maintenance costs. &lt;/p&gt;

&lt;h3&gt;
  
  
  History is Repeated
&lt;/h3&gt;

&lt;p&gt;The same often happens with using 3rd-Party libs like in Node.js or frameworks. First, they save you time, but creating software is only the start. Maintaining in the long run is the real challenge.&lt;/p&gt;

&lt;p&gt;Remember the no-code circus? Similar crappy promises, different label, same dead end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Perceived Efficiency Study
&lt;/h3&gt;

&lt;p&gt;An interesting &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;METR study&lt;/a&gt; shows: Experienced developers only think they are 24% faster with AI, but they're actually about 20% slower&lt;/p&gt;

&lt;p&gt;If you ask AI Bros about this, they will yell that these study is based on wrong assumptions, and you need to learn much about how to use vibe coding. Remember this "You Need to Use it Right"? &lt;/p&gt;

&lt;p&gt;But marketing talks only about "intelligence". Every AI coding company tells us how easy their tools are to use and advertise "reviews" of people who claim to realize huge projects in a few days without even programming skills.&lt;/p&gt;

&lt;p&gt;But at the moment you start measuring a tool according to the promises, and it fails, the excuses come suddenly: You need to dig into endless hours and &lt;a href="https://arxiv.org/abs/2505.19443" rel="noopener noreferrer"&gt;months of learning&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%2Fef8hy02y67rvz8gxsuyk.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%2Fef8hy02y67rvz8gxsuyk.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what's the conclusion?&lt;/strong&gt; You should spend months studying to achieve a rather questionable time saving that is more felt than real?&lt;/p&gt;

&lt;p&gt;You will never read this from the AI-Bros.&lt;br&gt;
What you also never read is about quality assurance and code maintenance.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Junior Developer Problem
&lt;/h3&gt;

&lt;p&gt;Another point is often ignored, too. To review code, you need skills, years of experience and maybe some fails.&lt;/p&gt;

&lt;p&gt;If "vibe coding" becomes standard, how do junior developers learn their craft? You can't learn to review code you never learned to write. We'd be creating a generation of developers who can prompt but can't program. They'd be like consultants without expertise.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLM Training Reaches Limits
&lt;/h2&gt;

&lt;p&gt;The so-called revolution from LLM is based on scraping, storing and searching huge amounts of data. What the ignorant world calls AI is just a highly trained auto-complete feature. &lt;/p&gt;

&lt;p&gt;But there's only one Stack Overflow, one YouTube, one Wikipedia to scrape. We've already done that, and now we're running out of training material. &lt;a href="https://theconversation.com/researchers-warn-we-could-run-out-of-data-to-train-ai-by-2026-what-then-216741" rel="noopener noreferrer"&gt;The Conversation&lt;/a&gt;, &lt;a href="https://www.businessinsider.com/ai-training-data-shortage-slop-goldman-sachs-2025-10#:~:text=The%20meteoric%20rise%20of%20artificial,Exchanges%22%20podcast%20published%20on%20Tuesday." rel="noopener noreferrer"&gt;Business Insider&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The widely propagated solution? Use synthetic data, which means: LLMs generated data to train other LLMs. Nvidia is already building a synthetic data generator called &lt;a href="https://arxiv.org/html/2406.11704v1" rel="noopener noreferrer"&gt;Nemotron&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, more and more text on the web is LLM-generated, and it's nearly &lt;a href="https://medium.com/better-programming/detecting-llm-generated-texts-befce4426da9" rel="noopener noreferrer"&gt;impossible&lt;/a&gt; to distinguish machine generated text from human written content.&lt;/p&gt;

&lt;p&gt;How hard is it to see where this leads? Training AI on AI-generated content will inevitably cause &lt;a href="https://www.scimex.org/newsfeed/using-ai-to-train-ai-could-cause-them-to-collapse" rel="noopener noreferrer"&gt;model collapse and degeneration&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;AI Bros do not discuss this and companies chasing investor money keep pushing their "revolution" at all costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Driven Hype
&lt;/h2&gt;

&lt;p&gt;Unfortunately, this mix of agitators, marketers, and their uncritical followers has created a relentless hype cycle.&lt;/p&gt;

&lt;p&gt;Plenty of mediocre ex-managers and corporate has-beens crave public visibility. Some are paid to push a narrative; others genuinely see themselves as visionaries who deserve an audience.&lt;/p&gt;

&lt;p&gt;All of them open their mouths to fill the air with empty, meaningless words. Their followers, in turn, are simply cheerleading. If you express skepticism, the retort is often: "Hey, Bill Gates is a billionaire. He knows what is going on." No, he knew nothing. He's speculating just like thousands of others. But for some reason, people trust vague predictions from wealthy people as if wealth equals expertise.&lt;/p&gt;

&lt;p&gt;This creates a self-fulfilling prophecy: shortsighted decision-makers fear missing out if they don't jump on the AI bandwagon. So they start slapping "AI" on everything, whether it makes sense or not.&lt;/p&gt;

&lt;p&gt;In the end, the hype just fuels a reckless, resource-guzzling industry that burns cash and electricity.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Absurdities from My Industry
&lt;/h2&gt;

&lt;p&gt;My home is the &lt;a href="https://garlic-signage.com/" rel="noopener noreferrer"&gt;digital signage industry&lt;/a&gt; and while others face similar nonsense, here it’s downright absurd. &lt;br&gt;
Companies constantly invent pointless "features" just to slap 'AI' somewhere on their landing pages. &lt;br&gt;
Like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Display chatbots:&lt;/strong&gt; because apparently people want to have conversations with a screen showing ads, instead of just reading the information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"AI-optimized" ad placement:&lt;/strong&gt; algorithms that optimize for metrics nobody asked for, ignoring actual campaign goals. The AI decides what's "best," not your business objectives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictive Audience AI:&lt;/strong&gt; tools that claim to forecast audience behavior and generate impressive projections based on laughably small datasets. Garbage in, "insights" out. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Age/gender estimation:&lt;/strong&gt; computer vision that's been around for years, now rebranded as "AI-powered." It fails in noisy environments, struggles with viewing angles, and provides data that's rarely actionable anyway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this solves real problems. New software features should be driven by customer pain points, not by marketing departments desperate for buzzwords.&lt;/p&gt;

&lt;p&gt;Whenever you see a digital signage company shouting about AI, remember this: it’s not built to help you or your business. It’s built to sell you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Calling LLMs AI
&lt;/h2&gt;

&lt;p&gt;I'm not worried about a Terminator future. There's no technical singularity coming from this approach.&lt;/p&gt;

&lt;p&gt;This industry is now running into problems, because they've already scraped most available data. &lt;/p&gt;

&lt;p&gt;Plans to generate synthetic data to train will lead to degeneration. &lt;/p&gt;

&lt;p&gt;An LLM is a useful tool, that impressively simulates human behavior. No more, no less. It can perform tasks that might seem intelligent.&lt;/p&gt;

&lt;p&gt;But their capabilities are just reflections of data and algorithms and it is not a sign of true consciousness or human-like intelligence. &lt;/p&gt;

&lt;p&gt;Here's the reality: LLMs are calculators that learned to talk. Nobody panicked that calculators would replace mathematicians. Stop pretending autocomplete will replace engineers.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>vibecoding</category>
      <category>marketing</category>
    </item>
    <item>
      <title>SpicyCamCast: Lightweight Camera and Screencast Integration for JavaScript</title>
      <dc:creator>Niko Sagiadinos</dc:creator>
      <pubDate>Wed, 29 Jan 2025 12:50:56 +0000</pubDate>
      <link>https://dev.to/sagiadinos/spicycamcast-lightweight-camera-and-screencast-integration-for-javascript-65d</link>
      <guid>https://dev.to/sagiadinos/spicycamcast-lightweight-camera-and-screencast-integration-for-javascript-65d</guid>
      <description>&lt;h2&gt;
  
  
  Why I Built SpicyCamCast
&lt;/h2&gt;

&lt;p&gt;While developing a new digital signage application, I needed reliable screencast and webcam recording capabilities. Existing libraries, though capable, often came with unnecessary complexity or were not clear enough. I saw an opportunity to create something more straightforward.&lt;/p&gt;

&lt;p&gt;SpicyCamCast emerged from this need – a minimal, purpose-built library that handles media capture with minimal fuss. It's not just another webcam library; it's a practical solution born from real-world digital signage development challenges.&lt;/p&gt;

&lt;p&gt;The result is now published on &lt;a href="https://github.com/sagiadinos/SpicyCamCast/tree/main" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;SpicyCamCast is a minimal JavaScript library (under 3KB) that simplifies camera and screencast integration in web applications. Built with modern JavaScript features, it provides an intuitive API for managing video streams and capturing photos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight&lt;/strong&gt;: Less than 3KB, keeping your application bundle small&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern JavaScript&lt;/strong&gt;: Leverages ES6 classes, private fields, promises, and async/await&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual Functionality&lt;/strong&gt;: Handles both camera streams and screen recording&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Photo Capture&lt;/strong&gt;: Supports multiple formats (JPEG, PNG, WebP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device Management&lt;/strong&gt;: Easy video device detection and selection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Camera Integration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import { SpicyCam } from './src/SpicyCamCast.js';

const videoElement = document.querySelector('video');
const spicyCam = new SpicyCam(videoElement);

// Start camera stream
spicyCam.justStart()
  .then(() =&amp;gt; console.log('Camera started'))
  .catch(error =&amp;gt; console.error('Error:', error));

// Capture photo
const canvasElement = document.querySelector('canvas');
const photoDataUrl = spicyCam.capturePhotoAsJpeg(canvasElement);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Screen Recording
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { SpicyCast } from './src/SpicyCamCast.js';

const videoElement = document.querySelector('video');
const spicyCast = new SpicyCast(videoElement);

spicyCast.startScreencast()
  .then(() =&amp;gt; console.log('Screencast started'))
  .catch(error =&amp;gt; console.error('Error:', error));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Capturing Photo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const canvasElement = document.querySelector('canvas');
const photoDataUrl = spicyCam.capturePhotoAsJpeg(canvasElement);
console.log('Captured photo:', photoDataUrl);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SpicyCamCast provides flexible photo capture from active video streams. Capture in multiple formats:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// JPEG capture
const jpegPhoto = spicyCam.capturePhotoAsJpeg(canvasElement);

// PNG capture for lossless quality
const pngPhoto = spicyCam.capturePhotoAsPng(canvasElement);

// WebP for optimal compression
const webpPhoto = spicyCam.capturePhotoAsWebp(canvasElement);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each method returns a data URL string that can be used directly in &lt;a href="" class="article-body-image-wrapper"&gt;&lt;img&gt;&lt;/a&gt; elements or uploaded to servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SpicyCamCast aims to simplify media capture for web developers. By focusing on essential features and providing a concise API, it offers a lightweight and efficient solution for integrating camera and screencast functionality into your projects. &lt;/p&gt;

&lt;p&gt;Whether you're building interactive web applications, creating digital signage experiences, or developing video-centric tools, SpicyCamCast provides a solid foundation for your media capture needs.&lt;/p&gt;

&lt;p&gt;I encourage you to explore the full documentation and examples on &lt;a href="https://github.com/sagiadinos/SpicyCamCast/tree/main" rel="noopener noreferrer"&gt;GitHub - SpicyCamCast&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webcam</category>
      <category>screencast</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
