<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Liuba Kuibida on Medium]]></title>
        <description><![CDATA[Stories by Liuba Kuibida on Medium]]></description>
        <link>https://medium.com/@ni4yja?source=rss-7e346e085b8c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*IwWNj8sfCNL24fgro0iwQg.jpeg</url>
            <title>Stories by Liuba Kuibida on Medium</title>
            <link>https://medium.com/@ni4yja?source=rss-7e346e085b8c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 02 Jun 2026 13:13:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ni4yja/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Ukrainians are playing extra time. So are you]]></title>
            <link>https://ni4yja.medium.com/ukrainians-are-playing-extra-time-so-are-you-702f3353e696?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/702f3353e696</guid>
            <category><![CDATA[solidarity]]></category>
            <category><![CDATA[usa]]></category>
            <category><![CDATA[ukraine]]></category>
            <category><![CDATA[stand-with-ukraine]]></category>
            <category><![CDATA[how-to-help-ukraine]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Tue, 04 Mar 2025 18:40:30 GMT</pubDate>
            <atom:updated>2025-03-04T18:40:30.256Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*CxroghcPMv_MGV4m" /><figcaption>Photo by <a href="https://unsplash.com/@tavi004?utm_source=medium&amp;utm_medium=referral">Octavian Rosca</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><em>Three years since Russia invaded Ukraine. The current political situation in the USA made me think: is it possible to learn how to love and sympathize? Not sure. But there is still a chance to learn how to cooperate and be in solidarity.</em></p><p>I wanted to write: “before it is too late.” But it <em>is</em> too late. For three years of my life, I’ve been living with the feeling that regular time has ended. It’s not a football game we’re playing (not a card game either). But the match has gone into extra time, and the players, with the last bit of strength, kept moving, trying to defend the goal. Some of them are injured, and many of them are killed (to make it clear — by Russians). All of them are tired, but none of them are alone.</p><p>You might be watching us fight on TV, Instagram, or wherever. Maybe we’re your favorite team, and you <a href="https://savelife.in.ua/en/donate-en/#donate-army-card-once">donate to the Armed Forces of Ukraine</a>. We’re grateful for your support, but the only path to victory is for you to realize that this isn’t just our fight — it’s <em>yours</em>. More than that, there is no “you” and “us” anymore — there is only “we,” standing together for dignity [гідність], justice [справедливість], and freedom [cвобода].</p><p>We speak various languages, grew up with diverse lullabies and stories, and are shaped by different social and natural landscapes. So much divides us — physical borders and mental stereotypes. Maybe this is your first time seeing Cyrillic words that aren’t Russian, or it isn’t. But if you understand their meaning and want that meaning to matter in the world, we can make it happen together.</p><blockquote>How?</blockquote><p><strong>Stay curious.</strong> Politicians and regimes don’t last forever. There is plenty of evidence that things can be different — and better. This is not the time to give up but to shift perspectives. For years, Ukrainians wanted so desperately to resemble Westerners that we inherited an inferiority complex — one as strong as it was baseless. But when the Russian invasion happened, we were the first to stand and fight for democratic values.</p><blockquote>A <a href="https://edition.cnn.com/2025/02/27/us/connecticut-aleysha-ortiz-illiterate-lawsuit-cec/index.html">teenager in Connecticut</a> graduated high school without being able to read or write. Meanwhile, <a href="https://www.sciencedirect.com/science/article/pii/S0885201425000176?via=ihub">kids in Ghana</a> grow up speaking up to six languages.</blockquote><p>Multiculturalism isn’t the problem. The problem is the endless pursuit of profit, which drains and scorches everything around. And once we become aware of this, we can build relationships with people as people — and for people.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=702f3353e696" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[This Is What Happens When Women Don’t Play Video Games]]></title>
            <link>https://ni4yja.medium.com/this-is-what-happens-when-women-dont-play-video-games-2f489a508588?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/2f489a508588</guid>
            <category><![CDATA[snufkin]]></category>
            <category><![CDATA[career-in-tech]]></category>
            <category><![CDATA[women-in-stem]]></category>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[gaming]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Fri, 03 Jan 2025 22:23:21 GMT</pubDate>
            <atom:updated>2025-01-03T22:23:21.543Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RDlY1ORGGBMudhCFv1CGUw.png" /></figure><p>It’s dark. I’m in a forest, running as fast as I can. My legs sink into the mud, each step heavier than the last. I’m inevitably slowing down, and then, it catches me. It always does, no matter how hard I try to get away. My heart pounds, my hands are slick with sweat, my tears are ready to fall.</p><p>I hit Esc.</p><p>I bought <a href="https://new.snufkin.game/">Snufkin: Melody of Moominvalley</a> after quitting my job. I’m not a gamer, and my immersion in the Moomin universe is limited to a few books I occasionally read. But the game fascinated me — the visuals are stunning, and the <a href="https://www.moomin.com/en/blog/snufkin-melody-of-moominvalley-sigur-ros/">music by Sigur Rós</a> takes me back to carefree university days when I was borrowing music tastes the way my roommates borrowed dresses from one another — simply, casually, sometimes forever.</p><h3>Are you asking yourself the right questions?</h3><p>Yes, I quit my 9-to-5 programming job in August 2024. For those who read my blog, the signs were probably there. In April, I published a story with a striking headline: <a href="https://medium.com/@ni4yja/world-on-the-brink-why-focus-on-my-tech-career-8155f8c3de6f">World on the Brink: Why Focus on My Tech Career?</a> In June, I attended a <a href="https://medium.com/@ni4yja/js-nation-the-conference-that-mapped-out-my-career-goals-7af489d84ed1">JS conference in Amsterdam</a>, where I met exactly zero people but still held on to some hope. By July, I <a href="https://medium.com/@ni4yja/how-to-filter-todo-items-react-vite-55ebd54aa8b7">dabbled in React</a>, took a vacation, and then decided to quit.</p><p>After three months of unemployment and a dramatic career shift, I realized I had asked myself the wrong questions. Am I good at programming? Or: Is programming good for me? These might seem neutral, but when you’re a woman battling impostor syndrome and nearing burnout, it’s better to hold off on answers — and actions.</p><p>Now that the damage is done, I’m rethinking my work and life strategies while playing <em>Snufkin</em>. Its gentle pace and quirky characters gave me the space to disconnect and look at my life challenges from a new perspective. Finally, the game helped me ask the right question: How can I become better at doing my job (whatever it is) and caring for myself (and the people I love)?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NW5WtACsnfu0IOKNp-224Q.png" /></figure><h3>What playing video games can teach you?</h3><p>I wish I had started playing video games sooner. Gaming isn’t just a fun way to spend my free time (and money); it’s also been an unexpected remedy for my perfectionism, fear of failure, and self-doubt. Here are five lessons I learned from playing <em>Snufkin.</em> Though, I suppose these lessons could come from just about any well-reviewed game on Steam.</p><ol><li><strong>Don’t give up. </strong>It’s hard to describe how desperately I wanted to escape from The Groke on my first, second, and third try — and how miserable I felt when I failed. I pressed Esc and didn’t open the game for weeks. But when I finally did, I discovered that — Spoiler! — The Groke in <em>Snufkin</em> is a harmless creature.</li><li><strong>Be curious.</strong> I came back to The Groke after replacing the inner pressure of “I have to beat this!” with a genuine curiosity: “What’s next?” It’s OK to lose interest when you’re stuck — I reminded myself to stay calm and patient. The unknown brings uncertainty. Uncertainty leads to mistakes. Mistakes are how we learn and grow.</li><li><strong>Make mistakes. </strong>The police officers in <em>Snufkin</em> are super annoying. It’s almost impossible to remove a park sign without getting caught. The good thing? When they catch you, the sky doesn’t fall. The game goes on, and you get as many chances to succeed as you need. The hardest part here is accepting the feeling that you’re not perfect.</li><li><strong>Take breaks</strong>. I’m taking one right now. I worked so hard to reach the final quest (I’m hoping it’s the final one), but those hyper Woodies keep blocking my progress. Instead of getting mad at them — or myself — I decided to shift my focus: take a walk, read a book, and enjoy life outside the game. I hope someday I’ll dare to use this approach in my work routine without the deep-seated sense of guilt.</li><li><strong>Celebrate your success.</strong> I can’t wait to bring harmony back to Moominvalley. Excited and a bit overwhelmed by the level of responsibility, I tend to undervalue my small achievements. Learning not to take success for granted takes time, and I’m still practicing. Those little victories are a foundational part of the game — they make the experience fulfilling and enjoyable.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZF6auZ9eFYSpdsdBaP2Sww.png" /></figure><h3>Keep calm and play video games (and smash the patriarchy)</h3><p>As a little girl, I didn’t play video games. I was led to believe they weren’t for me. Computers and the entertainment they offered belonged to the boys’ world. I grew up unsure of myself, afraid to make mistakes or break an expensive piece of technology. The fact that I eventually found myself working in tech is fascinating — but not entirely fulfilling. It cost me years of effort and self-doubt.</p><p>This is my personal story about what happens when women don’t play video games — or, more accurately, when women are not expected or encouraged to play them. Later in life, they are often perceived as less capable in fields like math, programming, or engineering. The patriarchy, inequality, and sexism may not seem as obvious nowadays, but they remain deeply ingrained and powerful.</p><p>If you’ve made it this far into my story, consider giving <em>Snufkin</em> a try — even if gaming isn’t your thing. I promise there’s a good chance you’ll enjoy it.</p><h4>And if you liked the article, you can support me on <a href="https://contribee.com/liubuntu">Contribee</a>.</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2f489a508588" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How To Filter Todo Items? React & Vite]]></title>
            <link>https://ni4yja.medium.com/how-to-filter-todo-items-react-vite-55ebd54aa8b7?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/55ebd54aa8b7</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[todo]]></category>
            <category><![CDATA[vue]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[stand-with-ukraine]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Wed, 03 Jul 2024 17:00:13 GMT</pubDate>
            <atom:updated>2024-07-03T17:00:13.168Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ttCtiCSYRN1t9b8g" /><figcaption>Photo by <a href="https://unsplash.com/@devintavery?utm_source=medium&amp;utm_medium=referral">Devin Avery</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><a href="https://medium.com/@ni4yja/how-to-filter-todo-items-vue-3-composition-api-d4cf69cf056">“How to filter todo items? Vue 3 Composition API</a>” is the most popular article on my blog on Medium. It was published on April 10, 2022, and since then, it has received 12.8K views and 6.6K reads. That’s pretty impressive, especially considering that it wasn’t a real tutorial on how to build a todo app in Vue. The main reason I wrote that article was my desire to try how the Composition API works and explain it to myself. I am happy that my readers also found it helpful.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FizaQvlGTc9SmY%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Ffan-art-over-the-garden-wall-izaQvlGTc9SmY&amp;image=https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExNDBxNXNybGM5YXdsZDZuenVob2RjcWp0eHZxNmNjbm8wcmowYTdzayZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FizaQvlGTc9SmY%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="435" frameborder="0" scrolling="no"><a href="https://medium.com/media/dca64273adf7394774afc5db1de0cc53/href">https://medium.com/media/dca64273adf7394774afc5db1de0cc53/href</a></iframe><p>A few months later, in August 2022, I changed my job and joined a project just after its migration to Vue 3, which also meant tons of refactoring to the new setup syntax. The Composition API is something I learned and loved. So, you’re probably wondering why on earth you are reading my new article with ‘React’ in its title. I can completely understand your questioning and—if you are a passionate Vue developer—disappointment. The short answer: no, I am not going to change my favourite framework anytime soon, but I want to grow as a software engineer.</p><p>A bit longer explanation: For the last couple of months, I’ve been struggling with frustration about my future, including my career in tech. I tried to reflect on it in my recent article “<a href="https://medium.com/@ni4yja/world-on-the-brink-why-focus-on-my-tech-career-8155f8c3de6f">World on the Brink: Why Focus on My Tech Career?</a>” Despite feeling lost, I joined a BE Mentoring Program to assist Ukrainian women in launching IT careers. For eight weeks, I worked with five women whose strength and perseverance to overcome obstacles and move towards their goals were incredibly inspiring. I know it was supposed to be my role to motivate them, but they really became a great motivation for me.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FqXja8Wtrp5VAs%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fcartoon-quote-over-the-garden-wall-qXja8Wtrp5VAs&amp;image=https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExbGZ6YmxxdGZlaW55MnM1bW43ZDExc3dia3o5OTNzb2hyenhtaWNtYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FqXja8Wtrp5VAs%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="244" frameborder="0" scrolling="no"><a href="https://medium.com/media/4793ca8253e467889b4872db96998b0a/href">https://medium.com/media/4793ca8253e467889b4872db96998b0a/href</a></iframe><p>One of the mentees had a very good technical background, and after my presentation on Vue, she managed to learn the main concepts of the framework in just two weeks. That was awesome. Now, I want to do the same, but with React. To start with, I decided to build exactly the same todo app and see what happens. First, I updated my Vue app with the setup syntax and moved it from StackBlitz to GitHub. For my brand-new React app, I used <em>Vite</em> as a build tool instead of the official Create React App, and it worked just fine. If you’re curious about my first impressions after trying React, here they are.</p><h3>HTML-like Markup Inside a JavaScript File</h3><p>I am not going to be original here: JSX felt like a bad dream. I am used to writing markup in a separate section, where it looks clean, simple, and understandable. So, creating my first <em>React component as a function that returns some piece of HTML</em> was quite challenging and a bit frustrating. They say rendering logic and markup living together in the same place ensures they stay in sync with each other on every edit. Sounds reasonable, but check how my code for a todo list differs in Vue and React, and choose your fighter:</p><pre>&lt;ul v-if=&quot;getTodos.length&quot; class=&quot;todo-list&quot;&gt;<br>  &lt;li<br>    v-for=&quot;(todo, index) in getTodos&quot;<br>    :key=&quot;index&quot;<br>    class=&quot;todo-item&quot;<br>    :class=&quot;{ done: todo.done }&quot;<br>  &gt;<br>   &lt;span class=&quot;task&quot; @click=&quot;doneTodo(todo)&quot;&gt;{{ todo.content }}&lt;/span&gt;<br>   &lt;span class=&quot;label&quot;&gt;{{ todo.type }}&lt;/span&gt;<br>   &lt;button class=&quot;remove-btn&quot; @click=&quot;removeTodo(todo.id)&quot; /&gt;<br>  &lt;/li&gt;<br>&lt;/ul&gt;</pre><p>Versus:</p><pre>const todoItemsList = filteredTodos.map((todo) =&gt; (<br>  &lt;li key={todo.id} className={`todo-item ${todo.done ? &quot;done&quot; : &quot;&quot;}`}&gt;<br>    &lt;span className=&#39;task&#39; onClick={() =&gt; toggleDone(todo.id)}&gt;<br>      {todo.content}<br>    &lt;/span&gt;<br>    &lt;span className=&#39;label&#39;&gt;{todo.type}&lt;/span&gt;<br>    &lt;button<br>      className=&#39;remove-btn&#39;<br>      onClick={() =&gt; removeTodo(todo.id)}<br>     &gt;&lt;/button&gt;<br>   &lt;/li&gt;<br>));</pre><h3>React Hooks: useState, useEffect, useMemo</h3><p>At first glance, useState and its syntax seemed alien compared to the good old ref. ref is a function that returns an <em>object</em> with the value property, which holds the actual reactive data. useState is a function that takes one argument, the initial state, and returns an <em>array</em> with two values: the initial state and a function used to change the state. Wait a second, you have a variable that can&#39;t be changed, and then a function whose sole purpose is to change that variable? Exactly!</p><p>You can read why it was designed like that in this article [1], but the short answer is: Vue and React deal with reactivity under the hood in different ways. Nevertheless, you can build your own useState Hook as a composable in Vue [2]. In the end, what matters is that both mechanisms can be used to accomplish the same functionality—ensuring that the UI always mirrors the current state and its updates. In my app, every time I wanted to modify my todo—add, toggle, or remove—I had to call setTodos inside all of the related functions.</p><pre>const [todos, setTodos] = useState(() =&gt; {<br>  const savedTodos = localStorage.getItem(&quot;todos&quot;);<br>  return savedTodos ? JSON.parse(savedTodos) : defaultData;<br>});<br><br>// Example of usage<br>function toggleDone(id) {<br>  setTodos(<br>    todos.map((todo) =&gt;<br>      todo.id === id ? { ...todo, done: !todo.done } : todo<br>    )<br>  );<br>}</pre><h3>Event Handling, Conditional and List Rendering</h3><p>In Vue, there are directives (v-model, @click, @keyup.enter) that allow you to work with events in a declarative style. React uses attributes that resemble JavaScript event handlers (onChange, onKeyUp, onClick). I cannot believe I am writing this: Vue directives are easier to use, but React attributes are much easier to understand. A similar situation occurs with conditional and list rendering: in React, there are no special directives like v-if and v-for in Vue (I swear, I love them). Instead, it uses conditional operators in JSX (ternary operators, logical AND (&amp;&amp;)) and the map method for rendering lists. At first, it takes some effort to start thinking this way, but once you get used to it, there is no reason to overdramatise. It is just more like Vanilla JavaScript, after all.</p><h3>Final Note</h3><p>Here is the harsh truth: I built the simplest app one can imagine in React — a todo app — and it was tough. Given my solid background in Vue, instead of being helpful, it was a sort of obstacle for me. Sometimes, I felt more skeptical about React than I obviously should have been. I realise that this is just the tip of the iceberg I touched on in this article, and these are just my personal impressions and random thoughts. If you want to dive deeper into the topic, please check the links I refer to:</p><ol><li><a href="https://dev.to/vuetraining/react-hooks-api-vs-vue-composition-api-as-explored-through-usestate-32k1">React Hooks API vs Vue Composition API, as explored through useState</a> [Posted on 19 August 2020]</li><li><a href="https://markus.oberlehner.net/blog/usestate-and-usereducer-with-the-vue-3-composition-api/">useState and useReducer with the Vue 3 Composition API</a> [Posted on 18 October 2020]</li></ol><p>Also, here are the GitHub links to my 💚 <a href="https://github.com/ni4yja/todo-app-vue"><strong>Vue</strong></a> and 🩵 <a href="https://github.com/ni4yja/todo-app-react"><strong>React</strong></a> repositories. Please share your comments below. If you want me to write more on the topic, visit my <a href="https://buymeacoffee.com/ni4yja">Buy Me a Coffee page</a>.</p><h3>Final Final Note</h3><p>I published my original article on the 46th day of Ukraine’s heroic resistance against Russian aggression. Back then, I never expected it to turn into 861 days of the full-scale war. I try not to think about how much we have suffered and lost. But we keep on fighting for our freedom and safety for all of Europe and beyond. <a href="https://savelife.in.ua/en/">Donate to the Ukrainian Armed Forces</a> and #StayWithUkraine.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=55ebd54aa8b7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JS Nation: The Conference That Mapped Out My Career Goals]]></title>
            <link>https://ni4yja.medium.com/js-nation-the-conference-that-mapped-out-my-career-goals-7af489d84ed1?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/7af489d84ed1</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[vue]]></category>
            <category><![CDATA[jsnation]]></category>
            <category><![CDATA[tech-conference]]></category>
            <category><![CDATA[women-in-tech]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Sun, 16 Jun 2024 14:00:25 GMT</pubDate>
            <atom:updated>2024-06-16T14:00:25.003Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uI8KZQLifXEwd8lCasm_tg.jpeg" /><figcaption><a href="https://www.instagram.com/thejsnation/">Photo from JSNation on Instagram</a></figcaption></figure><p>On the 28th of November, 2023, I received a newsletter from JS Nation with an invitation to apply for a Diversity Scholarship for the <a href="https://jsnation.com/"><strong>JS Nation 2024 Conference</strong></a>. Usually, I skip such letters, mark them as read, and forget about them. But not this time. One magical word — Amsterdam — caught my attention. I had been there only once, very briefly, right before the Covid pandemic, and the city impressed me. The desire to visit it again in the summer, far away from rainy and cold Warsaw, was irresistible. So, I did my best to write a good motivation letter and started waiting for a response.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F3o7TKxBr7xhEgJhaFy%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fhulu-twin-peaks-cbs-3o7TKxBr7xhEgJhaFy&amp;image=https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExbno2MHNrMGZiMDRoMDBrc29yeWNrdjg3bDR1bHdub3Azc2VqYzJpMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F3o7TKxBr7xhEgJhaFy%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="300" frameborder="0" scrolling="no"><a href="https://medium.com/media/e5bcbccb8770e630b5f822c0e43c9e01/href">https://medium.com/media/e5bcbccb8770e630b5f822c0e43c9e01/href</a></iframe><p>Five months later, I received a confirmation saying that I had been selected as one of the recipients of the Scholarship. I was happy, but at the time, not that enthusiastic. Warsaw is beautiful in summer, and Amsterdam is super expensive, as I learned right after reserving tickets and accommodation. But the main reason for my mixed feelings was that I was struggling with burnout again. It was caused mostly by the full-scale war Russia unleashed in my country more than two years ago and me finally starting to identify myself as a refugee. <a href="https://ni4yja.medium.com/world-on-the-brink-why-focus-on-my-tech-career-8155f8c3de6f"><em>‘World on the Brink: Why Focus on My Tech Career?’</em></a> — this is the title of my latest article on Medium, where I try to reflect on my situation.</p><p>Before the flight, I felt stressed, sick, and miserable — a deadly combination when it comes to perceiving a lot of information and meeting new people. On the conference day, I pulled myself together and took the metro to Kromhouthal, a former ship engine factory, where the organizers were expecting to gather 1,500 JS developers. A big crowd, but the only person I managed to have a small talk with was a videographer from Amsterdam, who was very curious about secret Russian military bases somewhere in Europe. My networking mission failed, and it was sad, especially compared to how much I enjoyed my last offline conference in 2018 — <a href="https://medium.com/@ni4yja/ngtalk-in-kharkiv-1c2bd96282b6">NgTalks in Kharkiv</a>.</p><p>Now, the speakers. There were two I wanted to see live — Evan You and Anthony Fu. Evan You gave the opening talk, <em>10 Years of Independent OSS: A Retrospective</em>. The slides he presented were almost the same as those I had already seen at the <a href="https://www.youtube.com/watch?v=OmrwRrZitv4">Vue.js Live conference in April</a>. But for me, it was a historic event to see the creator of Vue.js and Vite standing on the stage in front of 1,000 people like a real rockstar. As for Anthony Fu, his talk, <em>ESLint One for All Made Easy</em>, was fresh, informative, and straightforward. I am a big fan of him as an engineer and of the projects he contributes to: <a href="https://github.com/vueuse/vueuse">VueUse</a>, <a href="https://github.com/slidevjs/slidev">Slidev</a>, and <a href="https://github.com/antfu-collective/icones">Icones</a>. His blog post <a href="https://antfu.me/posts/mental-health-oss">on mental health in Open Source</a> was a great discovery for me.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o3vJ_SeKTnedhYh5WuVo5A.jpeg" /><figcaption>Anthony Fu is giving a talk, Amsterdam, June 2024</figcaption></figure><p>This is how the JS Nation Conference went for me. Tomorrow, there will be another day of online talks, but I need to go back to work. I didn’t manage to use my free ticket to the fullest, neither in terms of the official program nor the social part of it. But I did get a charge of motivation and inspiration. I will continue working with Vue, but I also want to build something with React. And the most ambitious goal is to grow in the direction of full-stack development. Let me know if you want to read my next article by leaving a comment and following me. Also, here is my <a href="https://buymeacoffee.com/ni4yja">Buy Me a Coffee page</a>. Thank you for reading.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7af489d84ed1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[World on the Brink: Why Focus on My Tech Career?]]></title>
            <link>https://ni4yja.medium.com/world-on-the-brink-why-focus-on-my-tech-career-8155f8c3de6f?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/8155f8c3de6f</guid>
            <category><![CDATA[stand-with-ukraine]]></category>
            <category><![CDATA[war-experience]]></category>
            <category><![CDATA[refugees]]></category>
            <category><![CDATA[russiaisaterroriststate]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Thu, 04 Apr 2024 07:20:30 GMT</pubDate>
            <atom:updated>2024-04-22T15:10:01.679Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SJdvbRsbHxFGBJ_pErqWlA.jpeg" /><figcaption><em>The damaged building in Kramatorsk, Donetsk region on 16 April, 2023. All images are made by </em><strong><em>Julia Kochetova</em></strong><em> for her project </em><a href="https://kochetova.rocks/War-Is-Personal-project"><em>“War is Personal”</em></a></figcaption></figure><p>In March, I spent most of my free time watching a Vue.js course on Udemy. It was a comprehensive 32-hour-long learning program designed by Maximilian Schwarzmüller. I enjoyed it. Despite having worked with Vue.js for almost three years, this course, ‘Vue — The Complete Guide,’ shed new light on aspects of the framework for me, particularly the concept of reactivity. Schwarzmüller doesn’t just tell you how to do things; he also explains why, which I found incredibly beneficial for developers at any stage of their career.</p><p>The course was needed for my work’s Personal Development Plan, especially since my promotion was on the line. But after finishing it, I started questioning everything. <em>Do I still want to keep being a frontend developer? Am I willing to spend another 5 years getting better at programming? What if it’s all for nothing? </em>Without electricity or the internet, I couldn’t do my job, and my work would mean nothing. This isn’t just some story from a disaster movie. I’ve lived through this in Kyiv. And there’s no way to be sure it won’t happen again in Warsaw. The less help Ukraine gets, the more likely it is that the war could spread across Europe.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ytmca--ONqbOUNDnc_Jt2A.jpeg" /><figcaption><em>Panzerhaubitze 2000 operates in the Donetsk region on 23 July, 2022.</em></figcaption></figure><p>I wish I had spent more time at my grandma’s village in Ukraine. There, I could have learned to grow food, make clothes, and look after myself. In the city, I spend too much on things I don’t need, like a new smartwatch or extra shoes. It seems silly and wasteful now. I could use that money for something useful, like solar panels to provide my home with electricity. Yet, the stark reality hits: I don’t have a home to return to. I left Ukraine because it wasn’t safe. But now, I’m starting to wonder if there’s such a thing as a safe place anywhere in the world.</p><p>A couple of days ago, I met T., my friend from Syria. The stories he shared about the war in his country were shocking; I found myself struggling to breathe and fighting back tears. For a long time, my understanding of wars came from historical and fictional books, and later, television. Yet, it never felt entirely real to me. This changed dramatically two years after the Russian invasion of Ukraine. The daily news reports of casualties are no longer abstract numbers; they represent lives that are crippled, mutilated, or taken away by Russian military forces. But for what? Merely for being Ukrainian.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x1ccbP2SwizXmpeD-CAWXA.jpeg" /><figcaption><em>A teenager in the village of Vesele in the Kharkiv region.</em></figcaption></figure><p>I left my country, which is now besieged by drones and rockets from Russia in every region. Tragically, Ukraine lacks the weapons to repel all these attacks, and civilians are perishing — whether sleeping in their homes, walking their dogs, or simply grocery shopping. I moved to Poland seeking safety, to continue working, and to support my family. Here I’ve learned another thing about war: you can’t escape from it, no matter how hard you try. This isn’t because I stay updated with news from Ukraine and <a href="https://u24.gov.ua/">donate to the Ukrainian Armed Forces</a>. It’s because I am now a refugee. Have you ever really considered what that word means?</p><p>After six months in Warsaw, I’ve learned that the refugee experience is far from being a long vacation in the EU or simply relocating to another country. The homesickness is acute, a deep and all-consuming pain. Regardless of how comfortable or happy a refugee’s life might seem on social media, it’s crucial to remember that their homes could be in ruins, their hometowns obliterated. Refugees find themselves unmoored, their past erased, and their future uncertain. It feels as though the war has excised a part of my essence; I am cut off, vulnerable.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uroMBzxl1-F390HIr4qePg.jpeg" /><figcaption><em>A sunflower on the field near a Panzerhaubitze 2000 tank position in the Donetsk region on 21 July, 2022.</em></figcaption></figure><p>It’s incredibly hard to explain my feelings and fears to someone who lacks this experience, to someone who never knew how to wake up in the middle of the night from their mom’s call saying the war has started. You have no time to cry and panic, trying to accumulate all your resources to survive, all while knowing life will never revert to its previous state. The horrors witnessed — people tortured, raped, and killed, the discovery of bodies days, weeks, months later, the tears of rescuers, and the sight of crippled, frightened pets — are etched into memory, an indelible mark beneath the skin.</p><blockquote>“A constant balancing between ordinary life, in which you have to do ordinary things, make decisions, feel and show all possible emotions; and hidden somewhere in the back of the head the vile existential horror of what we are experiencing and can potentially experience…”</blockquote><p>This quote from a <a href="https://bsky.app/profile/elhashallwill.bsky.social">Bluesky profile</a> vividly captures the new Ukrainian reality, a life lived on the edge yet striving for normalcy. One can be surprised or even get angry with the fact Ukrainians do not give up. Facing job loss, they pivot to learning new skills and seeking new opportunities. Starting anew, particularly under such dire circumstances, is daunting. Therefore, I joined the <a href="https://inscience.io/en/be/">БУДЬ mentoring program</a> as a volunteer to assist Ukrainian women in launching IT careers. Though my future in frontend development remains uncertain, sharing my skills and aiding others has become my purpose, the one thing that now makes sense to me.</p><p>Do you also have the feeling the world is going to collapse? How do you cope with it? Is there something that motivates you and gives you the strength to move on? Please, share your thoughts in the comments below and <strong>#StandWithUkraine</strong>. If you want to support my work, here is the link to <a href="https://www.buymeacoffee.com/ni4yja">my Buy Me a Coffee page</a>. Thanks for reading.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8155f8c3de6f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ukraine Under Siege: Experience You’d Better Not Share]]></title>
            <link>https://ni4yja.medium.com/ukraine-under-siege-experience-youd-better-not-share-44316c967f3a?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/44316c967f3a</guid>
            <category><![CDATA[war]]></category>
            <category><![CDATA[stand-with-ukraine]]></category>
            <category><![CDATA[russiaisaterroriststate]]></category>
            <category><![CDATA[personal-experience]]></category>
            <category><![CDATA[work]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Thu, 04 Jan 2024 13:38:04 GMT</pubDate>
            <atom:updated>2024-01-04T13:38:04.039Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oHacoZh7Kq6_DncKS7PkmA.png" /><figcaption>Art by <a href="https://zhenyaoliinyk.com/home">zhenya oliinyk</a> (fragment)</figcaption></figure><p>On that radiant Saturday in July last year, my mom and I were at a small restaurant in Warsaw. He walked up to our table, said hello, and asked if we were enjoying everything. I thanked him and asked if he remembered me. Yes, he did. I used to visit often in the summer of 2022 with my sister. It had been a year since then, and I was about to head back to Kyiv in a few hours. ‘Why?’ he asked. I told him I didn’t want to miss the victory celebration. He then told me he felt the same for six long years in Syria. We were quiet for a moment, looking at each other, when my mom started to cry, and I got goosebumps. He shook my hand, mentioned he had a brother in Berlin, and said it was a great city with good food and lots of refugees. He suggested I should visit. Not right now. We said goodbye with a hug, and I asked for his name. Samir. He used to own an antique shop in Damascus and now ran a vegan restaurant with the best falafel I had ever tasted. There was even a documentary made about him. I promised to come back to Warsaw again soon.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VpfgxqSAINMrj8SXzESq8A.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*OkbdKBaoPeemvZXMA6017A.jpeg" /><figcaption>My mom and I during my short visit to Warsaw, July 2023</figcaption></figure><p>I kept my promise, and now it’s been five months since I moved here. I often see Samir, and he never fails to bring a smile to my face. We’ve stopped discussing the war, yet our shared experiences help me feel less isolated in this city. Warsaw has grown on me. My mother and sister are here, and I’ve made a few close friends. My therapist is pleased with my decision to relocate to Poland. I feel more at ease, confident, and relaxed now. It’s true, but there are still nights when I lie awake, missing Ukraine deeply, and find myself talking to ChatGPT about it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jbfsLxuHbsk-PDhoEKOLDQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1004/1*9VM3VhIZ1bgQm5QYgZkQ-g.jpeg" /><figcaption>Pizzeria in Warsaw. Me with my cat Tesla after relocation to Poland. Autumn, 2023</figcaption></figure><p>2023 was a hard year for me, but it taught me a lot about myself, what I need, and what I can do. Facing tough times in Kyiv during the war with others from my community made me feel strong and like I belonged. But, I almost lost my job because it was hard to focus on work after nights with no sleep due to air raid sirens and bombings. I only wrote one article on Medium last year, and it wasn’t even about Vue or programming. Surprisingly, it got a lot of attention, and I was asked to speak at Medium Day in August. My talk was about war-life balance, and you can watch it on YouTube.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*oUN9o3-PzmS6vzhUWJ0jrQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NKeqnh49q-LFbkXFnO829w.jpeg" /><figcaption>Me at Kontraktova Ploshcha metro station during air raid sirens. Beautiful sunset over Dnipro. Summer, 2023</figcaption></figure><p>Ever since the russian invasion of Ukraine began on February 24, 2022, I’ve been trying to mix my knowledge about Vue with what I’ve learned from the war in Ukraine. However, at some point, I found I couldn’t continue like this. I’m still passionate about Vue and want to keep growing as a software engineer. But I realised that I couldn’t stay quiet about the war anymore and needed to shift my focus in writing. Sharing these difficult experiences might be hard for my readers, who are used to coming to my blog for technical insights. But I think it’s necessary to talk about it. The Ukrainian people are fighting for freedom and safety, not just for our country, but for all of Europe.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qVlHKtkSsejgZzGpXC1e5g.jpeg" /><figcaption>Art, dedicated to Ukrainian Air Force. Source: @katyaakva from Instagram</figcaption></figure><p>In the last year, Russians have targeted Kyiv with over 300 various types of cruise missiles, 14 ballistic missiles, and nearly 400 ‘Shahed’ type attack UAVs. In 2023, Kyiv had 302 air raid alerts, with the total time of these alerts adding up to 16 days. You can find all these statistics on a website called <a href="https://wrapped.alerts.in.ua/">Alerts Wrapped</a>, which starkly highlights our new reality. My friends, family, and colleagues face this every day. Those working for international companies often have to keep quiet about these attacks to keep their jobs. They are feeling downhearted, worn out, and uncertain about what the future holds.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5Uy6TRl2mk5P9Qdt1lL5eg.png" /><figcaption>The article cover from <a href="https://kyivindependent.com/im-in-shock-russias-renewed-mass-missile-shatters-kyivans-lives-and-dreams/">The Kyiv Independent</a>, 4 January 2024</figcaption></figure><p>It seems like the war won’t end soon. On January 2, 2024, Ukraine faced another widespread attack. We urgently need more weapons to defend our skies and fight on the ground. My friends and I are continuously raising funds for the Ukrainian Armed Forces, knowing this is a marathon, not a sprint. Today, I’m reaching out for your support. Please follow <a href="https://www.instagram.com/united24.media/">Ukrainian news</a> on social media, share these stories with your followers using #russiaisaterroriststate, and urge your governments to assist Ukraine. United we stand, divided we fall.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=44316c967f3a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How To Keep Productivity And Motivation During The War?]]></title>
            <link>https://ni4yja.medium.com/how-to-keep-productivity-and-motivation-during-the-war-e37a4b52b71b?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/e37a4b52b71b</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[russian-ukrainian-war]]></category>
            <category><![CDATA[motivation]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[mental-health]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Mon, 20 Mar 2023 07:41:18 GMT</pubDate>
            <atom:updated>2023-03-20T07:41:18.561Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rMskyFfPFRZzpToITSh9vQ.jpeg" /></figure><p>It is my first post on Medium this year. And it has nothing to do with Vue.js. That doesn’t mean I suddenly quit programming. I have a full-time job, which regularly provides me with coding challenges. Recently I was writing the E2E tests for the first time, which was painful. Also, I am currently working on a small pet project, where I’m trying to implement new features more flexibly and less stressful. I have a project board on GitHub, but no sprint goals or strict deadlines. Besides, I am a participant in the WWCode Kyiv Mentoring Program, where I met a talented and motivated mentee. I’ve been consulting her on her way to becoming a web developer, and I hope the process is insightful for both of us.</p><p>Today I want to talk about mental health and motivation during the war. It is hard to believe and accept, but more than a year has passed since the russian troops invaded Ukraine. Over this time, Ukrainians learned <a href="https://en.wikipedia.org/wiki/War_crimes_in_the_2022_Russian_invasion_of_Ukraine">what russian people were capable of</a>: while their propaganda machine was spreading lies, the opposition kept silent, and the whole world was watching how their ordinary young men were looting, raping, and mutilating innocent civilians. But it isn’t a movie — we cannot press a stop button or leave a cinema anytime we want.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UKj2A4QemirAR_BDnvHNHQ.jpeg" /><figcaption>A destroyed apartment building in the town of Borodyanka in Kyiv Oblast, April 5, 2022. <a href="https://kyivindependent.com/national/as-ukraine-regains-control-of-borodyanka-area-more-russians-atrocities-come-to-light">Source</a></figcaption></figure><p>I’ve been staying in Kyiv for half a year now. The winter here was severe: the residents faced and courageously endured frequent shelling, several total blackouts, and the risk of potential evacuation. As for me, for the last couple of months, I mostly stayed at home, suffering from fear and apathy. Every time I went shopping, I couldn’t get rid of the thought: what if the russian missiles target my building next time?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*necllJJm4acPDKcS53_ziA.jpeg" /><figcaption>Kyiv city center without light. Photo: Reuters</figcaption></figure><p>That affected my productivity and daily routine. After doing some work, I spent the rest of the day in bed. I couldn’t eat. I couldn’t read books or watch movies. I couldn’t even use social media to distract myself. My feeds on Twitter, Facebook, Instagram, and even Linkedin are full of messages about someone’s death on the battlefield. When I look at their pictures, those brave women and men, lots of them were younger than me, my heart clenches in pain.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X_mXke9NP1PZkIrz3kTDgQ.jpeg" /><figcaption><a href="https://en.wikipedia.org/wiki/Dmytro_Kotsiubailo">Dmytro Kotsiubailo</a>, a young Ukrainian soldier killed near Bakhmut. <a href="https://www.nytimes.com/2023/03/10/world/europe/da-vinci-funeral-ukraine.html">Source</a></figcaption></figure><p>The human body reacts differently to stress. I’ve read <a href="https://dou.ua/lenta/articles/how-the-war-affected-productivity/">an article</a> where Ukrainian IT specialists describe how the war affected their productivity. Most of them say that they experience difficulties focusing on tasks. Many people had to leave their homes and look for new places to live and work. That caused a loss of a favorable working environment and a general worsening of working conditions. Some people complain about problems with concentration and memory. They procrastinate, continuously read the news, and worry about the safety of their family. Some specialists lost their jobs.</p><h3>Admitting a problem</h3><p>At the same time, fewer people claim their productivity, on the contrary, increased. Work helped them to distract from the news; they felt enough energy and motivation to earn more money to <a href="https://savelife.in.ua/en/">support the Ukrainian Armed Forces</a>. I wanted to be one of them, but how? The first and hardest step was to admit the problem. I spent day after day trying not to think about the future, eating sweets to reduce stress, until one day, I weight myself. The number I saw shocked me. All at once I realized I needed to change my way of life.</p><h3>Creating a plan</h3><p>I asked myself: what can I do besides working and sleeping? The first thing that came to my mind was to increase physical activity. I set myself a goal to spend more time outside walking and running. On the 1st of March, I went for my first run this season. <a href="https://t.co/soJsUtzRvH">2 km for 14 minutes</a> — that was the result. I used to run 10km+ daily a few years ago. Now I had to start from the beginning. So I tried to be patient. Two weeks later, I was able to run 4 km. On the days free of running, I go to the gym or walk. I plan to get 8000 steps per day no matter what.</p><h3>Sharing tiniest progress</h3><p>Daniel Lieberman, a paleoanthropologist best known for his research on the evolution of the human head and body, wrote a book about physical activity. He claims that sharing information about what you do can help to save motivation and not give up. So, I posted a <a href="https://twitter.com/ni4yja/status/1630924555551211523?s=20">thread on Twitter</a> about my progress and got a lot of positive feedback. Also, I use apps to visualize my work and get some stats. I loved <em>Avocation</em>: you can plant a tree and watch how it grows after you do a planned activity. Awesome.</p><h3>Asking for help</h3><p>This week I am having a short vacation. I have a job where management cares about the wellness of employees, but not everyone is so lucky. Many people in my country cannot afford a break during the war. They have to make for living and support their families. That is why the advice to quit a job and go to Peru does not make sense. At the same time, physical exhaustion and permanent fear of your life cause anxiety, sleep disorder, and other mental health issues. It seems like a blind corner, and the only one who can help is a psychotherapist. War experiences for soldiers and civilians are different, but there is one thing we have in common — we all are traumatized.</p><p>I did not mean to write a positive article. The honest answer to the question in the title is: there is no way to keep productivity and motivation while your nation suffers from violence you cannot imagine. I described a personal attempt to preserve the remains of mental health. I gained weight, and that was a signal for me to change my habits. I accept the possibility that my plan may not work. But I will enjoy the process, as long as I can, and that is what matters.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e37a4b52b71b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Better User Experience Of Your App. Tips For Vue.js Developers]]></title>
            <link>https://ni4yja.medium.com/better-user-experience-of-your-app-tips-for-vue-js-developers-a90afc1d6c80?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/a90afc1d6c80</guid>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[vueuse]]></category>
            <category><![CDATA[vue-composition-api]]></category>
            <category><![CDATA[pinia]]></category>
            <category><![CDATA[vue-3]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Wed, 30 Nov 2022 15:22:28 GMT</pubDate>
            <atom:updated>2022-11-30T15:27:04.995Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0irxO4U6fkrx4CJfIcQWTA.jpeg" /><figcaption><a href="https://dribbble.com/shots/14328888-Cultivate-Your-Thoughts">Cultivate Your Thoughts</a> by <a href="https://dribbble.com/studioMUTI">MUTI</a></figcaption></figure><p>After spending some time in Warsaw, I came back to Ukraine. That wasn’t an easy decision. Russian missiles constantly attack my country. Winter has come, and this time their goals are power plants. As a result, all regions faced emergent and scheduled power outages. Here, in Kyiv, we experienced the first total blackout last week. I hadn’t had electricity, water, heating, and mobile communication in my apartment for two days. To be able to work, I had to go to the office. My daily routine changed. I couldn’t go to the gym, meet my friends for a walk or a drink, read books, listen to music or watch Netflix as I usually do. Apart from that, I started smoking; I spend more money on donations to the Armed Forces of Ukraine; I try to call my relatives more often. Every day could be your last day. It is a war reality Ukrainians have been dealing with for nine months.</p><p>Those are the circumstances I’ve been going through right now. Nevertheless, I do my best to keep being concentrated and productive. I take care of my physical and mental health. I try to learn something new when it is possible. Today I want to show you my new Vue 3 project, written with Composition API. It is a simple personal library manager where you can register your book, rate it and leave a comment. I created it to test modern Vue.js libraries — Pinia and VueUse. When it was ready, I showed it to my colleague. He left some comments and inspired me to write this post. So, here are a few tips on how to improve the user experience of your application.</p><h3>Your application runs fast. Good for you. But not always for users</h3><p>The first version of my app ran fast, and I was proud of it. It took me less than a second to register or delete a book. But the truth is that it may be confusing for a user to understand what’s going on. Where is a record I’ve just created? What should I do if I want to undo the deletion? In my app, all books were sorted by date, from the oldest to the newest one. And if there were a lot of books, a user wouldn’t be able to see the one they just created. Also, there were no warnings about removing a book and no possibility of restoring it. That meant a lot of work ahead.</p><h3>Users need visual hints. Try to add some animation</h3><p>First, I created a new computed, which solved a sorting issue. Now a user could see a new record in the first place in the list. That was easy, but not enough. I needed to add some animation, which helped to make user actions more noticeable. I managed to achieve this with the Vue.js <a href="https://vuejs.org/guide/built-ins/transition-group.html">TransitionGroup</a>. Check the BookList component for more details.</p><h3>Modals can be nasty. But users do need them</h3><p>The only modal I added to my project is connected to the delete action. A user got a chance to think twice before removing a book from their library. After seeing the popup message: “Are you sure you want to delete this book?”, you can choose between two options — keep the book in your library or delete it. Also, you can close the modal and continue working with your library.</p><h3>Netflix uses toast messages. And you should</h3><p>I’ve borrowed one fancy feature from Netflix. When you remove a movie from your list, the service first tells you that the action was successful and then allows you to restore it. I tried to do the same in my application. In the BookList component, I created a toast message with a button. If you click it, the undoRemoving function will fire. Now you can have your book back. Happy end.</p><p>That’s it. I hope you enjoyed reading my post. <a href="https://frabjous-malabi-d2449b.netlify.app/">Here</a> you can play with my application, and here you can check the <a href="https://github.com/ni4yja/personal-library-manager">project repository on Github</a>. If you have any comments or suggestions, text me on Twitter @ni4yja.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a90afc1d6c80" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Vue 3 breaking changes. She migrated an old Vue.js project and survived]]></title>
            <link>https://ni4yja.medium.com/vue-3-breaking-changes-she-migrated-an-old-vue-js-project-and-survived-e45e8151d21b?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/e45e8151d21b</guid>
            <category><![CDATA[vue-2]]></category>
            <category><![CDATA[composition-api]]></category>
            <category><![CDATA[migration]]></category>
            <category><![CDATA[vue-3]]></category>
            <category><![CDATA[twitter]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Mon, 15 Aug 2022 17:45:34 GMT</pubDate>
            <atom:updated>2022-08-15T17:45:34.748Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*PeU2HRg0zLG9XkqxL2vVBg.jpeg" /></figure><p>I haven’t been publishing new stories on Medium for a while. Lots of things happened in my life over the last couple of months. I moved to another country, changed my job, and felt lost and disoriented most of the time. Approximately 20% of Ukrainian territories are under Russian occupation, where civilians are being kidnaped, tortured, raped, and killed. My beautiful Kharkiv is being bombed days and nights. Russian missiles strike Ukrainian schools, hospitals, and malls, and you never know who will be next. Nobody is in safety, and that breaks my heart. While abroad, I participated in demonstrations for recognizing Russia as a terrorist state. Those events take part in many European cities; if you support Ukraine and want to join, keep an eye on the hashtag #RussiaIsATerroristState.</p><p>Do you use Twitter? I do not tweet a lot, but I love it. News, memes, jokes, and cats — all you need is in one place. After the 24th of February, Twitter became a platform for Ukrainian volunteers and journalists to share the truth about the war with the world. If you can follow one account today, let it be @serhiyprytula, an activist who collected around UAH 600 million to order four <a href="https://en.wikipedia.org/wiki/People%27s_Bayraktar">Bayraktars</a> in a couple of days.</p><p>One day I came up with the idea to replicate a famous Tweet Box on Vue.js. But I was late. Markus Oberlehner did the same four years ago. Besides, <a href="https://markus.oberlehner.net/blog/replicating-the-twitter-tweet-box-with-vue/">he wrote a brilliant article</a> and shared the source code, so I just copied it into my new Vue project. Surprise! It didn’t work. The reason for that was the Vue 3 breaking changes, including v-model. Therefore, I had to do some quick fixes.</p><p>Firstly, I changed textareafrom this:</p><pre>&lt;textarea<br>  ref=”textarea”<br>  :class=”`${$options.name}__textarea`”<br>  <strong>:value=”value”</strong><br>  rows=”1&quot;<br>  @input=”updateValue”<br>/&gt;</pre><p>To this:</p><pre>&lt;textarea<br>  ref=&quot;textarea&quot;<br>  :class=&quot;`${$options.name}__textarea`&quot;<br>  <strong>:value=&quot;modelValue&quot;</strong><br>  rows=&quot;1&quot;<br>  @input=&quot;updateValue&quot;<br>/&gt;</pre><p>Method updateValue was transformed from:</p><pre>updateValue(e) {<br>  this.textareaGrow();<br>  <strong>this.$emit(`input`, e.target.value);</strong><br>}</pre><p>To:</p><pre>function updateValue(e) {<br>  textareaGrow();<br>  <strong>this.$emit(&#39;update:modelValue&#39;, e.target.value);</strong><br>}</pre><p>It may seem like a piece of cake, but I was super happy to cope with it. For more information, please, <a href="https://v3-migration.vuejs.org/breaking-changes/v-model.html#overview">check the documentation</a>.</p><p>My migrated application worked, but this didn’t stop me from coding. I rewrote my components with Composition API. That turned out to be more challenging than <a href="https://ni4yja.medium.com/how-to-filter-todo-items-vue-3-composition-api-d4cf69cf056">my previous project</a> with filtering todo items, as I was dealing with props and refs. But after a while, I managed to accomplish it as well. <a href="https://stackblitz.com/edit/vue-t3u8s6?file=src/components/TweetBox.vue">Follow this link</a>, if you want to see my version of Tweet Box on Vue 3. That’s all for now. Stay tuned.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e45e8151d21b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beautiful Tabs With Cirrus CSS. Power of Vue Router 4]]></title>
            <link>https://ni4yja.medium.com/beautiful-tabs-with-cirrus-css-power-of-vue-router-4-2af580c36e7a?source=rss-7e346e085b8c------2</link>
            <guid isPermaLink="false">https://medium.com/p/2af580c36e7a</guid>
            <category><![CDATA[stand-with-ukraine]]></category>
            <category><![CDATA[tabs]]></category>
            <category><![CDATA[cirrus-css]]></category>
            <category><![CDATA[vue-router]]></category>
            <category><![CDATA[vue-3]]></category>
            <dc:creator><![CDATA[Liuba Kuibida]]></dc:creator>
            <pubDate>Mon, 30 May 2022 19:00:07 GMT</pubDate>
            <atom:updated>2022-05-30T19:00:07.960Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fxq47zpXVVHHTLwzeM_3zg.png" /><figcaption><a href="https://dribbble.com/shots/8956037-Journey-to-the-Vue-niverse">Journey to the Vue-niverse</a> by <a href="https://dribbble.com/mappleton">Maggie Appleton</a></figcaption></figure><p>One day I was thoughtlessly surfing the Internet and suddenly found an SCSS framework that deeply touched my heart. At first sight, <a href="https://www.cirrus-ui.com/"><strong>Cirrus CSS</strong></a> seemed to be ideal for rapid prototyping, and I was eager to try it out. If you’ve been reading my blog for some time, you should know that I love <em>Bulma.css</em> and use it in my every second project. But this time, I was ready to try something new. Cirrus CSS didn’t disappoint me. Furthermore, I liked it so much that I built a simple website to test as many of its components as I could.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FR6gvnAxj2ISzJdbA63%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FR6gvnAxj2ISzJdbA63%2Fgiphy-downsized-large.gif&amp;image=https%3A%2F%2Fi.giphy.com%2Fmedia%2FR6gvnAxj2ISzJdbA63%2Fgiphy-downsized-large.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="435" frameborder="0" scrolling="no"><a href="https://medium.com/media/21b0ecac314503a5be41325a1179d25a/href">https://medium.com/media/21b0ecac314503a5be41325a1179d25a/href</a></iframe><p>After all, my brand new Vue App received the Header, the Hero, the Footer, Cards, and Tabs. Each component looked great on different screens, and I didn’t have to add a single line of CSS code. There was a challenge, though — I wasn’t sure <strong>how to make Vue Router work with the Cirrus CSS </strong>structure for the Tabs component. Yes, I chose the possibilities of Vue Router to build tabs, as I often did at my daytime job. So, after reading some documentation for Vue Router 4, I came up with a solution. Today I want to share it with you.</p><p>The first thing is to set everything up. Notice how I import Vue Router and Cirrus CSS in my main.js file:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/1c6a7ee351f6f440434c279c7c97af42/href">https://medium.com/media/1c6a7ee351f6f440434c279c7c97af42/href</a></iframe><p>The second step is to set up the router.js file. I created three routes and three separate pages for them: Home, News, and Donate.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/be939437486747627312b188e60478d3/href">https://medium.com/media/be939437486747627312b188e60478d3/href</a></iframe><p>The challenging part is to make it all work together in TheTabs.vue. Here is the component’s template:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/4fdf272e394849712e6b0991a58b0e21/href">https://medium.com/media/4fdf272e394849712e6b0991a58b0e21/href</a></iframe><p>This is where Vue Router 4 shows its power. I passed the custom option to &lt;router-link&gt; to prevent it from wrapping its content inside of an &lt;a&gt; element. Then I used &lt;router-link&gt;&#39;s v-slot to customize my tabs. For more information, <a href="https://router.vuejs.org/api/#router-link-s-v-slot">read the documentation</a>.</p><p>In the second part of my component, I defined tabs in the data function. Keep in mind, that you can pass tabs as props if you want to make your component reusable.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f3103d41cea5ccd40666c8c3f8554960/href">https://medium.com/media/f3103d41cea5ccd40666c8c3f8554960/href</a></iframe><p>The last thing I want to show you is the template of my App.vue. But don’t forget to import and set up all the components you need in your app.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/eefc50c41f813f15496a418f3643bfed/href">https://medium.com/media/eefc50c41f813f15496a418f3643bfed/href</a></iframe><p>Finally, here is what I managed to build:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RiuUrTdvw__iQcqczYYXkw.gif" /></figure><p>The source code is <a href="https://stackblitz.com/edit/vue-tpqjdy?file=src/App.vue">here</a>. Please, leave a comment if you have any questions or suggestions. Thank you for reading, and #StandWithUkraine.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2af580c36e7a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>