<?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 Shalom Yerushalmy on Medium]]></title>
        <description><![CDATA[Stories by Shalom Yerushalmy on Medium]]></description>
        <link>https://medium.com/@yershalom?source=rss-a07e72c23895------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*oonDnnidda0v_xTLjf9eSg.jpeg</url>
            <title>Stories by Shalom Yerushalmy on Medium</title>
            <link>https://medium.com/@yershalom?source=rss-a07e72c23895------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 12 Nov 2026 08:20:35 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@yershalom/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[When dev gets nostalgic]]></title>
            <link>https://medium.com/hackernoon/when-dev-gets-nostalgic-17901c4f703f?source=rss-a07e72c23895------2</link>
            <guid isPermaLink="false">https://medium.com/p/17901c4f703f</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[word-art]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[dev-nostalgia]]></category>
            <dc:creator><![CDATA[Shalom Yerushalmy]]></dc:creator>
            <pubDate>Tue, 05 Feb 2019 20:46:43 GMT</pubDate>
            <atom:updated>2019-02-05T20:46:43.622Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZASRrDx-8J9HfiwQhb4dbA.png" /></figure><h3><strong>tl;dr: </strong>WordArt.</h3><p>I was born in the late 80’s. It means I had some tough choices when I grew up in the 90’s. One of them was choosing a <a href="https://en.wikipedia.org/wiki/Microsoft_Word#WordArt">WordArt</a> title for a school assignment.</p><p>As part of my daily job I need to upgrade stuff that affect dozens of developers. It freezes some of the deployments and make developers not so happy :-)</p><p>I needed to do it with some creativity and I got my nostalgic attack after <a href="https://medium.com/u/11a05c32556">Ran Greenberg</a> told me “Your font looks like WordArt” and remembered the struggle I had when I was a kid.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/450/1*ctI99xGVfj3leMMCI7evYQ.gif" /></figure><h3>Solution</h3><p>I created a library for react called react-wordart. Now the deploy freeze looks much better and super user friendly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/742/1*CRmZjhl3xsa7LJkgrbabgg.png" /></figure><p>I used <a href="https://github.com/transitive-bullshit/create-react-library">https://github.com/transitive-bullshit/create-react-library</a> for generating the library and just to write the code so huge kudos to <a href="https://github.com/transitive-bullshit"><strong>Travis Fischer</strong></a>.</p><p>Most of the work from there was to write the css. Luckily I have internet… I used this <a href="https://www.designpieces.com/2017/03/wordart-css3-text-effects/">article</a> and I had the css. Also used <a href="https://www.npmjs.com/package/classnames">classnames</a> package for controlling dynamic classname and voilà.</p><p>Using create-react-library I got example project out of the box, and ran npm run deploy and there it is: <a href="https://yershalom.github.io/react-wordart/">https://yershalom.github.io/react-wordart</a></p><p>After I read this comment on my thread at Reddit, I decided to split the css to its own repo: <a href="https://github.com/yershalom/css-wordart">https://github.com/yershalom/css-wordart</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?type=text%2Fhtml&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;schema=reddit&amp;url=https%3A//www.reddit.com/r/reactjs/comments/alpo0q/i_had_a_real_nostalgic_attack_so_i_created_this/efgeldj/&amp;image=https%3A//i.embed.ly/1/image%3Furl%3Dhttps%253A%252F%252Fexternal-preview.redd.it%252F026wJ-js0_fsuzr8EzXo28GvNkhAHkD7QUiNx7x78UI.jpg%253Fauto%253Dwebp%2526s%253D24b2f9b1c6137a8aa6ca72fff71e70178fd3bb1e%26key%3Da19fcc184b9711e1b4764040d3dc5c07" width="600" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/a8cc2bafed8cbd31b914a202a34af73d/href">https://medium.com/media/a8cc2bafed8cbd31b914a202a34af73d/href</a></iframe><p>The usage is pretty simple:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/cb123a2c8e4edb7df261383dbc6703c1/href">https://medium.com/media/cb123a2c8e4edb7df261383dbc6703c1/href</a></iframe><p>And then just like that I had my nostalgic moment and created an open source out of that.</p><p>Hoped you enjoyed reading!</p><ul><li><a href="https://github.com/yershalom/react-wordart">yershalom/react-wordart</a></li><li><a href="https://github.com/yershalom/css-wordart">yershalom/css-wordart</a></li><li><a href="https://github.com/transitive-bullshit/create-react-library">transitive-bullshit/create-react-library</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=17901c4f703f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/when-dev-gets-nostalgic-17901c4f703f">When dev gets nostalgic</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I love you Flutter]]></title>
            <link>https://medium.com/hackernoon/i-love-you-flutter-fd7c30b2047e?source=rss-a07e72c23895------2</link>
            <guid isPermaLink="false">https://medium.com/p/fd7c30b2047e</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[android-studio]]></category>
            <category><![CDATA[i-love-you-flutter]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Shalom Yerushalmy]]></dc:creator>
            <pubDate>Thu, 11 Oct 2018 09:54:00 GMT</pubDate>
            <atom:updated>2018-10-11T09:54:00.792Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PjD3CtH90bHKo9nt2hP0BQ.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/photos/2PODhmrvLik?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Mayur Gala</a> on <a href="https://unsplash.com/search/photos/love?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><p>I took <a href="https://flutter.io/">Flutter</a> for a round for the first time and I enjoyed every moment of it. Well, the syntax was different for me, but still liked it a lot. Here are my thoughts about my first experience with Flutter.</p><h3>Installation</h3><p>I work with MacOS, so I started with the <a href="https://flutter.io/setup-macos/">Get Started: Install on macOS</a> page. Just download the zipped sdk and add it to your PATH.</p><p>I ran the flutter doctor command to check that everything was OK. I had some issues like install flutter plugin on Android Studio. I installed the plugin and saw this (woo hoo):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/557/1*MqCYt-C-dH1KPbmPwX1C8Q.png" /></figure><p>The next step was to <a href="https://flutter.io/get-started/editor/#androidstudio">configure my editor</a>, in this case Android Studio. Only few clicks and I had the flutter and dart plugins installed on my editor. Easy peasy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/356/1*FDPh9iP2M6XgyRzDEytKCQ.gif" /></figure><h3>Get Started</h3><p>Let’s write some code, or at least run it.</p><p>The first step of the <a href="https://flutter.io/get-started/test-drive/#androidstudio">getting started step</a> is to create a new flutter project in Android Studio and run it. Everything worked like the docs said, profit!</p><h3>Coding</h3><p>Awe yeah! Coding is here.</p><p>The goal of the <a href="https://flutter.io/get-started/codelab/">code lab</a> was to achieve infinite scrolling ListView app, called: <em>Startup Name Generator. </em>Something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/454/1*65_wbm01gkeSu6LSwJA2DQ.gif" /><figcaption>Gif by https://flutter.io</figcaption></figure><p>This tutorial was very informative and I learned how to build a layout; how to use an external package and the difference between StatelessWidget and StatefulWidget.</p><p>At the end of the tutorial, there was a summary of what was achieved and if I wanted to continue (yes, please), and a little teaser:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/454/1*CdEUhTlFqB2bezkUFszOvw.png" /><figcaption>Gif by <a href="https://flutter.io/">https://flutter.io</a></figcaption></figure><p>I clicked on <a href="https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/#0">part 2</a>. The mission was to add a favorite icon and a navigation for the favorite names.</p><p>The first 3 steps are building the environment, so you can skip them if you did these in part 1. I learned app hot reloading, navigation (Flutter has it out of the box) and how to add icons from the flutter material design.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*cznnK8iXloAAKWxvijfrBA.png" /><figcaption>Screenshot by <a href="https://flutter.io/">https://flutter.io</a></figcaption></figure><p>The <a href="https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/#8">last step</a> of this tutorial contained a few links for further tutorials and knowledge-bases, but I was too eager to try something out and google the things I needed.</p><h3>My first Flutter project</h3><p>When I’m testing a new mobile framework or language, I like to build a simple reddit app. Fetch hot topics, see some posts and read and comment. It’s a good practice, since it combines http call, parsing objects, navigation and webview. You can see the examples on my Github, written in <a href="https://github.com/yershalom/check-the-idle">Kotlin</a> and in <a href="https://github.com/yershalom/reddit_react_native">React Native</a>.</p><blockquote>Don’t change a winning team</blockquote><p>So I didn’t. I wrote a new simple reddit app with flutter. I googled how to stuff and I had my first screens:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qlERJDxYzbHg0MyMJ9QyWQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WDDQshtLwjjz79ui5JXdtw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7zZ7VIIvKVLGWGjkfNi25A.jpeg" /><figcaption>TopicsScreen, PostsScreen and open link using ChromeCustomTabs package</figcaption></figure><p>So far, so good. But I wanted to test more Flutter’s features. I decided to add a <a href="https://docs.flutter.io/flutter/material/BottomNavigationBar-class.html">Bottom Navigation Bar</a>. I built another screen using the <a href="https://github.com/r-spacex/SpaceX-API">SpaceX API</a> and created a list of history SpaceX launches.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/270/1*3OrtxGEMo_Xt9H15Lih5rQ.png" /></figure><p>Simple ListView with cards, containing the mission name, mission patch and success or failure.</p><p>I wanted to try image handling and camera access.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/270/1*LfDkcw2Kj_TQg9f8vlCEvw.png" /></figure><p>I added another screen called Picky. I added add a photo icon on the app bar for adding a picture, and two rotate icons for rotating the image.</p><p>To sum it up, I love Flutter. The Flutter plugin for Android Studio is more than amazing, letting you build both iOS and Android. More than amazing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/225/1*7plC1gNEoK8efuKV_Wf99Q.gif" /><figcaption>From my <a href="https://github.com/yershalom/reddit_flutter">Github</a></figcaption></figure><p>You can grab the source code from here: <a href="https://github.com/yershalom/reddit_flutter">https://github.com/yershalom/reddit_flutter</a></p><p>Hope you like it! If so, you can follow me on <a href="https://twitter.com/yershalom">Twitter</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fd7c30b2047e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/i-love-you-flutter-fd7c30b2047e">I love you Flutter</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A better versioning scheme for your React Native modules]]></title>
            <link>https://medium.com/wix-engineering/versioning-master-8bb42e6c4a2a?source=rss-a07e72c23895------2</link>
            <guid isPermaLink="false">https://medium.com/p/8bb42e6c4a2a</guid>
            <category><![CDATA[npm]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[react-native]]></category>
            <dc:creator><![CDATA[Shalom Yerushalmy]]></dc:creator>
            <pubDate>Wed, 05 Sep 2018 11:45:04 GMT</pubDate>
            <atom:updated>2018-09-17T14:54:47.529Z</atom:updated>
            <content:encoded><![CDATA[<iframe src="https://cdn.embedly.com/widgets/media.html?url=https%3A%2F%2Fplay.ht%2Farticles%2F8bb42e6c4a2a&amp;src=https%3A%2F%2Fplay.ht%2Fembed%2F%3Farticle_url%3Dhttps%3A%2F%2Fmedium.com%2F_p%2Fversioning-master-8bb42e6c4a2a&amp;type=text%2Fhtml&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;schema=play" width="700" height="185" frameborder="0" scrolling="no"><a href="https://medium.com/media/d23141597b2856c93f338c618086802c/href">https://medium.com/media/d23141597b2856c93f338c618086802c/href</a></iframe><p>In this article, I will tell you about the versioning scheme we use for our React Native modules at Wix.</p><p>TL;DR: <a href="https://semver.org/">semver</a> syntax and git commits.</p><h3>Background</h3><p>The mobile Wix app is a modular app written in React Native. What does this mean? We have one app and many modules. The app repo is essentially a package.json with modules as dependencies, a few engine configurations, and build scripts. That’s it. By default, for standard builds, it will just use the version marked as GA, saying they’re ready for release.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/622/1*y2IQCmoXyH2m2r9WVM2Jdw.png" /></figure><h3>Get it Done</h3><p>A module is an independent product unit, it can communicate with other modules. All these modules need a version so the app (package.json) should know which version to install. We are using a library written in-house. It is based on Semantic Versioning (semver) syntax and git commits calculation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/836/1*CXtI2NayqDWBcUG1OjlLMQ.png" /></figure><p>We use a versioning scheme that supports patching — why? Life can be rough, and sometimes we need to create hotfixes. We do that by creating a branch from the previous release of a certain module. By following the state of the project’s git tree, a version is automatically calculated in the following manner:</p><p>Major: manually from package.json.</p><pre>&quot;version&quot;: &quot;<strong>2</strong>.0.0&quot;</pre><p>Minor: number of commits on the master branch.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d05d2a0f7c8b7fb32691b9f03f41a9cd/href">https://medium.com/media/d05d2a0f7c8b7fb32691b9f03f41a9cd/href</a></iframe><p>Patch: number of commits in &lt;branch&gt; since diverged from master. On the master branch, it will be 0.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/4b46fcbfb5efe700ca474d2dae66faa8/href">https://medium.com/media/4b46fcbfb5efe700ca474d2dae66faa8/href</a></iframe><p>So if my version in package.json is 3.0.0 , and I have 1,842 commits in my master branch, and I work on the master branch, I’ll get: 3.1842.0 .</p><p>For a custom branch, let’s say my version in package.json is 1.0.0 . I checked out my branch when the master had 687 commits, and I push 3 commits to my branch, I’ll get: 1.687.3 .</p><h3>Problem</h3><p>Let’s say two developers are working on the same module, which is pretty reasonable. They both want to fix a bug from the same master version: 1.265.0 . They both pushed one commit. Both of them would get the 1.256.1 version, and that’s bad since you can’t have the same two versions on the npm registry.</p><p>Luckily, we can also use the build counter. For example, add the build counter (which is unique) to the version, <a href="https://semver.org/#spec-item-9">following the patch version</a>, like this: 1.256.1-build.1435 . I must say that this is an edge case, but still, we needed a solution for that, too.</p><p>In conclusion, I would recommend using git for calculating the versions for you. Tag every commit with the version so you could connect your module version to the commit.</p><p>Hope you enjoyed it!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8bb42e6c4a2a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/wix-engineering/versioning-master-8bb42e6c4a2a">A better versioning scheme for your React Native modules</a> was originally published in <a href="https://medium.com/wix-engineering">Wix Engineering</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>