<?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: Ido Schacham</title>
    <description>The latest articles on DEV Community by Ido Schacham (@idosius).</description>
    <link>https://dev.to/idosius</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%2F502468%2F6c891739-153f-46b6-9650-392415ce785b.jpeg</url>
      <title>DEV Community: Ido Schacham</title>
      <link>https://dev.to/idosius</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idosius"/>
    <language>en</language>
    <item>
      <title>Wörtilizer</title>
      <dc:creator>Ido Schacham</dc:creator>
      <pubDate>Mon, 22 Sep 2025 20:08:12 +0000</pubDate>
      <link>https://dev.to/idosius/wortilizer-10l2</link>
      <guid>https://dev.to/idosius/wortilizer-10l2</guid>
      <description>&lt;p&gt;When I was in-between jobs, I wanted to do a fun project and improve my German, so I built a little web app called &lt;strong&gt;Wörtilizer&lt;/strong&gt; 🇩🇪⚡ &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/idosius/wortilizer" rel="noopener noreferrer"&gt;Wörtilizer&lt;/a&gt; lets you build up your own private German vocabulary, automatically get the correct der-die-das noun articles, and memorize them via visual cues and a fun quiz.&lt;/p&gt;

&lt;p&gt;The web app was built via React, Next.js, and Tailwind CSS. It uses the &lt;code&gt;german-words&lt;/code&gt; and &lt;code&gt;german-words-dict&lt;/code&gt; npm packages to discover whether the word is in German, it is indeed a noun, and what is its article. The data is saved in your browser's &lt;code&gt;localStorage&lt;/code&gt;, no signup/login needed.&lt;/p&gt;

&lt;p&gt;I made it responsive, so it should look nice on any device. There are some limitations, like the dictionary recognizes most words but not all of them. Also, the words that it does recognize need to be accurately spelled, but that's not a bug, it's a German learning feature 😉 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://wortilizer.vercel.app/" rel="noopener noreferrer"&gt;Try out Wörtilizer&lt;/a&gt; on your next U-Bahn ride instead of doom scrollen. &lt;a href="https://github.com/idosius/wortilizer" rel="noopener noreferrer"&gt;Wörtilizer is open sourced on GitHub&lt;/a&gt;, so feel free to steal it or contribute. &lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>tailwindcss</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Bubble Figure: Integrating Tensorflow.js With Three.js and Cannon-es to Create Interactive Art</title>
      <dc:creator>Ido Schacham</dc:creator>
      <pubDate>Thu, 04 May 2023 14:21:24 +0000</pubDate>
      <link>https://dev.to/idosius/the-bubble-figure-integrating-tensorflowjs-with-threejs-and-cannon-es-to-create-interactive-art-b8e</link>
      <guid>https://dev.to/idosius/the-bubble-figure-integrating-tensorflowjs-with-threejs-and-cannon-es-to-create-interactive-art-b8e</guid>
      <description>&lt;p&gt;Recently I had the pleasure to work on one of the funnest projects ever: &lt;a href="https://github.com/wunderdogsw/go-23-app"&gt;The Bubble Figure&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Bubble Figure was created by a team of volunteers at &lt;a href="https://www.wunderdog.fi"&gt;Wunderdog&lt;/a&gt; for &lt;a href="https://grandone.fi/"&gt;Grand One&lt;/a&gt; 2023, annual design awards that take place in Helsinki. Our designers &lt;a href="https://www.wunderdog.fi/portfolio/grand-one"&gt;created the visuals&lt;/a&gt; for the event and wanted to do something extra.&lt;/p&gt;

&lt;p&gt;After exploring various ideas, tech, and taking the time and resource constraints into mind, we decided to go for The Bubble Figure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What in the world is The Bubble Figure?
&lt;/h2&gt;

&lt;p&gt;The Bubble Figure is an interactive experience that runs in the browser. When a person is recognized via the webcam it makes them appear as a colorful bubble figure. They can then interact with various shapes that fall from above, for example, by hitting them. Simple and fun, and all in the visual language of Grand One 2023.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;The Bubble Figure uses &lt;a href="https://github.com/tensorflow/tfjs-models"&gt;TensorFlow.js&lt;/a&gt; pose detection to recognize a person. Pose keypoints (e.g. left shoulder, right wrist) are then mapped onto a &lt;a href="https://threejs.org"&gt;Three.js&lt;/a&gt; scene.&lt;/p&gt;

&lt;p&gt;The figure is randomized every time a new person is detected. The shapes falling from above are also randomized, while using certain geometries and textures.&lt;/p&gt;

&lt;p&gt;To simulate physics, &lt;a href="https://github.com/pmndrs/cannon-es"&gt;cannon-es&lt;/a&gt; is used, a maintained fork of cannon.js (we found out the hard way cannon.js wasn't maintained anymore). Shape coordinates are mapped from the physical world to the Three.js scene, while the figure is mapped from the scene to the physical world.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did we do it?
&lt;/h2&gt;

&lt;p&gt;Funnily, none of us had any experience with these libraries. We learned everything the best way: on the job, with lots of trial and error.&lt;/p&gt;

&lt;p&gt;ChatGPT was very useful to understand some concepts from the tech stack and generate basic code. But of course, this required some fixing and modifying to get it to work.&lt;/p&gt;

&lt;p&gt;We did quite a lot of tinkering from the design perspective, to make sure The Bubble Figure looks alright. This required adjusting the number of bubbles, their sizes, offsetting their positions, and adding randomness to create various interesting results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I try it?
&lt;/h2&gt;

&lt;p&gt;Absolutely! You can check out the latest &lt;a href="https://wunderdogsw.github.io/go-23-app/"&gt;demo on GitHub pages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please use Google Chrome, other browsers are not supported. Allow the browser to use the camera. Then take a few steps back to make sure that your pose is detected, and knock some shapes around.&lt;/p&gt;

&lt;p&gt;You can also hit Command + K on Mac or Ctrl + K on Windows to adjust various parameters. Clicking Apply will save the parameters in the browser's local storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are there any limitations?
&lt;/h2&gt;

&lt;p&gt;Of course, it wouldn't be a software project without limitations. &lt;/p&gt;

&lt;p&gt;For instance, cylinders and cones don't always collide with the figure in a smooth manner. We improved it a bit by randomizing the figure's bubble z coordinates. Still, some weird collisions may happen. Isn't it part of the fun though?&lt;/p&gt;

&lt;p&gt;We also found it rather difficult to render the bubble figure always in the same size, regardless of the person's distance from the camera. Maybe given more time we would have succeeded, but we had to release the project.&lt;/p&gt;

&lt;p&gt;The frame rate also changes once the pose is detected. Nothing really bad, even though ideally it should be consistent.&lt;/p&gt;

&lt;p&gt;Also, for some reason using TensorFlow pose detection as NPM packages caused various JavaScript errors. That's why we had to resort to loading it via script tags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is the code?
&lt;/h2&gt;

&lt;p&gt;The Bubble Figure has been released as open source in the &lt;a href="https://github.com/wunderdogsw/go-23-app"&gt;Wunderdog GitHub account&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Since we were short on time, we did rapid prototyping and the code got very messy. So, following the event, we spent about a week cleaning it up and also adding TypeScript.&lt;/p&gt;

&lt;p&gt;One thing I might have done differently, is to create a the figure with a skeleton. Then it should be easier to move the skeleton's joints and possibly to keep the figure the same size regardless of camera distance. Oh well, next time.&lt;/p&gt;

&lt;p&gt;I hope that you like this little project. May you find it useful if you would also like to create an interactive browser experience with pose detection, 3D graphics, and physics.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tensorflow</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing Klepto: Sharing and Stealing Great Ideas</title>
      <dc:creator>Ido Schacham</dc:creator>
      <pubDate>Fri, 25 Nov 2022 15:16:59 +0000</pubDate>
      <link>https://dev.to/idosius/mongodb-atlas-hackathon-2022-on-dev-4a4i</link>
      <guid>https://dev.to/idosius/mongodb-atlas-hackathon-2022-on-dev-4a4i</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Klepto - a platform for sharing and stealing great ideas&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://klepto.vercel.app"&gt;https://klepto.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--us1nsOov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2jp9aq6hv1yngvafcii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--us1nsOov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2jp9aq6hv1yngvafcii.png" alt="Home" width="880" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DiI3sFc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxm5ohf07cguli0vrznp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DiI3sFc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxm5ohf07cguli0vrznp.png" alt="Add idea" width="880" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5obHUg-s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2r54o6vgwb270b25fqng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5obHUg-s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2r54o6vgwb270b25fqng.png" alt="Edit/delete idea" width="880" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;Ever had an amazing idea, but no clue what to do with it? Do you maybe want to build a new project, but are out of ideas?&lt;/p&gt;

&lt;p&gt;Well, I have just the solution for you: Klepto!&lt;/p&gt;

&lt;p&gt;Klepto is a platform for freely sharing and stealing great ideas, a place where dreamers and doers can have a constructive exchange, an initiative to help bring more innovation to the world. &lt;/p&gt;

&lt;p&gt;If you're a dreamer, let go of your ideas by releasing them to the public on Klepto and have someone else work out the kinks and make them come alive. &lt;/p&gt;

&lt;p&gt;If you're a doer, go ahead and check out the latest, the most popular, or random ideas out there. Love them, steal them, and get to work.&lt;/p&gt;

&lt;p&gt;Even if you're just a watcher, you can vote for ideas, link to them, and just enjoy the creativity of the human mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/wunderdogsw/klepto"&gt;https://github.com/wunderdogsw/klepto&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I was in between projects for my employer &lt;a href="https://www.wunderdog.fi"&gt;Wunderdog&lt;/a&gt; and wanted to learn some Svelte and MongoDB. &lt;/p&gt;

&lt;p&gt;So, I asked my colleagues to come up with ideas, and this meta idea of having a web app for ideas was my top pick.&lt;/p&gt;

&lt;p&gt;Since my time on the bench was limited, and I like a lean approach, I built an MVP with the core functionality of the website that provides the most value to the user. There is a lot more that could be implemented, contributions are welcome!&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;Klepto is built with Svelte, SvelteKit, Svelte Material UI, and MongoDB. &lt;/p&gt;

&lt;p&gt;I used MongoDB Atlas since it made it easy to get going with a MongoDB setup for free and very quickly. &lt;/p&gt;

&lt;p&gt;Since this was my first attempt at coding with this stack, I learned it all on the job. &lt;/p&gt;

&lt;p&gt;With SvelteKit I especially learned how to retrieve and pass data in pages, as well as how to create API endpoints.&lt;/p&gt;

&lt;p&gt;On the MongoDB side, I learned how to use update documents and aggregation pipelines so that data is updated correctly and in the most efficient way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;p&gt;Klepto is inspired by String (no typo) who said: if you love some idea, set it free!&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>mongodb</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Svelte Script Code Execution Order</title>
      <dc:creator>Ido Schacham</dc:creator>
      <pubDate>Fri, 25 Nov 2022 09:34:48 +0000</pubDate>
      <link>https://dev.to/idosius/svelte-script-code-execution-order-4n1m</link>
      <guid>https://dev.to/idosius/svelte-script-code-execution-order-4n1m</guid>
      <description>&lt;p&gt;While working on my first Svelte project for a &lt;a href="https://www.wunderdog.fi" rel="noopener noreferrer"&gt;Wunderdog&lt;/a&gt; customer, I was caught by surprise—not by Svelte being very effective and fun to work with, that part I already knew. &lt;/p&gt;

&lt;p&gt;What surprised me was the order in which Svelte was executing JavaScript code, especially when mixing up asynchronous functions, reactive statements, and onMount.&lt;/p&gt;

&lt;p&gt;For example, take a look at this Svelte component, or head to the &lt;a href="https://svelte.dev/repl/6e42003c562b4be19ddd8bbfcdbb9d2f?version=3.53.1" rel="noopener noreferrer"&gt;Svelte REPL&lt;/a&gt;. In which order will these console logs appear? Go ahead and write it down before you continue reading.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onMount&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1. fetchData&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2. started&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3. fetched&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="nx"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4. reactive&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5. continued&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nf"&gt;onMount&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="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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;6. onMount&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7. after mount&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Answer
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;2. started&lt;/code&gt;&lt;br&gt;
&lt;code&gt;1. fetchData&lt;/code&gt;&lt;br&gt;
&lt;code&gt;5. continued&lt;/code&gt;&lt;br&gt;
&lt;code&gt;7. after mount&lt;/code&gt;&lt;br&gt;
&lt;code&gt;4. reactive&lt;/code&gt;&lt;br&gt;
&lt;code&gt;6. onMount&lt;/code&gt;&lt;br&gt;
&lt;code&gt;3. fetched&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is that? Let’s investigate
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2. started
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;fetchData&lt;/code&gt; constant is assigned to an asynchronous function. The function isn’t called yet, so it doesn’t log anything at the moment. Hence, the first log that appears in the console is &lt;code&gt;2. started&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. fetchData
&lt;/h3&gt;

&lt;p&gt;Next, the &lt;code&gt;fetchData&lt;/code&gt; function is called, thus &lt;code&gt;1. fetchData&lt;/code&gt; is logged to the console. The callback &lt;code&gt;.then(() =&amp;gt; console.log('3. fetched'))&lt;/code&gt; isn’t called just yet—it’s added to the browser’s message queue, and will be called once the event loop reaches it, a bit later.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. continued
&lt;/h3&gt;

&lt;p&gt;Shouldn’t &lt;code&gt;4. reactive&lt;/code&gt; be logged now? That’s what I thought, but turns out I was wrong. According to the &lt;a href="https://svelte.dev/docs#component-format-script-3-$-marks-a-statement-as-reactive" rel="noopener noreferrer"&gt;Svelte docs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reactive statements run after other script code and before the component markup is rendered, whenever the values that they depend on have changed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Indeed, other script code hasn’t finished running yet. Therefore, this reactive statement isn’t executed at this time, and the next console log is &lt;code&gt;5. continued&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. after mount
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;7. after mount&lt;/code&gt; is logged to the console. That’s because the callback in &lt;code&gt;onMount&lt;/code&gt; will only be called once the component is first rendered, and that hasn’t happened yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. reactive
&lt;/h3&gt;

&lt;p&gt;Now we hit that sweet spot after other script code has been executed, and before the component markup is rendered. This means it’s time to execute that reactive statement, thus logging &lt;code&gt;4. reactive&lt;/code&gt; to the console.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. onMount
&lt;/h3&gt;

&lt;p&gt;At this point there is no more script code to execute and the component is rendered. Thus, the &lt;code&gt;onMount&lt;/code&gt; callback is called and &lt;code&gt;6. onMount&lt;/code&gt; is logged to the console.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. fetched
&lt;/h3&gt;

&lt;p&gt;What about the callback to our asynchronous function, remember that? Oh yeah, says the event loop, as it handles the message queue. The callback is executed, and finally, &lt;code&gt;3. fetched&lt;/code&gt; is logged to the console.&lt;/p&gt;

&lt;h2&gt;
  
  
  Done
&lt;/h2&gt;

&lt;p&gt;While I find Svelte to be very intuitive and developer friendly, the script execution order can be a bit puzzling when using asynchronous functions and reactive statements. I hope that this post has helped you to understand this issue and to squash your bugs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@cookiethepom?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Cookie the Pom&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>microsoft</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>How I Used Scrum to Save My Marriage</title>
      <dc:creator>Ido Schacham</dc:creator>
      <pubDate>Tue, 08 Nov 2022 11:28:52 +0000</pubDate>
      <link>https://dev.to/idosius/how-i-used-scrum-to-save-my-marriage-31j6</link>
      <guid>https://dev.to/idosius/how-i-used-scrum-to-save-my-marriage-31j6</guid>
      <description>&lt;p&gt;My marriage was in trouble. I’ve heard that having your first child can really put stress on the relationship, but I had no idea just how much. &lt;/p&gt;

&lt;p&gt;At one point, after having a really bad fight with my wife, I realized that I couldn’t take it any more. There had to be a better way. &lt;/p&gt;

&lt;p&gt;Then it came to me: what if I used Scrum in our marriage? After all, what is Scrum if not a framework to solve complex problems, in a transparent, inspective, and adaptive way?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Family Scrum Master
&lt;/h2&gt;

&lt;p&gt;The first order of the day: big kickoff meeting. We set our intentions to get back to the team mindset, or “the fun &amp;amp; love path” as we like to call it. &lt;/p&gt;

&lt;p&gt;We then took turns speaking and listening to surface major pain points. We discussed it together, keeping a constructive mindset to focus on the issue rather than blaming the other person, and came up with effective solutions.&lt;/p&gt;

&lt;p&gt;This was an excellent start. We were both fighting less, felt like we were being seen, and that the workload was finally fairly distributed. Nonetheless, how would we make sure to stay on the fun &amp;amp; love path instead of regressing to the fighting &amp;amp; bickering path? &lt;/p&gt;

&lt;p&gt;Enter Scrum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since there was so much going on, we initiated one week Sprints&lt;/li&gt;
&lt;li&gt;To get a grip on todos, we created a ticket backlog&lt;/li&gt;
&lt;li&gt;We scheduled regular Retros on Sundays to inspect and adapt&lt;/li&gt;
&lt;li&gt;We set up Sprint Planning following the retros to plan the upcoming week&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scrum or ScrumBut?
&lt;/h2&gt;

&lt;p&gt;What about Dailies and Sprint Reviews? Wasn’t this yet another good old case of the &lt;a href="https://www.wunderdog.fi/blog/scrum-or-scrumbut"&gt;ScrumButs&lt;/a&gt;? &lt;/p&gt;

&lt;p&gt;From a dry perspective, yes, it was. However, while Scrum was very helpful, it didn’t fully translate to my marriage. We were having dailies over breakfast anyway, even talking too much as my wife once humorously said. Sprint reviews were irrelevant since we are both the Scrum Team and stakeholders.&lt;/p&gt;

&lt;p&gt;The goal is not to be a stickler to the Scrum Guide, but to use it as a starting point. I made adjustments depending on the situation, and did so consciously while inspecting and iterating over the results. To me, at least, that’s the spirit of Scrum. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Product Goal
&lt;/h2&gt;

&lt;p&gt;Of course, Scrum alone can't save an entire marriage—we also started going to couple’s therapy, improving our communication, and working on our personal issues, amongst many other things. Yet Scrum has really helped us reach closer to our Product Goal: to save our marriage and get back to the fun &amp;amp; love path.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Photo by &lt;a href="https://unsplash.com/@alysa?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Alysa Bajenaru&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>scrum</category>
      <category>scrummaster</category>
      <category>agile</category>
    </item>
  </channel>
</rss>
