<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cat McGee</title>
    <description>The latest articles on DEV Community by Cat McGee (@catmcgeecode).</description>
    <link>https://dev.to/catmcgeecode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F419154%2F2033bbce-6afb-4a30-b64f-d4b028a34ce6.jpg</url>
      <title>DEV Community: Cat McGee</title>
      <link>https://dev.to/catmcgeecode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/catmcgeecode"/>
    <language>en</language>
    <item>
      <title>Why web3 matters</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Tue, 28 Sep 2021 20:08:03 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/why-web3-matters-4oe0</link>
      <guid>https://dev.to/catmcgeecode/why-web3-matters-4oe0</guid>
      <description>&lt;p&gt;&lt;a href="https://blog.mcgee.cat/why-web3-matters"&gt;Original post on Hashnode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently, a Twitter thread entitled &lt;em&gt;Why web3 matters&lt;/em&gt; went viral. And as much as I love this sentiment, I couldn't help but roll my eyes when reading through Chris Dixon's buzzword-filled tweets. That kind of blockchain lingo is loved by crypto salespeople and NFT grifters, but is quite far removed from people who, well... actually want to understand why web3 matters. It doesn't help that Twitter is a cesspool for controversies, and Chris's thread seemed to divide people into two groups - you either agree with everything he said 100% making you a delusional zoomer, or you're an old-fashioned granddad who can't keep up with the times. I'm here to help you make up your own mind, and hopefully find yourself somewhere in between these two extremes.&lt;/p&gt;

&lt;p&gt;If you're someone who loves to read irrationally enthusiastic reassurances about the next blockchain get-rich-quick scheme, this post is not for you. But if you're fed up of the constant bombardment of jargon and actually want to understand why on earth Twitter is suddenly talking about a new web, read on. I'm going to tell you why web3 &lt;em&gt;actually&lt;/em&gt; matters and what it means for you - a person, not a venture capitalist. 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  What's wrong with our current web?
&lt;/h2&gt;

&lt;p&gt;We've had two iterations of the web so far - known as, you guessed it, web1 and web2. Web1 was king from approximately 1990-2005, and most people using the web in those days were consumers rather than creators. Content was consumed by many but created by few, mainly obnoxiously nerdy tech people and forward-thinking news sites. It is now nicknamed the 'read-only web.'&lt;/p&gt;

&lt;p&gt;Web2 changed that, particularly with the introduction of social media. Suddenly, more and more people were posting, creating, and sharing their lives with the world. Those who were originally only reading news stories started publicly arguing with them. And the internet that we know today was born.&lt;/p&gt;

&lt;p&gt;But there's a problem. Everything that we post, share, comment, like, or furiously screenshot is owned by someone else. And it goes deeper - it's owned by 4 big companies: Google, Apple, Facebook, and Amazon. We'll call them GAFA.&lt;/p&gt;

&lt;p&gt;The web has gone from being created by few and consumed by many, to being created by many and consumed by many, to being &lt;strong&gt;created by many and owned by few&lt;/strong&gt;. GAFA have created a &lt;strong&gt;Data Economy&lt;/strong&gt;, feeding off of the content that we create and using it against us. They control the information we create, the information we see, and with that they're able to &lt;em&gt;gently&lt;/em&gt; exploit our human weaknesses by manipulating what we believe, which in turn makes ads more effective - the Data Economy business model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The company with the most data always wins.&lt;/strong&gt; Facebook buys out any and all threats to their social media monopoly - remember when WhatsApp was privacy-focussed? Or when Instagram was actually a non-toxic platform for friends to share photos? Google has made Bing a meme, Yahoo a boomers-only search engine, and reduced Mozilla to desperately holding onto the ethical part of the browser market. And Amazon has basically disrupted every market in existence and changed the course of the economy. But like, in a bad way.&lt;/p&gt;

&lt;p&gt;The Data Economy isn't just an exploitive and rigged business model, but it also has devastating consequences when things go wrong. When so much data is owned by one entity, it makes them a prime target for hacking. And oh boy, do these guys get hacked. For a glimpse into how insecure the Data Economy is, have a look at Wikipedia's &lt;a href="https://en.wikipedia.org/wiki/List_of_data_breaches"&gt;list of data breaches&lt;/a&gt;. And to find out if your data has been exposed to the public, enter your email into &lt;a href="https://haveibeenpwned.com/"&gt;Have I Been Pwned&lt;/a&gt;. Not only are there accidental data breaches, but there have been cases of &lt;a href="https://en.wikipedia.org/wiki/Facebook%E2%80%93Cambridge_Analytica_data_scandal"&gt;purposeful illegal selling of data&lt;/a&gt; from GAFA. There is no sign of this stopping, and no incentive to stop either. That's where web3 comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The web3 ideal
&lt;/h2&gt;

&lt;p&gt;Web3 promises two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To remove the ability to make money from data&lt;/li&gt;
&lt;li&gt;To create incentives to make money on the internet through other means&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By achieving both these goals, we will no longer live in a Data Economy. Companies will have to find new ways to make money, and people will be able to take control of their own data. There will be no incentive to hack into data centres. We'll live in a world where &lt;strong&gt;the people consume, create, and own our information&lt;/strong&gt;, not in a world of surveillance capitalism that feeds 4 power-hungry data-hoarding entities.&lt;/p&gt;

&lt;p&gt;Sound unrealistic? Up until now, it has been. We've been relying on governments and companies to do the right thing, and we've seen how that's panned out. But if we can't trust people to enforce these promises, we can trust technology. So let's go through how web3 can technologically fulfill each of its promises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remove the ability to make money from data
&lt;/h2&gt;

&lt;p&gt;Web3 has often been called the &lt;strong&gt;decentralized web&lt;/strong&gt;. While data is currently &lt;em&gt;centralized&lt;/em&gt; and owned by GAFA, web3 applications separate their data and store it on a large number of computers and hard drives. These computers are not owned by one company - the idea is that each person can own a small amount of data. Without one entity having access to data, there is no ability to make money from it. &lt;/p&gt;

&lt;p&gt;There are plenty of ways to accomplish this technologically. The most well-known solution to this currently is (brace yourself) &lt;em&gt;blockchain&lt;/em&gt;. Without going into boring details of how a blockchain works, it allows each computer to hold a small amount of data - a block in a chain. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitcoin.org/"&gt;Bitcoin&lt;/a&gt; and &lt;a href="https://ethereum.org/"&gt;Ethereum&lt;/a&gt; are the two biggest blockchains in existence, but others like &lt;a href="https://solana.com/"&gt;Solana&lt;/a&gt; and  &lt;a href="https://cardano.org/"&gt;Cardano&lt;/a&gt; are slowly catching up. There are hundreds of decentralized apps, aka dapps, already deployed on Ethereum, and building on the blockchain is getting easier by the minute. It is by far the most secure decentralized architecture.&lt;/p&gt;

&lt;p&gt;There are other ways to build a decentralized network. The obsession over and reliance on blockchain is, quite frankly, BS. There are decentralized storage companies out there (like &lt;a href="https://www.storj.io/"&gt;Storj&lt;/a&gt;) that pay any person to host some of their storage space to be a 'node' on their network, while allowing developers to store their data on these nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web3 is not blockchain&lt;/strong&gt; - this is an incredibly important point to understand. Blockchain is a web3 architecture, but it is not the only way to accomplish a decentralized web, and in most cases it is unnecessarily expensive. However, with blockchain comes &lt;strong&gt;cryptocurrency&lt;/strong&gt;, which brings us to our next point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create incentives to make money on the internet through other means
&lt;/h2&gt;

&lt;p&gt;Without one entity having access to large amounts of data, we can't have a Data Economy. And removing the Data Economy already opens up new incentives to make money through other means. But when people talk about making money using web3, they're talking about crypto.&lt;/p&gt;

&lt;p&gt;Just a warning: some of this next part may sound similar to Chris's thread, but I promise it will actually be coherent. &lt;/p&gt;

&lt;p&gt;Crypto provides a financial incentive, known as &lt;strong&gt;tokens&lt;/strong&gt;, to participate in the building of a decentralized web. There are many ways to earn tokens - some examples are offering storage (like Storj), creating content, or sometimes even &lt;a href="https://www.forbes.com/sites/youngjoseph/2020/09/17/uniswap-ethereum/"&gt;being early adapters of the application.&lt;/a&gt; Companies can set up their own protocol for rewarding their users, and it cuts out the need for other third party services. There is no need to send data through AWS, Stripe, or PayPal, as tokens can be sent directly from the provider to the user.&lt;/p&gt;

&lt;p&gt;Tokens can also be sent directly from one user to another. No more relying on Google to give you your YouTube earnings, or directing your audience to Patreon so they can donate - users can directly 'tip' you a token if they like your content. There are also the famous NFTs, which, sorry Chris, do not let you &lt;em&gt;"own a piece of the internet"&lt;/em&gt;. NFTs are tokens too, but they are not equal in value to each other. While owning an OG token is like owning a dollar, owning an NFT is more like owning a painting. All dollars are equal in value, but not all paintings are equal in value. NFTs are each unique, and they're pretty cool - check out &lt;a href="https://opensea.io/"&gt;OpenSea&lt;/a&gt; if you're interested in getting into it.&lt;/p&gt;

&lt;p&gt;This token economy is exactly what the web was created for in the first place. It's direct. &lt;em&gt;People&lt;/em&gt; reward &lt;em&gt;people&lt;/em&gt; for providing a service or participating in a better world. There is no malicious data tracking or manipulation. No exploitation, no incessant ads, no algorithms designed to be addictive. No reliance on huge profit-driven companies. Just people interacting with people. That's web3.&lt;/p&gt;

&lt;h2&gt;
  
  
  So where are we?
&lt;/h2&gt;

&lt;p&gt;Most apps you use are still web2. The majority of dapps out there are purely for finance, like trading crypto or buying and selling NFTs. But we're getting there, and web3 is already beginning to expand into huge industries, like &lt;a href="https://audius.co/"&gt;music&lt;/a&gt;, &lt;a href="https://livepeer.org/"&gt;video streaming&lt;/a&gt;, and even &lt;a href="https://axieinfinity.com/"&gt;gaming&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Web3 may currently seem pretty inaccessible, and when buzzword tweets go viral it continues to push the narrative that the decentralized web is only for people already in the know. But web2 was like that too. There are thousands of people passionately working to make this space more accessible for all, and you'll soon be using web3 apps without even knowing. &lt;/p&gt;

&lt;p&gt;It's super easy to start your own journey into web3, and you can get involved today by installing &lt;a href="https://metamask.io/"&gt;Metamask&lt;/a&gt;, a browser extension to make your browser compatible with blockchain apps. If you're a developer interested in getting into the web3 space, I cannot recommend &lt;a href="https://dev.to/dabit3/the-complete-guide-to-full-stack-solana-development-with-react-anchor-rust-and-phantom-3291"&gt;Nader Dabit&lt;/a&gt;'s content enough.&lt;/p&gt;

&lt;p&gt;Thanks for reading. This is my first ever post about web3, and was &lt;a href="https://blog.mcgee.cat/why-web3-matters"&gt;originally posted here&lt;/a&gt;. I'll be posting more about the decentralized web so if you're interested in reading my (potentially controversial) takes, make sure to follow me &lt;a href="https://blog.mcgee.cat/"&gt;on Hashnode&lt;/a&gt; or &lt;a href="https://twitter.com/messages/compose?recipient_id=2287174586&amp;amp;text=Hey%20Cat!"&gt;slide into my Twitter DMs&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>twitter</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Want to be a full-stack developer without a degree? This is what you need</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Sat, 22 Aug 2020 15:29:56 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/want-to-be-a-full-stack-developer-without-a-degree-this-is-what-you-need-2kmm</link>
      <guid>https://dev.to/catmcgeecode/want-to-be-a-full-stack-developer-without-a-degree-this-is-what-you-need-2kmm</guid>
      <description>&lt;p&gt;&lt;a href="https://www.twitter.com/catmcgeecode"&gt;Twitter&lt;/a&gt; | &lt;a href="https://www.youtube.com/c/catmcgee"&gt;YouTube&lt;/a&gt; | &lt;a href="https://www.instagram.com/catmcgeecode"&gt;Instagram&lt;/a&gt; | &lt;a href="https://www.buymeacoffee.com/catmcgee"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello everyone! Becoming a developer isn't easy, and it becomes even less easy when you don't have a degree. Not because you're any less skilled, but because a lot of companies look for a degree to demonstrate your skills. Honestly, it's pretty rigged. I'm sure we all know that you learn so much more from working or coding on your own than you ever could from university. &lt;/p&gt;

&lt;p&gt;The good news is - you don't need a degree. There are plenty of other ways to demonstrate that you will be an amazing employee. And this article talks about everything you need to have to show off your skills. &lt;/p&gt;

&lt;p&gt;If you're like me and have a short attention span, you might rather read this as a slightly less-detailed Twitter thread. So &lt;a href="https://twitter.com/CatMcGeeCode/status/1296779500383088640"&gt;here you go&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. One big project
&lt;/h2&gt;

&lt;p&gt;This is the most important thing on this list, and if you take anything away from this article, let it be this. &lt;/p&gt;

&lt;p&gt;Build a big project that incorporates everything - frontend, backend, and database. It'll show four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can code&lt;/li&gt;
&lt;li&gt;You understand the layers of software&lt;/li&gt;
&lt;li&gt;You are hard-working and can complete a project&lt;/li&gt;
&lt;li&gt;You are passionate &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these things are so important for becoming a full-stack developer. If you can have one project to showcase your knowledge here, you're golden.&lt;/p&gt;

&lt;p&gt;Get this project up on GitHub and have an EXCELLENT README to go along with it. Talk about it on your CV, detailing what your project does and the stack you used. &lt;/p&gt;

&lt;p&gt;Make this project something you're passionate about. Know it back to front. You'll be asked about this in interviews, so you need to know how it works!&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Something on the cloud
&lt;/h2&gt;

&lt;p&gt;A lot of people use the cloud nowadays, so it's 100% worth your while to learn it. You don't have to learn it in depth. Just deploy something up there and call it a day. That one process will be enough to demonstrate that you understand the cloud and how to use a cloud service. Deploy your big project we talked about before, or something else if you like.&lt;/p&gt;

&lt;p&gt;It doesn't really matter which service you'd use, but I'd go with AWS. They're widely used and have a great free tier.&lt;/p&gt;

&lt;p&gt;Having something you built up on a domain that a potential employer can use and play with is incredible. It's such an easy way to showcase what you can do, and an employer will see that.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A few blog posts
&lt;/h2&gt;

&lt;p&gt;I'm sure you already know this, especially if you're on DEV.to, but writing blog posts is so incredibly useful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will cement your knowledge&lt;/li&gt;
&lt;li&gt;You will help someone&lt;/li&gt;
&lt;li&gt;Your technical experience is broadcasted to the world&lt;/li&gt;
&lt;li&gt;You can show off your communication skills&lt;/li&gt;
&lt;li&gt;You can show off your personality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While writing articles isn't necessary to showcase these skills, it certainly helps. &lt;/p&gt;

&lt;p&gt;Just one or two blog posts can help a potential employer see your communication skills and your shining personality!&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Work experience
&lt;/h2&gt;

&lt;p&gt;Work experience is unbeatable. It shows that you can work in a team, which is more often than not essential in a full-stack developer position. It also shows that you can convert someone else's requirements and vision into a real product, which is, you know, what a job is.&lt;/p&gt;

&lt;p&gt;I know what you're thinking: "how can I get work experience without... work experience???"&lt;/p&gt;

&lt;p&gt;There are plenty of ways to accomplish this and get it on your CV. You can make a website for a friend, or work with someone on your football team to create some sort of management software for your coach. Even if this isn't strictly related to development - maybe your aunt wanted a design for her cookbook promotion page - it is unbeatable experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. A personality
&lt;/h2&gt;

&lt;p&gt;Soft skills - everyone's favourite!! (This is sarcasm.)&lt;/p&gt;

&lt;p&gt;Your personality is so so so so so so important. I cannot stress this enough. If someone finds you interesting or fun to talk to, or enjoys reading your articles, they are way more likely to want to interview you than if not.&lt;/p&gt;

&lt;p&gt;Whether or not you find that fair is up to you. But soft skills are essential to have.&lt;/p&gt;

&lt;p&gt;You can easily demonstrate your personality by: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Throwing a bit of flair into your projects&lt;/li&gt;
&lt;li&gt;Making jokes in articles&lt;/li&gt;
&lt;li&gt;Talking about hobbies on social media&lt;/li&gt;
&lt;li&gt;Having a colourful CV&lt;/li&gt;
&lt;li&gt;Making videos on YouTube&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and countless other ways. &lt;/p&gt;

&lt;h2&gt;
  
  
  6. A place for all of this to come together
&lt;/h2&gt;

&lt;p&gt;The thing about a degree is that it is one piece of paper that showcases a lot of these essential skills. You need to have the equivalent.&lt;/p&gt;

&lt;p&gt;Make sure you put all of these on your resume. I also highly recommend building a website with links to all of your projects, articles, social media, etc. This website doesn't need to be great - it just need to be a nice introduction that quickly links to everything you've accomplished. &lt;/p&gt;

&lt;p&gt;Everything should link to everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. A drive
&lt;/h2&gt;

&lt;p&gt;Last but not least, you've got to want to do this. As long as you have a bit of determination, you can honestly do anything. I fully believe this.&lt;/p&gt;

&lt;p&gt;All of these things will help you land an interview. In the actual interview, it will also be useful to be knowledgable of data structures and algorithms. But that's another article.&lt;/p&gt;

&lt;p&gt;Good luck out there. Y'all can do it.&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How do you deal with imposter syndrome?</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Wed, 19 Aug 2020 13:28:26 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/how-do-you-deal-with-imposter-syndrome-bjd</link>
      <guid>https://dev.to/catmcgeecode/how-do-you-deal-with-imposter-syndrome-bjd</guid>
      <description>&lt;p&gt;Imposter syndrome is a huge issue, especially in the tech industry. &lt;/p&gt;

&lt;p&gt;I've started a &lt;a href="https://www.errorsshouldneverpasssilently.com"&gt;collaborative blog site&lt;/a&gt; to try to conquer this. Anyone can write something, from your experiences to imposter syndrome, to a mistake you made. Hopefully this will help readers to understand that they're not alone.&lt;/p&gt;

&lt;p&gt;How do you normally deal with this feeling of inadequacy? Does it pass for you? Do you let yourself feel that way, or do you take steps to conquer it? What are your tips for overcoming imposter syndrome?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Dealing with stress</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Wed, 12 Aug 2020 19:23:44 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/dealing-with-stress-4m4j</link>
      <guid>https://dev.to/catmcgeecode/dealing-with-stress-4m4j</guid>
      <description>&lt;p&gt;Alright. So I’m probably… definitely the worst person to go to about stress. I’m a very (very very) stressful person, and I have no idea why. I always think it’s because I take on a lot of work, but I get even more stressed out when I have no work to do. Shrug emoji.&lt;/p&gt;

&lt;p&gt;So the point in this blog post is to talk about how I deal with stress, or more specifically, how you really should not deal with stress. Right now, I’m writing this as a procrastination tactic because I have so much work to do and my brain is in shut-down mode. In a couple of hours it’ll be in scream mode, which is basically what happens when I procrastinate too much and then have to do everything all at once.&lt;/p&gt;

&lt;p&gt;Haha!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 in dealing with stress
&lt;/h2&gt;

&lt;p&gt;Look at everything you have to do all at one go. Take a look at your to-do list for the week, or even better, the number of tasks you have to go through in JIRA for the entire month. Take it all in. Don’t prioritize. Don’t divide tasks up into smaller bite-sized chunks. Look at all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;p&gt;Freak out about everything you have to do and take a break to calm yourself down. You’ve earned this break. Looking at your entire month in JIRA is a brain-wrecking, tear-jerking task. You deserve to pamper yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3
&lt;/h2&gt;

&lt;p&gt;Don’t pamper yourself. Take a break in order to calm yourself down but don’t take any steps to achieve that. Let those JIRA tasks wonder around in the back of your mind… aimlessly… peacefully… until they all merge together to form one massive ball of disorder and anxiety and run to the front of your mind. They’ll scream at you. Scream back at them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;p&gt;Try to push the scary JIRA tasks back into your subconscious by thinking about other things. Sprint to the fridge and make sure you have enough milk for today. Think about that word sprint. Remember your JIRA sprint. Scream again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5
&lt;/h2&gt;

&lt;p&gt;Look around your environment. Take in the world. Realize how lucky you are to even be stressed in the first place. You have things to gain and things to lose. Remember everything you could be losing right now. And also remember the laundry you were meant to do yesterday but didn’t because you were screaming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6
&lt;/h2&gt;

&lt;p&gt;Do that meditation thing. Sit down, visualize your thoughts leaving your mind, focus on how you’re breathing. Fail. Think about how you’re failing. Think about your previous internet search query about how to meditate. Try to figure out why it didn’t work for you. Open Google and search it again. Freak out about how Google is evil and stealing your data. Switch to duckduckgo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7
&lt;/h2&gt;

&lt;p&gt;Open JIRA again. Go to your text editor. Make a to-do list for today. Overestimate the work you can get done. Freak out about how you’ve overestimated the work you can get done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8
&lt;/h2&gt;

&lt;p&gt;Write a blog post.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>productivity</category>
      <category>jokes</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>Learning more about ethics in tech</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Wed, 05 Aug 2020 16:30:05 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/where-can-i-learn-more-about-ethics-in-tech-5ep8</link>
      <guid>https://dev.to/catmcgeecode/where-can-i-learn-more-about-ethics-in-tech-5ep8</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I'm really interested in devoting my skills to ethical causes as my career, but I'm not quite sure how to do this. &lt;/p&gt;

&lt;p&gt;I'd love to learn more about ethics in tech - from small things we should think about in our daily lives (like accessibility) to big ethical dilemmas (like AI or data privacy).&lt;/p&gt;

&lt;p&gt;Do you know of any good resources, mailing lists, or Twitter accounts for these kind of issues?&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Code anything in Javascript, with only 8 characters</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Tue, 28 Jul 2020 15:24:08 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/code-anything-in-javascript-with-only-8-characters-5ghp</link>
      <guid>https://dev.to/catmcgeecode/code-anything-in-javascript-with-only-8-characters-5ghp</guid>
      <description>&lt;p&gt;You can convert any Javascript code into these characters:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;()[]{}!+&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;and only these characters. &lt;/p&gt;

&lt;p&gt;Here's how:&lt;/p&gt;

&lt;h2&gt;
  
  
  Numbers
&lt;/h2&gt;

&lt;p&gt;We can get &lt;code&gt;0&lt;/code&gt; by casting an empty array using &lt;code&gt;+[]&lt;/code&gt;. The + is the unary plus, which converts the right side into a numeric value, i.e. 0, Go ahead and type &lt;code&gt;+[]&lt;/code&gt; into your console and you'll see 0. Then, to get 1, we can use &lt;code&gt;+!![]&lt;/code&gt;!, because the boolean value &lt;code&gt;true&lt;/code&gt; can be expressed as &lt;code&gt;!![]&lt;/code&gt; and by using our unary plus again, we convert it into 1 - &lt;code&gt;+!![]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Still with me?&lt;/p&gt;

&lt;p&gt;By using our &lt;code&gt;true&lt;/code&gt;  value and summing it multiple times, we can get other numbers. In Javascript, true + true = 2, so 2 can be written as &lt;code&gt;!![]+!![]&lt;/code&gt;. We don't need to prepend our first &lt;code&gt;!![]&lt;/code&gt; with + this time, because the + in the middle tells Javascript we are adding numerical values. &lt;/p&gt;

&lt;p&gt;We can keep adding these over and over again to get bigger numbers like 12, but can you think of a better way to do this? Bring on strings. &lt;/p&gt;

&lt;p&gt;It's possible to cast strings to numbers in Javascript - for example, again using our unary plus, we can get the number 12 like this: &lt;code&gt;+("1"+2)&lt;/code&gt;. We can also do this by concatenating 1 and 2 with an empty array, like this: &lt;code&gt;[]+1+2&lt;/code&gt;. We can use this to our advantage here and, instead of summing &lt;code&gt;true&lt;/code&gt; 12 times, we can sum it once for 1, twice for 2, cast them as strings, join the strings together, and convert it into a number.&lt;/p&gt;

&lt;p&gt;Phew.&lt;/p&gt;

&lt;p&gt;Let's take that step by step:&lt;/p&gt;

&lt;p&gt;Sum &lt;code&gt;true&lt;/code&gt; once for 1:  &lt;code&gt;+!![]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sum &lt;code&gt;true&lt;/code&gt; twice for 2:  &lt;code&gt;!![]+!![]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cast 1 as a string:  &lt;code&gt;+!![]+[]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We don't have to cast 2 as a string, because Javascript already knows from us casting 1 as a string that we are adding strings, not numbers. &lt;/p&gt;

&lt;p&gt;Join the strings together: (&lt;code&gt;+!![]+[])+(+!![]+!![])&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Convert it into a number: &lt;code&gt;+((+!![]+[])+(+!![]+!![]))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And there you have it. We can write the number 12 as &lt;code&gt;+((+!![]+[])+(+!![]+!![]))&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strings
&lt;/h2&gt;

&lt;p&gt;Now that we have numbers, let's see where we can get other characters from.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;true&lt;/code&gt; : we already know this can be obtained from &lt;code&gt;!![]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;false&lt;/code&gt; : the opposite of true, &lt;code&gt;![]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;undefined:&lt;/code&gt;  appending a non-existing element to an array: &lt;code&gt;[][[]]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NaN&lt;/code&gt;: trying to cast an object to a number: &lt;code&gt;+{}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"[object Object]"&lt;/code&gt; : a javascript developer's favorite, object Object comes from adding an array and an object: &lt;code&gt;[]+{}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Casting them to string and accessing those like arrays will give us single characters, from which we can even get more strings! So now, along with any number we could dream of, we have&lt;/p&gt;

&lt;p&gt;a b c d e f i j l n o r s t u&lt;/p&gt;

&lt;p&gt;We can use the 2 here to cast a string such as &lt;code&gt;1e1000&lt;/code&gt; into a number, which would give us Infinity. Even more letters!&lt;/p&gt;

&lt;p&gt;a b c d e f i j l n o r s t u y&lt;/p&gt;

&lt;p&gt;Let's not stop there. We can get even more characters if we exploit DOM elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting characters from the DOM
&lt;/h2&gt;

&lt;p&gt;If we assume that we are using Javascript in the browser, we can also assume that we have access to the DOM elements, and get the remaining characters from there.&lt;/p&gt;

&lt;p&gt;Something that we can do here is &lt;code&gt;window.unescape&lt;/code&gt; which would give us every ASCII character by calling &lt;code&gt;window.unescape("%" + HEXA_VALUE)&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;We already have u, n, e, s, c, a, and e and are only missing the &lt;code&gt;p&lt;/code&gt;. Where would you get a &lt;code&gt;p&lt;/code&gt; on website? From &lt;code&gt;http&lt;/code&gt; of course! If we assume that we're in a webpage served over HTTP (or HTTPS) we can cast &lt;code&gt;window.location&lt;/code&gt; to a string. The third character here would be &lt;code&gt;p.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The only problem here is that we do not have access to &lt;code&gt;window&lt;/code&gt; yet. But because Javascript is so wonderful (&lt;a href="https://charlieharvey.org.uk/page/javascript_the_weird_parts"&gt;lol&lt;/a&gt;) we can get window like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Function("return location")()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, whilst we have &lt;code&gt;f&lt;/code&gt; we do not have &lt;code&gt;F&lt;/code&gt;. To get an uppercase &lt;code&gt;F&lt;/code&gt;, we can use our existing characters to form &lt;code&gt;array["sort"]["constructor"]&lt;/code&gt; which will give us the word &lt;code&gt;Function&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;So now we have our window object, and we can get our &lt;code&gt;p&lt;/code&gt; from there. Now we can use &lt;code&gt;window.unescape&lt;/code&gt; but we don't yet have the &lt;code&gt;%&lt;/code&gt; that we need to get every ASCII character.&lt;/p&gt;

&lt;p&gt;Luckily, escaping &lt;code&gt;"["&lt;/code&gt; , like &lt;code&gt;escape("[")&lt;/code&gt; yields the string &lt;code&gt;%5B&lt;/code&gt;, and from that, we can obtain that percentage sign.&lt;/p&gt;

&lt;p&gt;Now, we can get any ASCII character like this!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+([]+[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[+[]+!![]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]])()([][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+([]+[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[+[]+!![]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+HEXA_VALUE)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Phew.&lt;/p&gt;

&lt;p&gt;Then, to execute this code, we just need to use Function.&lt;/p&gt;

&lt;p&gt;Some geniuses have discovered a (way more complicated) way to convert Javascript into only 6 characters AND without the need for the DOM. You can play with that &lt;a href="https://jscrew.it/"&gt;here&lt;/a&gt; if you want to hurt your head a bit.  &lt;/p&gt;

&lt;p&gt;And that's it. You can successfully code in Javascript by using only 8 characters. If you didn't already think Javascript was weird, I'm sure you do now.&lt;/p&gt;

&lt;p&gt;In your next interview, when they ask you to solve &lt;a href="https://www.hackerrank.com/challenges/fizzbuzz/problem"&gt;FizzBuzz&lt;/a&gt;, you should try it this way. See what happens.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>node</category>
    </item>
    <item>
      <title>I fucking love coding</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Mon, 20 Jul 2020 12:30:57 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/i-fucking-love-coding-3fkk</link>
      <guid>https://dev.to/catmcgeecode/i-fucking-love-coding-3fkk</guid>
      <description>&lt;p&gt;Hey guys. This article isn't meant to be helpful, or motivational, or really have a point at all. I'm just feeling a whole lotta love for code right now and I want to let it out.&lt;/p&gt;

&lt;p&gt;I took the weekend to focus on two pet projects. Neither of these projects are going to make me any money or advance my career in any way. They're just fun. &lt;/p&gt;

&lt;p&gt;But you know what's fucking awesome? I was able to just have an idea, and bring it to LIFE (well, almost).&lt;/p&gt;

&lt;p&gt;I've wanted to code a particular app since I was a beginner - a Tinder for Spotify, which would help people discover new music in a fun way. So this weekend I thought I'd give it a shot, and I literally got the whole thing working already. It's wild. When I was a beginner and had this idea, I had no idea how I would have achieved it. And now I can. In LESS THAN TWO DAYS. It's just so fucking cool. &lt;/p&gt;

&lt;p&gt;Another project I started working on was a new gif library (because I hate Facebook and Facebook bought Giphy). I decided to make the backend with Go, because I had never used Go before and thought it would be a fun project to help me learn. And it was just awesome. Go is awesome. Learning a new coding language is the best thing ever - it reminded me of being a beginner and having that feeling when you finally get your code working, but without all the other shit that comes with being a beginner. &lt;/p&gt;

&lt;p&gt;Coding has brought me so much joy and opportunity. And so much of that comes from the dumb pet project ideas I have and am able to bring to completion. It's just absolutely mindblowingly cool to have an idea and see it pan out right in front of your eyes. Like, I'm building shit. From the bottom up. By myself. My OWN IDEA. It's MY THING!&lt;/p&gt;

&lt;p&gt;Man. It's so cool.&lt;/p&gt;

&lt;p&gt;Anyway, yeah. Keep coding. Keep creating. Keep having dumb ideas and making them real. It is genuinely the best feeling ever. &lt;/p&gt;

&lt;p&gt;(PS people seem to love Tinder for Spotify so I will be releasing it on App Store &amp;amp; Google Play in about a month.)&lt;/p&gt;

</description>
      <category>womenintech</category>
      <category>watercooler</category>
      <category>go</category>
    </item>
    <item>
      <title>What are your tips for coding interviews?</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Mon, 13 Jul 2020 13:40:22 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/what-are-your-tips-for-coding-interviews-4494</link>
      <guid>https://dev.to/catmcgeecode/what-are-your-tips-for-coding-interviews-4494</guid>
      <description>&lt;p&gt;Do you have any tips for acing coding interviews? What do you normally do to prepare for one?&lt;/p&gt;

&lt;p&gt;Mine is: when preparing, try to practice solving problems on a whiteboard!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>Doing my bit to tackle imposter syndrome</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Thu, 09 Jul 2020 12:41:21 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/doing-my-bit-to-tackle-imposter-syndrome-1h8f</link>
      <guid>https://dev.to/catmcgeecode/doing-my-bit-to-tackle-imposter-syndrome-1h8f</guid>
      <description>&lt;p&gt;&lt;a href="https://errorsshouldneverpasssilently.com/" rel="noopener noreferrer"&gt;Check out the blog!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello fellow geeks! In this article I want to talk about something that I don't think is addressed enough - the serious problem with imposter syndrome in this industry.&lt;/p&gt;

&lt;p&gt;Imposter syndrome is horrible. You feel inadequate, like you've got where you are because of chance, and eventually someone is going to find out you're an imposter.&lt;/p&gt;

&lt;p&gt;And I don't know a single developer who doesn't feel this way on a weekly basis.&lt;/p&gt;

&lt;p&gt;Imposter syndrome was initially thought to be seen in only women, and I can definitely say that a lot of my feelings of fraud stem from there. In &lt;em&gt;every single job&lt;/em&gt; I've had I've been the first women hired in the engineering team. One time I was the first woman in the whole company. This comes with its own issues, but one of the most pressing ones is the imposter syndrome. Was I hired because I'm a woman?&lt;/p&gt;

&lt;p&gt;However, nowadays we know that everyone, regardless of gender, feels like a fraud sometimes. There isn't enough research to really conclude where or how imposter syndrome came to be, so I like to use this diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZrY5ukw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZrY5ukw.jpg" alt="It feels like each person you talk to has more knowledge than you, but in actuality they each have a little bit of knowledge that you don't"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have no way to understand the minds of our colleagues and peers. We don't know how much they know. It just seems like they are more skilled than us because we judge our skill in relation to other people. But what we're doing wrong here is we're judging our skill in relation to every person, not just one. &lt;/p&gt;

&lt;p&gt;When we ask someone for help, we don't know what happens on their end. Oftentimes, we think they just &lt;em&gt;know&lt;/em&gt; the answer. However, a lot of the time, they use the knowledge gained from our question, their own knowledge, and the knowledge of another person to answer our question. Knowledge is shared between these parties.&lt;/p&gt;

&lt;p&gt;That's the way teams work. You have a particular skill you bring to the table. Sometimes it doesn't seem that way because everyone else has a skill they bring to the table that is different from yours. &lt;/p&gt;

&lt;p&gt;Tackling imposter syndrome is a lot more difficult than it looks. Repeatedly telling yourself you're not an imposter doesn't work. The best way to overcome it is to talk to others about it, share your story, and realize that almost everybody feels the same way as you. Understand that those people who seem infinitely more skilled than you make mistakes too. You just don't see them.&lt;/p&gt;

&lt;p&gt;So I'm creating a way to do that. On July 13th (Tuesday), I'll launch a blog called 'Errors Should Never Pass Silently', a place to share mistakes that we've made, how we've tackled our own imposter syndrome, and advice we can offer to others. The name is based on the &lt;a href="https://zen-of-python.info/" rel="noopener noreferrer"&gt;Zen of Python&lt;/a&gt;. It'll be a place to submit your own articles that can be published anonymously or with your name and links to your social media. &lt;/p&gt;

&lt;p&gt;Right now, a few awesome developers are writing articles to be published and featured when it's launched. This is what you have to look forward to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 Mistakes I Made as a Beginner&lt;/li&gt;
&lt;li&gt;13 Years in the Industry and I've Never Overcome my Imposter Syndrome&lt;/li&gt;
&lt;li&gt;My Biggest Error was Never Leaving my Java Bubble&lt;/li&gt;
&lt;li&gt;Feelings of Inadequacy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(and more)&lt;/p&gt;

&lt;p&gt;If you're interested in joining in and writing an article for launch, leave a comment here or &lt;a href="https://twitter.com/messages/2287174586-2287174586?recipient_id=2287174586&amp;amp;text=Errors%20should%20never%20pass%20silently" rel="noopener noreferrer"&gt;DM me on Twitter&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Let's tackle imposter syndrome together.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>career</category>
    </item>
    <item>
      <title>An Introduction to the Command Line (it's not as scary as you think!)</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Mon, 06 Jul 2020 17:34:28 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/an-introduction-to-the-command-line-it-s-not-as-scary-as-you-think-44k1</link>
      <guid>https://dev.to/catmcgeecode/an-introduction-to-the-command-line-it-s-not-as-scary-as-you-think-44k1</guid>
      <description>&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UC7khnAAAID1WQ_4gQO73Gmw"&gt;YouTube&lt;/a&gt; | &lt;a href="https://www.twitter.com/catmcgeecode"&gt;Twitter&lt;/a&gt; | &lt;a href="https://www.instagram.com/catmcgeecode"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey geeks! Today we're going to be talking about the command line. If you're on dev.to, chances are you're familiar with the command line and this article may not be super useful for you. But if you're new to coding and are a bit scared to get started with the command line, read on my friend!&lt;/p&gt;

&lt;p&gt;The command line is scary. It's scary because it's unknown. When I first started using the command line, I automatically associated it with Linux and ended up actually INSTALLING LINUX so that I could properly learn the command line. You don't need to do that. You can do it on MacOS and Windows too.&lt;/p&gt;

&lt;p&gt;You may have heard a few other words like Terminal, Shell, Command Line Interface, or CLI. These all mean the same thing. Sometimes, in Linux communities, these words have very slightly different meanings, but most of the time when people say any of these words they are talking about the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The command line is just another way of navigating and manipulating files
&lt;/h2&gt;

&lt;p&gt;Go into Finder (Mac) or File Explorer (Windows) and open some folders on your computer. Go backwards and forwards and view all your files. Create a new folder, delete it, open a document. What you're doing right now is exactly what you'll be doing in the command line too, except it's text-based instead of GUI-based. And folders are actually called 'directories' for no reason. That's literally it. It's just another way of navigating through your files.&lt;/p&gt;

&lt;h2&gt;
  
  
  So why do I need the command line?
&lt;/h2&gt;

&lt;p&gt;Honestly, you could potentially go your entire dev career without ever using it. But it would cost you hours, and it would be WAY more difficult than it needs to be. Developers use the command line to install things (like languages, libraries, and frameworks) and to run code. If you go onto GitHub and view almost anything, you'll see that it gives you directions on how to install by giving you commands to run. You run those commands in the command line and voila! You've installed a new library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running commands
&lt;/h2&gt;

&lt;p&gt;To run commands into the command line, type in the command and press Enter. Sometimes, the command might need some extra details. I'll explain a little more about this later. &lt;/p&gt;

&lt;h2&gt;
  
  
  Command #1: Viewing the current directory
&lt;/h2&gt;

&lt;p&gt;It's time. Open your command line. On Mac, there is a built-in app called Terminal that you can use, and on Windows it's called cmd.exe, or Command Prompt.&lt;/p&gt;

&lt;p&gt;As soon as you open it, you'll probably see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7YBZWgFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xyttfq6ssscmvhwbxxl8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7YBZWgFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xyttfq6ssscmvhwbxxl8.jpeg" alt="Windows Command Prompt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or this: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cg6xj47b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wvt3a2w0ptgkrzdcjbsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cg6xj47b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wvt3a2w0ptgkrzdcjbsg.png" alt="Mac Terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You may be asking yourself 'What is this? Where am I?' To find out the current directory (folder) that you're in, it depends on your operating system.&lt;/p&gt;

&lt;p&gt;Mac OS or Linux? Type &lt;code&gt;pwd&lt;/code&gt; and press enter&lt;br&gt;
Windows? Type &lt;code&gt;echo %20%&lt;/code&gt; and press enter&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Pwd&lt;/code&gt; stands for &lt;code&gt;present working directory&lt;/code&gt; and it will tell you exactly where you are. You can run this command as you're navigating through files if you're ever lost (which is very likely to happen) and it will return the file path of the directory you are in. &lt;/p&gt;

&lt;p&gt;On Windows, &lt;code&gt;echo %20%&lt;/code&gt; gives the same response. &lt;code&gt;echo&lt;/code&gt; pretty much translates to &lt;code&gt;print&lt;/code&gt;, and you're giving it a &lt;code&gt;cd&lt;/code&gt; variable, which tells it to print the current directory path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Command #2: View everything in your current directory
&lt;/h2&gt;

&lt;p&gt;When you run this, the command line will tell you everything that inside your present working directly. You'll see a list of all the directors and documents inside your current directory. This command is operating system specific too.&lt;/p&gt;

&lt;p&gt;Mac OS or Linux? &lt;code&gt;ls&lt;/code&gt;&lt;br&gt;
Windows? &lt;code&gt;dir&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; stands for list, because you're listing all items in the directory, and &lt;code&gt;dir&lt;/code&gt; stands for, well, directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Command #3: go into another directory
&lt;/h2&gt;

&lt;p&gt;This command allows you to 'move' into another directory, making it your present working directory. It is probably the command you'll use the most in the command line!&lt;/p&gt;

&lt;p&gt;It is &lt;code&gt;cd&lt;/code&gt; and it stands for &lt;code&gt;change directory&lt;/code&gt;. It's the same on MacOS, Linux, and Windows.&lt;/p&gt;

&lt;p&gt;This is one of the commands that needs more information. If you just typed &lt;code&gt;cd&lt;/code&gt;, the command line would be like "yo, where you wanna go?" So after &lt;code&gt;cd&lt;/code&gt; , you'll type the name of the directory you want to go into. Like &lt;code&gt;cd NewDirectory.&lt;/code&gt; It is based on your current position. What this means is that you need to include the path for the command line to follow to find that directory.&lt;/p&gt;

&lt;p&gt;For example, I've just navigated to the Documents directory, and I want to get into the Projects directory. My Projects directory is inside my Documents directory, so I just have to type &lt;code&gt;cd Projects&lt;/code&gt; in order to change into it. However, what if I'm in the Documents directory and I want to change to a directory that is inside the Projects directory called TwitterBot? To do this, I don't have to do &lt;code&gt;cd Projects&lt;/code&gt; and then &lt;code&gt;cd TwitterBot&lt;/code&gt; (although that will also work.) I can instead run &lt;code&gt;cd Projects/TwitterBot&lt;/code&gt; which is the relative file path of TwitterBot to Documents.&lt;/p&gt;

&lt;p&gt;You can also use &lt;code&gt;..&lt;/code&gt; to return to the previous directory. So if I want to change directory out of TwitterBot and back into Projects, I can run &lt;code&gt;cd ..&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips and tricks
&lt;/h2&gt;

&lt;p&gt;Here are a few tricks to make your command line experience awesome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most command line apps come with an auto-complete feature, normally by pressing tab. So if you wanted to go into a Projects directory and no other directory begins with P, you can type &lt;code&gt;cd P&lt;/code&gt; + tab and the command line will auto-compete to &lt;code&gt;cd Projects&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To complete one command immediately after the other, you can type &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; in the middle. So if I wanted to &lt;code&gt;cd&lt;/code&gt; into Documents and then find everything inside that directory, I can type &lt;code&gt;cd Documents &amp;amp;&amp;amp; ls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can personalize your command line to make it look exactly how you want! There are even more command line apps that you can download.&lt;/li&gt;
&lt;li&gt;You can cancel a command by typing &lt;code&gt;Ctrl&lt;/code&gt; + C.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there you have it - your first introduction to the command line. It wasn't that scary, was it? For more information and help for those visual learners, check out the &lt;a href="https://youtu.be/Qsx_u5g60Nc"&gt;YouTube video&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>bash</category>
    </item>
    <item>
      <title>From never writing code to becoming a Python dev in 19 steps</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Fri, 03 Jul 2020 16:37:30 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/from-never-writing-code-to-becoming-a-python-dev-in-19-steps-5a0l</link>
      <guid>https://dev.to/catmcgeecode/from-never-writing-code-to-becoming-a-python-dev-in-19-steps-5a0l</guid>
      <description>&lt;p&gt;&lt;a href="https://www.twitter.com/catmcgeecode"&gt;Twitter&lt;/a&gt; | &lt;a href="https://www.youtube.com/channel/UC7khnAAAID1WQ_4gQO73Gmw"&gt;YouTube&lt;/a&gt; | &lt;a href="https://www.instagram.com/catmcgeecode"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello fellow geeks! After circulation of my &lt;a href="https://dev.to/catmcgeecode/from-no-programming-experience-to-web-developer-in-19-small-steps-olc"&gt;previous post&lt;/a&gt; and &lt;a href="https://twitter.com/CatMcGeeCode/status/1278314269482930176"&gt;Twitter thread&lt;/a&gt;, I've received a lot of responses asking me to do a step-by-step guide for Python devs. &lt;/p&gt;

&lt;p&gt;So, here you go my lovelies. You can go from never having written a line of code to being paid to write Python in just 19 steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/CatMcGeeCode/status/1279015669770706944"&gt;Read it as a Twitter thread&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Know what on earth code actually is and what it does
&lt;/h2&gt;

&lt;p&gt;If you haven't written code before, it's good to know what you'll be getting into before you start. Don't spend too much time on this step. You'll learn as you go along. But for now, I like &lt;a href="https://youtu.be/qepp8a2fDHQ"&gt;this short video!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Launch right in and take a beginner Python course
&lt;/h2&gt;

&lt;p&gt;If you know me, you'll know I love Codecademy. &lt;a href="https://www.codecademy.com/learn/learn-python"&gt;This one&lt;/a&gt; is great (and free)! Work your way through that course online so you understand the fundamentals of Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2.5: Books instead
&lt;/h3&gt;

&lt;p&gt;If you prefer books, I love &lt;a href="https://automatetheboringstuff.com/"&gt;Automate the Boring Stuff with Python&lt;/a&gt;. You can get a free PDF if you order it from the website rather than Amazon, so do that!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Download Python
&lt;/h2&gt;

&lt;p&gt;Now you've got over the first hurdle of learning Python basics, and it's time to start writing it on your own computer.&lt;/p&gt;

&lt;p&gt;It's a bit more complicated to write and run Python on your own computer than it is to do it on Codecademy. Codecademy has a special environment, but you won't have that when you have a job! You need to download Python so it can &lt;a href="https://www.computerhope.com/jargon/c/compile.htm"&gt;compile&lt;/a&gt; and run on your computer.&lt;/p&gt;

&lt;p&gt;There are lots of versions  of Python, and arguments over which one is best, but try to stay up to date. People try to argue that Python 2 is better than Python 3 but they're wrong. &lt;/p&gt;

&lt;p&gt;Download Python 3 from &lt;a href="https://www.python.org/downloads/"&gt;the website&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Get comfortable with the command line
&lt;/h2&gt;

&lt;p&gt;You'll use the command line to run your Python, so you've got to get familiar with it.&lt;/p&gt;

&lt;p&gt;It's nothing to be afraid of. It's just another way of seeing and using your files. Check out my &lt;a href="https://www.youtube.com/watch?v=Qsx_u5g60Nc&amp;amp;t=50s"&gt;YouTube video&lt;/a&gt; for an introduction. You'll feel like a hacker!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Get a text editor
&lt;/h2&gt;

&lt;p&gt;You need somewhere to write your Python code. I recommend &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt;, and honestly, so does the entire industry! &lt;/p&gt;

&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; also use an IDE like IDLE, which is similar to Codecademy's environment - everything is already set up for you. But I advise against this because you won't be using this in jobs and I think it can cause a harder learning hurdle later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Write Hello World in your text editor
&lt;/h2&gt;

&lt;p&gt;Hello World in Python is very simple and you'll have learned it in your Codecademy course. Write this code into a new file in your text editor, and save the file as &lt;code&gt;helloworld.py&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Run Hello World from your command line
&lt;/h2&gt;

&lt;p&gt;Using your skills from Step 4, navigate to the folder that your new Python file &lt;code&gt;helloworld.py&lt;/code&gt; is in. Type &lt;code&gt;python helloworld.py&lt;/code&gt; and press enter, just like any other command. (You may need to run &lt;code&gt;python3 helloworld.py&lt;/code&gt; instead). You'll see the terminal say Hello World back to you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Learn more about Python
&lt;/h2&gt;

&lt;p&gt;Now you know the basics, have it set up, you can write &amp;amp; run it, and you need to learn some more about what Python can do. &lt;/p&gt;

&lt;p&gt;I recommend &lt;a href="https://www.programiz.com/python-programming/examples/calculator"&gt;following a tutorial to build a calculator.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Play around with it
&lt;/h2&gt;

&lt;p&gt;To really advance your learning, you have to experiment with Python and play around with what it can do.&lt;/p&gt;

&lt;p&gt;I always recommend that you figure out something small you want to build, and build it. You'll need to search the internet a lot, so do that! We all do.&lt;/p&gt;

&lt;p&gt;If you can't think of any ideas, check out &lt;a href="https://www.dunebook.com/python-projects-for-beginner/"&gt;this article&lt;/a&gt;. I also wrote a tutorial for a &lt;a href="https://dev.to/catmcgeecode/get-your-first-dev-job-by-building-these-projects-2-markov-chain-lyrics-generator-1kib"&gt;pretty fun Python project that people seemed to love&lt;/a&gt; on DEV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 10: Explore documentation and libraries
&lt;/h2&gt;

&lt;p&gt;One of the best things about Python is that it has so many different libraries that can do so many awesome things. &lt;/p&gt;

&lt;p&gt;Learn how to use libraries, read their documentation, and play around with &lt;a href="https://www.ubuntupit.com/best-python-libraries-and-packages-for-beginners/"&gt;some of these ones&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Python is also used a lot for machine learning, which you might know already. I recommend finding a machine learning library and playing around with it. It will feel like the coolest thing ever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 11: Learn Flask
&lt;/h2&gt;

&lt;p&gt;Flask lets you build web apps with Python, so you can have a cool GUI to go along with your projects. &lt;a href="https://pythonspot.com/flask-web-app-with-python/"&gt;Here's a beginner tutorial that I like&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 12: Get some projects up on GitHub
&lt;/h2&gt;

&lt;p&gt;Now that you have a few projects and you're getting more comfortable using the command line, it's time to learn Git.&lt;/p&gt;

&lt;p&gt;Git is a version control system, and &lt;a href="https://www.github.com"&gt;GitHub&lt;/a&gt; lets you manage this while you show off your code to other devs &amp;amp; employers. You should have some projects from Step 10 and maybe a GUI from Step 11, now it's time to get their code on GitHub. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/what-is-git-and-how-to-use-it-c341b049ae61/"&gt;Here's an introduction to Git and GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 13: Build something you're passionate about
&lt;/h2&gt;

&lt;p&gt;What are your hobbies? What do you wish existed? Build something that you enjoy with Python &amp;amp; Flask. Employers love that kind of stuff, but more importantly - you'll have fun!&lt;/p&gt;

&lt;p&gt;Make it a bigger project than the ones you've already done and make it something you can be proud of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 14: Deploy it!
&lt;/h2&gt;

&lt;p&gt;Deploying a Flask project is easy. I recommend using &lt;a href="https://www.pythonanywhere.com/"&gt;Python Anywhere&lt;/a&gt; - it's free and insanely simple. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 15: Keep learning and building
&lt;/h2&gt;

&lt;p&gt;You're not done yet! Keep learning, keep building projects that you're passionate about, keep  getting them on GitHub deploying them. Watch old PyCon talks. Learn about best practices and implement them. &lt;/p&gt;

&lt;p&gt;This step should be FUN - if it gets too much, take a break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 16: Expand your knowledge of computer science
&lt;/h2&gt;

&lt;p&gt;To land a Python job, you'll need to have a grasp on computer science concepts. Namely - data structures &amp;amp; algorithms. You'll be asked about these in your interview. There are loads of available data structures &amp;amp; algorithms courses online, so I recommend taking some.&lt;/p&gt;

&lt;p&gt;Data structures are very simple ways to store and manage data. There are multiple ways of doing so in programming.&lt;/p&gt;

&lt;p&gt;By 'algorithms' here, I mean two things - popular algorithms (things like sorting and searching a list), and algorithm design (if I tell you I need a program that does this small thing, can you write an algorithm to do that that?)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codecademy.com/learn/linear-data-structures"&gt;Start learning from this course&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 17: Practice for the coding interview
&lt;/h2&gt;

&lt;p&gt;The best way to solve those algorithm questions is to practice them at home. They're really fun, especially in Python.&lt;/p&gt;

&lt;p&gt;I highly recommend &lt;a href="https://leetcode.com/"&gt;Leetcode&lt;/a&gt; for practicing these - they'll give you a huge list of them for free, with an online coding environment to try them in, and if you pay you can have a real person give you feedback. Try to solve them on pen &amp;amp; paper or a whiteboard first, as this is quite often what you'll be asked to do in interviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 18: Update your CV, LinkedIn, and GitHub profile
&lt;/h2&gt;

&lt;p&gt;On your CV and LinkedIn, include your personal projects and everything you worked on for them. Write about exactly what they do. Get a profile photo on your LinkedIn and GitHub. &lt;/p&gt;

&lt;p&gt;If possible, try to code a portfolio website - it can just be simple in Python &amp;amp; Flask, or if you know anything about HTML and CSS make one in that too. &lt;/p&gt;

&lt;p&gt;There are plenty of people who will do free reviews of your CV if you ask them - reach out for help!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 19: Start applying!
&lt;/h2&gt;

&lt;p&gt;You won't feel ready, but do it anyway. You miss 100% of the chances you don't take. And you'll start to learn what to show off on CVs, and what you can expect in interviews. &lt;/p&gt;

&lt;p&gt;There are plenty of other ways to land a Python position, but this is a good guide to follow if you're brand new to programming. It could take half a year or two years, depending on your dedication, passion, and pure luck.&lt;/p&gt;

&lt;p&gt;Remember to tweet about your journey and join the #100DaysOfCode community on Twitter. Keep learning and never give up!&lt;/p&gt;

</description>
      <category>python</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Get your first dev job by building these projects! #3: Instagram Feed with a Flashlight Effect</title>
      <dc:creator>Cat McGee</dc:creator>
      <pubDate>Thu, 02 Jul 2020 21:54:26 +0000</pubDate>
      <link>https://dev.to/catmcgeecode/get-your-first-dev-job-by-building-these-projects-3-instagram-feed-with-a-flashlight-effect-1d81</link>
      <guid>https://dev.to/catmcgeecode/get-your-first-dev-job-by-building-these-projects-3-instagram-feed-with-a-flashlight-effect-1d81</guid>
      <description>&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UC7khnAAAID1WQ_4gQO73Gmw"&gt;Youtube&lt;/a&gt; | &lt;a href="https://www.twitter.com/catmcgeecode"&gt;Twitter&lt;/a&gt; | &lt;a href="https://www.instagram.com/catmcgeecode"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello geeks! Today we're going to be building something super awesome. I'm so excited about this. It's an Instagram feed of any person you want (as long as their profile as public, more about that later) with a flashlight effect on top of it. Our mouse will dictate where the flashlight is. So it'll be like you're stalking them. Which is what Instagram is for anyway! It's perfect!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2xVPd9tJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qnfdatq9iqgppua4kutj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2xVPd9tJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qnfdatq9iqgppua4kutj.png" alt="Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll be building this in HTML, CSS, and plain ol' Javascript. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/catmcgee/220-tutorails-flashlight-instagram-feed"&gt;Find the code here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=LqHB2jZsgh0&amp;amp;t=6s"&gt;Watch the 2 minute 20 second tutorial here.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Make your HTML, CSS, and Javascript files
&lt;/h2&gt;

&lt;p&gt;Create your HTML file, your CSS file, and your Javascript file. Make sure to attach the CSS and the Javascript to the HTML! (I give this reminder in every tutorial because I always forget to do this.)&lt;/p&gt;

&lt;p&gt;Your HTML should look a little like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Instagram photos under a flashlight&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"actions.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Request the photos from Instagram
&lt;/h2&gt;

&lt;p&gt;The public Instagram API is incredibly easy to use, and you can get photos from any page at all!! This includes profile pages and tags. Because the API is public, we don't need to create a developer account, but it also means that we have no authentication and can't access private accounts. We only need to add &lt;code&gt;?__a=1&lt;/code&gt; at the end of the URL. I'll be using my Instagram profile link in this tutorial, but feel free to use any!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;https://www.instagram.com/catmcgeecode/?__a=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We're going to use async functions for this so that our code works asynchronously. Async functions allow the use of &lt;code&gt;await&lt;/code&gt; which does exactly what it says on the tin - we'll wait for the promise to be fulfilled or rejected (i.e. we either get a valid response from Instagram or we're told we're not allowed) before we go onto the next task. Learn more about async functions &lt;a href="https://javascript.info/async-await"&gt;here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let's use Javascript's &lt;a href="%5Bhttps://developer.mozilla.org/en-US/docs/Web/API/Fetch_API%5D(https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"&gt;&lt;code&gt;fetch&lt;/code&gt; API&lt;/a&gt;, the easiest and best way to request data. &lt;/p&gt;

&lt;p&gt;Go ahead and put this fetch statement in an async function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getInstaPictures&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.instagram.com/catmcgeecode/?__a=1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We get a lot of data from this response, so we're going to want to read it as JSON. This will make it far easier to parse through and find the photos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Let's &lt;code&gt;console.log&lt;/code&gt; (or &lt;a href="https://dev.to/catmcgeecode/javascript-5-cool-things-you-can-do-with-console-that-isn-t-console-log-45e3"&gt;&lt;code&gt;console.table()&lt;/code&gt;&lt;/a&gt;) the response and run it so we can see what we're expecting and know where to find the photos in the response. And don't forget to call the function!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getInstaPictures&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.instagram.com/catmcgeecode/?__a=1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;getInstaPictures&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now open the HTML file in your browser and have a look at the console (click Inspect to open developer tools, then click Console). You'll be able to see the response. It might look like nonsense, but spend some time looking through it and see what you can find.&lt;/p&gt;

&lt;p&gt;If you look hard enough, you'll find that the image URLs can be found by navigating through like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;jsonData → graphql → user → edge_owner_to_timeline_media → edges&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, inside &lt;code&gt;edges&lt;/code&gt; there are multiple &lt;code&gt;node&lt;/code&gt;s and each &lt;code&gt;node&lt;/code&gt; contains one &lt;code&gt;display_url&lt;/code&gt; which is what we need.&lt;/p&gt;

&lt;p&gt;So we need to iterate through each &lt;code&gt;node&lt;/code&gt; inside &lt;code&gt;edges&lt;/code&gt; and grab the display URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pictures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edge_owner_to_timeline_media&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;pictures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// here we will show the images on the website&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Still with me? (Because if so, you've come a long way.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Display the pictures on the website
&lt;/h2&gt;

&lt;p&gt;Each time we iterate through the data, we want to display the display URL as the source of an image in our HTML. &lt;/p&gt;

&lt;p&gt;So we're going to use the Javascript to create an image element (&lt;code&gt;document.createElement('img')&lt;/code&gt;), then get &lt;code&gt;node.display_url&lt;/code&gt; for each iteration and set it as the source of our new image element, and then add the image element to the HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;pictures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;img&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pictures&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display_url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That wasn't so hard was it?&lt;/p&gt;

&lt;p&gt;Put all this together, open it up in a browser, and there you have it - all the photos from someone's Instagram page! If it's still not working for you, &lt;a href="%5Bhttps://github.com/catmcgee/220-tutorails-flashlight-instagram-feed/blob/master/actions.js%5D(https://github.com/catmcgee/220-tutorails-flashlight-instagram-feed/blob/master/actions.js)"&gt;here's the source code for the Javascript.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change the styling a little bit so that they look good. In the video, I just changed the width to 350px as shown below, but you can play around with some flex-box styling to make it look real good.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;350px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Make the flashlight effect
&lt;/h2&gt;

&lt;p&gt;In this step, we're going to make it look like there is a flashlight over the Instagram photos, but we're not going to make it move just yet. We're going to make everything black except one transparent circle. So let's head to our CSS!&lt;/p&gt;

&lt;p&gt;To make everything black, we are going to make the root element (HTML) black. We're going to use a pseudo-element (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements"&gt;learn more here&lt;/a&gt;) inside &lt;code&gt;root&lt;/code&gt; and make this element cover the entire screen. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::before"&gt;content attribute along with &lt;code&gt;::before&lt;/code&gt;&lt;/a&gt; helps us achieve this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We've also set the cursor here as &lt;code&gt;none&lt;/code&gt; for added effect.&lt;/p&gt;

&lt;p&gt;Run your code. Nothing has happened.&lt;/p&gt;

&lt;p&gt;The magic happens in this next part - &lt;code&gt;radial-gradient&lt;/code&gt;. (PS: Me trying to say this in an Irish accent is really funny.)&lt;/p&gt;

&lt;p&gt;Radial gradient allows us to create a shape that has a gradient, progressing out from its origin. This shape can be a circle! It's pretty cool. So the idea here is that our background will be a radial gradient, with the primary colour being black, and our shape (a circle) will be transparent. The gradient will give it a kind of blurred appearance, which is perfect for a flashlight!&lt;/p&gt;

&lt;p&gt;Add this to your :root:before:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;radial-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nt"&gt;circle&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;vmax&lt;/span&gt; &lt;span class="nt"&gt;at&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--cursorX&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--cursorY&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; 
        &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
        &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Phew. Let's go through this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;circle&lt;/code&gt; - we set the shape as a circle. Pretty self explanatory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;10vmax&lt;/code&gt; - vmax is all about relatively. 1vmax = 1% of the screen. So our flashlight will be the size of about 10% of the screen.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;at var(--cursorX) var(--cursorY)&lt;/code&gt; - this is where things get groovy. This sets the x and y coordinates for where our circle is, but because it isn't the same (our flashlight moves with our mouse), we want to pass variables into it. We get these variables from Javascript later. &lt;/p&gt;

&lt;p&gt;first &lt;code&gt;rgba(0,0,0,0&lt;/code&gt;) - this is transparent (the final 0 is opacity) and is the colour of the inside of our image.&lt;/p&gt;

&lt;p&gt;second &lt;code&gt;rgba(0,0,0,1)&lt;/code&gt; - this is black, and it is the colour that our circle gradient will progress into (as in - the rest of the background!)&lt;/p&gt;

&lt;p&gt;Cool. If you run this code, you'll just see completely black. Can you take a guess as to why? It's because we don't have our &lt;code&gt;--cursorX&lt;/code&gt; and &lt;code&gt;--cursorY&lt;/code&gt; variables set yet. Let's just set these in the CSS so that we can make sure it's working before we move onto Javascript.&lt;/p&gt;

&lt;p&gt;Your CSS should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;--cursorX&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;50vw;&lt;/span&gt;
    &lt;span class="err"&gt;--cursorY&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;50vh;&lt;/span&gt;
    &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
        &lt;span class="nb"&gt;circle&lt;/span&gt; &lt;span class="m"&gt;10vmax&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--cursorX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--cursorY&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Make the flashlight move
&lt;/h2&gt;

&lt;p&gt;Now it's time to set our &lt;code&gt;--cursorX&lt;/code&gt; and &lt;code&gt;--cursorY&lt;/code&gt; variables to be in the position of our mouse every time we move our mouse. This is SUPER easy with Javascript. &lt;/p&gt;

&lt;p&gt;Open your Javascript file and create a function that will run when you move your mouse.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mousemove&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;e&lt;/code&gt; stands for event which has lots of different handlers, including the position of our mouse coordinates! &lt;/p&gt;

&lt;p&gt;Firstly, this function needs to read the X and Y coordinates of your mouse. This is super simple - you can just use e.&lt;code&gt;clientX&lt;/code&gt; and e.&lt;code&gt;clientY&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientX&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then we need to send these to the CSS, by setting them as properties on the styling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cursorX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cursorY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;(It's the document element, because that's the root element, which in our case is the html element. I wish they had the same name too.)&lt;/p&gt;

&lt;p&gt;All together now!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mousemove&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientX&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cursorX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cursorY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That's it. Open it up in your browser and you've got yourself a fun new way to stalk someone on Instagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now it's your turn!
&lt;/h2&gt;

&lt;p&gt;I emphasize this on every one of these tutorials. To really make the most out of this, you've got to build something on top of it (and keep searching the internet to find out how!) I'm sure you have some creative ideas, but just in case you don't, here are some:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make it work better on mobile (maybe do something cool with phone gestures...)&lt;/li&gt;
&lt;li&gt;Change the size of the circle and the background colour&lt;/li&gt;
&lt;li&gt;Get different data from instagram&lt;/li&gt;
&lt;li&gt;Use the real instagram API and authenticate (you can use the Explore page or private accounts that you follow)&lt;/li&gt;
&lt;li&gt;Let the user choose the Instagram account first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good luck! Happy coding, and make sure to comment or &lt;a href="https://twitter.com/catmcgeecode"&gt;DM me on Twitter&lt;/a&gt; when you make something cool!&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>css</category>
    </item>
  </channel>
</rss>
