mirror of
https://github.com/LukeHagar/unicorn-utterances.git
synced 2025-12-06 04:21:55 +00:00
Fix content issues (#938)
This PR fixes common content issues with our site
This commit is contained in:
@@ -101,7 +101,7 @@ SDK_INSTALL_LOCATION\extras\google\Android_Emulator_Hypervisor_Driver
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
> If you like having this macOS-like preview pane of files, you can find it in the OneCommander application. We covered this app in [our "Ultimate Windows Development Environment Guide" article](posts/ultimate-windows-development-environment-guide/#Paid)
|
> If you like having this macOS-like preview pane of files, you can find it in the OneCommander application. We covered this app in [our "Ultimate Windows Development Environment Guide" article](/posts/ultimate-windows-development-environment-guide/#Paid)
|
||||||
|
|
||||||
Once you have the path located, you'll want to run the `silent_installer.bat` inside of an elevated shell. I did this by pressing <kbd>Win</kbd> + <kbd>X</kbd> and pressing **"Windows PowerShell (Admin)"**. Once that was opened, I copied the path to the PowerShell window via `cd` and ran the installer.
|
Once you have the path located, you'll want to run the `silent_installer.bat` inside of an elevated shell. I did this by pressing <kbd>Win</kbd> + <kbd>X</kbd> and pressing **"Windows PowerShell (Admin)"**. Once that was opened, I copied the path to the PowerShell window via `cd` and ran the installer.
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export class App {}
|
|||||||
bootstrapApplication(App);
|
bootstrapApplication(App);
|
||||||
```
|
```
|
||||||
|
|
||||||
When rendering this app, we get the following output in [the DOM](https://unicorn-utterances.com/posts/understanding-the-dom):
|
When rendering this app, we get the following output in [the DOM](/posts/understanding-the-dom):
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<my-app>
|
<my-app>
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ function renderComponent(hostLView: LView, componentHostIdx: number) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
This function, very generally, accesses a component's `View` ([a concept I've written about before, core to Angular's internal reference to HTML elements](https://unicorn-utterances.com/posts/angular-templates-start-to-source#View-Containers)) and renders it using Angular's `renderView` function.
|
This function, very generally, accesses a component's `View` ([a concept I've written about before, core to Angular's internal reference to HTML elements](/posts/angular-templates-start-to-source#View-Containers)) and renders it using Angular's `renderView` function.
|
||||||
|
|
||||||
[Let's look in said `renderView` function](https://github.com/angular/angular/blob/a6849f27af129588091f635c6ae7a326241344fc/packages/core/src/render3/instructions/shared.ts#LL286-L300C6):
|
[Let's look in said `renderView` function](https://github.com/angular/angular/blob/a6849f27af129588091f635c6ae7a326241344fc/packages/core/src/render3/instructions/shared.ts#LL286-L300C6):
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ It's going to be a long article, so please feel free to take breaks, grab a drin
|
|||||||
|
|
||||||
Sound like a fun time? Let's goooo! 🏃🌈
|
Sound like a fun time? Let's goooo! 🏃🌈
|
||||||
|
|
||||||
> The contents of this post was also presented in a talk under the same name. You can [find the slides here](./slides.pptx) or a live recording of that talk given by the post's author [on our YouTube channel](https://www.youtube.com/watch?v=7AilTMFPxqQ).
|
> The contents of this post was also presented in a talk under the same name. You can [find the slides here](/content/blog/angular-templates-start-to-source/slides.pptx) or a live recording of that talk given by the post's author [on our YouTube channel](https://www.youtube.com/watch?v=7AilTMFPxqQ).
|
||||||
|
|
||||||
# Introduction To Templates {#intro}
|
# Introduction To Templates {#intro}
|
||||||
|
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ When you reach a point where you're not sure how to proceed, your first instinct
|
|||||||
## Wrapping up the planning phase
|
## Wrapping up the planning phase
|
||||||
With the broad vision in place, a set of sub-tasks, and a bunch of great resources, you're ready to take action. Keep in mind that your plan will change! It is not meant to be a burden that gets in the way of building, but rather a flexible view into the bigger picture of what you're trying to achieve, something to keep you grounded on the path to completion.
|
With the broad vision in place, a set of sub-tasks, and a bunch of great resources, you're ready to take action. Keep in mind that your plan will change! It is not meant to be a burden that gets in the way of building, but rather a flexible view into the bigger picture of what you're trying to achieve, something to keep you grounded on the path to completion.
|
||||||
|
|
||||||
Finally, I recommend [keeping a living document](https://unicorn-utterances.com/posts/documentation-driven-development) to record your progress if the project is of sufficient size or complexity. Use it to keep track of your gaps in technical knowledge, how you achieved results, or possible improvements to the architecture of your codebase. Record your insights and make plans to address issues that crop up.
|
Finally, I recommend [keeping a living document](/posts/documentation-driven-development) to record your progress if the project is of sufficient size or complexity. Use it to keep track of your gaps in technical knowledge, how you achieved results, or possible improvements to the architecture of your codebase. Record your insights and make plans to address issues that crop up.
|
||||||
|
|
||||||
# Start building the project
|
# Start building the project
|
||||||
If you're like me, the first step can be anxiety provoking. This can be as simple as making a new directory, or running a scaffolding command, building out the homepage, or writing your first function. In the planning phase, you should have planned out your core features, prepared actionable tasks, and gathered your preferred tools. All that's left is to actually write some code!
|
If you're like me, the first step can be anxiety provoking. This can be as simple as making a new directory, or running a scaffolding command, building out the homepage, or writing your first function. In the planning phase, you should have planned out your core features, prepared actionable tasks, and gathered your preferred tools. All that's left is to actually write some code!
|
||||||
@@ -285,7 +285,7 @@ I'd still recommend parsing your message manually first, as doing so can give yo
|
|||||||
## Try Debugging
|
## Try Debugging
|
||||||
The basic premise of debuggers are that you can observe the behavior of your code as it's executing. By setting one or several `breakpoints`, your debugger will allow you to slowly step forward line-by-line starting from one of the breakpoints set. The benefit of this is that you can examine the state of your variables in the current scope as you move through the execution of your code.
|
The basic premise of debuggers are that you can observe the behavior of your code as it's executing. By setting one or several `breakpoints`, your debugger will allow you to slowly step forward line-by-line starting from one of the breakpoints set. The benefit of this is that you can examine the state of your variables in the current scope as you move through the execution of your code.
|
||||||
|
|
||||||
How you debug will depend on your development environment and language. If you use Chrome, one way to practice is to use the built-in debugger, [as outlined in this official guide to debugging JavaScript in Chrome](https://developer.chrome.com/docs/devtools/javascript/). There is also a [powerful way to debug NodeJS applications using Chrome](https://unicorn-utterances.com/posts/debugging-nodejs-programs-using-chrome) if that interests you.
|
How you debug will depend on your development environment and language. If you use Chrome, one way to practice is to use the built-in debugger, [as outlined in this official guide to debugging JavaScript in Chrome](https://developer.chrome.com/docs/devtools/javascript/). There is also a [powerful way to debug NodeJS applications using Chrome](/posts/debugging-nodejs-programs-using-chrome) if that interests you.
|
||||||
|
|
||||||
Your IDE will likely have a built-in debugger: learn it! For a quicker fix, you can also try print debugging using your language's print method, for example `console.log` in JavaScript.
|
Your IDE will likely have a built-in debugger: learn it! For a quicker fix, you can also try print debugging using your language's print method, for example `console.log` in JavaScript.
|
||||||
|
|
||||||
@@ -305,7 +305,7 @@ Even if you did read it slowly the first time, by the time you've grappled with
|
|||||||
> When to use: You feel that you're missing something, or can't understand how to use a technology for desired effect, it's likely your knowledge is has shaky foundations.
|
> When to use: You feel that you're missing something, or can't understand how to use a technology for desired effect, it's likely your knowledge is has shaky foundations.
|
||||||
|
|
||||||
## Seek the help of tech communities
|
## Seek the help of tech communities
|
||||||
If you've entered some communities, introduce yourself and try leveraging their help in a respectful manner for new perspectives into your issue. Find the relevant channel or subforum of your community, and then [ask good questions](https://unicorn-utterances.com/posts/how-to-ask-good-questions), providing relevant context, errors, and code samples. Sometimes the mere act of explaining your problem to others will grant new insight on how to solve it.
|
If you've entered some communities, introduce yourself and try leveraging their help in a respectful manner for new perspectives into your issue. Find the relevant channel or subforum of your community, and then [ask good questions](/posts/how-to-ask-good-questions), providing relevant context, errors, and code samples. Sometimes the mere act of explaining your problem to others will grant new insight on how to solve it.
|
||||||
|
|
||||||
Please be polite towards others when asking for help. Programming-related problems can be frustrating and at times emotional, but if people are offering to help you out of kindness, be mindful of your reaction to their advice.
|
Please be polite towards others when asking for help. Programming-related problems can be frustrating and at times emotional, but if people are offering to help you out of kindness, be mindful of your reaction to their advice.
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ If you close the emulator and re-open it using the command above, it may work,
|
|||||||
|
|
||||||
Finally, you’re able to [sideload the Chrome APK’s x86 variant](https://www.apkmirror.com/apk/google-inc/chrome) in order to load the example codebase.
|
Finally, you’re able to [sideload the Chrome APK’s x86 variant](https://www.apkmirror.com/apk/google-inc/chrome) in order to load the example codebase.
|
||||||
|
|
||||||
So, for example, using the above hostfile as an example, we can visit `example.com:8000` when running the development mode for [the project’s GitHub code](https://github.com/unicorn-utterances/unicorn-utterances/), you’re able to see a preview of the [Unicorn Utterances](https://unicorn-utterances.com) website from a different domain.
|
So, for example, using the above hostfile as an example, we can visit `example.com:8000` when running the development mode for [the project’s GitHub code](https://github.com/unicorn-utterances/unicorn-utterances/), you’re able to see a preview of the [Unicorn Utterances](/) website from a different domain.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -836,7 +836,7 @@ function openDialog() {
|
|||||||
|
|
||||||
<!-- tabs:end -->
|
<!-- tabs:end -->
|
||||||
|
|
||||||
In this instance, [without moving the state out of dialog](https://unicorn-utterances.com/posts/master-react-unidirectional-data-flow), how would you render the contents of `Dialog` after the `Footer` component?
|
In this instance, [without moving the state out of dialog](/posts/master-react-unidirectional-data-flow), how would you render the contents of `Dialog` after the `Footer` component?
|
||||||
|
|
||||||
The answer? JavaScript Portals.
|
The answer? JavaScript Portals.
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ If you've spent much time in software development, you've undoubtedly heard the
|
|||||||
|
|
||||||
The idea behind TDD is that you should write tests before programming an implementation. For example, say you want to implement a function called `calculateUserScore` based on a user's K/D in a video game. According to TDD, you should start by writing unit or integration tests to validate the input to an expected set of outputs.
|
The idea behind TDD is that you should write tests before programming an implementation. For example, say you want to implement a function called `calculateUserScore` based on a user's K/D in a video game. According to TDD, you should start by writing unit or integration tests to validate the input to an expected set of outputs.
|
||||||
|
|
||||||
Starting with tests can be a great help to ensure that your program runs the way it's intended when all is said and done. One downside, however, is that tests are still a form of coding; Yes, even when you follow good testing practices by [hardcoding values and avoiding complex logic](https://unicorn-utterances.com/posts/five-suggestions-for-simpler-tests/#dont-include-logic). It's still software development, and your tests still need to pass at the end of the day.
|
Starting with tests can be a great help to ensure that your program runs the way it's intended when all is said and done. One downside, however, is that tests are still a form of coding; Yes, even when you follow good testing practices by [hardcoding values and avoiding complex logic](/posts/five-suggestions-for-simpler-tests/#dont-include-logic). It's still software development, and your tests still need to pass at the end of the day.
|
||||||
|
|
||||||
Making sure tests pass can be challenging to handle with the unknowns of implementation detail. After all, if you expect `parseInt` to act one way and it behaves another, you will likely have to rewrite all tests that worked off that assumption.
|
Making sure tests pass can be challenging to handle with the unknowns of implementation detail. After all, if you expect `parseInt` to act one way and it behaves another, you will likely have to rewrite all tests that worked off that assumption.
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
}
|
}
|
||||||
---
|
---
|
||||||
|
|
||||||
Functions are an integral part of all JavaScript applications, React apps included. [While I've written about how peculiar their usage can be, thanks to the fact that all functions are values](https://unicorn-utterances.com/posts/javascript-functions-are-values), they help split up the monotony of your codebase by splitting similar code into logical segments.
|
Functions are an integral part of all JavaScript applications, React apps included. [While I've written about how peculiar their usage can be, thanks to the fact that all functions are values](/posts/javascript-functions-are-values), they help split up the monotony of your codebase by splitting similar code into logical segments.
|
||||||
|
|
||||||
This knowledge that functions are values can assist you when working on improving your React apps' performance.
|
This knowledge that functions are values can assist you when working on improving your React apps' performance.
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ If I now click any of the items' `Add to cart` buttons, it will:
|
|||||||
|
|
||||||
1) Trigger the `addToCart` function
|
1) Trigger the `addToCart` function
|
||||||
2) Update the `cart` array using `setCart`
|
2) Update the `cart` array using `setCart`
|
||||||
1) Generating [a new UUIDv4](https://unicorn-utterances.com/posts/what-are-uuids) for the item in the cart
|
1) Generating [a new UUIDv4](/posts/what-are-uuids) for the item in the cart
|
||||||
3) Cause the `App` component to re-render
|
3) Cause the `App` component to re-render
|
||||||
4) Update the displayed items in the cart
|
4) Update the displayed items in the cart
|
||||||
5) Re-run the `totalCost` `useMemo` calculation
|
5) Re-run the `totalCost` `useMemo` calculation
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ This is why that Tweet stuck out so much in my mind. Would I have learned code a
|
|||||||
|
|
||||||
Sure, theoretically a new developer could jump into any number of open source projects and gain experience that way. But **how many of those projects are able to provide 1:1 mentorship** and code review on every PR? As it stands open-source maintainers are regularly overworked and unpaid for their efforts.
|
Sure, theoretically a new developer could jump into any number of open source projects and gain experience that way. But **how many of those projects are able to provide 1:1 mentorship** and code review on every PR? As it stands open-source maintainers are regularly overworked and unpaid for their efforts.
|
||||||
|
|
||||||
Moreover: how does a new developer's confidence play into that? I started with Angular as my first web framework, didn't have a formal education, and saw Google as an infallible agent of raw engineering in my first year. **Terms like "Dependency injection" and "Ahead-of-time compiler" scared me into feeling as if it were "unsafe" to read through any of the project's source code until I had found out that [I was rewriting it's source code without knowing it](https://unicorn-utterances.com/posts/angular-templates-start-to-source/#directive-same-name-input)**.
|
Moreover: how does a new developer's confidence play into that? I started with Angular as my first web framework, didn't have a formal education, and saw Google as an infallible agent of raw engineering in my first year. **Terms like "Dependency injection" and "Ahead-of-time compiler" scared me into feeling as if it were "unsafe" to read through any of the project's source code until I had found out that [I was rewriting it's source code without knowing it](/posts/angular-templates-start-to-source/#directive-same-name-input)**.
|
||||||
|
|
||||||
Even today, a developer of 7 years professionally - having written compilers and apps with millions of users - I am still oftentimes intimidated to read through large project's codebase. **I regularly have to psyche myself out and reassure myself that it's okay to explore before diving into big source projects.**
|
Even today, a developer of 7 years professionally - having written compilers and apps with millions of users - I am still oftentimes intimidated to read through large project's codebase. **I regularly have to psyche myself out and reassure myself that it's okay to explore before diving into big source projects.**
|
||||||
|
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ Document containing:
|
|||||||
|
|
||||||
* Customizable code blocks for each style in a text box, so you can change each depending on your theme and hand it to developers
|
* Customizable code blocks for each style in a text box, so you can change each depending on your theme and hand it to developers
|
||||||
|
|
||||||
## For developers: [styles.xml](./styles.xml)
|
## For developers: [styles.xml](/content/blog/hard-grids-and-baselines-android-design-fidelity/styles.xml)
|
||||||
|
|
||||||
A styles.xml file containing:
|
A styles.xml file containing:
|
||||||
|
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ brew install yarn
|
|||||||
|
|
||||||
### Windows {#yarn-windows}
|
### Windows {#yarn-windows}
|
||||||
|
|
||||||
Just as there's a method for installing `yarn` natively on macOS, you can do the same on Windows using [the same third-party package manager we suggest using for installing and maintaining Windows programs on your machine, Chocolatey](https://unicorn-utterances.com/posts/ultimate-windows-development-environment-guide/#package-management):
|
Just as there's a method for installing `yarn` natively on macOS, you can do the same on Windows using [the same third-party package manager we suggest using for installing and maintaining Windows programs on your machine, Chocolatey](/posts/ultimate-windows-development-environment-guide/#package-management):
|
||||||
|
|
||||||
```
|
```
|
||||||
choco install yarn
|
choco install yarn
|
||||||
@@ -187,7 +187,7 @@ Now that you have it setup, let's walk through how to use Node. First, start by
|
|||||||
|
|
||||||
> On macOS, you can find your terminal by opening finder (Meta+Space) and typing "Terminal".
|
> On macOS, you can find your terminal by opening finder (Meta+Space) and typing "Terminal".
|
||||||
>
|
>
|
||||||
> For Windows usage, there are a few more options. We suggest reading through [our article that outlines those options and explains how to setup and use your terminal correctly.](https://unicorn-utterances.com/posts/ultimate-windows-development-environment-guide/#terminal-usage)
|
> For Windows usage, there are a few more options. We suggest reading through [our article that outlines those options and explains how to setup and use your terminal correctly.](/posts/ultimate-windows-development-environment-guide/#terminal-usage)
|
||||||
|
|
||||||
Once you have your terminal open, run the following command:
|
Once you have your terminal open, run the following command:
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ Additional to `aria` props, [the `role` property](https://developer.mozilla.org/
|
|||||||
|
|
||||||
While HTML relays a significant amount of information to assistive technologies like screen readers, it's not the only thing used to inform those tools. Certain CSS rules can change the functionality as well. After all, screen readers (and other tools) don't look through the source code of a website. Instead, they're looking at [the accessibility tree](https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/the-accessibility-tree): a modified version of the DOM. The accessibility tree and the DOM are both constructed by the browser from the website's source code.
|
While HTML relays a significant amount of information to assistive technologies like screen readers, it's not the only thing used to inform those tools. Certain CSS rules can change the functionality as well. After all, screen readers (and other tools) don't look through the source code of a website. Instead, they're looking at [the accessibility tree](https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/the-accessibility-tree): a modified version of the DOM. The accessibility tree and the DOM are both constructed by the browser from the website's source code.
|
||||||
|
|
||||||
> Want to learn more about the DOM, how the browser constructs it, and what it's used for internally? [This article helps explain this in detail](https://unicorn-utterances.com/posts/understanding-the-dom/).
|
> Want to learn more about the DOM, how the browser constructs it, and what it's used for internally? [This article helps explain this in detail](/posts/understanding-the-dom/).
|
||||||
|
|
||||||
Because the DOM is influenced by CSS, it impacts the accessibility tree as well. For example, `display: none` removes the element from the [accessibility tree](https://benmyers.dev/blog/accessibility-tree/) and from the browsers visual output. This means that screen readers won't read the contents of an element with that rule applied. However, `visibility: hidden` or `width: 0px` will hide an element visually, but will still be read by screen readers.
|
Because the DOM is influenced by CSS, it impacts the accessibility tree as well. For example, `display: none` removes the element from the [accessibility tree](https://benmyers.dev/blog/accessibility-tree/) and from the browsers visual output. This means that screen readers won't read the contents of an element with that rule applied. However, `visibility: hidden` or `width: 0px` will hide an element visually, but will still be read by screen readers.
|
||||||
|
|
||||||
|
|||||||
@@ -214,6 +214,6 @@ Essentially, I just want to make sure to iterate that while there may be tools t
|
|||||||
|
|
||||||
And with that, we have a better understanding of what TypeScript is! I hope this has been informative and helpful for those that may be new to the language in particular. What'd you learn, let us know!
|
And with that, we have a better understanding of what TypeScript is! I hope this has been informative and helpful for those that may be new to the language in particular. What'd you learn, let us know!
|
||||||
|
|
||||||
Now that you're more familiar with TypeScript, maybe you'd like to play around with one of their more experienced functionality: [Type generics](/posts/typescript-type-generics/)? We have a whole post around that concept as well, [you can find that here](https://unicorn-utterances.com/posts/typescript-type-generics/).
|
Now that you're more familiar with TypeScript, maybe you'd like to play around with one of their more experienced functionality: [Type generics](/posts/typescript-type-generics/)? We have a whole post around that concept as well, [you can find that here](/posts/typescript-type-generics/).
|
||||||
|
|
||||||
Thanks for reading! Leave any questions or feedback in the comments below.
|
Thanks for reading! Leave any questions or feedback in the comments below.
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ To understand why we're able to assign a function to a variable, let's analyze w
|
|||||||
|
|
||||||
## How memory works
|
## How memory works
|
||||||
|
|
||||||
Inside of your computer, there's something called "memory," AKA RAM,[which allows your computer to store short-term memory that it can quickly reference later.](https://unicorn-utterances.com/posts/how-computers-speak#ram)
|
Inside of your computer, there's something called "memory," AKA RAM,[which allows your computer to store short-term memory that it can quickly reference later.](/posts/how-computers-speak#ram)
|
||||||
|
|
||||||
When we create a variable, what we're doing is storing values inside of this memory.
|
When we create a variable, what we're doing is storing values inside of this memory.
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ This might be visually represented like so:
|
|||||||
|
|
||||||
It's important to remember that the memory address itself doesn't store the name, your compiler does. When you create blocks of memory via variables, the compiler gets back a number that it can use to look up the variable's value inside of a "stack" of memory.
|
It's important to remember that the memory address itself doesn't store the name, your compiler does. When you create blocks of memory via variables, the compiler gets back a number that it can use to look up the variable's value inside of a "stack" of memory.
|
||||||
|
|
||||||
You can *loosely* think of this memory stack as an array that the compiler looks through in order to get the data based on an index. This number can be huge because your computer likely has multiple gigabytes of RAM. Even 16GB is equivalent to 1.28e+11 bytes. Because of this, memory addresses are often colloquially shortened to [hexadecimal representations](https://unicorn-utterances.com/posts/non-decimal-numbers-in-tech).
|
You can *loosely* think of this memory stack as an array that the compiler looks through in order to get the data based on an index. This number can be huge because your computer likely has multiple gigabytes of RAM. Even 16GB is equivalent to 1.28e+11 bytes. Because of this, memory addresses are often colloquially shortened to [hexadecimal representations](/posts/non-decimal-numbers-in-tech).
|
||||||
|
|
||||||
This means that our *0x7de35306* memory address is associated with bit number 2112049926, or just over the 0.2GB mark.
|
This means that our *0x7de35306* memory address is associated with bit number 2112049926, or just over the 0.2GB mark.
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ console.log(memoryBlocks[0x7de35306]);
|
|||||||
console.log(memoryBlocks[0x7de35307]);
|
console.log(memoryBlocks[0x7de35307]);
|
||||||
```
|
```
|
||||||
|
|
||||||
> This code is simply pseudocode and will not actually run. Instead, your computer will compile down to ["machine code" or "assembly code"](https://unicorn-utterances.com/posts/how-computers-speak#assembly-code), which will in turn run on "bare metal". What's more, this is a drastic oversimplification of how your browser's JIT compiler and your system's memory management*actually* works under-the-hood.
|
> This code is simply pseudocode and will not actually run. Instead, your computer will compile down to ["machine code" or "assembly code"](/posts/how-computers-speak#assembly-code), which will in turn run on "bare metal". What's more, this is a drastic oversimplification of how your browser's JIT compiler and your system's memory management*actually* works under-the-hood.
|
||||||
|
|
||||||
## How does this relate to function storage?
|
## How does this relate to function storage?
|
||||||
|
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ Because we now have a database running the data show, we can be sure that our da
|
|||||||
|
|
||||||
# Deployment {#deployment}
|
# Deployment {#deployment}
|
||||||
|
|
||||||
Ideally, since our Slack app is a small side project, we'd like to host things in a straightforward manner for cheap/free. One of my favorite hosting solutions for such projects is [Heroku](heroku.com/). Heroku is no stranger to Slack apps, either. They have [an official blog post outlining making their own Slack bot using the web notification feature within Slack](https://blog.heroku.com/how-to-deploy-your-slack-bots-to-heroku). That said, our route is going to be a bit different from theirs because we chose to use the events subscriptions instead.
|
Ideally, since our Slack app is a small side project, we'd like to host things in a straightforward manner for cheap/free. One of my favorite hosting solutions for such projects is [Heroku](https://heroku.com/). Heroku is no stranger to Slack apps, either. They have [an official blog post outlining making their own Slack bot using the web notification feature within Slack](https://blog.heroku.com/how-to-deploy-your-slack-bots-to-heroku). That said, our route is going to be a bit different from theirs because we chose to use the events subscriptions instead.
|
||||||
|
|
||||||
Let's start our step-by-step guide immediately after [you've created an account with Heroku](https://signup.heroku.com/).
|
Let's start our step-by-step guide immediately after [you've created an account with Heroku](https://signup.heroku.com/).
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
---
|
---
|
||||||
{
|
{
|
||||||
title: "The story of `let` vs `const`, Object Mutation, and a bug in my code",
|
title: "What is Object Mutation in JavaScript?",
|
||||||
description: 'When working with objects, you may hear the term "mutation". What is that? How does it work? How do let and const REALLY differ from each other? This and more:',
|
description: 'When working with objects, you may hear the term "mutation". What is that? How does it work? How do let and const REALLY differ from each other? This and more:',
|
||||||
published: '2023-03-25T19:12:03.284Z',
|
published: '2023-03-25T19:12:03.284Z',
|
||||||
|
edited: '2023-12-14T19:12:03.284Z',
|
||||||
authors: ['crutchcorn'],
|
authors: ['crutchcorn'],
|
||||||
tags: ['javascript'],
|
tags: ['javascript'],
|
||||||
attached: [],
|
attached: [],
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
}
|
}
|
||||||
---
|
---
|
||||||
|
|
||||||
Recently, we rewrote [our community blog for "Unicorn Utterances"](https://unicorn-utterances.com) to use [Astro, a static site generator framework](https://astro.build). One of the fan-favorite features of the site is its dark mode toggle, which enables dark mode purists to gloat over the light mode plebians (like myself).
|
Recently, we rewrote [our community blog for "Unicorn Utterances"](/) to use [Astro, a static site generator framework](https://astro.build). One of the fan-favorite features of the site is its dark mode toggle, which enables dark mode purists to gloat over the light mode plebians (like myself).
|
||||||
|
|
||||||
<video src="./theme_toggle.mp4" title="Toggling the dark mode theme on the Unicorn Utterances site"></video>
|
<video src="./theme_toggle.mp4" title="Toggling the dark mode theme on the Unicorn Utterances site"></video>
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ Let's talk about that. Along the way, we'll touch on:
|
|||||||
|
|
||||||
To understand object mutation, we first need to conceptualize how JavaScript handles variable creation.
|
To understand object mutation, we first need to conceptualize how JavaScript handles variable creation.
|
||||||
|
|
||||||
In one of my blog posts called ["Functions are values", I talk about how variables are stored in memory](https://unicorn-utterances.com/posts/javascript-functions-are-values). In that article, I specifically talk about how, when you create JavaScript variables, they create a new space in memory.
|
In one of my blog posts called ["Functions are values", I talk about how variables are stored in memory](/posts/javascript-functions-are-values). In that article, I specifically talk about how, when you create JavaScript variables, they create a new space in memory.
|
||||||
|
|
||||||
Say that we wanted to initialize two variables:
|
Say that we wanted to initialize two variables:
|
||||||
|
|
||||||
@@ -417,4 +418,4 @@ Hopefully this has been an insightful look into how JavaScript's `let`, `const`,
|
|||||||
|
|
||||||
If this article has been helpful, maybe you'd like [my upcoming book called "The Framework Field Guide", which teaches React, Angular, and Vue all at once (for free!)](https://framework.guide).
|
If this article has been helpful, maybe you'd like [my upcoming book called "The Framework Field Guide", which teaches React, Angular, and Vue all at once (for free!)](https://framework.guide).
|
||||||
|
|
||||||
Either way, I hope you enjoyed the post and I'll see you next time!
|
Either way, I hope you enjoyed the post and I'll see you next time!
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
[Astro is a WebDev meta-framework](https://astro.build) that allows you to build highly performant websites, that, out-of-the-box compile down to 0kb of JavaScript in your bundle.
|
[Astro is a WebDev meta-framework](https://astro.build) that allows you to build highly performant websites, that, out-of-the-box compile down to 0kb of JavaScript in your bundle.
|
||||||
|
|
||||||
If your site is a marketing site, or if performance is a substantial concern for your app, it may make sense to migrate from Next.js to Astro - as we [at Unicorn Utterances](https://unicorn-utterances.com) once did.
|
If your site is a marketing site, or if performance is a substantial concern for your app, it may make sense to migrate from Next.js to Astro - as we [at Unicorn Utterances](/) once did.
|
||||||
|
|
||||||
While Astro provides a good guide of [how to migrate from Next.js to Astro](https://docs.astro.build/en/guides/migrate-to-astro/from-nextjs/) (written by yours truly!), I felt it would be helpful to see an expanded step-by-step guide on how to migrate a [Pokédex](https://www.pokemon.com/us/pokedex) application from Next.js to Astro.
|
While Astro provides a good guide of [how to migrate from Next.js to Astro](https://docs.astro.build/en/guides/migrate-to-astro/from-nextjs/) (written by yours truly!), I felt it would be helpful to see an expanded step-by-step guide on how to migrate a [Pokédex](https://www.pokemon.com/us/pokedex) application from Next.js to Astro.
|
||||||
|
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ Now, if we wait a second for the button to render and click it, our counter does
|
|||||||
|
|
||||||
This is because once our `ref` is set after the initial render, it doesn’t trigger a re-render and our `useEffect` never runs.
|
This is because once our `ref` is set after the initial render, it doesn’t trigger a re-render and our `useEffect` never runs.
|
||||||
|
|
||||||
A better way to write this would be to utilize a [“callback ref”](https://unicorn-utterances.com/posts/react-refs-complete-story#callback-refs), and then use a `useState` to force a re-render when it’s set.
|
A better way to write this would be to utilize a [“callback ref”](/posts/react-refs-complete-story#callback-refs), and then use a `useState` to force a re-render when it’s set.
|
||||||
|
|
||||||
```jsx
|
```jsx
|
||||||
const RefEffectComp = ()=>{
|
const RefEffectComp = ()=>{
|
||||||
@@ -403,7 +403,7 @@ This will force the re-render when `ref` is set after the initial render and, in
|
|||||||
|
|
||||||
To be fair, this “rule” is more of a soft rule than anything. There are absolutely instances - such as setTimeout timers - where utilizing a ref inside of a useEffect make sense. Just make sure you have a proper mental model about refs and useEffect and you’ll be fine.
|
To be fair, this “rule” is more of a soft rule than anything. There are absolutely instances - such as setTimeout timers - where utilizing a ref inside of a useEffect make sense. Just make sure you have a proper mental model about refs and useEffect and you’ll be fine.
|
||||||
|
|
||||||
> Want to refine your understanding of refs even further? [See my article outlining the important details of refs for more.](https://unicorn-utterances.com/posts/react-refs-complete-story)
|
> Want to refine your understanding of refs even further? [See my article outlining the important details of refs for more.](/posts/react-refs-complete-story)
|
||||||
|
|
||||||
## Don’t expect an empty dependency array to only run once
|
## Don’t expect an empty dependency array to only run once
|
||||||
|
|
||||||
@@ -419,4 +419,4 @@ You can [read more about how an empty dependency array can break in your app fro
|
|||||||
|
|
||||||
React’s useEffect is an instrumental part of modern React applications. Now that you know more about its internals and the rules around it, you can build stronger and more dynamic programs!
|
React’s useEffect is an instrumental part of modern React applications. Now that you know more about its internals and the rules around it, you can build stronger and more dynamic programs!
|
||||||
|
|
||||||
If you want to continue learning skills that will help make your React apps better, I suggest taking a look at [our guide to React Unidirectionality](https://coderpad.io/blog/master-react-unidirectional-data-flow/), which outlines a good way to keep your application flow more organized.
|
If you want to continue learning skills that will help make your React apps better, I suggest taking a look at [our guide to React Unidirectionality](https://coderpad.io/blog/master-react-unidirectional-data-flow/), which outlines a good way to keep your application flow more organized.
|
||||||
|
|||||||
@@ -550,7 +550,7 @@ export default defineConfig({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Because these packages aren't included in the bundle anymore, we need to flag to our apps that they need to install the packages as well. To do this we need to utilize [`devDependencies` and `peerDependencies`](https://unicorn-utterances.com/posts/how-to-use-npm) in `/packages/shared-elements/`:
|
Because these packages aren't included in the bundle anymore, we need to flag to our apps that they need to install the packages as well. To do this we need to utilize [`devDependencies` and `peerDependencies`](/posts/how-to-use-npm) in `/packages/shared-elements/`:
|
||||||
|
|
||||||
```json {19-31}
|
```json {19-31}
|
||||||
{
|
{
|
||||||
@@ -692,9 +692,9 @@ This means that any time you add a package that relies on React, you'll want to
|
|||||||
|
|
||||||
# Add Testing to our Monorepo with Jest {#jest}
|
# Add Testing to our Monorepo with Jest {#jest}
|
||||||
|
|
||||||
While [I'm not an avid fan of Test-Driven-Development](https://unicorn-utterances.com/posts/documentation-driven-development), it's hard to argue that testing doesn't make a massive impact to the overall quality of the end-result of a codebase.
|
While [I'm not an avid fan of Test-Driven-Development](/posts/documentation-driven-development), it's hard to argue that testing doesn't make a massive impact to the overall quality of the end-result of a codebase.
|
||||||
|
|
||||||
Let's set up [Jest](https://jestjs.io/) and [Testing Library](https://testing-library.com/docs/react-testing-library/intro/) to write fast and [easy to read](https://unicorn-utterances.com/posts/five-suggestions-for-simpler-tests) integration tests for our applications.
|
Let's set up [Jest](https://jestjs.io/) and [Testing Library](https://testing-library.com/docs/react-testing-library/intro/) to write fast and [easy to read](/posts/five-suggestions-for-simpler-tests) integration tests for our applications.
|
||||||
|
|
||||||
> While you could add end-to-end testing with something like [Detox](https://github.com/wix/Detox) or [Maestro](https://maestro.mobile.dev/platform-support/react-native), I find that integration testing is often a better fit for most apps.
|
> While you could add end-to-end testing with something like [Detox](https://github.com/wix/Detox) or [Maestro](https://maestro.mobile.dev/platform-support/react-native), I find that integration testing is often a better fit for most apps.
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ Yay! Now we have fully automated releases on each push to main. Because of the `
|
|||||||
|
|
||||||
# Step 4. Deploying to the Play Store
|
# Step 4. Deploying to the Play Store
|
||||||
|
|
||||||
Travis doesn't have a deployment for the Play Store, so we will have to use a third party tool. I found [Triple-T/gradle-play-publisher](https://github.com/Triple-T/gradle-play-publisher/), which should work, except there isn't an option to deploy an existing APK without building the project. Not only would a deployment that requires building a project _twice_ be super wasteful and take... well, twice as long, [I ran into problems signing the APK](twitter.com/fennifith/status/1061620100409761792) when I tried it, so... let's not. Instead, we'll modify the `script` to run the `./gradlew publish` command when a build is triggered from the main branch.
|
Travis doesn't have a deployment for the Play Store, so we will have to use a third party tool. I found [Triple-T/gradle-play-publisher](https://github.com/Triple-T/gradle-play-publisher/), which should work, except there isn't an option to deploy an existing APK without building the project. Not only would a deployment that requires building a project _twice_ be super wasteful and take... well, twice as long, [I ran into problems signing the APK](https://twitter.com/fennifith/status/1061620100409761792) when I tried it, so... let's not. Instead, we'll modify the `script` to run the `./gradlew publish` command when a build is triggered from the main branch.
|
||||||
|
|
||||||
## Part A. Setup
|
## Part A. Setup
|
||||||
|
|
||||||
|
|||||||
@@ -185,8 +185,8 @@ If you've ever written a website that had back-and-forth communication between H
|
|||||||
|
|
||||||
Let's look at some of the built-in utilities at our disposal for doing so:
|
Let's look at some of the built-in utilities at our disposal for doing so:
|
||||||
|
|
||||||
- [The `document` global object](document-global-object)
|
- [The `document` global object](#document-global-object)
|
||||||
- [The `Element` base class](element-class)
|
- [The `Element` base class](#element-class)
|
||||||
- [The event system](#events)
|
- [The event system](#events)
|
||||||
|
|
||||||
## Document Global Object {#document-global-object}
|
## Document Global Object {#document-global-object}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ Sin tener en cuenta el nivel de conocimientos, también reconozco que hay varios
|
|||||||
# Objetivos actuales
|
# Objetivos actuales
|
||||||
Este proyecto va a ser un esfuerzo a largo plazo para tratar de escribir tan a menudo como sea posible para realizar este objetivo. Sin embargo, sé que es un objetivo elevado y no quiero hacerlo solo. Al crear este blog, me he asegurado de que otros autores tengan la menor barrera posible para contribuir. Tenemos páginas de autor construidas, filtrado y búsqueda en nuestras páginas, y [repositorio de GitHub abierto](https://github.com/crutchcorn/unicorn-utterances). Nos encantan y agradecemos las solicitudes de PR(Pull Request), nuevos contenidos, el mantenimiento del código en el sitio, los informes de errores y el debate general.
|
Este proyecto va a ser un esfuerzo a largo plazo para tratar de escribir tan a menudo como sea posible para realizar este objetivo. Sin embargo, sé que es un objetivo elevado y no quiero hacerlo solo. Al crear este blog, me he asegurado de que otros autores tengan la menor barrera posible para contribuir. Tenemos páginas de autor construidas, filtrado y búsqueda en nuestras páginas, y [repositorio de GitHub abierto](https://github.com/crutchcorn/unicorn-utterances). Nos encantan y agradecemos las solicitudes de PR(Pull Request), nuevos contenidos, el mantenimiento del código en el sitio, los informes de errores y el debate general.
|
||||||
|
|
||||||
En cuanto al contenido, hay un artículo muy profundo que se está editando en estos momentos. En las próximas semanas, esté atento a las nuevas publicaciones en el sitio. Si utiliza el RSS para mantenerse al día con su contenido favorito, [tambien lo tenemos](https://unicorn-utterances.com/rss.xml)..
|
En cuanto al contenido, hay un artículo muy profundo que se está editando en estos momentos. En las próximas semanas, esté atento a las nuevas publicaciones en el sitio. Si utiliza el RSS para mantenerse al día con su contenido favorito, [tambien lo tenemos](/rss.xml)..
|
||||||
|
|
||||||
Por último, quiero que sea inmediatamente accesible para personas con cualquier tipo de capacidad física. Se ha tenido mucho cuidado para asegurar que este sitio siga los requisitos de accesibilidad adecuados. Si hay algo en el sitio relacionado con la accesibilidad que no funcione, por favor háganoslo saber, será tratado con la misma diligencia que cualquier otro error que impida a los usuarios acceder al sitio.
|
Por último, quiero que sea inmediatamente accesible para personas con cualquier tipo de capacidad física. Se ha tenido mucho cuidado para asegurar que este sitio siga los requisitos de accesibilidad adecuados. Si hay algo en el sitio relacionado con la accesibilidad que no funcione, por favor háganoslo saber, será tratado con la misma diligencia que cualquier otro error que impida a los usuarios acceder al sitio.
|
||||||
|
|
||||||
@@ -49,4 +49,4 @@ Por último, pero no por ello menos importante, el sitio ha contado con la incre
|
|||||||
## Lo que está por venir
|
## Lo que está por venir
|
||||||
Tenemos algunas cosas emocionantes por venir. Como se mencionó antes, va a haber un post en profundidad muy pronto. También tenemos muchos posts que han sido empezados, pero que necesitan ser editados y finalizados antes de ser enviados. Pero eso no es todo. Hay una lista absolutamente gigantesca de otros artículos en los que me gustaría trabajar, y parece que crece cada día.
|
Tenemos algunas cosas emocionantes por venir. Como se mencionó antes, va a haber un post en profundidad muy pronto. También tenemos muchos posts que han sido empezados, pero que necesitan ser editados y finalizados antes de ser enviados. Pero eso no es todo. Hay una lista absolutamente gigantesca de otros artículos en los que me gustaría trabajar, y parece que crece cada día.
|
||||||
|
|
||||||
Puedes mantenerte al día siguiéndome en [Twitter](https://twitter.com/crutchcorn) o utilizando nuestro canal [RSS](https://unicorn-utterances.com/rss.xml)
|
Puedes mantenerte al día siguiéndome en [Twitter](https://twitter.com/crutchcorn) o utilizando nuestro canal [RSS](/rss.xml)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ Ignoring skill level, I also acknowledge that there are various learning styles.
|
|||||||
|
|
||||||
This project is going to be a long-standing effort to try to write as often as possible to realize this goal. I know this is a lofty goal though, and I don't want to do it alone. While creating this blog, I have ensured that other authors should have the lowest barrier to contributing as possible. We have author pages built, filtering and searching on our pages, and an [open GitHub repository](https://github.com/crutchcorn/unicorn-utterances). We love and welcome pull requests, new content, code maintenance on the site, bug reports, and general discussion.
|
This project is going to be a long-standing effort to try to write as often as possible to realize this goal. I know this is a lofty goal though, and I don't want to do it alone. While creating this blog, I have ensured that other authors should have the lowest barrier to contributing as possible. We have author pages built, filtering and searching on our pages, and an [open GitHub repository](https://github.com/crutchcorn/unicorn-utterances). We love and welcome pull requests, new content, code maintenance on the site, bug reports, and general discussion.
|
||||||
|
|
||||||
In terms of content, there is an extremely in-depth article which is being edited as we speak. Within the next few weeks, keep your eye out for new posts on the site. If you use RSS to keep up with your favorite content, [we have that as well](https://unicorn-utterances.com/rss.xml).
|
In terms of content, there is an extremely in-depth article which is being edited as we speak. Within the next few weeks, keep your eye out for new posts on the site. If you use RSS to keep up with your favorite content, [we have that as well](/rss.xml).
|
||||||
|
|
||||||
Finally, I immediately want to be accessible to people of all forms of physical capabilities. Great care has been taken to ensure this site follows proper accessibility requirements. If there is anything on the site pertaining to accessibility that does not work, please let us know, it will be treated as diligently as any other bug preventing users from accessing the site.
|
Finally, I immediately want to be accessible to people of all forms of physical capabilities. Great care has been taken to ensure this site follows proper accessibility requirements. If there is anything on the site pertaining to accessibility that does not work, please let us know, it will be treated as diligently as any other bug preventing users from accessing the site.
|
||||||
|
|
||||||
@@ -52,4 +52,4 @@ Last, but certainly not least, the site has had some incredible help with gettin
|
|||||||
|
|
||||||
We have some exciting stuff coming up. As mentioned before, there's going to be an in-depth post coming very soon. We also have many posts that've been started, but need editing and finalization before being sent out. That's not the end, though. There's an absolutely gargantuan list of other posts I'd like to work on, and it seems to be growing every day.
|
We have some exciting stuff coming up. As mentioned before, there's going to be an in-depth post coming very soon. We also have many posts that've been started, but need editing and finalization before being sent out. That's not the end, though. There's an absolutely gargantuan list of other posts I'd like to work on, and it seems to be growing every day.
|
||||||
|
|
||||||
You can keep up-to-date either by [following me on Twitter](https://twitter.com/crutchcorn) or by utilizing [our RSS feed](https://unicorn-utterances.com/rss.xml)
|
You can keep up-to-date either by [following me on Twitter](https://twitter.com/crutchcorn) or by utilizing [our RSS feed](/rss.xml)
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ Some of you might be wondering "What is a namespace and why does it need to be a
|
|||||||
|
|
||||||
Great question. Let's consider the following usecase:
|
Great question. Let's consider the following usecase:
|
||||||
|
|
||||||
Let's say we want to assign a UUID to each blog post on the [Unicorn Utterances](https://unicorn-utterances.com/about) site. We could simply assign the URL:
|
Let's say we want to assign a UUID to each blog post on the [Unicorn Utterances](/about) site. We could simply assign the URL:
|
||||||
|
|
||||||
```
|
```
|
||||||
/posts/intro-to-uuid
|
/posts/intro-to-uuid
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ If you ever used GPS instructions to get somewhere, or followed a recipe book to
|
|||||||
In simple terms, an algorithm is a set of instructions that lead to a certain result. If you execute it correctly, you get the result you wanted, a delicious apple pie!
|
In simple terms, an algorithm is a set of instructions that lead to a certain result. If you execute it correctly, you get the result you wanted, a delicious apple pie!
|
||||||
But if you somehow mess up an instruction (like leaving the pie in the oven for 2 hours instead of 1 hour like the recipe book tells you to) then you end up with a bad result, and you would have to start over.
|
But if you somehow mess up an instruction (like leaving the pie in the oven for 2 hours instead of 1 hour like the recipe book tells you to) then you end up with a bad result, and you would have to start over.
|
||||||
|
|
||||||
The same thing applies for machines. If you give a computer a clear set of instructions, it’ll execute them in order to reach the desired result. There is, however, a huge difference between telling another person how to solve a certain equation, and telling a computer to do the same thing, because computers have [their own language](https://unicorn-utterances.com/posts/how-computers-speak#hdd), which is very different from human language.
|
The same thing applies for machines. If you give a computer a clear set of instructions, it’ll execute them in order to reach the desired result. There is, however, a huge difference between telling another person how to solve a certain equation, and telling a computer to do the same thing, because computers have [their own language](/posts/how-computers-speak#hdd), which is very different from human language.
|
||||||
|
|
||||||
However, if you understand what an algorithm is, and how to break down tasks into a small set of very basic instructions, it will be a lot easier to deal with programming languages later in your learning journey.
|
However, if you understand what an algorithm is, and how to break down tasks into a small set of very basic instructions, it will be a lot easier to deal with programming languages later in your learning journey.
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ END
|
|||||||
|
|
||||||
You will notice in our illustration that there's a block that says "A function that displays values", but ignore that for the moment because we'll get to what functions are in a few.
|
You will notice in our illustration that there's a block that says "A function that displays values", but ignore that for the moment because we'll get to what functions are in a few.
|
||||||
|
|
||||||
> A more extensive explanation on how computers store and handle variables can be found [here](https://unicorn-utterances.com/posts/how-computers-speak).
|
> A more extensive explanation on how computers store and handle variables can be found [here](/posts/how-computers-speak).
|
||||||
|
|
||||||
Now that we've established how values are stored, comes the part where the computer handles the different instructions given, with the help of what we can call "**Operators**"
|
Now that we've established how values are stored, comes the part where the computer handles the different instructions given, with the help of what we can call "**Operators**"
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"RSS Feed": {
|
"RSS Feed": {
|
||||||
"icon": "rss",
|
"icon": "rss",
|
||||||
"url": "https://unicorn-utterances.com/rss.xml"
|
"url": "/rss.xml"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sponsors": [
|
"sponsors": [
|
||||||
|
|||||||
Reference in New Issue
Block a user