<?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: bretzawilski</title>
    <description>The latest articles on DEV Community by bretzawilski (@bretzawilski).</description>
    <link>https://dev.to/bretzawilski</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%2F616355%2F0c76ef91-c4dc-46ee-9c7e-28af44b0420f.jpeg</url>
      <title>DEV Community: bretzawilski</title>
      <link>https://dev.to/bretzawilski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bretzawilski"/>
    <language>en</language>
    <item>
      <title>npm install make-me-a-dev</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Mon, 14 Jun 2021 17:32:15 +0000</pubDate>
      <link>https://dev.to/bretzawilski/npm-install-make-me-a-dev-k55</link>
      <guid>https://dev.to/bretzawilski/npm-install-make-me-a-dev-k55</guid>
      <description>&lt;p&gt;Where does originality come from? If (like me) you're starting out in web development, you may be wondering how some developers seem to come up with brilliant ideas on a regular basis. Or maybe you're just wondering how you can create some dazzling and creative design to show off your skills. &lt;/p&gt;

&lt;p&gt;The good news? It isn't magic. The bad news? There also isn't a magical shortcut to get you from beginner to expert in a few short months. Or even years.&lt;/p&gt;

&lt;p&gt;But there is a concept that help you understand the creative process as you work to develop your skillset. After all, creativity—as much as we like to romanticize it—isn't a divine gift bestowed upon a select few.&lt;/p&gt;

&lt;p&gt;Creativity is remix. And modern development itself is based upon this powerful concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything is Remix
&lt;/h2&gt;

&lt;p&gt;Remix is the process of creating something new by copying, transforming, and combining ideas. Kirby Ferguson has a fantastic video essay, &lt;a href="https://everythingisaremix.info"&gt;Everything is a Remix&lt;/a&gt;, that traces how all of our greatest thoughts, inventions, and works of art are the result of bringing together the ideas of others. &lt;/p&gt;

&lt;p&gt;To go back even further, the Ancient Greek and Roman academies were often situated around &lt;em&gt;imitatio&lt;/em&gt;: copying the works of great orators to learn their tricks. In other words—and stop me if you've heard this before—you have to learn the rules before you can break them. &lt;/p&gt;

&lt;p&gt;So, fellow novice developer, if you're feeling anxious and un-creative as you slog through your fifteenth tutorial project, try to remember: we all have to learn to copy before we learn to innovate. Even the best artists and authors, at one point, were creating derivative work based on what they loved. Think of it as building a vocabulary in the domain of your (eventual) expertise.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Have to Build a Lot of To Do Apps Before...
&lt;/h2&gt;

&lt;p&gt;At the beginning we copy so that we can learn the principles at the basis of programming. Without understanding the use of variables or the convenience of looping, we might be able to identify the kinds of applications we want to develop, but we'll have no idea how their pieces fit together. &lt;/p&gt;

&lt;p&gt;Resources like &lt;a href="https://freecodecamp.org"&gt;freecodecamp.org&lt;/a&gt; are great for this kind of practice, letting us first learn the basics and then begin applying them to simulated projects. Similarly, &lt;a href="https://frontendmentor.io"&gt;Frontend Mentor&lt;/a&gt; and &lt;a href="https://www.frontendpractice.com/"&gt;Frontend Practice&lt;/a&gt; are based around literally copying other designs to learn principles of web development. &lt;/p&gt;

&lt;p&gt;Rather than being dismissive of this stage, it's important to consider the usefulness of learning to emulate others' designs and coding styles. It isn't meant to be a stopping point, but in order to learn the foundations of the field, we need to be familiar with what others have made. Not to simply copy it, but to understand what we like and dislike about particular strategies.&lt;/p&gt;

&lt;p&gt;Once we can accurately copy the work of those who inspire us, we can push further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it Your Own
&lt;/h2&gt;

&lt;p&gt;On an episode of the &lt;a href="https://www.codenewbie.org/podcast"&gt;Code Newbie&lt;/a&gt;, Danny Thompson shared this advice for overcoming some of the pitfalls of early development life. After following a tutorial and making some component or web application, go back and make it again. &lt;/p&gt;

&lt;p&gt;But instead of following the same step-by-step process, change the focus slightly and attempt to work from memory. Change the topic, or the product being "sold." There's no shame in going back to the resource to figure something out, but we begin to pick up speed in development when we engage with the second component of remix: transforming materials.&lt;/p&gt;

&lt;p&gt;And we reach this stage much sooner than we think. Taking up the &lt;a href="https://javascript30.com"&gt;30 Days of JavaScript&lt;/a&gt; challenge, it's easy to follow along as Wes Bos guides you through the varied projects. The first challenge involves creating a virtual drum kit that plays sounds based on key-presses. It's an interesting look at data-attributes on html tags and the &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; tag itself. &lt;/p&gt;

&lt;p&gt;But it's also a laboratory. After completing the tutorial and seeing how the pieces fit together, I decided that I wanted to go back and make another personalized version. I thought about making a soundboard that would play audio clips from a podcast I helped create. But instead of being solely based on key-presses, I wanted the sound clips to activate with mouse clicks as well so that the app could function on mobile devices.&lt;/p&gt;

&lt;p&gt;While there are some fantastic resources that encourage this kind of transformation, the trick here is that you can't follow a recipe. You have to think about how you can change something you've copied. The good news is that this doesn't have to be a massive, polished change. Even doing something as simple as altering the color scheme or the CSS styling paradigm (using CSS Grid instead of Flexbox, or trying out SASS) has massive value. &lt;/p&gt;

&lt;p&gt;In short, no one's judging you at this stage. Break the things you code and marvel at how weird you can make them. Doing this kind of work starts to produce a massive result in terms of our feelings toward coding. It's empowering to follow a tutorial and make something that's functional. But when you start putting your own spin on a design, it really becomes your own.&lt;/p&gt;

&lt;p&gt;Yet, while transforming the things we love is powerful, it's still not the true height of remix.&lt;/p&gt;

&lt;h2&gt;
  
  
  npm init -heckYeah
&lt;/h2&gt;

&lt;p&gt;What is &lt;a href="https://notion.so"&gt;Notion&lt;/a&gt;? Well, it's a web application that lets us take notes. Oh, but it also kind of works like Excel and you can build spreadsheets. But those spreadsheets can also be displayed as Kanban boards to help with productivity. And you can also publish note pages or databases directly to the web as live websites. And it lets us work collaboratively with others!&lt;/p&gt;

&lt;p&gt;In short, Notion is a combination of a lot of other tools and technologies that already existed. Much of the power of Notion as a tool comes from the way it has packaged together all of these different affordances. And if you examine whatever might be your favorite application, you're going to see something similar. &lt;/p&gt;

&lt;p&gt;Many of the most innovative ideas out there come from smashing together other ideas that we love. There's no magic conjuring involved, but that also doesn't lessen the impact of these designs. At some point, we make the transition from copying and transforming materials to &lt;strong&gt;combining&lt;/strong&gt; them together. We make mashups. &lt;/p&gt;

&lt;p&gt;And this is where we see how programming is so firmly tied to remix. At some point, if you're pursuing JavaScript as a development language, you're going to come across references to &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;, (or ruby's gems or python's pip) and articles are going to start discussing packages and package managers. &lt;/p&gt;

&lt;p&gt;Because coding is so complex and involves solving often-similar problems, the development community itself has oriented itself around tools that help us do what we need to do with as little friction as possible. Do you want to convert markdown text files into html? There's a package for that. Do you want to automatically resize and serve responsive images on your site? There's a package for that too.&lt;/p&gt;

&lt;p&gt;npm is actually the inspiration for this article, because while it took me a bit of time to wrap my head around the utility of npm, its elegance struck like an epiphany. Because npm is the epitome of remix. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm init -y&lt;/code&gt; is a beautiful command. It leaves behind a simple &lt;code&gt;package.json&lt;/code&gt; file in its wake, but that file is almost magical. It lets you add, update, and remove entire worlds of functionality to your code by typing the the name of a package and the version you want to include. Run &lt;code&gt;npm install&lt;/code&gt; in the directory and it takes care of the rest. &lt;/p&gt;

&lt;p&gt;It's a perfect little map of all the people and ideas that came before you to help you build the application you want to create. Even if you're a solo-developer, you're not alone if you're working with npm and packages, because you're in conversation with the ideas of so many other developers. &lt;/p&gt;

&lt;h2&gt;
  
  
  Learning and Remixing
&lt;/h2&gt;

&lt;p&gt;It can be intimidating starting out in programming, especially if you've come to it from another path or career. There's a lot of technical knowledge to master and the landscape changes rapidly. But you don't have to go it alone. In fact, I don't think you could if you tried. Development is about taking ideas and combining them together. It's communication, and it defies all the stereotypes of the coder as loner sitting in isolation staring at a screen. &lt;/p&gt;

&lt;p&gt;Yeah, there's a lot of looking at screens, but there's also a lot of community baked into it. I've been fortunate to stumble into some literal coding communities that have been welcoming and insightful. And while I'm still doing a heck of a lot of copying, being able to look ahead and see the kind of work that developers do makes me excited to push forward and start transforming my code and combining it with the amazing work of other fantastic devs. &lt;/p&gt;

&lt;p&gt;So if you're feeling lost or a little overwhelmed, remember that everyone starts with the basics. Everyone copies. And everything really &lt;em&gt;is&lt;/em&gt; a remix.&lt;/p&gt;

</description>
      <category>npm</category>
      <category>devjournal</category>
      <category>codenewbie</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Dev Journey Thoughts - Starting a Coding MeetUp</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Thu, 10 Jun 2021 19:58:06 +0000</pubDate>
      <link>https://dev.to/bretzawilski/dev-journey-thoughts-starting-a-coding-meetup-3a81</link>
      <guid>https://dev.to/bretzawilski/dev-journey-thoughts-starting-a-coding-meetup-3a81</guid>
      <description>&lt;p&gt;I've been craving community, and a way to connect with others who are on the journey to becoming a developer. Despite living in a large city, it's been hard to find an already-existing group that seems to hit all the targets. So, I thought I'd create a MeetUp to try and spark a new community.&lt;/p&gt;

&lt;p&gt;Peer group formation is a pretty important concept in education, usually tossed around in connection with college cohorts and first-year experience programs. But, the need for cohorts doesn't end at university. One of the reason platforms like freecodecamp, The Odin Project, and countless others draw in such large participation is an inherent need to feel some sense of belongingness. &lt;/p&gt;

&lt;p&gt;Yet it can be hard to find the right balance. In my journey, I've joined a few existing spaces that are devoted to the topic of development and coding. They're fantastic in their own way, but it can be overwhelming to step into spaces where hundreds (sometimes thousands) of other people are already in the middle of discussions. &lt;/p&gt;

&lt;p&gt;So it's not uncommon to split into smaller groups or pairs or teams. But it's easy to forget about the power of local communities, and that's where MeetUps can excel. Right now, we're still in the midst of pandemic restrictions, but eventually the thought of getting together in person to chat over frameworks and other coding topics is incredibly appealing.&lt;/p&gt;

&lt;p&gt;I think fostering a sense of shared ownership is a critical part of making something like this succeed. Rather than focusing around an individual or a mentor, there's a great deal of power in working together to solve problems. And that's the kind of community I want.&lt;/p&gt;

&lt;p&gt;I tried the "guru-led" variety in the past and it turned into a rather sobering affair. Listening to soapbox ideological rants and essentially arguing for participants to ignore other perspectives or documents. It felt solipsistic. And the amount of fear and anxiety I saw in the faces of other attendees was too much to handle. &lt;/p&gt;

&lt;p&gt;As part of my journey in general, I'd like to chronicle a bit of the formation of this group. It's small and has yet to meet for the first time, but I'm thinking about resources that can be added.&lt;/p&gt;

&lt;p&gt;Key among those is a website, but one that is focused on providing members with a space to learn git and practice pull requests by adding themselves to a members list and linking to github portfolios and/or personal sites. Links to resources that are particularly helpful. Nothing out of the ordinary, honestly, but just a way of staying active.&lt;/p&gt;

&lt;p&gt;Monthly challenges would also ground some practice and provide a way to collect member examples and compare different code strategies. Essentially, I'm going to be trying to think and find activities that foster engagement and allow the participants to have a stake in the ownership of the group.&lt;/p&gt;

&lt;p&gt;Let's see what happens.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>codenewbie</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Making a Project My Own</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Mon, 07 Jun 2021 18:49:39 +0000</pubDate>
      <link>https://dev.to/bretzawilski/making-a-project-my-own-nkg</link>
      <guid>https://dev.to/bretzawilski/making-a-project-my-own-nkg</guid>
      <description>&lt;p&gt;I would't say that I'm trapped in tutorial hell, but I am working through a series of resources that are teaching me more of the ins and outs of web development. Today was a #Javascript30 day, and I decided to make the first proejct in the series—the drum kit—my own.&lt;/p&gt;

&lt;p&gt;For the past four years, I've been making a podcast with a friend. We chat about movies in the Criterion Correction, and we usually have a good time. It's a small program, but we enjoy it. As I was looking at the #Javascript30 drum kit, I couldn't help but wonder: how can I make this my own? How can I extend it beyond its original functionality?&lt;/p&gt;

&lt;p&gt;Well, first I decided to get rid of the deprecated keyCode property so I'd stop seeing strikethrough lines in my code. It was a really simple fix. Turns out the property.key works quite well and...just uses letters. &lt;/p&gt;

&lt;p&gt;I also decided that I wanted to change up the content. Instead of a drum kit, I wanted to make a soundboard with some clips from our podcast. This was a really easy substitution—the hardest part was locating audio clips in our old files, and that was just a matter of taking the time to do it. &lt;/p&gt;

&lt;p&gt;The second tricky (though not very) element was making the app work on mobile devices. See, the original uses &lt;code&gt;keydown&lt;/code&gt; events to trigger the sounds and the visual transitions on the page. But on a mobile device, there isn't a keyboard to use. Instead, I needed to make a good old-fashioned click event on each of the triggers for the sounds.&lt;/p&gt;

&lt;p&gt;The biggest takeaway I need to investigate is &lt;code&gt;document.getElementsByClassName&lt;/code&gt; versus &lt;code&gt;document.querySelectorAll&lt;/code&gt;. I thought they'd be equivalent, but the &lt;code&gt;forEach&lt;/code&gt; command that works so well on querySelector...does not work on getElementsByClass. So, that will be something I plan to investigate further.&lt;/p&gt;

&lt;p&gt;Additionally, I need to better understand the options for the css &lt;code&gt;transform&lt;/code&gt; property. I first made changes to the size of objects individually, but seeing the use of &lt;code&gt;transform: scale(1.1);&lt;/code&gt; was enlightening. &lt;/p&gt;

&lt;p&gt;So, another day of coding down, and a fun project as the result. &lt;/p&gt;

&lt;p&gt;If you're interested in boosting your own JavaScript skills, check out the entire &lt;a href="https://javascript30.com/"&gt;30 Days of JavaScript&lt;/a&gt; challenge.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>100daysofcode</category>
      <category>devjournal</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Lessons from the IDE — Justify, Align, and Decisions</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Wed, 02 Jun 2021 21:22:34 +0000</pubDate>
      <link>https://dev.to/bretzawilski/lessons-from-the-ide-justify-align-and-decisions-52k7</link>
      <guid>https://dev.to/bretzawilski/lessons-from-the-ide-justify-align-and-decisions-52k7</guid>
      <description>&lt;p&gt;&lt;em&gt;Welcome to Lessons from the IDE, a recap of successes, failures, and glitches (so, so many glitches) from my daily coding. This article was originally posted at &lt;a href="https://bret.design/blog/2021/06/02/lessons-02/" rel="noopener noreferrer"&gt;bret.design&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Another day, another battle with CSS. I finished the Frontend Mentor "Stats Preview Card Component" today, and you can see my solution &lt;a href="https://stats-preview-card-pi.vercel.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. I'm going to try to take this concept and re-work it for my own site with another image and some separate text. &lt;/p&gt;

&lt;p&gt;In the classes I teach, I often talk about writing as remix. Originality isn't a matter of thinking of what no one else has considered. It's really about combining ideas that haven't been brought together before. In that way, creativity doesn't have to be some mystical talent that and individual possesses or doesn't possess. It's a process of gathering a library of sources to mix together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://everythingisaremix.info" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668493274%2FI8xAnorS9.png" alt="Title card from the online documentary, Everything is a Remix"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coding is the same, in more ways than I thought. &lt;code&gt;package.json&lt;/code&gt; files are testaments to the power of remix, letting us pull from the work of so many other creators. Even working in isolation as a solo coder, it's impossible to escape working with others' ideas, and that's a huge benefit.&lt;/p&gt;

&lt;p&gt;As a novice developer, I often have to remind myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My job isn't to invent what has never existed before&lt;/li&gt;
&lt;li&gt;I'm building to learn and to repurpose what I learn&lt;/li&gt;
&lt;li&gt;Tutorials are always stage one; stage two is making it your own&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Blast from the past
&lt;/h2&gt;

&lt;p&gt;I also decided to take a look at two websites that I made back in the dark ages of the web. They're both hosted by Tripod, which through some demonic power has managed to stay online despite the collapse of its contemporary peer, Geocities. Both sites make use of framesets and I also managed to make link image-buttons that change from monochrome to color renders when you hover on them. &lt;/p&gt;

&lt;p&gt;I need to look at the code, because I'm fairly certain CSS wasn't a part of that feature, and I sure didn't know javascript back then. Unless I pulled a copy/paste job in the code. However, it did make me want to do two things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need to archive those sites, scrape the code, and put them up on github; maybe I'll even check the Wayback Machine to see if I can grab different renditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I mean, these sites are prime archaeological relics of the past, from a time when Netscape Navigator was the browser of choice and the web itself felt very...gray. No, really, my predominant memory of the internet in those days were gray pages in a gray browser. That and webcrawler.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need to rebuild those sites without the frames, and with a little better design, but in the spirit of the originals. Perhaps I can think of it as communing with my teenage self.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alignment glitches
&lt;/h2&gt;

&lt;p&gt;Of course, the day wouldn't be complete without a maddening CSS issue with a simple solution. In my attempts to center content in divs, I spent quite a long time trying to get my text to center itself using all of the CSS Grid tactics I could think of, referring to several cheatsheets along the way.&lt;/p&gt;

&lt;p&gt;But, in my haste to make use of Grid, I forgot that &lt;code&gt;text-align&lt;/code&gt; is a property in CSS. Whenever I tried to do a &lt;code&gt;justify-items: center;&lt;/code&gt; call, content that fit on a single line would behave nicely and move to the middle of the div. But if the content extended across several lines, it would become justified but the last line would hang to the left. &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.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668549938%2FLrpYmr-4M.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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668549938%2FLrpYmr-4M.png" alt="An excerpt of css code featuring the text-align property"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At long last, I remembered that I could simpel call &lt;code&gt;text-align: center;&lt;/code&gt; and be done with it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Choices and Dilemmas
&lt;/h2&gt;

&lt;p&gt;Finally, I found myself running into a debate that I'd avoided up to this point. Since coming back to code, I decided that I would angle myself towards React development, since it's the most popular frontend JS framework. However, in these early stages, I won't lie; some of the tutorials I've watched practice dark magic that I can't yet understand in terms of passing props and managing state. &lt;/p&gt;

&lt;p&gt;So I looked at some introductory resources on Vue and...it started making a little more sense. I'm not deep into React right now, but so many of the resources I passively encounter on daily.dev focus on React. Yet, if Vue makes more sense, should I start learning that framework instead? &lt;/p&gt;

&lt;p&gt;In the end, I decided to do the only rational thing: double down on vanilla JS basics and delay the decision. &lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons to Remember
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Remember the basics and don't aim for the flashiest solutions: you'll forget something like &lt;code&gt;text-align: center;&lt;/code&gt; and kick yourself once you fix the code.&lt;/li&gt;
&lt;li&gt;There is too much to learn.&lt;/li&gt;
&lt;li&gt;But that's a good thing, because it means there's always a direction to pursue and growth mindsets are real.&lt;/li&gt;
&lt;li&gt;Community is important, even if it starts by talking to yourself in blog posts.&lt;/li&gt;
&lt;/ol&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.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668590628%2FaCwDQ6-Yg.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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668590628%2FaCwDQ6-Yg.png" alt="RevealJS logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thanks for taking the time to read through &lt;em&gt;Lessons from the IDE&lt;/em&gt;. Tomorrow I'm hoping to do something slightly different and write up a comparison of two prominent developer-facing slide-deck applications: RevealJS and sli.dev.&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.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668620236%2FHzAg8AJlN.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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1622668620236%2FHzAg8AJlN.png" alt="A screenshot of a markdown file used by sli.dev"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which one will become the markdown-driven slide-deck builder of my dreams?&lt;/p&gt;

</description>
      <category>css</category>
      <category>codenewbie</category>
      <category>devjournal</category>
      <category>100daysofcode</category>
    </item>
    <item>
      <title>Lessons from the IDE — :root, Boxes, and SRCSETs</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Tue, 01 Jun 2021 20:46:49 +0000</pubDate>
      <link>https://dev.to/bretzawilski/lessons-from-the-ide-root-boxes-and-srcsets-3l9n</link>
      <guid>https://dev.to/bretzawilski/lessons-from-the-ide-root-boxes-and-srcsets-3l9n</guid>
      <description>&lt;p&gt;&lt;em&gt;Welcome to Lessons from the IDE, a recap of successes, failures, and glitches (so, so many glitches) from my daily coding. This article was originally posted at &lt;a href="https://bret.design/blog/2021/06/01/lessons-01/"&gt;bret.design&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Today I started working through one of the free challenges from &lt;a href="https://www.frontendmentor.io/"&gt;Frontend Mentor&lt;/a&gt;, the "Stats preview card component." It was listed as a "newbie" difficulty, so I thought as a newbie, it wouldn't cause too much of a problem. Spoiler: I was wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Py8dvdN9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpsrjbpxfmkaitka3my2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Py8dvdN9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpsrjbpxfmkaitka3my2.jpg" alt="A mock-up of the Frontend Mentor Stats Preview Card Component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That said, the value of any project is locating gaps of knowledge. In this case, I found quite a few gaps in my understanding of CSS and divs. I've been trying to strengthen my Grid and Flexbox skills over the past few days, so setting up the initial card wasn't too painful. &lt;/p&gt;

&lt;p&gt;Oh, and I almost forgot. Today marks my first entry for &lt;a href="https://twitter.com/hashtag/100daysofcode"&gt;#100DaysOfCode&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get to the :root of it
&lt;/h2&gt;

&lt;p&gt;First, I decided to capture some of the colors of the design through css variables. The &lt;code&gt;:root&lt;/code&gt; pseudo-class was one of the first quality of life improvements I encountered when I started coding again. Rather than having to update a whole list of color hexcodes or property values for each element (I hadn't tried SASS or another pre-processor in the past), global variables let you declare properties that you can slot into nearly any selector. &lt;/p&gt;

&lt;p&gt;I've seen them most commonly used for setting up a color palette (or dark/light mode color options), but if there's a particular margin or padding setup you plan to use across various elements, you can also declare those in a variable. &lt;/p&gt;

&lt;p&gt;They look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="py"&gt;--secondary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;173&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;94&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;215&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--accent-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f72585&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--card-padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="m"&gt;2rem&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;After establishing the variables, they can be dropped elsewhere in the stylesheet, which is incredibly helpful if you decide to change your colors later on. If you apply the &lt;code&gt;--accent-color&lt;/code&gt; in three different places, then you don't need to hunt down each of those instances in the code. Change the global variable and your work is done.&lt;/p&gt;

&lt;p&gt;Here's a look at variables in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;main&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&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;--secondary-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;padding&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;--card-padding&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&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;--accent-color&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;
  
  
  Quick Headache Prevention
&lt;/h2&gt;

&lt;p&gt;I don't know much, but I know box sizing used to be a huge pain. Setting the size of divs meant having to calculate not just image content, but also padding, borders, and margins. Thankfully there's a way to change the box-sizing model that means you only have to worry about the content size and padding, which makes life a lot easier.&lt;/p&gt;

&lt;p&gt;Many programmers suffered for this fix, so I give my obligatory thanks here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;*,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&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;This did seem to make aligning the two main divs of the project simpler. But, as I said before, glitches are part of life. And not all content plays nicely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boxes and boxes of fun
&lt;/h2&gt;

&lt;p&gt;Another issue I came across was having an image fill a div. For the main image of the card project, I had to find a way to use CSS to add a tint to a black-and-white photograph. At first I tried to use the &lt;code&gt;background&lt;/code&gt; property of a div to set the photo as the background image for the &lt;code&gt;div&lt;/code&gt; and put a semi-transparent fill over it. &lt;/p&gt;

&lt;p&gt;This works, but you can't just apply a color for some reason. It needs to be a linear gradient, even if you're looking for a solid fill color...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#image-container&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;linear-gradient&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;--image-tint-color&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;--image-tint-color&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="sx"&gt;url(images/image-header-desktop.jpg)&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;But, there's a bit of an unintended side-effect. If you're not interested in responsive fluid resizing, you can set the &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; of the div and you'll be all set. However, you need to use fixed values like pixels, or else the div registers as empty and doesn't render properly. &lt;/p&gt;

&lt;p&gt;I saw a solution for this involving setting the &lt;code&gt;padding&lt;/code&gt; of the div to a percentage representing the ratio of the background-image, but I also decided to see if there was another way to tint an image.&lt;/p&gt;

&lt;p&gt;Yes, there is. &lt;/p&gt;

&lt;p&gt;You can plug in an old fashioned image into a div container and set the container's background color to appear in front of the container's items through the &lt;code&gt;object-fit: cover&lt;/code&gt; property. From there, use an &lt;code&gt;rgba&lt;/code&gt; color assignment to select a semi-transparent fill color and you've got a basic image tint. Voila.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;  &lt;span class="nc"&gt;.image-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&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;165&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;62&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.536&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;object-fit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cover&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&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;However, I did run into one final issue that took a bit of Googling to fix. The image in my div wasn't exactly aligned with the boundaries of the div itself. I learned that an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag automatically displayed in-line has a phantom line-height value attached to it. So the fix for my pixel-imperfect alignment was to set my image to display as a block. &lt;/p&gt;

&lt;p&gt;I'm noting this because I can see it causing me a lot of stress in the future if I were to forget this simple fact.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&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;
  
  
  Curse you gods of responsive images...
&lt;/h2&gt;

&lt;p&gt;Of course we all know this isn't the end of images, and I'm still grappling with the syntax of the following code. Basically, I knew that srcsets were a thing from a prior project, but I still didn't understand how to set them up without simultaneously displaying them overlapping on the page. &lt;/p&gt;

&lt;p&gt;I know, this stinks of newbie problems, but I spent longer than I'd care to admit looking at several different templates to get responsive images to work and serve different images to different screen resolutions. I'm not even sure my current solution is optimized as it stands, but this did the trick for my project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;source&lt;/span&gt;
    &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"images/image-header-desktop.jpg"&lt;/span&gt;
    &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(min-width:1000px)"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt;
    &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"images/image-header-mobile.jpg"&lt;/span&gt;
    &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(max-width: 999px)"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"images/image-header-desktop.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Please, just work!"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two &lt;code&gt;source&lt;/code&gt; tags list the images that are part of the &lt;code&gt;srcset&lt;/code&gt; and the &lt;code&gt;media&lt;/code&gt; property determines how those images are displayed. In this instance, the larger of my images, &lt;code&gt;image-header-desktop.jpg&lt;/code&gt; will display any time a user's browser resolution is greater than 1000 pixels.&lt;/p&gt;

&lt;p&gt;If the user's browser resolution is lower than 1000 pixels, the second &lt;code&gt;source&lt;/code&gt; tag sets it so that they will be served the smaller &lt;code&gt;image-header-mobile.jpg&lt;/code&gt; instead. &lt;/p&gt;

&lt;p&gt;I'm going to have to investigate this further, but it worked for my current purposes, so I'm going to call this a tentative success on the day. I'm somewhat spoiled because I let the &lt;code&gt;eleventy-img&lt;/code&gt; package take care of this on my personal site rather than having to handcode it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons to Remember
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you run into alignment problems, try implementing the &lt;code&gt;box-sizing: border box&lt;/code&gt; fix.&lt;/li&gt;
&lt;li&gt;Don't assume the first solution you find is the best solution. I tried working with image-tinting the background-image of a div for a long time before discovering the &lt;code&gt;object-fit&lt;/code&gt; approach for a standard &lt;code&gt;&amp;lt;img /&amp;gt;&lt;/code&gt; tag. &lt;/li&gt;
&lt;li&gt;Images need to be displayed as a &lt;code&gt;block&lt;/code&gt; in order to correctly fill a div!&lt;/li&gt;
&lt;li&gt;srcsets are powerful, but I'd be lying if I said I fully understood the intricacies of the syntax since I believe I'm missing a few properties here...&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I've still got some work left to do on the challenge project, but it's nearing its completion. I'll either wrap up work on it tonight or tomorrow, but I'll be sure to keep track of any additional bugs I encounter. There's bound to be more than few.&lt;/p&gt;

&lt;p&gt;Thanks for reading and I'll be back tomorrow with more Lessons from the IDE.&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>100daysofcode</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Using Zettelkasten and Obsidian to Learn More Effectively</title>
      <dc:creator>bretzawilski</dc:creator>
      <pubDate>Mon, 31 May 2021 14:35:19 +0000</pubDate>
      <link>https://dev.to/bretzawilski/using-zettelkasten-and-obsidian-to-learn-more-effectively-277e</link>
      <guid>https://dev.to/bretzawilski/using-zettelkasten-and-obsidian-to-learn-more-effectively-277e</guid>
      <description>&lt;p&gt;Personal knowledge management (PKM) is on the rise, with popular applications like &lt;a href="https://roamresearch.com/" rel="noopener noreferrer"&gt;Roam Research&lt;/a&gt;, &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian MD&lt;/a&gt;, and &lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt; leading the charge into a new kind of note-taking. Except, it's not exactly new. Well, not all of it, at least.&lt;/p&gt;

&lt;p&gt;If you've ever kept track of valuable information through a bullet journal, word document, or an online task manager, then congratulations: you've had some experience with personal knowledge management. The gist of it is that we're surrounded by information, and without a system to handle that information, it's easy to become overwhelmed. &lt;/p&gt;

&lt;p&gt;Writers like Nicholas Carr have warned us about the dangers of easy access to information. If it's so easy and instantaneous to Google what we want to know, then why bother committing that information to memory? Carr's argument is something I resisted for a long time, but his main assertion—that the tools we use to think shape how we think—is hard to ignore. &lt;/p&gt;

&lt;p&gt;And if there's one thing we know about the tech industry, if there's a problem to be solved, then numerous products will likely be developed to solve the issue. In this case, one of the answers is straightforward. &lt;/p&gt;

&lt;p&gt;All we need are index cards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter The Zettelkasten
&lt;/h2&gt;

&lt;p&gt;Well, maybe we need more than just index cards. We need a system to make those index cards work together. &lt;/p&gt;

&lt;p&gt;Niklas Luhmann was a German sociologist who developed such a system—a catalogue containing nearly 90,000 individual notes on index cards that were organized in a loose structure that Luhmann described as a "web-like" system. The system was ingenious for its results as much as for its simplicity. &lt;/p&gt;

&lt;p&gt;Zettelkasten simply means "slip box," as in a box in which you could file slips of paper. Index cards, in this case. Those index cards would be labeled with an arbitrary designation. And because the information had to fit on a single index card, the content of those cards was brief by necessity. &lt;/p&gt;

&lt;p&gt;Let's say I wanted to take notes on Javascript. Well, the first card I make might be &lt;code&gt;1. JavaScript&lt;/code&gt;. On that card, I might write a brief definition of JavaScript, noting that it is a dynamically typed language used for web development. &lt;/p&gt;

&lt;p&gt;Then, let's say I want to provide some more information on closure in JavaScript. Card &lt;code&gt;1A. Closure&lt;/code&gt; might be next. But let's say I deviate to thinking about CSS. Card &lt;code&gt;2. CSS&lt;/code&gt; would be added to my slip box after &lt;code&gt;1A. Closure&lt;/code&gt;. Now I go back and want to talk about JavaScript classes, so I create card &lt;code&gt;1B. Javascript Classes&lt;/code&gt;. But then I decide to go further into Closure and discuss the concept of "the backpack", so I create card &lt;code&gt;1A1. The Backpack&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Don't worry if you're not following. The main idea is to create a system that is not rigidly structured. If I later decide to expand upon any of these notes, I can simply add one to the box with a more specific designation. Card &lt;code&gt;1A1a. Closure Execution Contexts&lt;/code&gt; can be added regardless how "far down" I go into closure. &lt;/p&gt;

&lt;p&gt;In many ways, this replicates some of the strengths of the card catalog systems that dominated library search and retrieval systems before digital cataloging was a thing. And in addition to the relational positioning of notes, it was also possible to link related notes by adding a list of "relevant cards" at the bottom of any entry. In that case, if I create card &lt;code&gt;30A. Python Classes&lt;/code&gt; and want to link to class similarities in JavaScript, I can just write the reference &lt;code&gt;1B&lt;/code&gt; at the bottom of that card to know to look elsewhere.&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%2Fuploads%2Farticles%2F9scyo33hv0h3unxoyl3g.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%2Fuploads%2Farticles%2F9scyo33hv0h3unxoyl3g.jpeg" alt="A photo of a notebook with the label 'Write Ideas' on its front cover"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@aaronburden?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Aaron Burden&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/notebook?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sonke Ahrens provides a fully fleshed out description of Zettelkasten in his book, which I joke is the best book with the most boring title: &lt;em&gt;&lt;a href="https://www.amazon.com/How-Take-Smart-Notes-Nonfiction/dp/1542866502" rel="noopener noreferrer"&gt;How to Write Smart Notes&lt;/a&gt;&lt;/em&gt;. Luhmann used this system, largely before widespread adoption of the internet, to compose over 500 scholarly publications, including numerous books, over the course of his life. He would often describe his thinking process as a matter of engaging in conversation with his Zettelkasten (Schmidt, 2018, "Niklas Luhmann’s Card Index: The Fabrication of Serendipity").&lt;/p&gt;

&lt;p&gt;Of course, a wealth of applications have attempted to take this method and rework it for the digital era. Wikis in themselves are a similar undertaking in theory, as they are intensely interlinked documents containing information. With a Zettelkasten, though, the process becomes more individualized, and a large portion of the work of making a Zettelkasten comes from finding and taking note of the linkages between ideas.&lt;/p&gt;

&lt;p&gt;For that reason, I like to think of Zettelkasten as serendipity machines—tools that help us connect ideas that we wouldn't have otherwise linked if we weren't actively trying to do so. While &lt;a href="https://roamresearch.com/" rel="noopener noreferrer"&gt;Roam Research&lt;/a&gt; wasn't the first application to work with this kind of linking structure, it exploded on the scene during its early days of 2019, finding a market of individuals desperate to get their thoughts in order, and while it didn't model itself strictly on the Zettelkasten, its goal was to create intricately linked notes that could be connected together and traced for inspiration. &lt;/p&gt;

&lt;p&gt;The general mindset behind tools like &lt;a href="https://roamresearch.com/" rel="noopener noreferrer"&gt;Roam&lt;/a&gt; and &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt; is that if we make the attempt to connect our thoughts together, we'll profit immensely from the rich intersections of ideas. And the beauty of these tools is that they aren't prescriptive in how they function. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;, in particular, lets users decide how to organize their thoughts. If you like folders, you can create folders. But if you want to have a "flat" system like the Zettelkasten, where notes are placed near other similar notes and linked to other relevant ideas, then that's possible too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obsidian and Learning to Code
&lt;/h2&gt;

&lt;p&gt;This is all a long introduction to get to a somewhat simple point. Tools like Obsidian—or Roam, or Notion, or Zettlr—can help us be more productive in our thinking and our learning. It assists us in using the knowledge we come across so that we don't forget what we've learned quite so quickly, and it serves as a relational database for our brains in which we can quickly retrieve data and trace previous thought processes. &lt;/p&gt;

&lt;p&gt;While I've been using Obsidian for quite a few months to organize my research for writing projects, I just began to use it for learning to code better. At first, it felt a little counterproductive, since there are some fantastic resoures like the Mozilla MDN out there to grasp the basics of web development.&lt;/p&gt;

&lt;p&gt;But the benefit of a Zettelkasten-like system is that we have to synthesize the ideas we encounter in our own words. We have to ensure they make sense to us, and that means while I might grasp a really important concept about the &lt;code&gt;array.prototype.map()&lt;/code&gt; method from the Mozilla MDN, I'm going to remember it better if I can write out my understanding of how &lt;code&gt;.map()&lt;/code&gt; works.&lt;/p&gt;

&lt;p&gt;Another aspect of modern PKM tools is backlinking. Again, drawing on the features of a wiki, platforms like &lt;a href="https://roamresearch.com/" rel="noopener noreferrer"&gt;Roam&lt;/a&gt;, &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;, and even &lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt; have enabled automatic backlinking. That means, if you create a digital link from one note to an earlier note, the program will recognize that connection and display it on the earlier note without any additional work on your part. Arguably, the idea is to render very clear the connections between ideas with as little friction as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obsidian and Writing
&lt;/h2&gt;

&lt;p&gt;Even better, Obsidian makes use of markdown files—plaintext documents that are readable from essentially any computer device made in the past 40+ years. They'll never go obsolete, and you'll never have to worry about support for them disappearing. Additionally, there are a variety of tools that let users take Markdown files and output them as Microsoft Word or Adobe PDF documents (among a variety of other document types). &lt;/p&gt;

&lt;p&gt;In fact, this blog post was written in Markdown within Obsidian. In the end, though, the software is less important than the engagement. As Niklas Luhmann proved, you can create a highly effective personal knowledge management system without touching any digital tools. The important aspect is trying to build connections across concepts and putting complex ideas into your own words for better understanding. &lt;/p&gt;

&lt;p&gt;In the end, I've found a lot of benefits to building out my own digital Zettelkasten in Obsidian, and I'll be curious to see how it helps me better understand the world of development. But, if you're interested in learning new concepts more effectively, then I'd encourage you to check out one of the tools listed in this post. &lt;/p&gt;

&lt;p&gt;A lot of guru-esque figures have appeared in the personal knowledge management arena, but once you reach past some of the marketing bluster, there's a lot to be gained by taking up a note-taking system to help organize your thoughts.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>zettelkasten</category>
      <category>notes</category>
    </item>
  </channel>
</rss>
