<?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 Alejandro Sobko on Medium]]></title>
        <description><![CDATA[Stories by Alejandro Sobko on Medium]]></description>
        <link>https://medium.com/@alejandrosobko?source=rss-20d9903fbbe------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*4Sm284fmHMx1Bqlp02iEcA.jpeg</url>
            <title>Stories by Alejandro Sobko on Medium</title>
            <link>https://medium.com/@alejandrosobko?source=rss-20d9903fbbe------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 10:26:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@alejandrosobko/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[Learn programming: Reasons and resources]]></title>
            <link>https://medium.com/devartis/learn-programming-reasons-and-resources-70bbd88f31b8?source=rss-20d9903fbbe------2</link>
            <guid isPermaLink="false">https://medium.com/p/70bbd88f31b8</guid>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Alejandro Sobko]]></dc:creator>
            <pubDate>Mon, 02 Mar 2020 19:55:16 GMT</pubDate>
            <atom:updated>2020-03-02T19:55:16.986Z</atom:updated>
            <content:encoded><![CDATA[<h4>Learn how to have superpowers!</h4><p>Most people think that software programming is a difficult area, something for geniuses, an activity that you can only do if you were born surrounded by computers. But <em>software programming is available to everyone</em>, and you should give it a chance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*CkHTFG-GqC0SmSZA" /><figcaption>Photo by <a href="https://unsplash.com/@jakesloop?utm_source=medium&amp;utm_medium=referral">Jake Sloop</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Why?</h3><h4>Make things from scratch</h4><p>With software programming you can create things just seated in front of your computer. You can create a website, a script to automate a repetitive task, a big system (yes, with effort and time, you can do it) or whatever you want. And it is really motivating to build things just with code!<br>Just pick a goal, pick a language and start building ;-)</p><h4>It is the language of the future</h4><p>Nowadays every device we use has code inside. We are around software in every place. Our smartphone or computer runs applications and we use them all the time. These apps let you play games, chat with your friends and solve daily problems such as planning your commute. And if we have a new problem that isn’t already being solved by an app, we could just code and solve it. Because of that I say <em>programming is the language of the future</em>.</p><blockquote>Thanks to programming we can create technology that enhances our lives.</blockquote><p>With software programming you can create applications to solve a problem. Just like the following real examples:</p><ul><li><a href="https://www.innovatorsunder35.com/the-list/mateo-salvatto/">Mateo Salvatto | Innovators Under 35</a></li><li><a href="https://www.npr.org/sections/thesalt/2016/09/15/494074992/teen-creates-app-so-bullied-kids-never-have-to-eat-alone">Teen Creates App So Bullied Kids Never Have To Eat Alone</a></li></ul><p>These applications were created by teenagers wanting to help their community.</p><h4>Automate tasks</h4><p>Data collection, batch of instructions, mass file operations (like renaming multiple files) or <a href="https://en.wikipedia.org/wiki/Web_scraping">website scrapping</a> to get specific information are a few examples of tasks you can automate using little scripts. You don’t need to be a computer scientist to code them.</p><p>How? This book covers all these topics: <a href="https://automatetheboringstuff.com/">https://automatetheboringstuff.com/</a></p><h4>Learn to think</h4><p>Code is just text that a computer interprets. And, just like any language, it has a particular syntax and format. This text contains very simple instructions to perform a task and you, the programmer, have to design it.</p><blockquote>Everyone in this country should learn to program a computer, because it teaches you how to think. — Steve Jobs</blockquote><p>Coding is dividing a problem in small pieces and solving them one by one (<em>divide and conquer</em>). It opens the doors to develop your imagination and make your ideas real.</p><blockquote>Every program starts step by step, solving each problem at a time.</blockquote><p>It is incredible when you start coding and see what you have created. A program is printing on screen, a website has text and colors!</p><h4>Robotics</h4><p>You can connect programming with robotic and create very interesting things. Just think about creating a mobile app to manage the lights of your house, build a Fingerprint Scanner or build your own remote control car.</p><p>The list is very extensive, you can check these <a href="https://www.ubuntupit.com/top-15-best-arduino-projects-that-you-can-build-right-now/">15 Arduino projects</a> you can start making now and also <a href="https://www.ubuntupit.com/best-internet-of-things-projects-iot-projects-that-you-can-make-right-now/">20 interesting projects</a> using <a href="https://www.iotforall.com/what-is-iot-simple-explanation/">internet of things</a>.</p><h3>What do I need to start?</h3><p>First at all, what you don’t need to start:</p><ul><li>You don’t need to be an expert at math</li><li>You don’t need to be an expert solving calculus</li><li>You don’t need to be a geek (but you will become one ;-))</li></ul><p>You just need to have a computer, internet connection and the will to do it. And of course, it is important to be very curious.</p><h3><strong>Where do I start?</strong></h3><h4>Learn a programming language</h4><p>On every programming forum exists the discussion about which programming language is the best. Just do not spend your time trying to find the best language. Instead, focus on your goal. It could be writing your website, writing a system to administrate your commerce, or whatever project you want to enhance with software. And as a suggestion, take a look at the online community of the language. At some point you might need help about the syntax or an specific problem, and that is when internet communities come to the rescue.</p><p>At the end of this article you will find some links about online communities that I hope will help you.</p><h4>Want to build apps?</h4><h4>Python</h4><p>Python is a programming language that is very easy to learn, and it can be used on a server to create web applications or to create scripts. <br>See more at: <a href="https://www.python.org/">https://www.python.org/</a></p><p>Take a look at this free course:</p><p><a href="https://www.codecademy.com/learn/learn-python">Learn Python 2 | Codecademy</a></p><h4>Ruby</h4><p>Ruby has a focus on simplicity. It has an elegant syntax that is natural to read and easy to write.<br>See more at: <a href="https://www.ruby-lang.org/en/">https://www.ruby-lang.org/en/</a></p><p>Take a look at this free course:</p><p><a href="https://www.codecademy.com/learn/learn-ruby">Learn Ruby | Codecademy</a></p><h4>Want to build websites?</h4><h4>HTML</h4><p>This is the standard markup language for creating Web pages.<br>See more at: <a href="https://www.w3schools.com/html/html_intro.asp">https://www.w3schools.com/html/html_intro.asp</a><br>Take a look at this free course:</p><p><a href="https://www.freecodecamp.org/news/html-full-course-for-beginners/">HTML Basics: A Free Full-Length Course</a></p><h4>CSS</h4><p>Time to customize the look and feel of your web app. CSS is the way add style on the HTML document.<br>See more at: <a href="https://www.w3schools.com/css/">https://www.w3schools.com/css/</a><br>Take a look at this free course:</p><p><a href="https://www.freecodecamp.org/news/get-started-with-css-in-5-minutes-e0804813fc3e/">Learn CSS in 5 minutes - A tutorial for beginners</a></p><h4>JavaScript</h4><p>If you want to make your website dynamic I recommend you to learn this language. It is the programming language of HTML and the Web. It’s used to create web applications or animate content over HTML.<br>See more at: <a href="https://www.w3schools.com/js/">https://www.w3schools.com/js/</a><br>Take a look at this free course:</p><p><a href="https://www.freecodecamp.org/news/learn-javascript-full-course/">Learn JavaScript - Full 134-Part Course for Beginners</a></p><h4>Want to build with hardware? 🤖</h4><h4>Arduino</h4><p>Arduino is an <a href="https://en.wikipedia.org/wiki/Open_source">open-source</a> electronics platform based on easy-to-use hardware and software. <a href="https://www.arduino.cc/en/Main/Products">Arduino boards</a> are able to read inputs — light on a sensor, a finger on a button, or a Twitter message — and turn it into an output — activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the micro controller on the board.<br>See more at: <a href="https://www.arduino.cc/en/Guide/HomePage">https://www.arduino.cc/en/Guide/HomePage</a></p><h4>Raspberry Pi</h4><p>The Raspberry Pi is a low cost, credit-card sized computer that plugs into a computer monitor or TV, and uses a standard keyboard and mouse. Like Arduino, it has the ability to interact with external things such as buttons, led, motor or other electronic devices.<br>See more at: <a href="https://www.raspberrypi.org/">https://www.raspberrypi.org/</a></p><h3>Online communities</h3><p>The online communities about programming are big, really. There are communities about programming in general or about specific topics. These are very useful to share content or meet new people with the same interests as yours.</p><p>Online communities could be forums, chat rooms like Slack channels and even meetings or conferences.</p><p>Did you earn experience in some area and want to get into its community? Try finding the community associated to that topic. Check the following examples:</p><ul><li><strong>Ruby on Rails</strong> Slack Community: <a href="https://www.rubyonrails.link/">https://www.rubyonrails.link/</a></li><li><strong>Python</strong> Slack Community: <a href="https://pythondev.slack.com/">https://pythondev.slack.com/</a></li></ul><p>Learn new topics on:</p><ul><li><a href="https://www.freecodecamp.org/news/">https://medium.freecodecamp.org/</a></li><li><a href="https://hackernoon.com/">https://hackernoon.com/</a></li></ul><p>Or try finding <em>meetups</em> about your favorite topic (i.e: Java, Algorithm, Hacking) on Google.</p><p>Thanks for your reading. I hope this article helped you to get motivated to learn how programming and to show that coding is useful, easy and available for everyone. Follow me for upcoming posts and do not forget to check <a href="http://www.alejandrosobko.com/">my website</a>.</p><p>Happy coding!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/295/0*BOprsv9By0WR0NNF.png" /><figcaption><a href="https://www.devartis.com/">Visit us!</a></figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=70bbd88f31b8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devartis/learn-programming-reasons-and-resources-70bbd88f31b8">Learn programming: Reasons and resources</a> was originally published in <a href="https://medium.com/devartis">devartis</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beautiful drag and drop with React — The beginner’s guide]]></title>
            <link>https://medium.com/devartis/beautiful-drag-and-drop-with-react-the-beginners-guide-7798e3928290?source=rss-20d9903fbbe------2</link>
            <guid isPermaLink="false">https://medium.com/p/7798e3928290</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[drag-and-drop]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Alejandro Sobko]]></dc:creator>
            <pubDate>Mon, 03 Dec 2018 14:13:46 GMT</pubDate>
            <atom:updated>2021-01-08T14:18:52.417Z</atom:updated>
            <content:encoded><![CDATA[<h3>Beautiful drag and drop with React — The beginner’s guide</h3><h4>Understand this library by creating a kids video game</h4><p>This post is about the <a href="https://github.com/atlassian/react-beautiful-dnd">react-beautiful-dnd</a> library that I used to create a simple video game for kids, combined with React, CSS and a bit of imagination! I assume you are familiar with React, if you are not, you might consider taking a <a href="https://reactjs.org/tutorial/tutorial.html">course</a> first.</p><p>I will avoid the screenshots of the main concepts about React, like setup, the whole interfaces or extra components. I will only show the components associated with drag and drop. At the end of the article I will leave links with resources, github and more.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ze3zx5QRPvNTSua7" /><figcaption>Photo by <a href="https://unsplash.com/@pj24dm?utm_source=medium&amp;utm_medium=referral">Peter John Maridable</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>react-beautiful-dnd is a library by Atlassian. The library takes care of providing a natural drag and drop experience. It is a higher level abstraction built for vertical and horizontal lists.</p><p>The objective is to create the following game:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fzS4h3LWAtDlYHXAp_3rag.gif" /><figcaption>A kids game made with drag and drop on react</figcaption></figure><h4>Let’s start with the main concepts:</h4><p><em>DragDropContext: </em>The place where the drag and drop actions happen. This component calls onDragEnd<em> </em>when the draggable item is dropped and it’s the only function required. We can also define onDragStart and onDragUpdate to be executed when the item is dragged and when something happens during a drag, respectively.</p><p><em>Droppable: </em>The component where we take the elements to drag and where we drop them (the droppable could be the same). A droppable needs a couple of properties that I will describe in a moment.</p><p><em>Draggable: </em>The item to be moved. Like a Droppable, a Draggable needs a couple of properties to define a component as draggable.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/625/1*pA-mWjMWTPXwqN41WMQh-A.png" /></figure><p>After the main concepts, let’s define the initial data that we need to create the game:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/dad9b428176d43410556be8baf705711/href">https://medium.com/media/dad9b428176d43410556be8baf705711/href</a></iframe><p>With these three concepts in mind, we can start creating our first component. This component only contains a render method, and we are going to complete it in a moment.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/99072cc26d1b2469853953a37ae69269/href">https://medium.com/media/99072cc26d1b2469853953a37ae69269/href</a></iframe><p><em>NumbersGameContext</em>: it is just a wrapper of <strong>DragDropContext</strong>. <br><em>VerticalColumn</em>: it is the column that contains the draggable elements.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9a2f9125a5e214b865114aaf6f6b7ce6/href">https://medium.com/media/9a2f9125a5e214b865114aaf6f6b7ce6/href</a></iframe><p>DroppableWrapper is a component that abstracts the idea of a <strong>Droppable</strong> container because it has particular properties that I will explain below. This is how it is defined:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c8a5209b09149bb9b6ad6e085e982492/href">https://medium.com/media/c8a5209b09149bb9b6ad6e085e982492/href</a></iframe><p><strong>Droppable</strong> needs droppableId and it must be unique inside a <strong>DragDropContext</strong>.<strong> </strong>It also expects a function as a child, and it uses the <a href="https://www.robinwieruch.de/react-render-props-pattern/">render props pattern</a> to avoid creating or manipulating the DOM for you, you are the only who create DOM elements.<br>The first argument of this function is provided<em>. </em>This argument has droppableProps,<em> </em>these are the necessary properties you will need to designate the component as a <em>droppable</em>. We can apply some or all of them, by spread operator. For this tutorial, I will apply all by spread operator. If you need an specific case, check out the <a href="https://github.com/atlassian/react-beautiful-dnd">documentation</a>.<br>The other property is innerRef which is a function used to supply your DOM element to the library.<br>Lastly, we need to insert a placeholder<em>. </em>A placeholder is a React element that is used to increase the available space in a droppable during a drag when needed. The placeholder needs to be added as a child of the component that you designate as the <em>droppable</em>. Our droppable set up is now completed.</p><p>Now is time to code our DraggableListItems, this component creates the NumberBox (a <em>droppable</em> item).</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/0caa669d73c30e8bfeef61456d77e796/href">https://medium.com/media/0caa669d73c30e8bfeef61456d77e796/href</a></iframe><p>NumberBox defines a wrapper to <strong>Draggable</strong>. Let’s see it:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/feae121a4b08397b6bac80ef78047942/href">https://medium.com/media/feae121a4b08397b6bac80ef78047942/href</a></iframe><p>I’ve created a DraggableItemWrapper to abstract the idea of <strong>Draggable</strong><em> </em>because like <strong>Droppable</strong>, it has particular properties to define.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/db944bdeb15f5f158c4ad0e3decd6804/href">https://medium.com/media/db944bdeb15f5f158c4ad0e3decd6804/href</a></iframe><p>What do we have now? Another render props pattern. In that case, <strong>Draggable</strong> needs draggableId and index. A draggableId must be unique inside a <strong>DragDropContext</strong>. Also, a draggable needs a function as a child. The first argument is provided, like <strong>Droppable</strong>. The other property is dragHandleProps. These are the necessary properties you will need to designate the component as a <em>draggable</em>.</p><blockquote>With this abstraction, you can use the DraggableItemWrapper and forget about these low level properties.</blockquote><p>Great! We have defined the following abstraction of the main concepts of the library:</p><ul><li>NumbersGameContext: an abstraction of <strong>DragDropContext</strong></li><li>DroppableWrapper: an abstraction of <strong>Droppable</strong></li><li>DraggableItemWrapper: an abstraction of <strong>Draggable</strong></li></ul><p>And our components as part of the game:</p><ul><li>VerticalColumn: a component to encapsulate the droppable column and the draggable items</li><li>DraggableListItems: a component to encapsulate all NumberBox elements</li><li>NumberBox: a draggable component of the game</li></ul><p>But, our onDragEnd is still empty. Let’s fill it.<br>First, we have to analyze the argument of this method:</p><pre> result: {<br>   destination: {<br>     droppableId: &quot;column-1&quot;<br>     index: 2<br>   }<br>   draggableId: &quot;four&quot;<br>   reason: &quot;DROP&quot;<br>   source: {<br>     droppableId: &quot;column-1&quot;<br>     index: 0<br>   }<br>   type: &quot;DEFAULT&quot;<br> } </pre><p>It contains information about where are you dragging on (from what column and position), where are you dropping on (from what column and position), and if you are doing a “drag” or a “drop”.</p><p>With all of this information we can do something like this:<br>First, save <em>destination</em>, <em>draggableId</em> and <em>source</em> in variables:<br>const { destination, source, draggableId } = result;</p><p>Now, create a new list of sorted numbers:</p><pre>const column = this.state.column;<br>const numberIds = Array.from(column.numberIds);<br>numberIds.splice(source.index, 1);<br>numberIds.splice(destination.index, 0, draggableId);<br>const numbers = numberIds.map((numberId: string) =&gt;<br>  parseInt(this.state.numbers[numberId].content, 10));</pre><p>And update the state:</p><pre>const newColumn = {<br>  ...column,<br>  numberIds<br>};</pre><pre>this.setState({<br>  ...this.state,<br>  column: newColumn<br>});</pre><p>An extra nice detail, when the user drags a number or wins, we play an already downloaded sound in the assets folder:</p><pre>public playSound(numbers: number[]) {<br>  const sound = isSortedAsc(numbers) ? ClapsSound : MoveSound;<br>  new Audio(sound).play();<br>}</pre><p>This is how the entire method looks like:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/6e54a654d7105d4ddec9129c7bd87ca4/href">https://medium.com/media/6e54a654d7105d4ddec9129c7bd87ca4/href</a></iframe><h3>Rounding up</h3><p>With these components we have what’s necessary to show a list of number boxes and the ability to drag and drop them on the same column. As extra details, apply CSS and Sound to create a better scenario for the game.</p><p>This will be all for this beginner’s guide, there is still much more information about this awesome library that you can check on the links below. Now is time for your own adventure.</p><p>I hope you enjoyed this guide. Thanks for reading and follow me to see what is coming next.</p><p>Good luck and happy coding!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fzS4h3LWAtDlYHXAp_3rag.gif" /></figure><h3>Extra resources</h3><ul><li><a href="https://github.com/atlassian/react-beautiful-dnd">react-beautiful-dnd</a> on github</li><li>Free react-beautiful-dnd <a href="https://egghead.io/courses/beautiful-and-accessible-drag-and-drop-with-react-beautiful-dnd">introduction course</a></li><li><a href="https://github.com/alejandrosobko/tikijuegos">Source code</a> of this video game</li><li><a href="https://tikijuegos.netlify.app/">Game online</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/296/1*bJfaXEZYinwP5RU50c94yw@2x.jpeg" /><figcaption><a href="https://www.devartis.com/">Visit us!</a></figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7798e3928290" width="1" height="1" alt=""><hr><p><a href="https://medium.com/devartis/beautiful-drag-and-drop-with-react-the-beginners-guide-7798e3928290">Beautiful drag and drop with React — The beginner’s guide</a> was originally published in <a href="https://medium.com/devartis">devartis</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>