<?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: azabroflovski</title>
    <description>The latest articles on DEV Community by azabroflovski (@broflovski).</description>
    <link>https://dev.to/broflovski</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%2F342674%2F7299c34e-a44c-46be-9f31-7b9eb713202d.png</url>
      <title>DEV Community: azabroflovski</title>
      <link>https://dev.to/broflovski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/broflovski"/>
    <language>en</language>
    <item>
      <title>Why Virtual DOM Is No Longer Needed</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Sat, 22 Mar 2025 15:57:29 +0000</pubDate>
      <link>https://dev.to/broflovski/why-virtual-dom-is-no-longer-needed-107h</link>
      <guid>https://dev.to/broflovski/why-virtual-dom-is-no-longer-needed-107h</guid>
      <description>&lt;p&gt;The Virtual DOM (VDOM) is no longer necessary. The web isn’t stagnant, and neither are browsers. Yet, I still see people praising it as something cutting-edge and relevant without understanding what it actually is or why it was needed in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s Overhead
&lt;/h2&gt;

&lt;p&gt;To understand why VDOM become overhead, let’s go back to a time when it was actually a useful hack.&lt;/p&gt;

&lt;p&gt;We all remember that manipulating the DOM tree is an "expensive" operation, requiring re-rendering/recalculating what the user sees. The core idea was to minimize direct DOM operations.&lt;/p&gt;

&lt;p&gt;Here’s how it worked: create an in memory copy of the DOM (the virtual DOM), calculate the diff between the current and new state, then apply only the necessary changes to the real DOM. Additionally, these changes are batched and executed in one go.&lt;/p&gt;

&lt;p&gt;Sounds cool? Right? But today, it’s serious overhead, especially when the DOM is huge. Don’t forget: we’re creating a full copy of the DOM in memory, two copies (not one), to then compute diffs, which itself takes time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browsers Have Evolved
&lt;/h2&gt;

&lt;p&gt;Browsers aren’t stuck in 2010. Directly updating the DOM is simpler and far less costly than it was 10–15 years ago. Your browser has long since optimized this process, and hardware has improved drastically. Yet, we’re still clinging to the VDOM ritual on top of these optimizations.&lt;/p&gt;

&lt;p&gt;If you genuinely believe your JavaScript ritual is faster than C/C++ (which powers browsers), you’re deeply mistaken. You’re just forcing the browser to perform a bunch of extra operations instead of letting it update the DOM directly.&lt;/p&gt;

&lt;p&gt;Look at Svelte, Solid, or Angular, they don’t use VDOM and they can still update only the necessary parts of the UI.&lt;/p&gt;

&lt;p&gt;Soon, Vue will join their club by ditching VDOM (hello Vue Vapor).&lt;/p&gt;

&lt;h2&gt;
  
  
  A Note on Vue Vapor
&lt;/h2&gt;

&lt;p&gt;This is a version of Vue that offers rendering without VDOM.&lt;/p&gt;

&lt;p&gt;They’ve already merged Vapor into vue/core repository, and judging by the commits, active development is underway. In the near future, they’ll drop the VDOM.&lt;/p&gt;

&lt;p&gt;The results speak for themselves:&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%2Fcl1cro6uj28ek8kahu5o.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%2Fcl1cro6uj28ek8kahu5o.png" alt="Image description" width="656" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When asked about the Virtual DOM in your next interview, confidently state that it’s outdated and pointless. Directly updating the DOM is now simpler and cheaper, and the era when it was "expensive" is long gone.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>vue</category>
    </item>
    <item>
      <title>My Journey into Elixir/Erlang (Part One)</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Sat, 15 Mar 2025 19:53:15 +0000</pubDate>
      <link>https://dev.to/broflovski/my-journey-into-elixirerlang-part-one-1kn</link>
      <guid>https://dev.to/broflovski/my-journey-into-elixirerlang-part-one-1kn</guid>
      <description>&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%2Fsu1j1dtj4jzfosl0dzy4.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%2Fsu1j1dtj4jzfosl0dzy4.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently, I started diving into the world of Elixir and Erlang/OTP. If, like me, you thought these technologies were just "hipster stuff," this post might change your mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Did I Start Learning It?
&lt;/h2&gt;

&lt;p&gt;I had heard about Elixir before. It occasionally popped up in my feed, but without much impact. It just seemed like another "hipster" language to me.&lt;/p&gt;

&lt;p&gt;The turning point came when our tech director at work (shoutout to Dima if you're reading this) launched a full scale campaign promoting the language. He gave such an inspiring speech that I was ready to storm Berlin a second time.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Bit of Context
&lt;/h3&gt;

&lt;p&gt;Before this, I had been writing servers in go, php, and nodejs. I had a solid understanding of concurrency and how to write parallel code. In go, I had goroutines; in nodejs, threads/libuv; and in php... well, either the nightmare of pthreads or the newer fibers, which made things a bit better. It all worked fine, this was how people wrote concurrent code, and that was that.&lt;/p&gt;

&lt;p&gt;And then BEAM (the virtual machine that runs Elixir/Erlang code) kicked down the door and shattered everything I thought I knew about concurrency. This isn’t some shabby setup like on the JVM; (sorry, i'm jvm hater).&lt;/p&gt;

&lt;p&gt;I started getting excited about Elixir. Flashbacks hit me of all the things I could have done better in my past projects. It was a night-and-day difference, and I regretted not jumping into this ecosystem sooner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning Curve
&lt;/h2&gt;

&lt;p&gt;It's true that there aren't as many learning resources compared to the languages I was used to, and the community is much smaller. But honestly, that wasn’t a big issue for me. Elixir has excellent documentation, well structured and clear, so that’s where I started.&lt;/p&gt;

&lt;p&gt;The syntax was easy to pick up. My muscle memory kicked in since I had played around with Ruby years ago (purely for Rails). Getting used to it wasn't hard, and the reward was massive the joy of pattern matching alone made it worth it. Of course, this is just my personal experience; your mileage may vary.&lt;/p&gt;

&lt;p&gt;I started by writing small scripts, and my colleagues at work threw some Elixir tasks my way. My hands quickly got used to it. Of course, I understood the power of Elixir; as I mentioned earlier, I was swayed by a powerful speech about BEAM and Elixir.&lt;/p&gt;

&lt;p&gt;When I finally got to Erlang/OTP and really explored BEAM, that's when things got truly exciting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Are the Threads?
&lt;/h2&gt;

&lt;p&gt;I asked myself... just kidding. That’s not how things work here. Out of habit, I Googled "Elixir threads," looking for something like spawn_thread() or async do. But in Elixir, things are built differently.&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%2F47oegp0t5tsd244cm741.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%2F47oegp0t5tsd244cm741.png" alt="Image description" width="736" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Elixir doesn’t have threads in the traditional sense. Everything here is based on processes (hello, Actor Model).&lt;/p&gt;

&lt;h2&gt;
  
  
  Processes
&lt;/h2&gt;

&lt;p&gt;These aren’t OS processes, they're super lightweight and run inside BEAM. They don’t share memory, don’t block each other, and operate independently.&lt;/p&gt;

&lt;p&gt;You can spawn hundreds of thousands of processes at the same time hell, even a million (and I’m not just throwing around big numbers; we’ll come back to that). More importantly, they use very little memory and switch context in milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  What If a Process Crashes?
&lt;/h3&gt;

&lt;p&gt;Now, this is where things get interesting. Elixir has a completely different philosophy: no recover(), no try/catch. If something goes wrong? Let it crash! (Yes, "let it crash" is an actual design principle.)&lt;/p&gt;

&lt;p&gt;To understand how cool this is, imagine this:&lt;/p&gt;

&lt;p&gt;You spin up an HTTP server in Node.js, and it crashes because of an error in a single request. Instead of a full system crash, it just restarts itself without your intervention. Or imagine a worker goroutine in Go dies, but the system automatically brings it back to life.&lt;/p&gt;

&lt;p&gt;Sounds good? Well, in Elixir, you don’t have to imagine it, it’s built-in by default. The entire architecture is designed around BEAM and supervisors, which restart crashed processes automatically. You don’t need to do much just trust BEAM.&lt;/p&gt;

&lt;p&gt;I feel like someone who spent their whole life tightening screws by hand, and then someone handed me a power drill. Joking aside, I’m not saying Node.js or Go is bad, it’s just that Elixir plays by completely different rules, and I love it.&lt;/p&gt;

&lt;h2&gt;
  
  
  About BEAM
&lt;/h2&gt;

&lt;p&gt;Why does all this work so amazingly well? Because Elixir runs on BEAM (the virtual machine), which was originally developed for telecommunications (hi, Erlang).&lt;/p&gt;

&lt;p&gt;Back when people had to worry about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoiding thread-related disasters&lt;/li&gt;
&lt;li&gt;Handling failures&lt;/li&gt;
&lt;li&gt;Preventing memory leaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Elixir, you just trust BEAM. This VM comes from the telecom world, where downtime means lost revenue. It does things I could only dream of in Go/Node/PHP.&lt;/p&gt;

&lt;p&gt;Imagine your code isn’t running as one big process but as millions of tiny processes, each living its own life. If one crashes, who cares? The others won’t even notice. If the load increases, BEAM automatically distributes tasks across CPU cores. If memory gets cluttered, the garbage collector cleans it up without stopping your app.&lt;/p&gt;

&lt;p&gt;In other languages, you need complex frameworks, message brokers, and DevOps wizardry to achieve this. In Elixir, it’s just part of the platform.&lt;/p&gt;

&lt;p&gt;Where else can you hot-swap code in a running application without stopping or restarting it? While handling thousands of concurrent requests? That’s BEAM for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Million Processes
&lt;/h2&gt;

&lt;p&gt;Here’s a simple example, let’s spawn some processes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;puts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"My name is Jeff"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;span class="n"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;puts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"JVM started with 8GB RAM"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it’s not just a neat syntax trick. As I said before, these processes don’t share memory, don’t block each other, no mutexes, no race conditions.&lt;/p&gt;

&lt;p&gt;You can spawn hundreds of thousands, even a million:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;1_000_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;receive&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:ok&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My m1 macbook air didn’t even break a sweat...&lt;/p&gt;

&lt;p&gt;A better example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;MyWorker&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;  
  &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="no"&gt;GenServer&lt;/span&gt;  

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;%{&lt;/span&gt;&lt;span class="ss"&gt;count:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;  
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;handle_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:fail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;raise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"I crashed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;span class="k"&gt;end&lt;/span&gt;  

&lt;span class="no"&gt;Supervisor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_link&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;&lt;span class="no"&gt;MyWorker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]}],&lt;/span&gt; &lt;span class="ss"&gt;strategy:&lt;/span&gt; &lt;span class="ss"&gt;:one_for_one&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Process crashed? It gets restarted. Crashed a million times? It gets restarted a million times.&lt;/p&gt;

&lt;p&gt;In other languages, you’d need a whole DevOps setup with monitoring, restart policies, and tools like systemd or Docker restart strategies to achieve this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is It Worth Learning?
&lt;/h2&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;P.S. That’s the shortest H2 title in the Wild West.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;There will be a part two, about distributed systems and more on OTP. I’m still new to all of this, but there’s a lot of cool stuff I want to write about.&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>beam</category>
      <category>erlang</category>
    </item>
    <item>
      <title>Why you should know Lua</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Thu, 13 Feb 2025 23:47:51 +0000</pubDate>
      <link>https://dev.to/broflovski/why-you-should-know-lua-306f</link>
      <guid>https://dev.to/broflovski/why-you-should-know-lua-306f</guid>
      <description>&lt;p&gt;Okay, maybe you don’t have to, but it’s definitely useful. People who know me well might be surprised here. They’re aware that my first programming language was PHP, but they don’t know that my second wasn’t JavaScript, it was Lua. I bet even my friends are confused now, and you probably are too. We’ll circle back to this at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should I Care?
&lt;/h2&gt;

&lt;p&gt;That’s a fair question, especially if you already know other scripting languages. Sure, you can live without Lua. But it’s lurking in places you’d never expect.&lt;/p&gt;

&lt;p&gt;It’s popular, even if you rarely hear about it. Not as hyped as those Python devs who import every single letter, or Java folks in suits at banks, but Lua has an active community and plenty of great resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s Simple. Too simple
&lt;/h2&gt;

&lt;p&gt;Lua is a minimalist language with clean, straightforward syntax. It avoids unnecessary complexity, so you can learn it in a couple of hours. And here’s the classic example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Hello, everyone! Except Java folks.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;crazy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
  &lt;span class="n"&gt;learnJava&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lua isn’t usually used solo. It’s often embedded in game engines, other software, or paired with C/C++. I could list endless examples of where it’s used, but check this out if you’re curious.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s fast
&lt;/h2&gt;

&lt;p&gt;Lua is one of the fastest interpreted languages. It compiles to bytecode and runs on a virtual machine, giving it a significant speed advantage over other scripting languages. That’s why it’s used in game engines and paired with C/C++ it’s easy to integrate and lightweight. Lua itself is tiny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gaming
&lt;/h2&gt;

&lt;p&gt;Ever played World of Warcraft? Or maybe you still do? (RIP your social life.) If so, you’ve heard of addons like browser extensions, but for games. Those addons are written in Lua. Back in school, I wrote and tweaked them myself. Magical times. As you might have guessed, yes, I did this before diving into client side web technologies. Oddly, I already knew PHP by then. If anyone’s interested, I could write a separate post about that.&lt;/p&gt;

&lt;p&gt;Lua isn’t limited to WoW, though. It’s in game engines like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Godot (Lua support via GDScript wrappers)&lt;/li&gt;
&lt;li&gt;Love2D (a Lua-first engine)&lt;/li&gt;
&lt;li&gt;Defold (Lua as the main language)&lt;/li&gt;
&lt;li&gt;Gideros (mobile game engine)&lt;/li&gt;
&lt;li&gt;Cocos2d-x (supports Lua alongside C++ and JavaScript)&lt;/li&gt;
&lt;li&gt;Solar2D (formerly Corona SDK, Lua-centric for 2D games)&lt;/li&gt;
&lt;li&gt;OpenMW (Morrowind engine with Lua modding)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, I have no idea what most of these engines are, except Love2D it’s awesome. I’m no game engine expert, but clearly, Lua is everywhere.&lt;/p&gt;

&lt;p&gt;According to Google, here are more games using Lua:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Garry’s Mod—Lua drives most modding and gameplay.&lt;/li&gt;
&lt;li&gt;Roblox—uses a Lua dialect called Luau.&lt;/li&gt;
&lt;li&gt;Angry Birds—core logic is Lua.&lt;/li&gt;
&lt;li&gt;Terraria (tModLoader)—modding via Lua.&lt;/li&gt;
&lt;li&gt;Don't Starve—Lua for modding and game logic.&lt;/li&gt;
&lt;li&gt;Dark Souls series—Lua scripts some AI.&lt;/li&gt;
&lt;li&gt;The Sims 4—powers game mechanics.&lt;/li&gt;
&lt;li&gt;Far Cry series (pre-Far Cry 3)—heavily scripted with Lua.&lt;/li&gt;
&lt;li&gt;RimWorld (partially via Harmony modding).&lt;/li&gt;
&lt;li&gt;Payday 2—mods are Lua-based.&lt;/li&gt;
&lt;li&gt;Teardown—Lua for modding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DevOps &amp;amp; Systems programming
&lt;/h2&gt;

&lt;p&gt;Lua isn’t just for games. It’s also in sysadmin tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nginx—uses Lua for dynamic configurations.&lt;/li&gt;
&lt;li&gt;Redis—supports Lua server-side scripting.&lt;/li&gt;
&lt;li&gt;Tarantool—in-memory database.&lt;/li&gt;
&lt;li&gt;AwesomeWM—a Lua-based window manager.&lt;/li&gt;
&lt;li&gt;Syslog-ng—logging with Lua.&lt;/li&gt;
&lt;li&gt;HAProxy—Lua scripting.&lt;/li&gt;
&lt;li&gt;OpenWrt—router firmware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lua doesn’t replace Python, Bash, or Go in DevOps, but it fits where speed, embeddability, and a tiny footprint matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  C’s Best Friend
&lt;/h2&gt;

&lt;p&gt;Lua was built to be embedded. If you’re writing BlAzInG FaSt apps in C/C++, Lua adds flexibility without sacrificing BlAzInG FaSt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Learn It?
&lt;/h2&gt;

&lt;p&gt;Don’t forget, even though Lua is super small, it’s still a different language. For broadening your horizons it’s an interesting, if you have time, why not? There’s also Nelua, an interesting project, but it’s not nearly as widespread as Lua.&lt;/p&gt;

&lt;p&gt;If you’re a default web monkey shuffling JSONs on the server and happy with that, Lua won’t make you better or worse. But exploring it might just spark some joy. Or at least make you the “Lua person” at parties.&lt;/p&gt;

</description>
      <category>lua</category>
    </item>
    <item>
      <title>How good is DeepSeek?</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Tue, 28 Jan 2025 23:15:07 +0000</pubDate>
      <link>https://dev.to/broflovski/how-good-is-deepseek-2loh</link>
      <guid>https://dev.to/broflovski/how-good-is-deepseek-2loh</guid>
      <description>&lt;p&gt;Everyone has already heard about the AI from China. I know, there are countless articles about it, but let’s start with a few words about it.&lt;/p&gt;

&lt;p&gt;DeepSeek is a Chinese company specializing in artificial intelligence and the creator of a family of large language models.&lt;/p&gt;

&lt;p&gt;In January 2025, the release of DeepSeek-R1 caused a sharp drop in stock prices for OpenAI, Microsoft, NVIDIA, and other industry giants. This sparked discussions about reassessing AI investments.&lt;/p&gt;

&lt;p&gt;Most importantly, DeepSeek released its models as open-source. We’ll get back to this point later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;p&gt;At the very least, companies using ChatGPT now have a strong reason to consider alternatives. Why? Because it’s cheaper and faster. DeepSeek can significantly reduce costs for medium and large businesses.&lt;/p&gt;

&lt;p&gt;The main issue for startups and small companies is that using APIs for powerful models like OpenAI's o1 or GPT can be quite expensive. DeepSeek offers much more affordable rates, making LLMs accessible to budget-conscious companies.&lt;/p&gt;

&lt;p&gt;Let’s take a closer look at DeepSeek’s pricing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cached input tokens: $0.14 per million.&lt;/li&gt;
&lt;li&gt;Non-cached input tokens: $0.55 per million.&lt;/li&gt;
&lt;li&gt;Output tokens: $2.19 per million.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To understand what tokens are, think of them as chunks of text. Input tokens are the text you send to the model for processing (e.g., a user’s query), while output tokens are the responses you receive. One token is approximately four characters of text.&lt;/p&gt;

&lt;p&gt;For small businesses processing a high volume of requests, the price difference between DeepSeek and other models can be substantial. DeepSeek can save companies up to 10–30 times more, allowing them to reinvest those funds into other crucial areas such as marketing or product development.&lt;/p&gt;

&lt;p&gt;The low cost of cached input tokens is especially advantageous. If your users frequently ask the same questions, DeepSeek allows you to significantly cut expenses. This makes it an ideal solution for chatbots, online assistants, and other systems handling repetitive queries.&lt;/p&gt;

&lt;p&gt;Take a look yourself: the low price for cached input tokens ($0.14) is a game-changer for tasks involving recurring requests. It’s particularly useful for chatbots, virtual assistants, or analytical tools dealing with repetitive data. This lets companies not only reduce costs but also reinvest the savings into other areas, such as marketing, new product development, or improving user experience.&lt;/p&gt;

&lt;p&gt;In my opinion, DeepSeek is not just another buzzword in the AI market, it’s a powerful competitor with serious advantages. If you’re building something with AI, be sure to try DeepSeek. You might find it better suited for your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison with ChatGPT
&lt;/h2&gt;

&lt;p&gt;I decided to put DeepSeek to the test with a simple yet tricky question: “How can you parse HTML natively in Node.js?” Spoiler: you can’t. It can only be done with third-party libraries. Both AIs managed the task, but DeepSeek was pleasantly surprising.&lt;/p&gt;

&lt;p&gt;I won’t write too much about it; just compare for yourself:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chatgpt.com/share/6798c5df-8844-8012-86be-d60050d5d331" rel="noopener noreferrer"&gt;This is a conversation with ChatGPT.&lt;/a&gt; Unfortunately, sharing a DeepSeek conversation isn’t possible, so I’ve attached a video instead:&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;sorry, prompt in Russian language, because my original post in ru lang&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice how DeepSeek pointed out the lack of a native method and suggested the lowest-level solution for the task: the parse5 library.&lt;/p&gt;

&lt;p&gt;ChatGPT also noted the absence of a native solution but suggested an overhead approach with jQuery-like syntax (cheerio) as its primary recommendation.&lt;/p&gt;

&lt;p&gt;When it comes to coding, DeepSeek seems to think more deeply and offers more optimized solutions.&lt;/p&gt;

&lt;p&gt;p.s. personally, I’ve replaced ChatGPT with DeepSeek in my pet project, for me the transition was easy: my code’s interface allows for quick switching between AI providers. All I had to do was add a new provider implementing the AI interface with methods like prompt, and so on.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>deepseek</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why JSX/TSX Isn't Cool</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Mon, 13 Jan 2025 08:11:13 +0000</pubDate>
      <link>https://dev.to/broflovski/why-jsxtsx-isnt-cool-3kee</link>
      <guid>https://dev.to/broflovski/why-jsxtsx-isnt-cool-3kee</guid>
      <description>&lt;p&gt;At first glance, JSX and TSX seem like innovative tools: JavaScript and TypeScript suddenly become more than just programming languages—they are now almost full-fledged markup tools. However, a deeper look reveals that this approach is far from as ideal as it seems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixing Logic and Presentation
&lt;/h2&gt;

&lt;p&gt;One of the main criticisms of JSX/TSX is the mixing of logic and presentation. Unlike Vue or Angular, where the template structure (HTML) is clearly separated from the logic (JavaScript/TypeScript), in JSX everything is intertwined. &lt;/p&gt;

&lt;p&gt;Yes, React allows splitting components into smaller pieces, but in practice, this rarely saves from increasing cognitive load. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... another stuff&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When reading such code, the brain has to simultaneously keep in mind the context of two worlds: presentation and actions. Vue and Angular solve this problem through declarative templates and directives:&lt;/p&gt;

&lt;h3&gt;
  
  
  Vue
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// ... another stuff &lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"item in items"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"handleClick(item)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach makes the code more readable and obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems with Syntactic Sugar
&lt;/h2&gt;

&lt;p&gt;JSX looks like HTML, but it's not HTML. Small differences (for example, className instead of class, the need for self-closing tags like , explicit use of curly braces for interpolation) constantly confuse, especially beginners. Moreover, such solutions introduce additional complexity in code perception.&lt;/p&gt;

&lt;p&gt;Vue or Angular templates are usually compiled into highly optimized JavaScript code suitable for the virtual DOM or other rendering approaches. JSX requires transformation through Babel or TypeScript. This imposes additional requirements on the build and slows down the development process. &lt;/p&gt;

&lt;p&gt;Moreover, any project with JSX becomes practically unusable without a complex build chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limited Ecosystem
&lt;/h2&gt;

&lt;p&gt;JSX/TSX was created for React, and its use outside of this ecosystem raises many questions. For example, Vue offers the use of its templates in other tools—they can be easily adapted for Nuxt.js, which supports server-side rendering. &lt;/p&gt;

&lt;p&gt;Angular integrates with various platforms, be it mobile applications or PWAs. JSX outside of React is more of an exception than a rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is JSX/TSX still popular?
&lt;/h2&gt;

&lt;p&gt;Its popularity is based on React's powerful marketing strategy. The idea of "UI as a function of state," supported by declarativeness, sounds attractive. &lt;/p&gt;

&lt;p&gt;Developers gravitate towards concise and flexible solutions, and JSX offers exactly that—a superficially convenient and fast tool for working with components. The high popularity of React and support from large companies such as Facebook and Airbnb also play a role.&lt;/p&gt;

&lt;p&gt;Many like JSX/TSX for its conciseness in simple cases, but problems begin to accumulate as the project grows.&lt;/p&gt;

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

&lt;p&gt;JSX/TSX has certainly revolutionized the world of web development, but it is a tool with clear drawbacks. The mixing of logic and presentation, syntactic subtleties, and a limited ecosystem make it less suitable for large and long-term projects.&lt;/p&gt;

&lt;p&gt;Vue and Angular demonstrate how templates can be made more intuitive and readable. Therefore, if maintainability is important to you, don't rush to rely solely on JSX.&lt;/p&gt;

</description>
      <category>jsx</category>
      <category>react</category>
      <category>vue</category>
      <category>tsx</category>
    </item>
    <item>
      <title>Vike - Next.js &amp; Nuxt alternative for unprecedented flexibility and dependability</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Sat, 04 Jan 2025 05:10:29 +0000</pubDate>
      <link>https://dev.to/broflovski/vike-nextjs-nuxt-alternative-for-unprecedented-flexibility-and-dependability-2oic</link>
      <guid>https://dev.to/broflovski/vike-nextjs-nuxt-alternative-for-unprecedented-flexibility-and-dependability-2oic</guid>
      <description>&lt;p&gt;&lt;a href="https://vike.dev" rel="noopener noreferrer"&gt;Vike.dev&lt;/a&gt; (formerly vite-plugin-ssr) is an SSR framework for Vue and React that presents an interesting alternative to Nuxt and Next.js. Its key feature is a low-level approach, which gives developers more control over the project.&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%2Fbnpbeeke6hcahw9bevdx.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%2Fbnpbeeke6hcahw9bevdx.png" alt="Image description" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of imposing a strict architecture or hiding complexity behind "magic," Vike.dev allows you to independently implement typical tasks. This provides flexibility both in project setup and in adapting to unique needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key advantages of Vike.dev:
&lt;/h2&gt;

&lt;p&gt;Control: You decide how to organize the project architecture.&lt;br&gt;
Speed: Integration with Vite ensures fast builds and hot reloading.&lt;br&gt;
Versatility: Support for Vue and React makes the tool flexible for any task.&lt;br&gt;
Minimalism: Nothing superfluous, only what is really needed.&lt;br&gt;
Vike is suitable for those who appreciate the balance between flexibility and performance and are ready to independently develop architectural solutions.&lt;/p&gt;

&lt;p&gt;Here are some additional details that might be helpful for someone learning about Vike.dev:&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose Vike.dev over Nuxt/Next.js?
&lt;/h2&gt;

&lt;p&gt;While Nuxt and Next.js offer a more "batteries-included" experience with pre-configured features, Vike.dev provides more fine-grained control. This can be beneficial for complex projects with specific requirements or for developers who prefer to understand and manage every aspect of their application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SSR?
&lt;/h2&gt;

&lt;p&gt;SSR stands for Server-Side Rendering. It's a technique where the HTML for a web page is generated on the server before being sent to the client's browser. This improves initial load times and SEO.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite Integration
&lt;/h2&gt;

&lt;p&gt;Vike.dev leverages Vite, a next-generation frontend tooling that provides extremely fast development experience with features like instant server start and lightning-fast hot module replacement (HMR).&lt;/p&gt;

&lt;p&gt;Focus on Flexibility: Vike.dev aims to be unopinionated, allowing developers to choose their preferred tools and libraries. This makes it highly adaptable to different project needs.&lt;/p&gt;

&lt;p&gt;Migration from vite-plugin-ssr: If you're familiar with vite-plugin-ssr, it's important to know that it has been renamed to Vike. The functionality remains the same, so migration should be straightforward. You can find more information about the migration process in the Vike documentation.&lt;/p&gt;

&lt;p&gt;Read my tech posts: &lt;a href="https://broflovski.dev/posts" rel="noopener noreferrer"&gt;https://broflovski.dev/posts&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vike</category>
      <category>vite</category>
      <category>vue</category>
      <category>react</category>
    </item>
    <item>
      <title>Драма вокруг WordPress продолжается</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Tue, 26 Nov 2024 23:36:22 +0000</pubDate>
      <link>https://dev.to/broflovski/drama-vokrugh-wordpress-prodolzhaietsia-4920</link>
      <guid>https://dev.to/broflovski/drama-vokrugh-wordpress-prodolzhaietsia-4920</guid>
      <description>&lt;p&gt;Плагин Secure Custom Fields теперь идет с про фичами из ACF PRO (да, которая платная). Wordpress начал активнее вмешиваться в экосистему плагинов.&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%2Fgb06h53ffly26c4t69k9.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%2Fgb06h53ffly26c4t69k9.png" alt="Image description" width="800" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ссылка &lt;a href="https://www.reddit.com/r/Wordpress/comments/1gy8bud/wordpressorg_has_apparently_released_secure/" rel="noopener noreferrer"&gt;на тред&lt;/a&gt; из скринов. Если вы ещё не в курсе о происходящей "драме", вам сюда &lt;a href="https://habr.com/ru/news/849678/" rel="noopener noreferrer"&gt;https://habr.com/ru/news/849678/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Мой телеграм канал:&lt;br&gt;
&lt;a href="https://t.me/dev_txt" rel="noopener noreferrer"&gt;https://t.me/dev_txt&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Быть тим лидом — вам это нужно?</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Tue, 26 Nov 2024 23:34:25 +0000</pubDate>
      <link>https://dev.to/broflovski/byt-tim-lidom-vam-eto-nuzhno-4033</link>
      <guid>https://dev.to/broflovski/byt-tim-lidom-vam-eto-nuzhno-4033</guid>
      <description>&lt;p&gt;Классная &lt;a href="https://habr.com/ru/articles/860792/" rel="noopener noreferrer"&gt;статья&lt;/a&gt; на хабре, абсолютно согласен с тем что написано, на своем опыте заметил интересный момент: есть еще так называемые "псевдо лиды". Это люди, которым повесили ярлык тимлида, но по факту они продолжают выполнять ту же работу, что и раньше (ну почти), + взяв на себя больше ответственности. При этом зарплата повышается совсем символически, либо остается без изменений. Полномочий, чтобы реально управлять командой или принимать стратегические решения, им тоже не дают. Получается, ты вроде бы "лид", но на деле — просто разраб с дополнительной нагрузкой и громким титулом на которого удобно сваливать просроченные сроки :)&lt;/p&gt;

&lt;p&gt;ИМХО, я сделал вывод, что такое происходит, когда компания хочет закрыть дыры в управлении, но не готова вкладываться в рост или пересматривать свои процессы. По итогу это вызывает выгорание, ощущение несправедливости и желание уйти, что, собственно, я и сделал.&lt;/p&gt;

&lt;p&gt;p.s не знал, как лучше выразиться, колебался между "лид имитатор" и "лид понарошку", псевдо-лид более технически получилось, так и знал, что стоило остановиться на лид имитаторе&lt;/p&gt;

&lt;p&gt;Мой телеграм канал:&lt;br&gt;
&lt;a href="https://t.me/dev_txt" rel="noopener noreferrer"&gt;https://t.me/dev_txt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Встречаем Vite 6 ⚡️</title>
      <dc:creator>azabroflovski</dc:creator>
      <pubDate>Tue, 26 Nov 2024 23:26:58 +0000</pubDate>
      <link>https://dev.to/broflovski/vstriechaiem-vite-6-4e9o</link>
      <guid>https://dev.to/broflovski/vstriechaiem-vite-6-4e9o</guid>
      <description>&lt;p&gt;Рост популярности Vite, количество скачиваний в неделю выросло с 7,5 до 17 миллионов за год. Vite используется такими компаниями, как OpenAI, Google, Apple, Microsoft, NASA, Shopify и другими.&lt;/p&gt;

&lt;p&gt;Развитие экосистемы, Vitest активно развивается, формируя собственную экосистему. Например, Storybook теперь поддерживает тестирование с помощью Vitest.&lt;/p&gt;

&lt;p&gt;Новые фреймворки, такие как TanStack Start, One, Ember, стали частью экосистемы Vite.&lt;/p&gt;

&lt;p&gt;Ключевые анонсы ViteConf 2024, запуск VoidZero — компании, создающей высокопроизводительные инструменты разработки для экосистемы JavaScript. Новый React-фреймворк One для веба и нативных приложений. Обновленная стартовая страница проекта на новом домене vite.dev.&lt;/p&gt;

&lt;p&gt;Новые возможности в Vite, API окружения (Environment API) упрощает разработку фреймворков, обеспечивая опыт, ближе к продакшену. Environment API находится в стадии тестирования. Сообщество активно участвует в её разработке.&lt;/p&gt;

&lt;p&gt;Улучшения для разработчиков:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Поддержка Node.js 18, 20 и 22+, прекращение поддержки Node.js 21.&lt;/li&gt;
&lt;li&gt;Расширенная поддержка ссылок на ассеты в HTML.&lt;/li&gt;
&lt;li&gt;Построение CSS-выходного файла с пользовательскими именами в режиме библиотеки.&lt;/li&gt;
&lt;li&gt;Новый resolve.conditions, изменения в работе с Sass и JSON.&lt;/li&gt;
&lt;li&gt;Инструменты для быстрого старта:&lt;/li&gt;
&lt;li&gt;Используйте pnpm create vite для создания приложений с разными фреймворками.&lt;/li&gt;
&lt;li&gt;Новые шаблоны в vite-extra для поддержки Solid, Deno, SSR и библиотек.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Более 1000 участников уже внесли вклад в Vite Core. Команда призывает разработчиков присоединяться к сообществу, помогать с triage, PR и дискуссиями на форуме.&lt;/p&gt;

&lt;p&gt;Vite 6 сохраняет совместимость с предыдущими версиями для SPA и большинства кастомных SSR приложений.&lt;/p&gt;

&lt;p&gt;Фулл анонс тут по ссылке &lt;br&gt;
&lt;a href="https://vite.dev/blog/announcing-vite6.html" rel="noopener noreferrer"&gt;https://vite.dev/blog/announcing-vite6.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Мой телеграм канал&lt;br&gt;
&lt;a href="https://t.me/dev_txt" rel="noopener noreferrer"&gt;https://t.me/dev_txt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vite</category>
      <category>webdev</category>
      <category>voidzero</category>
    </item>
  </channel>
</rss>
