<?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 abdulazeez sherif on Medium]]></title>
        <description><![CDATA[Stories by abdulazeez sherif on Medium]]></description>
        <link>https://medium.com/@sifusherif?source=rss-187bb8b1e62f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*-JljCdgl1Jo5-RRVQxK5jQ.jpeg</url>
            <title>Stories by abdulazeez sherif on Medium</title>
            <link>https://medium.com/@sifusherif?source=rss-187bb8b1e62f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 04:04:35 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@sifusherif/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[6 Use Cases for Javascript Proxies ]]></title>
            <link>https://javascript.plainenglish.io/6-use-cases-for-javascript-proxies-b955dddedd16?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/b955dddedd16</guid>
            <category><![CDATA[proxy]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[typescript]]></category>
            <category><![CDATA[tips-and-tricks]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Sun, 30 Jun 2024 12:41:45 GMT</pubDate>
            <atom:updated>2024-07-01T05:45:53.636Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/645/0*tlXjdZ_i6D3oDN1F.png" /></figure><h3><strong>Introduction</strong></h3><p>JavaScript’s Proxy object is a powerful feature that unlocks a wide range of possibilities for developers. When combined with TypeScript, it enhances your ability to manage and manipulate objects and functions in innovative ways. This article explores the utility of Proxies through practical examples.</p><h3>What is a Proxy?</h3><p>A Proxy in JavaScript acts as a wrapper around another object, known as the target. It allows you to:</p><ol><li>Intercept fundamental operations on the target object</li><li>Redefine how these operations behave</li></ol><p>These operations include:</p><ul><li>Property lookup</li><li>Assignment</li><li>Enumeration</li><li>Function invocation</li></ul><p>With a Proxy, you can inject custom logic when getting or setting properties. This capability is particularly useful for:</p><ul><li>Implementing validations</li><li>Triggering notifications</li><li>Enabling automatic data binding</li></ul><h3>1. The Lazy Greeter</h3><p>Ever had a friend who only says their full name when asked? That’s our lazy greeter:</p><pre>let friend = new Proxy({ firstName: &quot;Jane&quot;, lastName: &quot;Doe&quot; }, {<br>  get: (person, prop) =&gt; {<br>    if (prop === &quot;fullName&quot;) {<br>      return `${person.firstName} ${person.lastName}`;<br>    }<br>    return person[prop];<br>  }<br>});<br><br>console.log(friend.fullName); // Output: Jane Doe</pre><h3>2. The Nosy Neighbor</h3><p>This proxy keeps track of how many times you’ve asked about something:</p><pre>let neighbor = new Proxy({ visits: 0 }, {<br>  get: (target, prop) =&gt; {<br>    target.visits++;<br>    console.log(`You&#39;ve asked about ${String(prop)} ${target.visits} times!`);<br>    return target[prop];<br>  }<br>});<br><br>neighbor.cat;<br>neighbor.dog;<br>neighbor.cat;</pre><h3>3. The Unbudging Boulder</h3><p>Create an object that refuses to change, like a stubborn boulder:</p><pre>function makeStubborn(obj) {<br>  return new Proxy(obj, {<br>    set: () =&gt; {<br>      console.log(&quot;Nice try, but I&#39;m not changing!&quot;);<br>      return true;<br>    }<br>  });<br>}<br><br>let boulder = makeStubborn({ weight: &quot;very heavy&quot; });<br>boulder.weight = &quot;light as a feather&quot;; // Console: Nice try, but I&#39;m not changing!<br>console.log(boulder.weight); // Output: very heavy</pre><h3>4. The Chatty Builder</h3><p>A proxy that loves to talk about what it’s building:</p><pre>function chattyCar() {<br>  let car = {};<br>  return new Proxy({}, {<br>    get: (target, prop) =&gt; {<br>      return (value) =&gt; {<br>        console.log(`Ooh, adding ${value} as the ${String(prop)}!`);<br>        car[prop] = value;<br>        return target;<br>      };<br>    }<br>  });<br>}<br><br>chattyCar().setColor(&quot;red&quot;).setWheels(4).setEngine(&quot;V8&quot;);</pre><h3>5. The Forgetful Library</h3><p>A proxy that fetches books only when you ask for them:</p><pre>let library = new Proxy({}, {<br>  get: (shelf, book) =&gt; {<br>    console.log(`Searching for &quot;${String(book)}&quot;...`);<br>    return `Here&#39;s &quot;${String(book)}&quot; for you!`;<br>  }<br>});<br><br>console.log(library.Moby_Dick);<br>console.log(library.Pride_and_Prejudice);</pre><h3>6. The Strict Parent</h3><p>A proxy that ensures you follow the house rules:</p><pre>let kidsBedtime = new Proxy({ time: 9 }, {<br>  set: (rules, prop, value) =&gt; {<br>    if (prop === &#39;time&#39; &amp;&amp; (value &lt; 7 || value &gt; 10)) {<br>      console.log(&quot;Bedtime must be between 7 PM and 10 PM!&quot;);<br>      return false;<br>    }<br>    rules[prop] = value;<br>    return true;<br>  }<br>});<br><br>kidsBedtime.time = 8; // Works fine<br>kidsBedtime.time = 11; // Console: Bedtime must be between 7 PM and 10 PM!</pre><h3>Extra. The Town Crier</h3><p>A proxy that announces every change:</p><pre>function townCrier(person) {<br>  return new Proxy(person, {<br>    set: (target, prop, value) =&gt; {<br>      console.log(`Hear ye, hear ye! ${String(prop)} is now ${value}!`);<br>      target[prop] = value;<br>      return true;<br>    }<br>  });<br>}<br><br>let mayor = townCrier({ name: &quot;Ms. Sherif&quot; });<br>mayor.name = &quot;Mr. Sherif&quot;; // Console: Hear ye, hear ye! name is now Mr. Sherif!</pre><p>Remember, while proxies are super cool, they’re like superpowers — use them wisely! They can make your code slower if overused, and might confuse your teammates if you’re not careful. But when used right, they can make your JavaScript objects do amazing things!</p><h3>In Plain English 🚀</h3><p><em>Thank you for being a part of the </em><a href="https://plainenglish.io/"><strong><em>In Plain English</em></strong></a><em> community! Before you go:</em></p><ul><li>Be sure to <strong>clap</strong> and <strong>follow</strong> the writer ️👏<strong>️️</strong></li><li>Follow us: <a href="https://twitter.com/inPlainEngHQ"><strong>X</strong></a> | <a href="https://www.linkedin.com/company/inplainenglish/"><strong>LinkedIn</strong></a> | <a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong>YouTube</strong></a> | <a href="https://discord.gg/in-plain-english-709094664682340443"><strong>Discord</strong></a> | <a href="https://newsletter.plainenglish.io/"><strong>Newsletter</strong></a></li><li>Visit our other platforms: <a href="https://cofeed.app/"><strong>CoFeed</strong></a> | <a href="https://differ.blog/"><strong>Differ</strong></a></li><li>More content at <a href="https://plainenglish.io/"><strong>PlainEnglish.io</strong></a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b955dddedd16" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/6-use-cases-for-javascript-proxies-b955dddedd16">6 Use Cases for Javascript Proxies 🧙</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Streamlining Your Dependencies with ni: A Beginner’s Tutorial to the Package Manager of the Future.]]></title>
            <link>https://javascript.plainenglish.io/streamlining-your-dependencies-with-ni-a-beginners-tutorial-to-the-package-manager-of-the-future-8625d1c0e227?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8625d1c0e227</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[package-manager]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Mon, 24 Apr 2023 14:16:53 GMT</pubDate>
            <atom:updated>2023-04-24T14:16:53.109Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GlgXTGhehhqKCBmt" /></figure><h3>Streamlining Your Dependencies with ni</h3><h4>A Beginner’s Tutorial to the Package Manager of the Future</h4><p>I thus cloned an old project but was unable to determine whether it was using npm or yarn as a package management. Or might it be pnpm? Or Bun? I guess I’ll just use <a href="https://github.com/antfu/ni">ni</a>!</p><p>Is this a brand-new packager? No, no, don’t be alarmed.</p><p>The straightforward utility <a href="https://github.com/antfu/ni">ni</a> will attempt to determine which package management is being used in the current project before executing the appropriate command.</p><h3>How does it function?</h3><p>ni assumes you use lockfiles, which you should.</p><p>It will identify your current package manager (or the packageManager field in your packages.json, if given), yarn.lock / pnpm-lock.yaml / package-lock.json / bun.lockb performs the appropriate tasks.</p><p>In case you were unsure whether or not you needed that strange package-lock.json file that seems to change suddenly upon npm install, you do!</p><h3>Installation</h3><p>I already have at least npm globally installed:</p><pre>npm i -g @antfu/ni</pre><h3>Usage</h3><p>You have a new project open and all set to install the requirements. You can start by typing ni.</p><h3>Guaranteed commands</h3><p>Here is a list of all the commands that are currently available. You may always check the whole list in the project’s <a href="https://github.com/antfu/ni">README</a> if something changes and this information becomes stale.</p><p>ni — to install dependencies<br>Same as npm install.</p><p>Let’s install react.</p><pre>ni react</pre><p>You can also use the -D flag to install as a dev dependency.</p><pre>ni -D prettier</pre><p>You can run commands in your package.json scripts.</p><pre>nr start<br>nr build</pre><p>nlx - Download and execute a package</p><p>Same as<em> </em>npx<em>.</em></p><pre>nlx gitignore node</pre><p>nu - Upgrade dependencies</p><p>Same as npm upgrade.</p><p>Upgrades all your packages to the latest version.</p><pre>nu</pre><p>nun - Uninstall dependencies</p><p>Same as npm uninstall<em>.</em></p><pre>nun husky</pre><p>This will remove your package from package.json and uninstall it from node_modules.</p><p>nci - Clean install dependencies</p><p>Same as npm ci<em>.</em></p><p>This will purge your node_modules folder and install your dependencies again.</p><pre>nci</pre><p>na - Alias for the current manager</p><p>Same as npm</p><pre>na run test</pre><p>It will use the correct package manager to forward the command.</p><h3>Conclusion</h3><p>This tool is a great way to avoid having to remember which one is used where.</p><p>Even if most of the time npm is the right one, just typing ni or nr is faster anyway.</p><p>I hope you’ll find this useful too!</p><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>.</em></p><p><em>Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><em>, </em><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><em>, and </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8625d1c0e227" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/streamlining-your-dependencies-with-ni-a-beginners-tutorial-to-the-package-manager-of-the-future-8625d1c0e227">Streamlining Your Dependencies with ni: A Beginner’s Tutorial to the Package Manager of the Future.</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using CSS to Implement a Dark Mode Theme for Your Websites]]></title>
            <link>https://medium.com/bitsrc/using-css-to-implement-a-dark-mode-theme-for-your-websites-85cfb33fcce9?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/85cfb33fcce9</guid>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[html]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Thu, 09 Feb 2023 10:01:19 GMT</pubDate>
            <atom:updated>2023-06-13T13:31:02.671Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*b6CWneSKLedGDyJh" /></figure><p><a href="https://www.youtube.com/watch?v=f9lACksFcCE">Using CSS to add a dark theme</a> to your current websites is really simple. We’ll do this in this article by utilizing CSS Variables.</p><p>The theme will be available in three different variations: Auto, Light, and Dark. However, the Auto theme will utilize the operating system’s theme option to determine whether the site will be Light or Dark. The Light and Dark themes are very clearly self-explanatory.</p><blockquote>💡 <strong>Note:</strong> Using media queries and LocalStorage for theming is a great solution for smaller, weekend projects. However, if your projects are bigger, consider building a proper design system that is composable and scalable, using <a href="https://bit.cloud/">Bit’s</a> open-sourced <a href="https://bit.cloud/teambit/base-react/theme/theme-provider">ThemeProvider</a> that lets you quickly build a full theming solution with the Context API and design tokens.</blockquote><p><strong>To learn more about theming components with React:</strong></p><p><a href="https://bit.dev/blog/theming-in-components-with-react-and-bit-l386casw/">Theming in Components with React and Bit</a></p><h3>Implementing the HTML</h3><p>Starting with HTML, each theme’s identifier may be thought of as being included in the value attribute:</p><pre>&lt;select id=&quot;theme&quot;&gt;<br>    &lt;option value=&quot;auto&quot;&gt;Auto&lt;/option&gt;<br>    &lt;option value=&quot;light&quot;&gt;Light&lt;/option&gt;<br>    &lt;option value=&quot;dark&quot;&gt;Dark&lt;/option&gt;<br>&lt;/select&gt;</pre><h3>Implementing the CSS</h3><p>Now that we’ve added some CSS to the body element, you may choose your Light Theme colors here by utilizing <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties">CSS variables</a>:</p><pre>body {<br>    --background-color: #ffffff;<br>    --text-color: #000000;<br>}</pre><p>In order for our method to function, you’ll need to use your CSS Variables consistently across your style sheet. For instance, you could:</p><pre>.main-content {<br>    background: var(--background-color);<br>    color: var(--text-color);<br>}<br><br>button {<br>    color: var(--text-color);<br>}</pre><p>In cases where we’re going to be employing a dark theme, we’re just going to replace the values of the aforementioned specified variables. Add this CSS now:</p><pre>:root {<br>    --dark-background-color: #111111;<br>    --dark-text-color: #eeeeee;<br>}<br><br>body.theme-dark {<br>    --background-color: var(--dark-background-color);<br>    --text-color: var(dark-text-color);<br>}</pre><p>The dark theme should now function if you apply the theme-dark class to your body&gt; element. When the time comes, we’ll use JavaScript to change this value with the choose&gt;, but for now, let’s put our Auto option in place:</p><pre>@media (prefers-color-scheme: dark) {<br>    body.theme-auto {<br>        --background-color: var(--dark-background-color);<br>        --text-color: var(--dark-text-color);<br>    }<br>}</pre><p>The aforementioned CSS makes advantage of <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries">Media Queries</a> to determine whether the operating system likes a Dark Theme and, if it does, whether we should use the nested ruleset for the body. theme-auto.</p><p>Basically what we’re saying “Does the body have a class named theme-auto, and does the operating system favor dark mode? So, let’s go to Dark Mode.”</p><p>Change the OS theme color to test it out, or even better, browse the page on your phone while using Dark Mode.</p><h4><strong>Including JavaScript</strong></h4><p>We can now focus on getting our theme selection drop-down to function because our CSS is operational. Let’s include the next JavaScript:</p><pre>function applyTheme(theme) {<br>    document.body.classList.remove(&quot;theme-auto&quot;, &quot;theme-light&quot;, &quot;theme-dark&quot;);<br>    document.body.classList.add(`theme-${theme}`);<br>}<br><br>document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {<br>   document.querySelector(&quot;#theme&quot;).addEventListener(&quot;change&quot;, function() {<br>        applyTheme(this.value);<br>   });<br>});</pre><p>Here, we are awaiting the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model">DOM’s</a> readiness so that we can begin utilizing it, and once it is, we are listening for when the user selects a choice from the theme selector drop-down menu. After they choose an option, we delete any previously installed theme classes from the &lt;body&gt; tag and then add the chosen theme by calling this.value.</p><h4>Going a step further, keeping the subject in mind</h4><p>We could go one step further and enable the browser to retain the theme selection made when refreshing the page. We can utilize <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage">LocalStorage</a> to do this.</p><p>Let’s add the following JavaScript so that we have this:</p><pre>document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {<br>    const savedTheme = localStorage.getItem(&quot;theme&quot;) || &quot;auto&quot;;<br><br>    applyTheme(savedTheme);<br><br>    for (const optionElement of document.querySelectorAll(&quot;#theme option&quot;)) {<br>        optionElement.selected = savedTheme === optionElement.value;<br>    }<br><br>    document.querySelector(&quot;#theme&quot;).addEventListener(&quot;change&quot;, function () {<br>        localStorage.setItem(&quot;theme&quot;, this.value);<br>        applyTheme(this.value);<br>    });<br>});</pre><p>Now, after selecting a theme, we use <strong>localStorage.setItem(“theme”, this.value)</strong> to store the theme in local storage. Following this, we get the previously saved theme into the <strong>savedTheme</strong> constant, with a default value of auto, when the page loads. We just apply the stored theme once we have this.</p><p>In addition, we are cycling over all of our &lt;option&gt; components and selecting the option as “selected” if the value matches our stored theme.</p><p>Refresh the page, select a theme, and then refresh once again to see whether it works.</p><p><strong>Please leave a comment if it functions for you.</strong></p><h4>Build Apps with reusable components, just like Lego</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*X6rtGWLhiX8al_FM.png" /></figure><p><a href="https://bit.cloud/"><strong>Bit</strong></a><strong>’s open-source tool </strong>help 250,000+ devs to build apps with components.</p><p>Turn any UI, feature, or page into a <strong>reusable component</strong> — and share it across your applications. It’s easier to collaborate and build faster.</p><p><strong>→ </strong><a href="https://bit.dev/"><strong>Learn more</strong></a></p><p>Split apps into components to make app development easier, and enjoy the best experience for the workflows you want:</p><h4>→ <a href="https://blog.bitsrc.io/how-we-build-micro-front-ends-d3eeeac0acfc">Micro-Frontends</a></h4><h4>→ <a href="https://blog.bitsrc.io/how-we-build-our-design-system-15713a1f1833">Design System</a></h4><h4>→ <a href="https://bit.cloud/blog/how-to-reuse-react-components-across-your-projects-l4pz83f4">Code-Sharing and reuse</a></h4><h4>→ <a href="https://www.youtube.com/watch?v=5wxyDLXRho4&amp;t=2041s">Monorepo</a></h4><h4>Learn more</h4><ul><li><a href="https://blog.bitsrc.io/how-we-build-micro-front-ends-d3eeeac0acfc">How We Build Micro Frontends</a></li><li><a href="https://blog.bitsrc.io/how-we-build-our-design-system-15713a1f1833">How we Build a Component Design System</a></li><li><a href="https://bit.dev/blog/how-to-reuse-react-components-across-your-projects-l4pz83f4/">How to reuse React components across your projects</a></li><li><a href="https://blog.bitsrc.io/5-ways-to-build-a-react-monorepo-a294b6c5b0ac">5 Ways to Build a React Monorepo</a></li><li><a href="https://bit.dev/blog/how-to-create-a-composable-react-app-with-bit-l7ejpfhc/">How to Create a Composable React App with Bit</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=85cfb33fcce9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bitsrc/using-css-to-implement-a-dark-mode-theme-for-your-websites-85cfb33fcce9">Using CSS to Implement a Dark Mode Theme for Your Websites</a> was originally published in <a href="https://medium.com/bitsrc">Bits and Pieces</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[17 Productivity Tools for Developer Workflow Improvement ]]></title>
            <link>https://javascript.plainenglish.io/17-productivity-tools-for-developer-workflow-improvement-ea714ab2be41?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/ea714ab2be41</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[tools-for-design]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Thu, 02 Feb 2023 12:16:32 GMT</pubDate>
            <atom:updated>2023-02-02T12:16:32.872Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9D-HlvchpRJIcuWS" /><figcaption>Photo by <a href="https://unsplash.com/@pankajpatel?utm_source=medium&amp;utm_medium=referral">Pankaj Patel</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><ol><li><a href="http://sourceai.dev/">Source</a>Ai</li></ol><p>SourceAI is an AI-powered tool that can generate code in any programming language from any human language description. It can also simplify, find errors and fix them and debug your code.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WVhHs-grXJQfv28_i3Qstw.png" /></figure><p>2. <a href="http://codepen.io/">Codepen</a></p><p>CodePen is a website that allows developers to build and share web-based code snippets.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tjymbj0Wl2S-WJZQnlu7FA.png" /></figure><p>3. <a href="http://asana.com/">Asana</a></p><p>Asana is a web-based project management tool that can be used to organize and prioritize tasks. It provides a flexible task management system that can be customized to fit the needs of any team.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i-P4bXcU04QdakHqQOGfxQ.png" /></figure><p>4. <a href="http://rescuetime.com/">RescueTime</a></p><p>RescueTime is a time-tracking and productivity tool that can be used to track time spent on different tasks and websites. It provides detailed reports on productivity and can be used to identify and eliminate time-wasting activities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EsdBrxE2YzaBeUrHh9woLg.png" /></figure><p>5. <a href="http://chat.openai.com/">ChatGPT</a></p><p>ChatGPT can be fine-tuned on specific tasks and domains, such as customer service, e-commerce, and more, by training it on a smaller dataset specific to that task. This allows it to generate more accurate and relevant responses for specific use cases.</p><p>Overall, ChatGPT is a powerful language model that can be used to generate human-like text in a variety of applications.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VH7SJAg_LHqhUf9ejgsPKg.png" /></figure><p>6. <a href="http://snyk.io/">Snyk</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yQkFzRDLDGEUVPQuG45Fig.png" /></figure><p>7. <a href="http://sizzy.co/">Sizzy</a></p><p>The browser for web developers. Develop, debug and test your websites and apps with ease and speed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5-62TcSkQC_77X8M.jpg" /></figure><p>8. <a href="https://www.wappalyzer.com/">Wappalyzer</a></p><p>Technology profiler that shows you what websites are built with. Uncover programming languages, analytics, marketing tools, etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Xbdod6Ivh8mvRcY8" /></figure><p>9. <a href="http://figma.com/">Figma</a></p><p>A free design tool for teams who build products together. It helps the entire product team create, test, and ship faster.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/977/0*Upb5Ey-AdTGJEZa5" /></figure><p>10. <a href="http://codesandbox.io/">CodeSandBox</a></p><p>An online code sandbox for users to write, edit, test, collaborate and run web development projects.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1020/0*kjD5ZucdeGiFDjS2" /></figure><p>11. Ngrok</p><p>A free service that helps you share a site or server running on your local machine on the web.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kwsFV6_kbhfhzGPR" /></figure><p>12. <a href="http://swimm.io/">Swimm</a></p><p>Write internal documentation and notes about your code with ease.</p><p>In order for your engineers to trust it and spend less time hunting for information, provide internal code documentation that is constantly current, simple to discover, and easy to use.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oc9HTLbNncaiQCj9" /></figure><p>13. Trello</p><p>Trello is a popular project management tool that lets you create and manage tasks, whether that be a team project or just your own personal list of chores. You can set deadlines, leave notes on projects and tasks, and assign tasks to other project collaborators.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bUOXhnt0MGpluRfk11Rbxw.png" /></figure><p>14. <a href="https://hoppscotch.io/">Hoppscotch</a></p><p>You may build requests more quickly and spend less time on development with the aid of a lightweight, web-based API development suite.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GaML4MOWaIdbBI-g" /></figure><p>15. <a href="https://flukeout.github.io/">CSS Diner</a></p><p>Css game to boost your productivity and reclaim your free time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vP2TPoQwBD_XvW89Q2KIWA.png" /></figure><p>16. <a href="http://w3schools.com/">W3Schools</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PKWa-7FkfcYH5Oid.png" /></figure><p>17. <a href="https://programmerhumor.io/">Programmer Humor</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Np0jl5iOrQw00SkRIfhgsw.png" /></figure><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>. Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><em>, </em><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><em>, and </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Interested in scaling your software startup</em></strong><em>? Check out </em><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ea714ab2be41" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/17-productivity-tools-for-developer-workflow-improvement-ea714ab2be41">17 Productivity Tools for Developer Workflow Improvement 🚀</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Top 8 Algorithms Every Programmer Should Know ]]></title>
            <link>https://python.plainenglish.io/top-8-algorithms-every-programmer-should-know-93c826267938?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/93c826267938</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[algorithms]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Tue, 24 Jan 2023 15:16:47 GMT</pubDate>
            <atom:updated>2023-01-24T15:16:47.677Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*K7iTRkAXTra4xGxJ.png" /><figcaption>i dont know where i got this image from lol</figcaption></figure><p>In programming, an algorithm is a set of instructions or a procedure for solving a specific problem or achieving a specific task. Algorithms can be expressed in any programming language and can be as simple as a sequence of basic operations or as complex as a multi-step process involving different data structures and logic. The main goal of an algorithm is to take in input, process it and provide an output that is expected. Algorithms can be classified based on the time and space complexity, the technique used for solving the problem, and the type of problem it solves. Examples of algorithm are sorting, searching, graph traversals, string manipulations, mathematical operations, and many more.</p><p>Algorithms we will be talking about:</p><ol><li>Sorting algorithms: Sorting is a fundamental operation in computer science and there are several efficient algorithms for it, such as quicksort, merge sort and heap sort.</li><li>Search algorithms: Searching for an element in a large dataset is a common task and there are several efficient algorithms for it, such as binary search and hash tables.</li><li>Graph algorithms: Graph algorithms are used to solve problems related to graphs, such as finding the shortest path between two nodes or determining if a graph is connected.</li><li>Dynamic programming: Dynamic programming is a technique for solving problems by breaking them down into smaller subproblems and storing the solutions to these subproblems to avoid redundant computation.</li><li>Greedy algorithms: Greedy algorithms are used to solve optimization problems by making the locally optimal choice at each step with the hope of finding a global optimum.</li><li>Divide and Conquer: Divide and Conquer is an algorithm design paradigm based on multi-branched recursion. A divide and conquer algorithm breaks down a problem into sub-problems of the same or related type, until these become simple enough to be solved directly.</li><li>Backtracking: Backtracking is a general algorithmic technique that considers searching every possible combination in a systematic manner, and abandons a particular path as soon as it determines that it cannot be part of the solution.</li><li>Randomized Algorithm: Randomized algorithms use randomness to solve a problem. It can be useful to solve problems that cannot be solved deterministically or to improve the average case complexity of a problem.</li></ol><p>These algorithms are widely used in various applications and it’s important for a programmer to have a strong understanding of them. So i will try my best to explain them.</p><ol><li>Sorting algorithms:</li></ol><ul><li>Quicksort: Quicksort is a divide-and-conquer algorithm that chooses a “pivot” element from the array and partitions the other elements into two sub-arrays, according to whether they are less than or greater than the pivot. The sub-arrays are then sorted recursively.</li></ul><pre>def quicksort(arr):<br>    if len(arr) &lt;= 1:<br>        return arr<br>    pivot = arr[len(arr) // 2]<br>    left = [x for x in arr if x &lt; pivot]<br>    middle = [x for x in arr if x == pivot]<br>    right = [x for x in arr if x &gt; pivot]<br>    return quicksort(left) + middle + quicksort(right)<br><br>print(quicksort([3,6,8,10,1,2,1]))</pre><ul><li>Merge Sort: The merge sort algorithm is a divide-and-conquer algorithm that divides an array in two, sorts the two halves, and then merges them back together.</li></ul><pre>def merge_sort(arr):<br>    if len(arr) &lt;= 1:<br>        return arr<br>    mid = len(arr) // 2<br>    left = merge_sort(arr[:mid])<br>    right = merge_sort(arr[mid:])<br>    return merge(left, right)<br><br>def merge(left, right):<br>    result = []<br>    i = 0<br>    j = 0<br>    while i &lt; len(left) and j &lt; len(right):<br>        if left[i] &lt; right[j]:<br>            result.append(left[i])<br>            i += 1<br>        else:<br>            result.append(right[j])<br>            j += 1<br>    result += left[i:]<br>    result += right[j:]<br>    return result<br>print(merge_sort([3,6,8,10,1,2,1]))</pre><ul><li>Heap Sort: The heap sort algorithm is a comparison-based sorting algorithm that builds a heap from the input elements and then repeatedly extracts the maximum element from the heap and places it at the end of the sorted output array.</li></ul><pre>def heap_sort(arr):<br>    n = len(arr)<br>    for i in range(n, -1, -1):<br>        heapify(arr, n, i)<br>    for i in range(n-1, 0, -1):<br>        arr[i], arr[0] = arr[0], arr[i]<br>        heapify(arr, i, 0)<br><br>def heapify(arr, n, i):<br>    largest = i<br>    l = 2 * i + 1<br>    r = 2 * i + 2<br>    if l &lt; n and arr[i] &lt; arr[l]:<br>        largest = l<br>    if r &lt; n and arr[largest] &lt; arr[r]:<br>        largest = r<br>    if largest != i:<br>        arr[i], arr[largest] = arr[largest], arr[i]<br>        heapify(arr, n, largest)<br>print(heap_sort([3,6,8,10,1,2,1]))</pre><p>2. Search algorithms:</p><ul><li>Binary Search: Binary search is an efficient algorithm for finding an item from a sorted list of items. It works by repeatedly dividing in half the portion of the array being searched, until the target value is found.</li></ul><pre>def binary_search(arr, x):<br>    low = 0<br>    high = len(arr) - 1<br>    mid = 0<br>    while low &lt;= high:<br>        mid = (high + low) // 2<br>        if arr[mid] &lt; x:<br>            low = mid + 1<br>        elif arr[mid] &gt; x:<br>            high = mid - 1<br>        else:<br>            return mid<br>    return -1<br>print(binary_search([1,2,3,4,5,6,7], 4))</pre><ul><li>Hash Tables: A hash table is a data structure that maps keys to values, using a hash function to compute an index into an array of buckets or slots, from which the desired value can be found.</li></ul><pre>class HashTable:<br>    def __init__(self):<br>        self.size = 10<br>        self.keys = [None] * self.size<br>        self.values = [None] * self.size<br><br>  def put(self, key, data):<br>        index = self.hash_function(key)<br>        while self.keys[index] is not None:<br>            if self.keys[index] == key:<br>                self.values[index] = data  # update<br>                return<br>            index = (index + 1) % self.size<br>        self.keys[index] = key<br>        self.values[index] = data<br><br>    def get(self, key):<br>        index = self.hash_function(key)<br>        while self.keys[index] is not None:<br>            if self.keys[index] == key:<br>                return self.values[index]<br>            index = (index + 1) % self.size<br>        return None<br><br>    def hash_function(self, key):<br>        sum = 0<br>        for pos in range(len(key)):<br>            sum = sum + ord(key[pos])<br>        return sum % self.size<br><br>t = HashTable()<br>t.put(&quot;apple&quot;, 10)<br>t.put(&quot;orange&quot;, 20)<br>t.put(&quot;banana&quot;, 30)<br>print(t.get(&quot;orange&quot;))</pre><p>3. Graph Algorithm :</p><ul><li>Dijkstra’s shortest path algorithm: Dijkstra’s shortest path algorithm is an algorithm for finding the shortest path between nodes in a graph.</li></ul><pre>import heapq<br><br>def dijkstra(graph, start):<br>    heap = [(0, start)]<br>    visited = set()<br>    while heap:<br>        (cost, v) = heapq.heappop(heap)<br>        if v not in visited:<br>            visited.add(v)<br>            for u, c in graph[v].items():<br>                if u not in visited:<br>                    heapq.heappush(heap, (cost + c, u))<br>    return visited<br><br>graph = {<br>    &#39;A&#39;: {&#39;B&#39;: 2, &#39;C&#39;: 3},<br>    &#39;B&#39;: {&#39;D&#39;: 4, &#39;E&#39;: 5},<br>    &#39;C&#39;: {&#39;F&#39;: 6},<br>    &#39;D&#39;: {&#39;G&#39;: 7},<br>    &#39;E&#39;: {&#39;G&#39;: 8, &#39;H&#39;: 9},<br>    &#39;F&#39;: {&#39;H&#39;: 10},<br>    &#39;G&#39;: {},<br>    &#39;H&#39;: {}<br>}<br>print(dijkstra(graph, &#39;A&#39;))</pre><p>4. Dynamic Programming:</p><ul><li>Fibonacci sequence: A classic example of a problem that can be solved using dynamic programming is the Fibonacci sequence.</li></ul><pre>def fibonacci(n):<br>    if n &lt;= 0:<br>        return 0<br>    elif n == 1:<br>        return 1<br>    else:<br>        return fibonacci(n-1) + fibonacci(n-2)<br>    <br>    <br>print(fibonacci(10))</pre><p>5. Greedy Algorithms:</p><ul><li>Huffman coding: Huffman coding is a lossless data compression algorithm that uses a greedy algorithm to construct a prefix code for a given set of symbols.</li></ul><pre>from collections import Counter, namedtuple<br><br>def huffman_encoding(data):<br>    &quot;&quot;&quot;<br>    Generates a Huffman encoded string of the input data<br>    &quot;&quot;&quot;<br>    # Create a frequency counter for the data<br>    freq_counter = Counter(data)<br>    # Create a namedtuple for the Huffman tree nodes<br>    HuffmanNode = namedtuple(&quot;HuffmanNode&quot;, [&quot;char&quot;, &quot;freq&quot;])<br>    # Create a priority queue for the Huffman tree<br>    priority_queue = PriorityQueue()<br>    # Add all characters to the priority queue<br>    for char, freq in freq_counter.items():<br>        priority_queue.put(HuffmanNode(char, freq))<br>    # Combine nodes until only the root node remains<br>    while priority_queue.qsize() &gt; 1:<br>        left_node = priority_queue.get()<br>        right_node = priority_queue.get()<br>        combined_freq = left_node.freq + right_node.freq<br>        combined_node = HuffmanNode(None, combined_freq)<br>        priority_queue.put(combined_node)<br>    # Generate the Huffman code for each character<br>    huffman_code = {}<br>    generate_code(priority_queue.get(), &quot;&quot;, huffman_code)<br>    # Encode the input data<br>    encoded_data = &quot;&quot;<br>    for char in data:<br>        encoded_data += huffman_code[char]<br>    return encoded_data, huffman_code<br>print(huffman_encoding(&quot;aaaaabbbcccc&quot;))</pre><p>6. Divide and Conquer :</p><ul><li>Merge Sort: already explained above</li></ul><p>7. Backtracking:</p><ul><li>The N-Queens Problem: The N-Queens problem is a classic problem that can be solved using backtracking. The goal is to place N queens on an NxN chessboard in such a way that no queen can attack any other queen.</li></ul><pre>def solveNQueens(n):<br>    def could_place(row, col):<br>        # check if a queen can be placed on board[row][col]<br>        # check if this row is not under attack from any previous queen in that column<br>        for i in range(row):<br>            if board[i] == col or abs(board[i] - col) == abs(i - row):<br>                return False<br>        return True<br><br>def backtrack(row=0, count=0):<br>        for col in range(n):<br>            if could_place(row, col):<br>                board[row] = col<br>                if row + 1 == n:<br>                    count += 1<br>                else:<br>                    count = backtrack(row + 1, count)<br>        return count<br>    board = [-1 for x in range(n)]<br>    return backtrack()<br>print(solveNQueens(4))</pre><p>This algorithm starts placing queens in the first row, and for every placed queen it checks if it is under attack from any previous queen. If not, it proceeds to the next row and repeats the process. If a queen is placed in a position where it is under attack, the algorithm backtracks and tries a different position. This continues until all queens are placed on the board without any attacking each other.</p><p>8. Randomized Algorithm: — Randomized QuickSort: A variation of quicksort algorithm where pivot is chosen randomly.</p><pre>import random<br><br>def randomized_quicksort(arr):<br>    if len(arr) &lt;= 1:<br>        return arr<br>    pivot = random.choice(arr)<br>    left = [x for x in arr if x &lt; pivot]<br>    middle = [x for x in arr if x == pivot]<br>    right = [x for x in arr if x &gt; pivot]<br>    return randomized_quicksort(left) + middle + randomized_quicksort(right)<br><br>print(randomized_quicksort([3,6,8,10,1,2,1]))</pre><p>These are some of the most commonly used algorithms that every programmer should be familiar with. Understanding these algorithms and their implementation can help a programmer to make better decisions when it comes to designing and implementing efficient solutions.</p><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>. Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><strong><em>, </em></strong><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><strong><em>, and</em></strong><em> </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Build awareness and adoption for your tech startup with </em></strong><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=93c826267938" width="1" height="1" alt=""><hr><p><a href="https://python.plainenglish.io/top-8-algorithms-every-programmer-should-know-93c826267938">Top 8 Algorithms Every Programmer Should Know 💯</a> was originally published in <a href="https://python.plainenglish.io/">Python in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Functions & Objects in JavaScript]]></title>
            <link>https://javascript.plainenglish.io/functions-objects-in-javascript-d95b30120337?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d95b30120337</guid>
            <category><![CDATA[objects]]></category>
            <category><![CDATA[javscript]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Tue, 17 Jan 2023 07:17:47 GMT</pubDate>
            <atom:updated>2023-01-17T07:17:47.881Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/474/0*cF3igudq55-ggIYM" /></figure><h3>Functions</h3><p>In JavaScript, a function is a block of code that can be reusable. Functions can accept input (called parameters) and return output (called return value).</p><p>To define a function in JavaScript, you use the function keyword, followed by the name of the function, a list of parameters (enclosed in parentheses), and the function body (enclosed in curly braces).</p><p>Here is an example of a function in JavaScript:</p><pre>function greet(name) {<br>  console.log(&quot;Hello, &quot; + name + &quot;!&quot;);<br>}</pre><p>To call a function in JavaScript, you simply use its name followed by the list of arguments (enclosed in parentheses).</p><p>Here is an example of how to call the greet function:</p><pre>greet(&quot;John&quot;); // Output: &quot;Hello, John!&quot;</pre><p>You can also define a function that returns a value using the return statement.</p><p>Here is an example of a function that returns a value:</p><pre>function add(num1, num2) {<br>  return num1 + num2;<br>}<br><br>console.log(add(10, 5)); // Output: 15</pre><h3>Objects</h3><p>In JavaScript, an object is a collection of key-value pairs. You can use objects to store data in a structured way.</p><p>To create an object in JavaScript, you use the {} curly braces and define the key-value pairs inside the braces.</p><p>Here is an example of an object in JavaScript:</p><pre>var person = {<br>  name: &quot;John&quot;,<br>  age: 30,<br>  occupation: &quot;Developer&quot;<br>};</pre><p>To access the values in an object, you use the . dot notation followed by the key.</p><p>Here is an example of how to access the values in the person object:</p><pre>console.log(person.name); // Output: &quot;John&quot;<br>console.log(person.age);  // Output: 30<br>console.log(person.occupation); // Output: &quot;Developer&quot;</pre><p>You can also update the values in an object by simply reassigning them.</p><pre>person.name = &quot;Jane&quot;;<br>person.age = 25;<br>console.log(person.name); // Output: &quot;Jane&quot;<br>console.log(person.age);  // Output: 25</pre><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>. Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><em>, </em><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><em>, and </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Interested in scaling your software startup</em></strong><em>? Check out </em><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d95b30120337" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/functions-objects-in-javascript-d95b30120337">Functions &amp; Objects in JavaScript</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git For Beginners]]></title>
            <link>https://javascript.plainenglish.io/git-for-beginners-e167195b2d38?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e167195b2d38</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Tue, 17 Jan 2023 06:16:47 GMT</pubDate>
            <atom:updated>2023-01-17T06:16:47.096Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EU8cGE7DN2uIKfn1bcEu3A.png" /></figure><p>Git is a powerful version control system that allows developers to track changes to their code and collaborate with team members. It is an essential tool for any developer, and learning how to use it can greatly improve your workflow.</p><p>Before you start using Git, you need to set it up on your computer. This involves installing the Git software and configuring your username and email address. These details will be associated with your commits, so it’s important to use your real name and a valid email address.</p><p>Once you have Git set up, you can create a new repository for your project. A repository, or “repo” for short, is a collection of files and directories that are tracked by Git. To create a new repository, navigate to the directory where you want to store your code and run the following command:</p><pre>git init</pre><p>This will create a new Git repository in the current directory. You can then add files to the repository by using the <strong>git add</strong> command. For example, to add a file called main.c, you would run the following command:</p><pre>git add main.c</pre><p>To add all the files in the current directory, you can use the<strong> git add . </strong>command.</p><p>Once you have added your files, you can commit your changes to the repository. A commit is a snapshot of your code at a particular point in time. To commit your changes, use the <strong>git commit </strong>command, followed by a message describing the changes you have made. For example:</p><pre>git commit -m “Added main.c file”</pre><p>It’s important to write clear and concise commit messages, as they will help you and your team members understand the changes that have been made to the code.</p><p>Git also allows you to create branches, which are separate copies of your code that you can work on without affecting the main branch. This is useful when you want to try out a new feature or fix a bug without disrupting the main codebase. To create a new branch, use the <strong>git branch</strong> command, followed by the name of the branch. For example:</p><pre>git branch new-feature</pre><p>To switch to a different branch, use the <strong>git checkout</strong> command, followed by the name of the branch. For example:</p><pre>git checkout new-feature</pre><p>When you are ready to merge your changes back into the main branch, you can use the <strong>git merge</strong> command. For example:</p><pre>git merge new-feature</pre><p>These are just a few of the basic commands that you can use with Git. There are many more options and features available, and learning how to use them will greatly improve your workflow as a developer.</p><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>. Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><em>, </em><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><em>, and </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Interested in scaling your software startup</em></strong><em>? Check out </em><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e167195b2d38" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/git-for-beginners-e167195b2d38">Git For Beginners</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CSS For Beginners]]></title>
            <link>https://faun.pub/css-for-beginners-3afa8b3277f8?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/3afa8b3277f8</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Mon, 16 Jan 2023 18:54:42 GMT</pubDate>
            <atom:updated>2023-01-16T18:54:42.076Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lriucKSbLiiSx_VXFXot8g.jpeg" /></figure><p>Introduction to CSS</p><p>CSS (Cascading Style Sheets) is a styling language that is used to control the look and feel of a website or web application. It is a crucial part of the front-end development process and is used to apply styles to HTML elements on a web page.</p><p>Why learn CSS?</p><p>CSS is an essential skill for any web developer, as it allows you to control the appearance and layout of a website. With CSS, you can change the font, color, size, and position of elements on a web page, as well as create complex layouts and animations.</p><p>Getting started with CSS</p><p>To get started with CSS, you will need a text editor and a web browser. There are many text editors available, such as Sublime Text, Atom, and Notepad++. Once you have a text editor installed, you can create a new HTML file and link to a CSS file, or you can include the CSS styles directly in the HTML file using a &lt;style&gt; tag.</p><p>Basic syntax of CSS</p><p>CSS consists of rules that are applied to elements on a web page. A rule consists of a selector, which specifies the element or elements to which the rule will be applied, and a declaration, which consists of a property and a value.</p><p>Here is an example of a basic CSS rule:</p><pre>h1 {<br>  color: red;<br>  font-size: 24px;<br>}</pre><p>In this example, the h1 selector applies the rule to all h1 elements on the page. The declaration consists of two properties: color and font-size, and their respective values: red and 24px.</p><p>CSS selectors</p><p>There are many different types of selectors that can be used to target elements on a web page. Some common selectors include:</p><ul><li>Type selectors: These selectors target elements based on their HTML tag name. For example, the h1 selector targets all h1 elements on the page.</li><li>Class selectors: These selectors target elements that have a specific class attribute. Class selectors are denoted by a period (.) followed by the class name. For example, the .important selector targets all elements with a class of &quot;important&quot;.</li><li>ID selectors: These selectors target elements that have a specific ID attribute. ID selectors are denoted by a hash symbol (#) followed by the ID name. For example, the #header selector targets the element with an ID of &quot;header&quot;.</li><li>Descendant selectors: These selectors target elements that are descendants of a specific element. For example, the li a selector targets all a elements that are inside li elements.</li></ul><p>CSS properties</p><p>There are hundreds of CSS properties that can be used to style elements on a web page. Some common properties include:</p><ul><li>color: This property sets the color of an element&#39;s text.</li><li>font-size: This property sets the size of an element&#39;s font.</li><li>font-family: This property sets the font family of an element&#39;s text.</li><li>margin: This property sets the space outside of an element.</li><li>padding: This property sets the space inside of an element.</li><li>border: This property sets a border around an element.</li><li>background-color: This property sets the background color of an element.</li></ul><p>CSS can be used to create complex layouts for a website or web application. There are several layout techniques that can be used, including:</p><ul><li>Float-based layouts: This technique uses the float property to create columns and rows of elements.</li><li>Flexbox: This technique uses the display: flex property to create flexible layouts that can be easily aligned and distributed.</li><li>Grid: This technique uses the display: grid property to create a grid of elements that can be easily positioned and resized.</li></ul><p>Responsive design</p><p>Responsive design is a technique that allows a website or web application to adapt to different screen sizes and devices. This is achieved using media queries, which allow you to apply different styles based on the width of the viewport.</p><p>Here is an example of a media query:</p><pre>@media (max-width: 600px) {<br>  body {<br>    font-size: 14px;<br>  }<br>}</pre><p>In this example, the rule is applied only when the viewport is 600 pixels or less in width. This allows you to create styles that are specific to small screen sizes, such as mobile devices.</p><p>Conclusion</p><p>CSS is a powerful styling language that is essential for any web developer. With CSS, you can control the appearance and layout of a website or web application, and create complex layouts and animations. By learning CSS, you can take your web development skills to the next level and create visually appealing and user-friendly websites.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*bOrfzkYGfYHhbn1K.png" /></figure><h4>👋 If you find this helpful, please click the clap 👏 button below a few times to show your support for the author 👇</h4><h4>🚀<a href="http://from.faun.to/r/8zxxd">Join FAUN Developer Community &amp; Get Similar Stories in your Inbox Each Week</a></h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3afa8b3277f8" width="1" height="1" alt=""><hr><p><a href="https://faun.pub/css-for-beginners-3afa8b3277f8">CSS For Beginners</a> was originally published in <a href="https://faun.pub/">FAUN.dev() 🐾</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What are Objects in Python]]></title>
            <link>https://python.plainenglish.io/what-are-objects-in-python-5792efc24f3f?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/5792efc24f3f</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Wed, 11 Jan 2023 18:47:39 GMT</pubDate>
            <atom:updated>2023-01-11T18:47:39.672Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UdHT2rLF2F8CmXKWBqYpiw.png" /></figure><p>In Python, everything is an object. This means that in Python, you can use objects to represent real-world entities, such as a person or a bank account.</p><h3>Classes</h3><p>In Python, a class is a template that is used to create objects. A class defines the attributes and behaviors of an object.</p><p>To create a class in Python, you use the class keyword, followed by the name of the class, and the class definition (enclosed in curly braces).</p><p>Here is an example of a class in Python:</p><pre>class Person:<br>  def __init__(self, name, age):<br>    self.name = name<br>    self.age = age<br>    <br>  def greet(self):<br>    print(f&quot;Hello, my name is {self.name} and I am {self.age} years old.&quot;)</pre><p>In the example above, the Person class has two attributes: name and age. It also has a greet method that prints a greeting message.</p><p>The __init__ method is a special method in Python that is used to initialize an object. It is called when the object is created.</p><h3>Instances</h3><p>To create an object (also called an instance) from a class, you use the class name followed by the arguments for the __init__ method (enclosed in parentheses).</p><p>Here is an example of how to create an object from the Person class:</p><pre>p1 = Person(&quot;John&quot;, 30)</pre><p>To access the attributes and behaviors of an object, you use the . dot notation.</p><p>Here is an example of how to access the attributes and behaviors of the p1 object:</p><pre>print(p1.name)  # Output: &quot;John&quot;<br>print(p1.age)   # Output: 30<br>p1.greet()      # Output: &quot;Hello, my name is John and I am 30 years old.&quot;</pre><p>You can also update the attributes of an object by simply reassigning them.</p><pre>p1.name = &quot;Jane&quot;<br>p1.age = 25<br><br>print(p1.name)  # Output: &quot;Jane&quot;<br>print(p1.age)   # Output: 25<br>p1.greet()      # Output: &quot;Hello, my name is Jane and I am 25 years old.&quot;</pre><h3>Inheritance</h3><p>In Python, inheritance is a way to create a new class that is a modified version of an existing class. The new class is called the subclass, and the existing class is the superclass.</p><p>The subclass can have additional attributes and behaviors, as well as override or extend the attributes and behaviors of the superclass.</p><p>To create a subclass in Python, you use the class keyword, followed by the name of the subclass, the (SuperClass) syntax, and the class definition (enclosed in curly braces).</p><p>Here is an example of a subclass in Python:</p><pre>class Animal:<br>  def __init__(self, species):<br>    self.species = species<br>    <br>  def make_sound(self):<br>    print(&quot;Some generic animal sound&quot;)<br><br>class Dog(Animal):<br>  def __init__(self, breed):<br>    super().__init__(&quot;Dog&quot;)<br>    self.breed = breed<br>    <br>  def make_sound(self):<br>    print(&quot;Bark&quot;)</pre><p>In the example above, the Dog class is a subclass of the Animal class. It has an additional attribute: breed. It also has a modified make_sound method that overrides the make_sound method of the Animal class.</p><p>To call the superclass method from the subclass, you can use the super() function.</p><p>In the example above, the __init__ method of the Dog class calls the __init__ method of the Animal class using the super() function. This allows the Dog class to initialize the species attribute inherited from the Animal class.</p><pre>dog1 = Dog(&quot;Labrador&quot;)<br>print(dog1.species) # Output: &quot;Dog&quot;<br>print(dog1.breed)  # Output: &quot;Labrador&quot;<br>dog1.make_sound()  # Output: &quot;Bark&quot;</pre><p>In Python, you can also use multiple inheritance, where a subclass can inherit from multiple superclasses.</p><p>Here is an example of multiple inheritance in Python:</p><pre>class A:<br>  def do_something(self):<br>    print(&quot;Doing something in class A&quot;)<br><br>class B:<br>  def do_something(self):<br>    print(&quot;Doing something in class B&quot;)<br><br>class C(A, B):<br>  pass<br>c = C()<br>c.do_something() # Output: &quot;Doing something in class A&quot;</pre><p>In the example above, the C class inherits from both the A and B classes. When the do_something method is called on the c object, the implementation from the A class is used because it appears first in the inheritance list.</p><h3>Polymorphism</h3><p>Polymorphism is the ability of a class to have different forms. In Python, you can use polymorphism to create methods with the same name in different classes, but with different implementations.</p><p>Here is an example of polymorphism in Python:</p><pre>class Animal:<br>  def make_sound(self):<br>    print(&quot;Some generic animal sound&quot;)<br><br>class Dog(Animal):<br>  def make_sound(self):<br>    print(&quot;Bark&quot;)<br><br>class Cat(Animal):<br>  def make_sound(self):<br>    print(&quot;Meow&quot;)<br><br>animals = [Animal(), Dog(), Cat()]<br>for animal in animals:<br>  animal.make_sound()<br># Output:<br># Some generic animal sound<br># Bark<br># Meow</pre><p>In the example above, the Animal, Dog, and Cat classes all have a make_sound method, but with different implementations.</p><p>When the make_sound method is called on the objects in the animals list, the correct implementation is called based on the object&#39;s class.</p><p>This is an example of polymorphism because the make_sound method has different forms (implementations) depending on the object&#39;s class.</p><h3>Special Methods</h3><p>In Python, you can use special methods to define the behavior of objects when they are used in certain ways.</p><p>Here are some examples of special methods in Python:</p><ul><li>__str__: This method is called when the object is passed to the str() function. It should return a string representation of the object.</li></ul><pre>class Person:<br>  def __init__(self, name, age):<br>    self.name = name<br>    self.age = age<br>    <br>  def __str__(self):<br>    return f&quot;Person(name={self.name}, age={self.age})&quot;<br><br>p = Person(&quot;John&quot;, 30)<br>print(str(p)) # Output: &quot;Person(name=John, age=30)&quot;</pre><ul><li>__len__: This method is called when the object is passed to the len() function. It should return the length of the object.</li></ul><pre>class Person:<br>  def __init__(self, name, age):<br>    self.name = name<br>    self.age = age<br>    <br>  def __len__(self):<br>    return self.age<br><br>p = Person(&quot;John&quot;, 30)<br>print(len(p)) # Output: 30</pre><ul><li>__add__: This method is called when the object is used in an addition operation. It should return the result of the addition.</li></ul><pre>class Vector:<br>  def __init__(self, x, y):<br>    self.x = x<br>    self.y = y<br>    <br>  def __add__(self, other):<br>    return Vector(self.x + other.x, self.y + other.y)<br><br>v1 = Vector(1, 2)<br>v2 = Vector(3, 4)<br>v3 = v1 + v2<br>print(v3.x) # Output: 4<br>print(v3.y) # Output: 6</pre><p>These are just a few examples of special methods in Python. There are many other special methods that you can use.</p><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>.</em></p><p><em>Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><strong><em>, </em></strong><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><strong><em>, and</em></strong><em> </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Build awareness and adoption for your tech startup with </em></strong><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5792efc24f3f" width="1" height="1" alt=""><hr><p><a href="https://python.plainenglish.io/what-are-objects-in-python-5792efc24f3f">What are Objects in Python</a> was originally published in <a href="https://python.plainenglish.io/">Python in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[6 Free Modern Tools for Developers of 2023]]></title>
            <link>https://javascript.plainenglish.io/6-free-modern-tools-for-developers-of-2023-b4f4e764ffa4?source=rss-187bb8b1e62f------2</link>
            <guid isPermaLink="false">https://medium.com/p/b4f4e764ffa4</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[webdev]]></category>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[tools]]></category>
            <dc:creator><![CDATA[abdulazeez sherif]]></dc:creator>
            <pubDate>Wed, 04 Jan 2023 10:16:40 GMT</pubDate>
            <atom:updated>2023-01-04T10:16:40.869Z</atom:updated>
            <content:encoded><![CDATA[<p>Do you want 2023 to go smoothly for your web development endeavors? Check out these free resources used by the 2023 Modern Web Developers!</p><ol><li><a href="https://coolors.co/">Coolors</a></li></ol><p>The preferred tool for creating a color scheme for your website is Coolers</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*MB0wmxa5c4wd1vQj.png" /></figure><p>2. <a href="https://roadmap.sh/">Roadmap.sh</a></p><p>A roadmap collection may include roadmaps for frontend, backend, blockchain, cyber security, and other areas.</p><p>They also contain connections to useful learning resources!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*zb9ptITO_tcjem00.png" /></figure><p>3. <a href="https://csslayout.io/">CSS Layout</a></p><p>There are hundreds of components in it that you may copy-paste into your project and modify to suit your needs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*03RRE78rbzkhcYUF.png" /></figure><p>4. <a href="https://www.freecodecamp.org/">FreeCodeCamp</a></p><p>In order to make studying web development accessible to everyone, FreeCodeCamp is a nonprofit organization that comprises of an interactive learning web platform, an online community forum, chat rooms, online publications, and local organizations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*eWqE74umqJkBEya-.png" /></figure><p>5. <a href="https://omatsuri.app/">Omatsuri</a></p><p>an open source web application that includes 12 fantastic frontend tools for regular use. Like:</p><ol><li>Triangle generator</li><li>Color shades generator</li><li>Gradient generator</li><li>Page dividers</li><li>SVG compressor</li><li>SVG → JSX converter</li><li>Base64 encoding</li><li>Fake data generator</li><li>Symbols collection</li><li>Lorem ipsum</li><li>CSS cursors</li><li>Keyboard events codes</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*mGweO1vPAlgyYyqE.png" /></figure><p>6. <a href="https://keyframes.app/">Keyframes</a></p><p>This Web App has several tools such as <strong>animation</strong>, <strong>shadow</strong> &amp; <strong>color generator</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*fTdivTukVuIN15UV.png" /></figure><p><em>More content at </em><a href="https://plainenglish.io/"><strong><em>PlainEnglish.io</em></strong></a><em>. Sign up for our </em><a href="http://newsletter.plainenglish.io/"><strong><em>free weekly newsletter</em></strong></a><em>. Follow us on </em><a href="https://twitter.com/inPlainEngHQ"><strong><em>Twitter</em></strong></a>, <a href="https://www.linkedin.com/company/inplainenglish/"><strong><em>LinkedIn</em></strong></a><em>, </em><a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><strong><em>YouTube</em></strong></a><em>, and </em><a href="https://discord.gg/GtDtUAvyhW"><strong><em>Discord</em></strong></a><strong><em>.</em></strong></p><p><strong><em>Interested in scaling your software startup</em></strong><em>? Check out </em><a href="https://circuit.ooo/?utm=publication-post-cta"><strong><em>Circuit</em></strong></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b4f4e764ffa4" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/6-free-modern-tools-for-developers-of-2023-b4f4e764ffa4">6 Free Modern Tools for Developers of 2023</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>