<?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: Bence Szabo</title>
    <description>The latest articles on DEV Community by Bence Szabo (@finnhvman).</description>
    <link>https://dev.to/finnhvman</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%2F113241%2F4fc95c50-5553-43d4-a02b-c6c4bc4619fa.jpg</url>
      <title>DEV Community: Bence Szabo</title>
      <link>https://dev.to/finnhvman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/finnhvman"/>
    <language>en</language>
    <item>
      <title>25+ short videos on creating generative art with SVG</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Sun, 25 Jun 2023 10:55:52 +0000</pubDate>
      <link>https://dev.to/finnhvman/25-short-videos-on-creating-generative-art-with-svg-o12</link>
      <guid>https://dev.to/finnhvman/25-short-videos-on-creating-generative-art-with-svg-o12</guid>
      <description>&lt;p&gt;For the past two and half years I've been creating patterns and textures on CodePen purely with SVG to explore the capabilities of SVG Filters. I've made almost a hundred of these, so I figured why not start explaining the concepts behind each of them?&lt;/p&gt;

&lt;p&gt;Since these patterns are made with very little code (560 bytes or less), I stick to the short format in videos as well (&amp;lt;1 minute).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can check them out as &lt;a href="https://www.youtube.com/@finnhvman/shorts"&gt;YouTube Shorts&lt;/a&gt;&lt;/strong&gt;,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Or you can view them as &lt;a href="https://www.tiktok.com/@finnhvman"&gt;TikToks&lt;/a&gt; if you'd like&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's one of the latest:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/P12AheHoGeY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here are all the pens if you want to check them out: &lt;a href="https://codepen.io/collection/DRMKdB"&gt;PetitePatterns (Pure SVG)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>codenewbie</category>
      <category>learning</category>
      <category>codepen</category>
    </item>
    <item>
      <title>Asking is thriving</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Thu, 17 Dec 2020 22:33:45 +0000</pubDate>
      <link>https://dev.to/finnhvman/asking-is-thriving-45hi</link>
      <guid>https://dev.to/finnhvman/asking-is-thriving-45hi</guid>
      <description>&lt;center&gt;[🎧 Listen to the audio version of this post on Vurbl 🎧](https://vurbl.com/listen/1URDvHMzc08/)&lt;/center&gt;

&lt;p&gt;I started my career as a Java Software Engineer without any prior Java knowledge. I didn't study Computer Science at the university and I didn't do any software internship. All I knew was how to create static web pages with HTML and CSS.&lt;/p&gt;

&lt;p&gt;I became the first Java Engineer in the team and my role was to take over the development of the internal tool we inherited from another team. I had to get up to speed really fast in order to survive.&lt;/p&gt;

&lt;p&gt;The thing I couldn't get away without was asking questions. A lot. There was so much to learn about the tool, domain and Java that I never ran out of questions. I was determined, relentless, out of my comfort zone and I'm pretty sure I was annoying. In the back of my mind there was this thought that I'm asking too many times and they would start hating me, but the drive to fit in the role was stronger.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvykowqa32cxz82mpcicy.jpeg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvykowqa32cxz82mpcicy.jpeg" alt="Question marks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Though the members who built the tool always answered. However frequently I went they always gave me guidance. I guess I was lucky for having such helpful and resilient mentors, because there was a wide gap to bridge with me. In the end I came through and I have been in software for the last decade, probably thanks to all those questions.&lt;/p&gt;

&lt;p&gt;Asking questions is a pretty important thing to do in software teams (most likely in any kinds of teams). So if you are ever pondering whether you should ask a question or not, rather ask away! Okay, maybe it's not always that simple because many factors come to play. But worry not, I put together a list of tips that could help you manage these factors and make you an effective asker!&lt;/p&gt;

&lt;h1&gt;
  
  
  Tips for asking effectively
&lt;/h1&gt;

&lt;p&gt;🔍 Come prepared&lt;br&gt;
⌚️ Find the right place and right time&lt;br&gt;
😊 Be polite&lt;br&gt;
👌 Express yourself concisely&lt;br&gt;
📝 Take notes of the answer if necessary&lt;br&gt;
👋 Return the favor when asked&lt;/p&gt;
&lt;h1&gt;
  
  
  Preparing yourself
&lt;/h1&gt;

&lt;p&gt;First, try to get prepared as much as you can around the topic you are about to ask. There's a chance that you might bump into the answer. However, if you don't then you still took some time to dive deeper in the area. Presenting that you already have a level of understanding helps a lot in communication.&lt;/p&gt;

&lt;p&gt;For example let's pretend you are given a task that revolves around hypergraphs and you know nothing about them. (Let's also pretend that most knowledge of hypergraphs has been wiped off the internet.) There's an expert in the company, but before you ask you could study around the matter. In this case the best start is to learn or revisit what graphs are. For instance understand that they are made of vertices and edges, there are undirected and directed graphs, and there are unweighted and weighted graphs.&lt;/p&gt;

&lt;p&gt;The point is to gain a good base knowledge of the topic you are requesting some help about. This will save you and the person you are meaning to ask some time and reduce the friction of the interaction. Here's a visualization of a hypergraph if you were wondering how they look:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjt9ny7mvrdpbi1ujtg89.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjt9ny7mvrdpbi1ujtg89.png" alt="A hypergraph visualized"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Time and place
&lt;/h1&gt;

&lt;p&gt;A question might arise in you at any time, but you won't always say it out loud right away. We have been taught in ways when to speak up and when to stay quiet. So it's important to be aware of what situation you are in. There are several anchors to this. I'm dividing them into two groups in the following sections: the rather objective ones and the more subjective ones.&lt;/p&gt;

&lt;p&gt;It's a good idea to gauge who might be interested in the answer for your question so you ask it in front of the right audience. If you are asking questions of taxation on a global all hands of a multinational company, you are probably wasting everyone's time who doesn't tax in your country. Similarly, think of the time presumably necessary to answer your question. Avoid asking long, open-ended questions if you are short on time, for example during a stand-up. In a fully remote setup you have much less meta information on what your coworkers are occupied with, but you can resort to checking their calendars and chat statuses. So check these before you try to engage in a discussion with someone to diminish the "Why aren't they answering?" feeling.&lt;/p&gt;

&lt;p&gt;Some other circumstantial things need to be "felt out". Cultural backgrounds vary a lot, for example I remember the feeling of not being too encouraged to ask questions in the classroom. Why? Because if you asked something dumb or obvious you got shamed by the class or even the teacher. We might carry these ideas throughout our lives as golden truths, so it's good to keep in mind that we are not sitting in classrooms anymore. Another, maybe even greater part of this is that each country and region has their unwritten laws of how you should behave at the workplace. It's really hard to put your finger on these things, but try to be aware of these patterns as well.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F33bgzi5h9uhpiqaf1o9o.jpeg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F33bgzi5h9uhpiqaf1o9o.jpeg" alt="Children in school raising their hands"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Politeness
&lt;/h1&gt;

&lt;p&gt;This is a no brainer, of course being polite always helps. It's good to remind ourselves to approach our colleagues respectfully. Surely people are more likely to answer a question that's asked nicely. Furthermore, keep in mind that the person might not be available to answer your question at the moment. Understand that you may need to wait for them to come back to you, or schedule a meeting in the next few days or weeks.&lt;/p&gt;
&lt;h1&gt;
  
  
  Communicating concisely
&lt;/h1&gt;

&lt;p&gt;I already mentioned respecting other people's time earlier. Being terse is respecting the time of the person you are asking. No one wants to answer long-winded questions or verbose emails. On top of it, no one wants to pay the mental tax of figuring out the important details of a lengthy request. Phrase your questions with just the necessary information and you will save the receiver from spending a lot of mental energy. &lt;/p&gt;

&lt;p&gt;Take a look at the following fictional email.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Alice,&lt;/p&gt;

&lt;p&gt;I'm Bob, the latest member of the Hugs Team. I'm writing you  because I would like to learn about the technology you used when implemented Haha's. We are looking to integrate Hugs beside Haha's in the next quarter, so it would be really helpful if you could answered the following questions.&lt;/p&gt;

&lt;p&gt;Hugs would be something similar like Haha's, but they would represent a different emotion. (It's still a positive one, but could be used for expressing gratitude.)&lt;/p&gt;

&lt;p&gt;[some in-depth questions here]&lt;br&gt;
[...]&lt;br&gt;
[...]&lt;/p&gt;

&lt;p&gt;Thanks in advance and looking forward for your answer!&lt;/p&gt;

&lt;p&gt;Best Regards,&lt;br&gt;
&lt;em&gt;Bob Bobson&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Software Engineer&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Hugs Team&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have you noticed any unnecessary parts? I'm not saying the above email is wrong, but it could be optimized. It's more polite than necessary, burdens the reader with lot of extra information, and has some redundant pieces.&lt;/p&gt;

&lt;p&gt;Now take a look at the optimized version.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Alice,&lt;/p&gt;

&lt;p&gt;We are looking to implement a feature called Hugs that's similar to Haha's in the next quarter. We would appreciate if you could answer these questions:&lt;/p&gt;

&lt;p&gt;[some in-depth questions here]&lt;br&gt;
[...]&lt;br&gt;
[...]&lt;/p&gt;

&lt;p&gt;Many Thanks,&lt;br&gt;
&lt;em&gt;Bob Bobson&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Software Engineer&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Hugs Team&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We made the email shorter yet polite and still kept some crucial contextual information. Another commonly used medium is instant messaging like Slack. Whenever you are writing someone, it's better to write your request as a whole message and not line by line like you would speak in a real life dialogue.&lt;/p&gt;

&lt;p&gt;IRL type of messaging:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bob&lt;/strong&gt; 9:37 AM&lt;br&gt;
Hi!&lt;br&gt;
&lt;strong&gt;Alice&lt;/strong&gt; 9:41AM&lt;br&gt;
Hello&lt;br&gt;
&lt;strong&gt;Bob&lt;/strong&gt; 9:42 AM&lt;br&gt;
Can I ask you some questions?&lt;br&gt;
&lt;strong&gt;Alice&lt;/strong&gt; 9:44 AM&lt;br&gt;
Sure&lt;br&gt;
&lt;strong&gt;Bob&lt;/strong&gt; 9:45 AM&lt;br&gt;
What library did you use to implement the frontend components of Haha's?&lt;br&gt;
&lt;strong&gt;Alice&lt;/strong&gt; 9:49 AM&lt;br&gt;
We used... [Alice proceeds to explain the answer]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice how 8 minutes passed from the start until Alice received the question, and 12 minutes until Bob got an answer. Instead, Bob could have opened with something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bob&lt;/strong&gt; 9:37 AM&lt;br&gt;
Hi! Could you tell what library did you use to implement the frontend components of Haha's?&lt;br&gt;
&lt;strong&gt;Alice&lt;/strong&gt; 9:39 AM&lt;br&gt;
We used... [Alice proceeds to explain the answer]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With this type of messaging Alice received the question straight away and Bob got an answer after 2 minutes.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2qnbp09hrv9ygovu5w55.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2qnbp09hrv9ygovu5w55.jpg" alt="Everyone liked that"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Notes
&lt;/h1&gt;

&lt;p&gt;Sometimes you will get some long and complicated answers, and sometimes you will get some short answers but won't use them for a long time. Either way you might forget about the answer. Taking notes will help you with that. This seems unnecessary in a mailing for example, but another benefit of taking notes is that it forces you to actually interpret the answer. Interpreting immediately will push you to find potential holes in your understanding, thus driving you to ask more questions to get closer to what you need.&lt;/p&gt;

&lt;p&gt;All in all, try to be really attentive when you are receiving an answer so you can avoid the need of repeating your questions in the future. Moreover, from the answerer's perspective it's much better to explain something to someone who is really listening. People can easily tell that, like you can tell that the dog below is paying high attention to something.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwogbdvawox0uj88wjz0s.jpeg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwogbdvawox0uj88wjz0s.jpeg" alt="Dog watching something"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Being the one asked
&lt;/h1&gt;

&lt;p&gt;You will certainly find yourself on the other side of Q&amp;amp;A. In that case be mindful of the tips above. Try to stay approachable so people will remember that you are someone they can ask. Set up reminders for emails you want to answer later, set up reminders even for inquiries received via Slack. It takes some effort, but people will learn that you are reliable.&lt;/p&gt;

&lt;p&gt;Consider helping others when they ask as part of your job because the success of your company might just depend on it.  Be helpful and nourish a great culture that will lead you and your peers to great wins.&lt;/p&gt;
&lt;h1&gt;
  
  
  When desperate be loud
&lt;/h1&gt;

&lt;p&gt;This isn't a serious advice, rather a ridiculous last resort. If none of the above worked, try following some guerrilla marketing-esque tactics: State something blatantly wrong loud enough and in time someone will come and correct you anyways. Alternative explanation by David Khourshid:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1333404876890648577-26" src="https://platform.twitter.com/embed/Tweet.html?id=1333404876890648577"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1333404876890648577-26');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1333404876890648577&amp;amp;theme=dark"
  }



&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I hope these tips gave you a confidence boost to ask more often!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>productivity</category>
      <category>help</category>
    </item>
    <item>
      <title>Speaking in public, occasionally</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Fri, 13 Nov 2020 22:04:27 +0000</pubDate>
      <link>https://dev.to/finnhvman/speaking-in-public-occasionally-2fnp</link>
      <guid>https://dev.to/finnhvman/speaking-in-public-occasionally-2fnp</guid>
      <description>&lt;p&gt;Most people in the software industry rarely have to speak in front of a public audience. Let that audience be a meetup, the company you work at or your team. However, sometimes you find yourself being assigned to do a presentation. If some sort of anxiety is starting to kick in thinking about this task, read on, this is for you.&lt;/p&gt;

&lt;p&gt;To be honest I get anxious every time I have to do a presentation. That's because I rarely have to do one. But one time I did &lt;a href="https://www.meetup.com/Frontend-Meetup-Budapest/events/253295715/"&gt;talk at a local meetup&lt;/a&gt; for the first time ever and it went pretty well. I also did a talk at a company event and folks from overseas recalled it weeks later. So you don't have to be regular presenter to do a decent enough presentation, but these tips below might be just what you need.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tips
&lt;/h1&gt;

&lt;p&gt;🗣 Rehearse your presentation&lt;br&gt;
🤔 Reduce the amount of uhh's, umm's, ahh's, hmmm's&lt;br&gt;
🔁 Avoid repeating filler words&lt;br&gt;
🎵 Find the right amount of intonation and emphasis &lt;br&gt;
🏇 Speech tempo: try going for a medium pace but err on the side of going fast&lt;br&gt;
🧠 Know your audience's level of understanding of the subject matter&lt;br&gt;
🎓 Bring quality presentation content&lt;br&gt;
🙂 Keep a positive facial expression i.e. smile&lt;/p&gt;
&lt;h1&gt;
  
  
  Rehearse
&lt;/h1&gt;

&lt;p&gt;This is the single most important one. If you are not used to doing presentations regularly, you should probably rehearse. Think about it, most people are not good at things that they don't do regularly. You attain most masteries in your life by practicing. Great musicians play their instruments a lot, great sportspeople train a lot, great chefs cook a lot before they get good at cooking, and the list goes on. Public speaking is no different so practicing it and rehearsal should be part of it.&lt;/p&gt;

&lt;p&gt;What I do is I actually perform the presentation out loud. Don't just rehearse in your heard, speaking it out loud makes a whole lot of difference. One of the best things you can do is to present to someone who can listen to you and provide feedback: your spouse, friend, coworker, whoever is up to that. In case no one's there you can still speak in an empty room. You could even record yourself (audio/video), but beware that presenting and analyzing the recording takes double the time or more, does not worth it in my opinion.&lt;/p&gt;

&lt;p&gt;Speaking out loud helps you identify the "weak" parts of your presentation, and when you're alone you can stop and think about these on the spot. It's a pretty efficient way to "debug" and improve your presentation. The goal is to get to a point where you have already fixed, polished and memorized every important block.&lt;/p&gt;

&lt;p&gt;For me rehearsing one time is usually not enough, two times might just cut it, but really three times is the charm. More than three times is overdoing, but if the stakes are high enough it can be justified. We are talking about an hour of prep work in case of a 15 minutes long presentation. I would bet that squeezing in an hour in your day for an important presentation should be possible in usual circumstances.&lt;/p&gt;
&lt;h1&gt;
  
  
  Ummm
&lt;/h1&gt;

&lt;p&gt;Watch this video (with sound!) if the title doesn't make any sense&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/iLqH-AR9e0g"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Get it?&lt;/p&gt;

&lt;p&gt;Each one of us is guilty &lt;em&gt;ummming&lt;/em&gt; every now and then. It's kind of a natural thing to do and you don't really notice it in everyday communication. It's a different thing in a presentation context though. If you haven't rehearsed enough you might be ummming when you are figuring out what to say next. That makes your presentation slow, boring, and maybe unprofessional. So when you are rehearsing try to notice when you are doing this, and think of it as a sign to what parts need improvement or some minor rehearsal in a rehearsal.&lt;/p&gt;

&lt;h1&gt;
  
  
  Filler Words
&lt;/h1&gt;

&lt;p&gt;Slipping in filler words are a somewhat more sophisticated way of buying time. The filler word I commonly repeat is &lt;em&gt;actually&lt;/em&gt;. What does "actually" mean? It could be used to reinforce factuality or it could be used as a way to introduce contrast. However, it rarely wears these qualities when I say it. The word is just there, adding no further meaning to my presentation. This makes your presentation longer, potentially boring your audience. Pay attention to which words you are using as a filler and try skipping them altogether.&lt;/p&gt;

&lt;p&gt;Some common filler words to watch out for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;actually&lt;/li&gt;
&lt;li&gt;basically&lt;/li&gt;
&lt;li&gt;essentially&lt;/li&gt;
&lt;li&gt;like&lt;/li&gt;
&lt;li&gt;kind of/sort of&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=rdkEUBmVJrc"&gt;you know what I'm sayin'&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Intonation and Emphasis
&lt;/h1&gt;

&lt;p&gt;I'm not a native English speaker, I'm Hungarian and I noticed that tone has much more significance in spoken English than in my mother tongue. I mostly hear American English being spoken and it seems its "melody" carries a lot of information. As a non-native English speaker, I have to put extra care into learning which parts of words and which words to emphasize.&lt;/p&gt;

&lt;p&gt;Accept the fact that your audience will usually only remember just a few things from your presentation. Identify the key takeaways of your talk and put most emphasis on the words/sentences that convey them. Don't fall into the trap of emphasizing too much. If everything is emphasized then nothing stands out and this is how it looks in written form:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nSJpW0dQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/r44nikojqdsm8inty4ne.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nSJpW0dQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/r44nikojqdsm8inty4ne.jpg" alt="Book opened in the middle, every line highlighted in lime color" width="564" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Intonation is bringing your pitch up and down, for example you bring your pitch up at the end of a question. It's a natural way to convey your emotions. You should align your intonation with the content you are delivering. Spark interest with a question before introducing a new concept. Use falling intonation at the end of a segment to signal a short break. Most of the pitch manipulation should come naturally if you are really "living" your presentation. You will speak higher at happy parts and lower at sad parts. However, if you have ever been told that you sound flat, monotonous (like me) then focus a little more on your voice so you can improve it.&lt;/p&gt;

&lt;p&gt;If you are not presenting in your native language then strive to bring your best pronunciation of the language you will be speaking in. In my case that's English. While native English speakers are able to understand various different accents from around the world, non-native English speakers with a different mother tongue than mine will be having the hardest time deciphering my accent.&lt;/p&gt;

&lt;h1&gt;
  
  
  Speech tempo
&lt;/h1&gt;

&lt;p&gt;Ever watched videos on YouTube with a speed of 1.25x (even 1.5x)? We tend to consume aural (even visual?) content faster than the rate it's being produced. This tells me that most of us could speak faster than we usually do and the audience could still handle it. So if you haven't been told that you speak fast, you could probably go faster in your presentations than you would initially. But be careful, don't go as fast as &lt;a href="https://www.youtube.com/watch?v=r_0JjYUe5jo#t=190s"&gt;Eminem&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Your pace will define the length of your talk. A shorter talk allows more time for people to ask questions bringing in more interactivity. Or more time for coffee and chit-chat with your audience. I never once heard anybody saying &lt;em&gt;"I just love long presentations!"&lt;/em&gt;. So rather focus on getting your message through than filling available time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Know your audience
&lt;/h1&gt;

&lt;p&gt;Figure out your audience's familiarity with the subject matter. The bigger the audience the harder to narrow down what they all are likely familiar with. But that's okay, the generality of your presentation should be proportional to the size of your audience.&lt;/p&gt;

&lt;p&gt;For example don't assume that all people in your company know your team's product well. Contrarily, assume that your team knows their product well. Take some time in the beginning of your talk to even out the differences of familiarity within your audience with a preliminary section. This is where you introduce concepts  that are essential to understanding your presentation.&lt;/p&gt;

&lt;h1&gt;
  
  
  Presentation content
&lt;/h1&gt;

&lt;p&gt;Putting your presentation content on slides will give you a good baseline sectioning of your content. The sectioning outlines a steady rhythm to your flow. If you have to change the font size on a specific slide to fit the text, then it's probably a sign that the slide contains too much. Of course you can spend more time on key slides, but the general rule of thumb I always hear is aiming for 1 minute per slide.&lt;/p&gt;

&lt;p&gt;Another easy win is staying consistent. Use the same style system within in your slides. One or two accent colors can cover most cases. No need for fancy fonts, I generally pick a &lt;a href="https://en.wikipedia.org/wiki/Sans-serif"&gt;sans-serif&lt;/a&gt; and stick with it. You can draw custom images if you are talented and efficient enough, but do consider whether it's really worth the extra effort. You can use copyright-free images from sites like &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt; if you lack the resources to add custom images. The least you can do with stock images is to crop them to an aspect ratio that fits well within your slides.&lt;/p&gt;

&lt;p&gt;(Lots of other things could be covered here but I focused on the - in my opinion - common low hanging fruits)&lt;/p&gt;

&lt;h1&gt;
  
  
  Smile
&lt;/h1&gt;

&lt;p&gt;I don't think it's easy to keep smiling while giving a presentation at all. There are already so many things to pay attention to and consciously maintaining a smile adds to the cognitive load. On the other it would be foolish to deny the fact that smiling attracts people.&lt;/p&gt;

&lt;p&gt;Luckily, there's a way to make yourself smile even if you are not in the mood. It's the basis of the "Facial feedback hypothesis" and it's pretty simple: bite on a pencil and wait. After a few moments you will be having a better mood and smiling. The video below explains it in detail, maybe it's something worth trying right before your next presentation!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/MtV5kfH4lXs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>productivity</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Embrace the unknown</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Wed, 07 Oct 2020 17:35:51 +0000</pubDate>
      <link>https://dev.to/finnhvman/embrace-the-unknown-35an</link>
      <guid>https://dev.to/finnhvman/embrace-the-unknown-35an</guid>
      <description>&lt;p&gt;The Software Industry can be daunting: seemingly infinite amount of things to learn, hundreds and thousands of pieces of technologies, groundbreaking hardware innovations every year.&lt;/p&gt;

&lt;p&gt;It's all normal to have doubts and uncomfortable feelings when you are starting your journey in this industry. Like learning anything in life you will feel like an outsider at first. However as soon as you overcome the hardship of beginning something new, things get a bit easier. As you spend more and more time with this "something new" you will start to feel more and more comfortable. Eventually you will arrive to a state where it would be very hard to remember what it was like before you knew this "something new".&lt;/p&gt;

&lt;h1&gt;
  
  
  Learning a programming language
&lt;/h1&gt;

&lt;p&gt;So you decide to learn a programming language, let's name it &lt;em&gt;Skillhand&lt;/em&gt;. You successfully create your first &lt;a href="https://en.wikipedia.org/wiki/%22Hello,_World!%22_program" rel="noopener noreferrer"&gt;"Hello World!" program&lt;/a&gt;. Then you start writing more complex ones (FizzBuzz, TODO app, etc.), maybe you get a job and contribute small pieces to the production code. A few months pass and you don't feel so alienated by the industry anymore, it's pretty normal that you are a Software Engineer.&lt;/p&gt;

&lt;p&gt;A few years pass and you are helping some other people in Skillhand. You know that you came a long way, and you maybe even got that mid level Software Engineer title. You thrive in writing Skillhand code, and you just love your job.&lt;/p&gt;

&lt;p&gt;Another few years pass, and almost every other engineer comes to you for asking Skillhand questions. Your manager knows this and (s)he decides to promote you to a Senior Software Engineer.&lt;/p&gt;

&lt;p&gt;Since you are one of the best engineers in the team now, an orphaned project is assigned to you. "Bring it" - you think, you are pretty good in Skillhand. To your surprise though the project is written in &lt;em&gt;WisePalm&lt;/em&gt; (another fictional language).&lt;/p&gt;

&lt;h1&gt;
  
  
  Learning a programming language again?
&lt;/h1&gt;

&lt;p&gt;Remember that daunting feeling I talked about? It was a long time ago since you experienced that, and you don't ever want to feel like a newcomer and powerless. &lt;/p&gt;

&lt;p&gt;You could say that you don't want to work on this project, and it will be handed to another engineer. However, you decide against that and accept the project.&lt;/p&gt;

&lt;p&gt;In the next months you start working in WisePalm. Soon you realize it lacks a lot of things you knew about Skillhand. You start to dread this new language. You would really want to work in Skillhand, but it would take a lot of effort to rewrite the project. Your productivity and enthusiasm decreases day by day. &lt;/p&gt;

&lt;h1&gt;
  
  
  What is happening?
&lt;/h1&gt;

&lt;p&gt;Simply put, &lt;strong&gt;you are pushed out of your comfort zone&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  How can I get back?
&lt;/h1&gt;

&lt;p&gt;You can of course get back by ditching the project, but I don't think that's a wise choice. The ever-changing software industry will crush you if you don't adapt. Maybe it won't happen so quickly, it's rather a slow process which makes you miserable.&lt;/p&gt;

&lt;h1&gt;
  
  
  Overcoming the uncomfortable
&lt;/h1&gt;

&lt;p&gt;So if nothing's left to do, why not just embrace the unknown? Take a leap of faith once again and start learning. If you did this once, why wouldn't you be able to do this the second time. It is almost a zero risk undertaking.&lt;/p&gt;

&lt;p&gt;Accept that this new language probably exists and is used for a good reason. Be optimistic and focus on the bright sides, not on what's missing from it compared to what you are used to. Develop a &lt;a href="https://www.brainpickings.org/2014/01/29/carol-dweck-mindset/" rel="noopener noreferrer"&gt;Growth Mindset&lt;/a&gt; to get there faster.&lt;/p&gt;

&lt;p&gt;What will also help you is thinking in concepts rather than code. Notice how most of the time the same patterns are implemented in different languages. Recognizing these patterns will help you become proficient in any new language.&lt;/p&gt;

&lt;p&gt;Think in business, think in product, think about what actual problems you are solving with code. Your mind will open up to these things and the great picture will be much clearer. Try to describe the algorithms you implemented with natural language.&lt;/p&gt;

&lt;p&gt;Stop entrenching yourself in the old and known, and &lt;strong&gt;embrace the new and unknown&lt;/strong&gt;. I guarantee you will be happier.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fesskud6m5xkelfghn2nu.jpeg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fesskud6m5xkelfghn2nu.jpeg" alt="Feeling empowered"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is what escaping the comfort zone can feel like&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
      <category>motivation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Clean Coding React - Props</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Wed, 20 May 2020 20:55:22 +0000</pubDate>
      <link>https://dev.to/finnhvman/clean-coding-react-props-2cf8</link>
      <guid>https://dev.to/finnhvman/clean-coding-react-props-2cf8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://cvuorinen.net/2014/04/what-is-clean-code-and-why-should-you-care/#what-is-clean-code"&gt;Clean code is code that is easy to understand and easy to change.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you are developing a React application in TypeScript, you most likely come across the problem of defining the type of the &lt;code&gt;props&lt;/code&gt; of a component. Now this isn't something that's hard to solve, on the contrary: it can be solved in many ways! The problem comes with "many ways".&lt;/p&gt;

&lt;p&gt;In my few months of working with React in TypeScript I came to the conclusion to use the following pattern illustrated by a made-up component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Size&lt;/span&gt;
  &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Variant&lt;/span&gt;
  &lt;span class="nx"&gt;thirdProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ThirdProperty&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;MadeUpCompo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;thirdProperty&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* implementation of component */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why do I use this pattern?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The declaration of the &lt;code&gt;Props&lt;/code&gt; interface is always before the component. I find this cleaner than declaring the type of props inline which can become quite cluttered after a few properties.&lt;/li&gt;
&lt;li&gt;I always use the name &lt;code&gt;Props&lt;/code&gt; for the interface so I never have to think for even a second about its name. One other pattern I see would be naming it &lt;code&gt;MadeUpCompoProps&lt;/code&gt; but that's repetitive, longer, and I don't think it enhances clarity any more.&lt;/li&gt;
&lt;li&gt;Props are always destructured so you just use the &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;variant&lt;/code&gt;, etc. identifiers, instead of writing something like &lt;code&gt;props.size&lt;/code&gt;, &lt;code&gt;props.variant&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;Props are typed, I catch errors compilation time. I avoid using &lt;em&gt;any&lt;/em&gt; for "typing" props&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One last thing I thought about is whether the Props should be an interface or type alias. At this point I don't think it matters much, but here is a well-fitting article connected to this: &lt;a href="https://link.medium.com/9JXCvJEyv6"&gt;Type aliases vs. interfaces in TypeScript-based React apps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think? Do you find this pattern useful?&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>cleancode</category>
      <category>tips</category>
    </item>
    <item>
      <title>Building a side project in 100 days</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Sun, 01 Mar 2020 21:21:10 +0000</pubDate>
      <link>https://dev.to/finnhvman/building-a-side-project-in-100-days-4pfg</link>
      <guid>https://dev.to/finnhvman/building-a-side-project-in-100-days-4pfg</guid>
      <description>&lt;p&gt;Side projects are a good way to enhance your programming skills and broaden your experience. You can learn a ton of things with usually no restrictions on what language, IDE, technology, etc. to use. I just launched my new side project: &lt;a href="https://hypevizz.com"&gt;hypevizz.com&lt;/a&gt;, a data visualization blog built on Firebase, and I would like to share some pieces of it.&lt;/p&gt;

&lt;h1&gt;
  
  
  The idea, name &amp;amp; logo 💡
&lt;/h1&gt;

&lt;p&gt;Some time ago I had this idea of building a service that visualizes data gathered from the music industry. However, this seemed like a massive undertaking for me so I pivoted this idea to create a non-specialized data visualization blog. This is a much more attainable goal and allows much more freedom in terms of topic.&lt;/p&gt;

&lt;p&gt;Once I settled with the idea I had to come up with a name. When looking for a name I try to figure out one that's not already taken from the .com top-level domain. A good place to check this is the domain finder of any .com domain registrar, I used &lt;a href="https://godaddy.com"&gt;godaddy.com&lt;/a&gt;. Another thing I did was verifying whether the username "hypevizz" was taken on Instagram, Twitter, or Facebook (luckily it wasn't on either).&lt;/p&gt;

&lt;p&gt;Next, I created the logo. I rarely create logos, but when I do I try to make the best of it. In my opinion a logo has to be very simple and distinguishable so I just went with a special font and the name itself (see the cover image). I skipped creating a custom graphic, icon, or symbol because I'm just not skilled enough to do so. I simply used the first letter "h" from the logo as the favicon and profile picture on social media.&lt;/p&gt;

&lt;h1&gt;
  
  
  The technology 🔥
&lt;/h1&gt;

&lt;p&gt;Since the primary focus of this project is not earning money (yet?), I try to minimize the cost of it. Hosting a website or a web service is rarely free, or when it is free it comes with limitations. I found that the &lt;a href="https://firebase.google.com/pricing"&gt;Firebase Spark Plan&lt;/a&gt; suits my needs: it is free with no time limitation, but with some data transfer and/or request per day or month type of limitations. When starting out a new service or blog you wouldn't expect hundreds of thousands of requests per day so it's perfect in the early phase.&lt;/p&gt;

&lt;p&gt;Blog-like websites can be (and probably should be) very static. I decided that the posts/articles will be static HTML pages, but the home page that kind of serves as a dashboard will be a Single Page Application. I generated a React App with &lt;a href="https://create-react-app.dev"&gt;Create React App&lt;/a&gt; for the SPA part, then created some templates and npm scripts for drafting/publishing/updating posts. &lt;a href="https://firebase.google.com/products/hosting"&gt;Firebase Hosting&lt;/a&gt; serves the SPA, posts, and any additional media (mostly images), and a &lt;a href="https://firebase.google.com/products/firestore"&gt;Firestore&lt;/a&gt; database is the "glue" between the SPA and posts. &lt;/p&gt;

&lt;p&gt;The npm scripts are used to render posts, update RSS/sitemap/database and deploy to hosting. They are written in TypeScript and executed by &lt;a href="https://github.com/TypeStrong/ts-node"&gt;ts-node&lt;/a&gt;. The posts are basically pure HTML, CSS, and JS. Of course there are some common primitives like the header fragment, styling, and some utility functions. The post content resides in GitHub along with the source code. &lt;/p&gt;

&lt;h1&gt;
  
  
  Visualizations 📈
&lt;/h1&gt;

&lt;p&gt;I built a custom "player" for the visualizations, you can see it in the &lt;a href="https://hypevizz.com/posts/teamtrees-donations#bubbles"&gt;first post&lt;/a&gt;. It's keyboard-enabled and has three buttons. The first button is a Play/Pause button (Space) that pauses the visualization. The second button (c) is used to capture and save the current frame as an image. The third button is the Full screen button (f, or double-click) which does exactly what you think it does.&lt;/p&gt;

&lt;p&gt;To create the visualizations themselves &lt;a href="https://d3js.org/"&gt;D3.js&lt;/a&gt; is one of the go-to choices. I heard about D3 a lot of times throughout the last few of years, but I never really understood what it was. With this project I finally figured out what it is and how it works. Sites like &lt;a href="https://www.d3-graph-gallery.com"&gt;d3-graph-gallery.com&lt;/a&gt;, &lt;a href="https://bl.ocks.org"&gt;bl.ocks.org&lt;/a&gt;, &lt;a href="https://observablehq.com"&gt;observablehq.com&lt;/a&gt; helped tremendously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XN_IiVV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/waavdo3bl1swq0745yi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XN_IiVV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/waavdo3bl1swq0745yi9.png" alt="TeamTrees donations" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;
This is a capture of the &lt;a href="https://hypevizz.com/posts/teamtrees-donations#bubbles"&gt;first visualization&lt;/a&gt; I built with D3



&lt;h1&gt;
  
  
  Creating Content ✍️
&lt;/h1&gt;

&lt;p&gt;All these pieces provide a platform on which I will try to produce content with a reasonable cadence. The good thing is I'm already full of topics to cover, the bad thing is that I don't always have the time. It took me a hundred days to get here from the first commit, I hope it won't be so long until the next post.&lt;/p&gt;

&lt;p&gt;I've set up the &lt;a href="https://twitter.com/hypevizz"&gt;hypevizz Twitter&lt;/a&gt; and &lt;a href="https://instagram.com/hypevizz"&gt;Instagram accounts&lt;/a&gt; to keep contact with people. I also maintain an &lt;a href="https://hypevizz.com/rss.xml"&gt;RSS feed&lt;/a&gt; for people using RSS. The Facebook account is still under the works.&lt;/p&gt;

&lt;p&gt;I will be creating some more content on different platforms to get a better reach for the blog. Of course one of them is going to be &lt;a href="https://dev.to/finnhvman"&gt;my dev.to&lt;/a&gt; where I will be sharing (in a shorter form) some tips and ideas I used. &lt;a href="https://codepen.io/finnhvman"&gt;My CodePen&lt;/a&gt; is going to be the place where I will be putting the code snippets and demos. I will be using some other ones on a more ad-hoc basis.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final thoughts 😌
&lt;/h1&gt;

&lt;p&gt;I hope to be as enthusiastic about this project as I have been in the past few months. In theory the easy part should come now, but we'll see 😄. Let us know in the comments if this writing has inspired you to create something new!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you for reading this far!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>d3</category>
      <category>firebase</category>
      <category>dataviz</category>
      <category>hypevizz</category>
    </item>
    <item>
      <title>Grayscale Color Palette with Equal Contrast Ratios</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Thu, 23 Jan 2020 20:41:49 +0000</pubDate>
      <link>https://dev.to/finnhvman/grayscale-color-palette-with-equal-contrast-ratios-2pgl</link>
      <guid>https://dev.to/finnhvman/grayscale-color-palette-with-equal-contrast-ratios-2pgl</guid>
      <description>&lt;p&gt;Ever needed a grayscale color palette for different surfaces, shadows, or states in your web app? I created a little utility to generate such palette.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: &lt;em&gt;Scroll to the end to get the list of colors&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  But what's the big deal?
&lt;/h1&gt;

&lt;p&gt;I'm glad you asked. I could have just simply created a palette that started from black &lt;code&gt;#000000&lt;/code&gt;, and stepped through to white &lt;code&gt;#ffffff&lt;/code&gt; with let's say increments of &lt;code&gt;#080808&lt;/code&gt;. So something like (remember hexadecimal):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#080808&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#101010&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#181818&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#ffffff&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this feels a bit off, mostly because we humans don't perceive colors as hexadecimal representations. Qualities like &lt;strong&gt;hue&lt;/strong&gt;, &lt;strong&gt;saturation&lt;/strong&gt; and &lt;strong&gt;lightness&lt;/strong&gt; are much better interpretations of human color perception. When you compare two different gray colors against each other they will only differ in lightness. A common method to measure difference in lightness is calculating the &lt;strong&gt;contrast ratio&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  So how is color contrast ratio calculated?
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio" rel="noopener noreferrer"&gt;WCAG contrast ratio definition&lt;/a&gt; says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;contrast ratio&lt;/strong&gt;&lt;br&gt;
(L1 + 0.05) / (L2 + 0.05), where&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L1 is the relative luminance of the lighter of the colors, and&lt;/li&gt;
&lt;li&gt;L2 is the relative luminance of the darker of the colors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE&lt;br&gt;
Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Actually, I already wrote an in-depth article about calculating the color contrast ratio, see below if you're interested:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/finnhvman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F113241%2F4fc95c50-5553-43d4-a02b-c6c4bc4619fa.jpg" alt="finnhvman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/finnhvman/which-colors-look-good-on-black-and-white-2pe6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Which Colors Look Good on Black and White?&lt;/h2&gt;
      &lt;h3&gt;Bence Szabo ・ Mar 21 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#a11y&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#design&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;All in all, the method to calculate the contrast ratio was already given.&lt;/p&gt;

&lt;h1&gt;
  
  
  Creating an equi-contrast color palette
&lt;/h1&gt;

&lt;p&gt;My goal was to create a gray color palette on which each color against its adjacent color has the same contrast ratio. To generate such palette I only needed to step through the gray RGB space and store the colors that had enough contrast against the previous palette color. I picked the default contrast value of &lt;code&gt;1.10362&lt;/code&gt; (that is roughly &lt;code&gt;1.1&lt;/code&gt;) so that the palette spans from &lt;code&gt;#000000&lt;/code&gt; to exactly &lt;code&gt;#ffffff&lt;/code&gt; and consists of 30 individual colors. You can see the result in the embedded CodePen below, but feel free to play around by opening &lt;a href="https://codepen.io/finnhvman/pen/QWwYYwJ" rel="noopener noreferrer"&gt;the Pen in Edit mode&lt;/a&gt; and modifying the value of &lt;code&gt;CONTRAST_RATIO&lt;/code&gt; in the first line of JS 🙂&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/finnhvman/embed/QWwYYwJ?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

</description>
      <category>css</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The UX of Shopping Clothes</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Thu, 14 Nov 2019 23:00:03 +0000</pubDate>
      <link>https://dev.to/finnhvman/the-ux-of-shopping-clothes-1l7o</link>
      <guid>https://dev.to/finnhvman/the-ux-of-shopping-clothes-1l7o</guid>
      <description>&lt;p&gt;I don't always shop clothes, but when I do some things just grind my gears. Based on a true story.&lt;/p&gt;

&lt;h1&gt;
  
  
  Arrangement
&lt;/h1&gt;

&lt;p&gt;Maybe it's just me, but I usually don't get how things are arranged. Say, I want to buy some T-shirts, and maybe I'm interested in &lt;em&gt;all&lt;/em&gt; T-shirts a shop is offering. Well good luck finding all your options in an arbitrary labyrinth of fabric. It's not like you go through some aisles and that's it, store layouts are pretty random (&lt;a href="https://www.google.com/maps/place/Budapest/" rel="noopener noreferrer"&gt;at least where I live&lt;/a&gt;). I think it would make much more sense to designate a part of a store for T-shirts, another for pants/trousers/jeans, another for underwear, and so on. Okay, they probably organize stuff by theme, but then I'd argue if it's the optimal way to go about it for most customers. &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%2Fcdn.trendhunterstatic.com%2Fthumbs%2Fobsessive-compulsive.jpeg" 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%2Fcdn.trendhunterstatic.com%2Fthumbs%2Fobsessive-compulsive.jpeg" alt="Fruit salad ingredients arranged in order"&gt;&lt;/a&gt;&lt;/p&gt;
Perfectly arranged



&lt;h1&gt;
  
  
  Fit
&lt;/h1&gt;

&lt;p&gt;Once you figured out which part(s) of your body to cover, you look for &lt;strong&gt;style&lt;/strong&gt; and &lt;strong&gt;print&lt;/strong&gt;. You look for these qualities because these are the ones you can see almost immediately. For the &lt;strong&gt;size&lt;/strong&gt; and &lt;strong&gt;fit&lt;/strong&gt; you have to check the tag(s). I gotta give props to stores regarding size, because the clothes are usually sorted by size. Fit is a different topic though. I know about regular, slim, skinny, long, and muscle fits. A lot of the times I see something I like and get a little excited, but then I check the tag and realize it's not the type of fit I wear. It's such a disheartening feeling that could be avoided by sorting clothes by fit as well.&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%2Fs7JtV.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%2Fs7JtV.jpg" alt="Cat fitting into glass bowl"&gt;&lt;/a&gt;&lt;/p&gt;
This fits nicely



&lt;h1&gt;
  
  
  Fitting Room
&lt;/h1&gt;

&lt;p&gt;Fitting rooms are my pet peeve. First of all there's never enough of them, you always have to wait your line to get one. Finally you get a room and the first thing you do is to mess around with those damn curtains. The worst ones are heavy, tall, and mounted on tracks that don't reach end-to-end, so you have a pretty hard time properly covering the opening of the room. The curtains should be light, just a little taller than a tall person, and mounted on longer tracks than the opening. An even better setup is when there are actual doors instead of curtains.&lt;br&gt;
Inside the fitting you want to hang the clothes you will try, but the hangers sometimes look like scrap metal incapable of holding three or more items. Alternatively, you could use the seating for that, well only if it's not just some tiny circular stool. A bench-like seating is always better, allowing more space and even the opportunity to try how the clothes feel like while sitting!&lt;br&gt;
Lighting is overdone. It's so much sometimes that you get to see a new face of you in the mirror. Shadows are cast by parts of your body that you don't want them to. It's just an unnatural experience and it's accompanied by the unpleasant warmth coming from the heat of the bulbs.&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/http%3A%2F%2Fwww.urban75.org%2Fblog%2Fwp-content%2Fuploads%2F2014%2F08%2Fbeam-light-london-ww1-1.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/http%3A%2F%2Fwww.urban75.org%2Fblog%2Fwp-content%2Fuploads%2F2014%2F08%2Fbeam-light-london-ww1-1.jpg" alt="sky beam"&gt;&lt;/a&gt;&lt;/p&gt;
That's a pretty strong light



&lt;h1&gt;
  
  
  Checkout
&lt;/h1&gt;

&lt;p&gt;In the end you get weary, but if you are lucky you manage to buy something you like. Congrats! Just hope it won't shrink after the first wash, because then you're back to square one. Let's call this the Circle of &lt;del&gt;Life&lt;/del&gt; Shopping.&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/http%3A%2F%2Fak3.picdn.net%2Fshutterstock%2Fvideos%2F1768541%2Fthumb%2F1.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/http%3A%2F%2Fak3.picdn.net%2Fshutterstock%2Fvideos%2F1768541%2Fthumb%2F1.jpg" alt="circle of shopping carts"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>shopping</category>
      <category>clothes</category>
      <category>rant</category>
    </item>
    <item>
      <title>Which Colors Look Good on Black and White?</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Thu, 21 Mar 2019 19:05:00 +0000</pubDate>
      <link>https://dev.to/finnhvman/which-colors-look-good-on-black-and-white-2pe6</link>
      <guid>https://dev.to/finnhvman/which-colors-look-good-on-black-and-white-2pe6</guid>
      <description>&lt;p&gt;Imagine you have to find a color that looks good both on black and white. By "looking good" I mean conforming at least &lt;a href="https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html"&gt;WCAG AA Contrast (Minimum)&lt;/a&gt;, which is a ratio of &lt;strong&gt;4.5:1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: &lt;em&gt;Scroll to the end to get the list of colors&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  So how is color contrast ratio calculated?
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio"&gt;WCAG contrast ratio definition&lt;/a&gt; says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;contrast ratio&lt;/strong&gt;&lt;br&gt;
(L1 + 0.05) / (L2 + 0.05), where&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L1 is the relative luminance of the lighter of the colors, and&lt;/li&gt;
&lt;li&gt;L2 is the relative luminance of the darker of the colors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE&lt;br&gt;
Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple math, right? You take two values and divide them.&lt;/p&gt;

&lt;h1&gt;
  
  
  But how is the relative luminance calculated??
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/TR/WCAG21/#dfn-relative-luminance"&gt;WCAG relative luminance definition&lt;/a&gt; says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;relative luminance&lt;/strong&gt;&lt;br&gt;
the relative brightness of any point in a colorspace, normalized to 0 for darkest black and 1 for lightest white&lt;/p&gt;

&lt;p&gt;NOTE&lt;br&gt;
For the sRGB colorspace, the relative luminance of a color is defined as L = 0.2126 * &lt;strong&gt;R&lt;/strong&gt; + 0.7152 * &lt;strong&gt;G&lt;/strong&gt; + 0.0722 * &lt;strong&gt;B&lt;/strong&gt; where &lt;strong&gt;R&lt;/strong&gt;, &lt;strong&gt;G&lt;/strong&gt; and &lt;strong&gt;B&lt;/strong&gt; are defined as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if RsRGB &amp;lt;= 0.03928 then &lt;strong&gt;R&lt;/strong&gt; = RsRGB/12.92 else &lt;strong&gt;R&lt;/strong&gt; = ((RsRGB+0.055)/1.055) ^ 2.4&lt;/li&gt;
&lt;li&gt;if GsRGB &amp;lt;= 0.03928 then &lt;strong&gt;G&lt;/strong&gt; = GsRGB/12.92 else &lt;strong&gt;G&lt;/strong&gt; = ((GsRGB+0.055)/1.055) ^ 2.4&lt;/li&gt;
&lt;li&gt;if BsRGB &amp;lt;= 0.03928 then &lt;strong&gt;B&lt;/strong&gt; = BsRGB/12.92 else &lt;strong&gt;B&lt;/strong&gt; = ((BsRGB+0.055)/1.055) ^ 2.4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and RsRGB, GsRGB, and BsRGB are defined as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RsRGB = R8bit/255&lt;/li&gt;
&lt;li&gt;GsRGB = G8bit/255&lt;/li&gt;
&lt;li&gt;BsRGB = B8bit/255&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't get bamboozled by the equations, it's still simple math! The last three lines are just about normalizing the color channels by dividing them with &lt;strong&gt;255&lt;/strong&gt;, here are some examples: &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;th&gt;R8bit
&lt;/th&gt;
&lt;th&gt;G8bit
&lt;/th&gt;
&lt;th&gt;B8bit
&lt;/th&gt;
&lt;th&gt;-&amp;gt;&lt;/th&gt;
&lt;th&gt;RsRGB
&lt;/th&gt;
&lt;th&gt;GsRGB
&lt;/th&gt;
&lt;th&gt;BsRGB
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Black&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;White&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Red&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purple&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;0.502&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.502&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;165&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.647&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then getting the &lt;strong&gt;R&lt;/strong&gt;, &lt;strong&gt;G&lt;/strong&gt;, and &lt;strong&gt;B&lt;/strong&gt; values is done by a simple division (divide by 12.92) if the normalized value is less than or equal to 0.03928, or applying the exponential formula above if the normalized value is greater than 0.03928. The final step is summing these three values with different weights.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's calculate!
&lt;/h1&gt;

&lt;p&gt;It's not hard to see that the relative luminance of black is 0, and white is 1. Calculating their contrast ratio gives (1 + 0.05) / (0 + 0.05) = 21. We can calculate any other color's contrast ratio against black and white by the following (where "c" is the color's relative luminance):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;against black: (c + 0.05) / (0 + 0.05)&lt;/li&gt;
&lt;li&gt;against white: (1 + 0.05) / (c + 0.05)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have a requirement of a contrast ratio of at least 4.5, therefore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;against black: (c + 0.05) / (0 + 0.05) &amp;gt;= 4.5&lt;/li&gt;
&lt;li&gt;against white: (1 + 0.05) / (c + 0.05) &amp;gt;= 4.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solving the two inequalities give:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;against black: c &amp;gt;= 0.175&lt;/li&gt;
&lt;li&gt;against white: 0.1833 &amp;gt;= c&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the end we get the relative luminance requirement of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0.175 &amp;lt;= c &amp;lt;= 0.1833&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The list of colors
&lt;/h1&gt;

&lt;p&gt;Finally, I created a pen which iterates through the RGB color space, from black to white with increments of 0x11 = 17 per channel. Iterating through &lt;strong&gt;all&lt;/strong&gt; of the colors would take some time and CPU, and I'm sure listing ~300k colors wouldn't be practical. So the pen iterates through the colors which can be described with 3-digit hexa notation, and lists 76 colors that matches our requirements. &lt;a href="https://codepen.io/finnhvman/full/bZQLgR"&gt;Use them wisely ;)&lt;/a&gt;&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/finnhvman/embed/bZQLgR?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>css</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Two days ago I released Matter</title>
      <dc:creator>Bence Szabo</dc:creator>
      <pubDate>Tue, 05 Mar 2019 23:07:01 +0000</pubDate>
      <link>https://dev.to/finnhvman/two-days-ago-i-released-matter-53fe</link>
      <guid>https://dev.to/finnhvman/two-days-ago-i-released-matter-53fe</guid>
      <description>&lt;p&gt;This was the first release of &lt;a href="https://github.com/finnhvman/matter"&gt;Matter&lt;/a&gt;. I never did open source before, so this was my first release ever in the scene.&lt;/p&gt;

&lt;p&gt;This project goes back to around half a year before, when I needed just a few nice looking components for a &lt;a href="https://codepen.io/finnhvman/full/oPwXRa"&gt;CodePen demo&lt;/a&gt;. Buttons, Slider, Switch, Textfield, some of the usual components of a web page. I'm a big fan of Material Design, and I couldn't find any lean and simple way to integrate these Material components into my Pen. I thought it shouldn't be hard to implement them.&lt;/p&gt;

&lt;p&gt;I'm a big fan of &lt;a href="https://codepen.io/finnhvman/full/xJRMJp"&gt;Pure&lt;/a&gt; &lt;a href="https://codepen.io/finnhvman/full/xXpzVN"&gt;CSS&lt;/a&gt; &lt;a href="https://codepen.io/finnhvman/full/gzmMaa"&gt;Stuff&lt;/a&gt; too. I wondered if these components could be done without JavaScript. It turns out you can go a &lt;a href="https://codepen.io/finnhvman/full/zMKagM"&gt;long way&lt;/a&gt; with this restriction. Not full blown functionality though, but enough for a lot of use-cases.&lt;/p&gt;

&lt;p&gt;CodePen has a nice community, I received some good feedback for the Material components. Yet, the Pens were still kind of impractical. I mean, I spent quite some time to perfect each of them, and there was no easy way for others to benefit from them. Next step: open source.&lt;/p&gt;

&lt;p&gt;In the last two months I have been figuring out solutions for the typical problems (I guess) of an open source project. The most time I spent on was testing, and I think it's one of the best things of the project! (But what do you test in CSS? - you might ask, well that's another story). Anyways, Matter has a &lt;a href="https://github.com/finnhvman/matter/releases/tag/0.1.0"&gt;0.1.0 release&lt;/a&gt;. It ain't much, but it's honest work:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pjGXpa3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jr9fylg9twj1w8qo142q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pjGXpa3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jr9fylg9twj1w8qo142q.png" alt="13 Matter Components" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can imagine a number of directions this project would go, I wonder which one will it be...&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>beginners</category>
      <category>material</category>
    </item>
  </channel>
</rss>
