1

Use real emoji

This commit is contained in:
Evan Pratten 2024-11-27 11:53:27 -05:00
parent d163045cc5
commit aff11c519b
16 changed files with 19 additions and 19 deletions

View File

@ -61,7 +61,7 @@ Generally, if you wanted a PSTN number, you have to go to a phone carrier and ge
I am personally interested in their [SIP Trunking](https://www.twilio.com/sip-trunking) service. When renting a number from Twilio (which costs just a dollar a month), you can create a SIP trunk from your PBX to theirs, and they will route all inbound calls back to you, plus allow you to place outbound calls to the PSTN through them. I am personally interested in their [SIP Trunking](https://www.twilio.com/sip-trunking) service. When renting a number from Twilio (which costs just a dollar a month), you can create a SIP trunk from your PBX to theirs, and they will route all inbound calls back to you, plus allow you to place outbound calls to the PSTN through them.
*Hey students, you practically do all of the Twillio stuff in this post for **free** through [GitHub Student Pack](https://education.github.com/pack/offers)* :wink: *Hey students, you practically do all of the Twillio stuff in this post for **free** through [GitHub Student Pack](https://education.github.com/pack/offers)* 😉
## Software PBXes and Trunking ## Software PBXes and Trunking

View File

@ -45,7 +45,7 @@ Both tunneling protocols use IP [Encapsulation](https://en.wikipedia.org/wiki/En
- Relies on IPv6 compatible servers elsewhere to unwrap the packets and re-send them as native IPv6 traffic on the public internet - Relies on IPv6 compatible servers elsewhere to unwrap the packets and re-send them as native IPv6 traffic on the public internet
- Used by Xbox consoles for multiplayer networking - Used by Xbox consoles for multiplayer networking
I chose 6in4, mostly because I felt like it :laughing:. I'm sure Teredo would have brought me on an equally interesting journey, and maybe I'll see what its all about some other day. I chose 6in4, mostly because I felt like it 😆. I'm sure Teredo would have brought me on an equally interesting journey, and maybe I'll see what its all about some other day.
Below is a diagram of a typical 6in4 packet: Below is a diagram of a typical 6in4 packet:

View File

@ -49,7 +49,7 @@ Some benefits come with going through the extra work of obtaining an ASN:
- Ability to freely jump between IP transit providers - Ability to freely jump between IP transit providers
- Ability to announce your IPs from multiple locations at once - Ability to announce your IPs from multiple locations at once
- Ability to directly peer with other networks - Ability to directly peer with other networks
- *Clout* :laughing: - *Clout* 😆
If you would like to get your own ASN, you have a few possible routes to take: If you would like to get your own ASN, you have a few possible routes to take:
@ -78,7 +78,7 @@ With a Vultr account created, head to the [deploy page](https://my.vultr.com/dep
Once your server is up and running, head to `Products > Network > BGP` in the Vultr control panel, and request BGP to be set up for your account. You'll have to provide the LOA you got from ARDC in your prefix application process. Once your server is up and running, head to `Products > Network > BGP` in the Vultr control panel, and request BGP to be set up for your account. You'll have to provide the LOA you got from ARDC in your prefix application process.
At this point, you should get the option to choose between full routing tables and the default route. If you are single-homed, choose default route. If you have your own ASN, you should be able to decide for yourself weather you need full tables or not (I'm trusting you on this one :wink:). At this point, you should get the option to choose between full routing tables and the default route. If you are single-homed, choose default route. If you have your own ASN, you should be able to decide for yourself weather you need full tables or not (I'm trusting you on this one 😉).
While you are getting stuff ready, I recommend logging in to the server, possibly setting up [Fail2Ban](https://www.fail2ban.org/wiki/index.php/Main_Page), and installing the following packages: While you are getting stuff ready, I recommend logging in to the server, possibly setting up [Fail2Ban](https://www.fail2ban.org/wiki/index.php/Main_Page), and installing the following packages:

View File

@ -46,7 +46,7 @@ I also realized it would be reasonably easy to extend the playlist *before* 2019
## The highlights ## The highlights
With the context out of the way, why not share some of the highlights of this project. As of the time of writing, I have a total of 38 hours of music in *Intro* and *Journey*.. Thats 646 songs! Last year I decided to test myself and listen to them all in order to see what I remembered. Surprisingly, I could hum the melody of every single one of them despite not listening to some for a few years. The power of a good song I guess :man_shrugging: With the context out of the way, why not share some of the highlights of this project. As of the time of writing, I have a total of 38 hours of music in *Intro* and *Journey*.. Thats 646 songs! Last year I decided to test myself and listen to them all in order to see what I remembered. Surprisingly, I could hum the melody of every single one of them despite not listening to some for a few years. The power of a good song I guess 🤷‍♂️
### Where it *almost* all began ### Where it *almost* all began

View File

@ -20,7 +20,7 @@ After hearing of this, I opened up [NFC Tools](https://play.google.com/store/app
## Shenanigans ## Shenanigans
Upon figuring out how to write to @hyperliskdev's card, we started out simple. We sent bits of text to eachother, and I eventually sent him a copy of my contact information, and bitcoin address. Then, came the real fun.. Upon figuring out how to write to @hyperliskdev's card, we started out simple. We sent bits of text to eachother, and I eventually sent him a copy of my contact information, and bitcoin address. Then, came the real fun..
By setting the data type to `external link`, and the content to [this totally not suspicious URL](https://www.youtube.com/watch?v=dQw4w9WgXcQ), we now had the perfect tool for derailing a lesson. An automatic [Rick Roll](https://en.wikipedia.org/wiki/Rickrolling) card. Upon tapping this card to a phone, the youtube app would auto-play *Rick Astley's Never Gonna Give You Up*. After this discovery, people started asking to buy pre-configured cards from me :laughing:. By setting the data type to `external link`, and the content to [this totally not suspicious URL](https://www.youtube.com/watch?v=dQw4w9WgXcQ), we now had the perfect tool for derailing a lesson. An automatic [Rick Roll](https://en.wikipedia.org/wiki/Rickrolling) card. Upon tapping this card to a phone, the youtube app would auto-play *Rick Astley's Never Gonna Give You Up*. After this discovery, people started asking to buy pre-configured cards from me 😆.
After this came even more fun ideas: After this came even more fun ideas:
- Enabling flashlights - Enabling flashlights

View File

@ -82,6 +82,6 @@ Finally, a request is made to `http(s)://<baseurl>/<groupID>/<artifactID>/<versi
***Case 3.*** The client has asked for an artifact's JAR file. In this case, the backend will first make sure the artifact exists, then make a request out to the GitHub API, and ask for the correct asset URL on GitHub's servers. With this url, Ultralight just crafts an [HTTP 302](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) response. This makes the client actually request from GitHub itself instead of the Ultralight server, thus Ultralight never needs to store any artifacts. ***Case 3.*** The client has asked for an artifact's JAR file. In this case, the backend will first make sure the artifact exists, then make a request out to the GitHub API, and ask for the correct asset URL on GitHub's servers. With this url, Ultralight just crafts an [HTTP 302](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) response. This makes the client actually request from GitHub itself instead of the Ultralight server, thus Ultralight never needs to store any artifacts.
Both to make the experience faster, and to get around GitHub's rate limiting on the tags API, Ultralight sends the client [`stale-while-revalidate`](https://vercel.com/docs/edge-network/caching#stale-while-revalidate) cache control headers. This forces the Vercel server that hosts Ultralight to only update its cache once per minute (slightly slower than the GitHub rate limit :wink:) Both to make the experience faster, and to get around GitHub's rate limiting on the tags API, Ultralight sends the client [`stale-while-revalidate`](https://vercel.com/docs/edge-network/caching#stale-while-revalidate) cache control headers. This forces the Vercel server that hosts Ultralight to only update its cache once per minute (slightly slower than the GitHub rate limit 😉)
For instructions on how to set up your own maven server using Ultralight, see the [README](https://github.com/Ewpratten/ultralight#ultralight) on GitHub. For instructions on how to set up your own maven server using Ultralight, see the [README](https://github.com/Ewpratten/ultralight#ultralight) on GitHub.

View File

@ -186,7 +186,7 @@ You now have a firmware-unlocked Vortex Core.
## Flashing QMK ## Flashing QMK
*Its time for the last step :tada:* *Its time for the last step 🎉*
With the keyboard unlocked, you can technically load anything you want on to it, but lets stick with QMK. The following commands will do all the hard work for you: With the keyboard unlocked, you can technically load anything you want on to it, but lets stick with QMK. The following commands will do all the hard work for you:

View File

@ -21,7 +21,7 @@ Ok, ok, I'm sure you are here for actual technical talk, and not a history lesso
## How do you even get IPv4 space? ## How do you even get IPv4 space?
These days, the minimum [BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)-routable IPv4 block is a `/24` subnet, coming in at 255 addresses. One of these blocks auctions for prices starting around 15 thousand dollars USD. I'd say that's slightly unachievable for a college student like me, but when I come to think about it, that's still about the same as a year of tuition and housing, so... :eyes: These days, the minimum [BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)-routable IPv4 block is a `/24` subnet, coming in at 255 addresses. One of these blocks auctions for prices starting around 15 thousand dollars USD. I'd say that's slightly unachievable for a college student like me, but when I come to think about it, that's still about the same as a year of tuition and housing, so... 👀
Alright, enough getting side-tracked. I'd rather pay $0 for some IP space if possible, and luckily for me, it is! I am a licensed [Amateur Radio operator](https://en.wikipedia.org/wiki/Amateur_radio), and through this, I get to make use of a few cool license-restricted services run by and for other operators. One of such services is [AMPRNet](https://en.wikipedia.org/wiki/AMPRNet), a `/8` subnet of public IP space specifically assigned for Amateur Radio Digital Communications back in 1981, and self-administered by radio amateurs. The governing body of this subnet is the [Amateur Radio Digital Communications](https://www.ampr.org/) (ARDC) foundation. Through their web portal, with a manually-verified account, any amateur can request subnets or single addresses under the `44.0.0.0/8` subnet. Alright, enough getting side-tracked. I'd rather pay $0 for some IP space if possible, and luckily for me, it is! I am a licensed [Amateur Radio operator](https://en.wikipedia.org/wiki/Amateur_radio), and through this, I get to make use of a few cool license-restricted services run by and for other operators. One of such services is [AMPRNet](https://en.wikipedia.org/wiki/AMPRNet), a `/8` subnet of public IP space specifically assigned for Amateur Radio Digital Communications back in 1981, and self-administered by radio amateurs. The governing body of this subnet is the [Amateur Radio Digital Communications](https://www.ampr.org/) (ARDC) foundation. Through their web portal, with a manually-verified account, any amateur can request subnets or single addresses under the `44.0.0.0/8` subnet.
@ -89,7 +89,7 @@ This means, for only $5USD per month (yes, $5) I get a gateway server, a private
Now equipped with everything I needed to route my `/24` IP space, I was left with one last step: *actually doing it*. Back on the [Facebook BGP](https://engineering.fb.com/2021/10/05/networking-traffic/outage-details/) issues, I really didn't want to screw this part up, so I once again went looking for help. Luckily after asking around my college, I was introduced to [Felix Carapaica](https://www.linkedin.com/in/felixgustavocarapaica/), Sheridan's resident BGP expert. Now equipped with everything I needed to route my `/24` IP space, I was left with one last step: *actually doing it*. Back on the [Facebook BGP](https://engineering.fb.com/2021/10/05/networking-traffic/outage-details/) issues, I really didn't want to screw this part up, so I once again went looking for help. Luckily after asking around my college, I was introduced to [Felix Carapaica](https://www.linkedin.com/in/felixgustavocarapaica/), Sheridan's resident BGP expert.
My goal for this new network of mine was to have a single gateway server that exposes a [Wireguard](https://www.wireguard.com/) server, where each VPN client is assigned a *public* static IP address. Felix was very helpful and provided me with instructions on simulating my entire networking setup in [GNS3](https://www.gns3.com/). Once I was satisfied with my test environment, I proceeded to replicate everything in real life on the gateway server, and it worked first try! Seriously. I know that never happens, but :man_shrugging: My goal for this new network of mine was to have a single gateway server that exposes a [Wireguard](https://www.wireguard.com/) server, where each VPN client is assigned a *public* static IP address. Felix was very helpful and provided me with instructions on simulating my entire networking setup in [GNS3](https://www.gns3.com/). Once I was satisfied with my test environment, I proceeded to replicate everything in real life on the gateway server, and it worked first try! Seriously. I know that never happens, but 🤷‍♂️
For anyone curious on what BGP routing on a Vultr VPS involves, check out [Vultr's Documentation](https://www.vultr.com/docs/configuring-bgp-on-vultr) on the matter. For anyone curious on what BGP routing on a Vultr VPS involves, check out [Vultr's Documentation](https://www.vultr.com/docs/configuring-bgp-on-vultr) on the matter.

View File

@ -65,7 +65,7 @@ let line = LineSegment2D {
> In mathematics, the quaternion number system extends the complex numbers. Quaternions were first described by Irish mathematician William Rowan Hamilton in 1843 and applied to mechanics in three-dimensional space.<br> > In mathematics, the quaternion number system extends the complex numbers. Quaternions were first described by Irish mathematician William Rowan Hamilton in 1843 and applied to mechanics in three-dimensional space.<br>
> \[[Wikipedia](https://en.wikipedia.org/wiki/Quaternion)\] > \[[Wikipedia](https://en.wikipedia.org/wiki/Quaternion)\]
Quaternions are essentially 4-dimensional numbers consisting of one real, and three imaginary components. They are expressed with the components $w$, $i$, $j$, and $k$. So far, this sounds pretty scary, but it is a lot simpler to deal with when you remember mathematicians like overcomplicating their variable names :wink: Quaternions are essentially 4-dimensional numbers consisting of one real, and three imaginary components. They are expressed with the components $w$, $i$, $j$, and $k$. So far, this sounds pretty scary, but it is a lot simpler to deal with when you remember mathematicians like overcomplicating their variable names 😉
The following is a slightly modified version of the quaternion expression, made to express the concept in a more computer-oriented manner: The following is a slightly modified version of the quaternion expression, made to express the concept in a more computer-oriented manner:

View File

@ -22,7 +22,7 @@ As it turns out, this Linux-based device allows you (like any embedded Linux com
## Enter: SSH ## Enter: SSH
If you own a UDM-Pro, you surely know how to log in to it via SSH. If not, look it up :smile:. If you own a UDM-Pro, you surely know how to log in to it via SSH. If not, look it up 🙂.
With an SSH connection open, the following commands let you control the fans on the device! With an SSH connection open, the following commands let you control the fans on the device!

View File

@ -35,4 +35,4 @@ To get VP to launch correctly:
~~SEO?~~ I will probably run in to this issue again a few more times, so why not write it down instead of digging through a [crash report](https://forums.visual-paradigm.com/t/visual-paradigm-crashes-on-fedora-36/17562/5) from the second page of google. ~~SEO?~~ I will probably run in to this issue again a few more times, so why not write it down instead of digging through a [crash report](https://forums.visual-paradigm.com/t/visual-paradigm-crashes-on-fedora-36/17562/5) from the second page of google.
..and ya. SEO. Lots of juicy keywords are to be had in this document :wink: ..and ya. SEO. Lots of juicy keywords are to be had in this document 😉

View File

@ -19,4 +19,4 @@ Firstly, there is a new domain name! I should have done this a while ago, but no
Secondly, this site is now anycasted and edge cached. Hopefully this change will make the browsing experience a little faster for viewers outside of North America. [HTTP/3](https://en.wikipedia.org/wiki/HTTP/3) is now supported too. In the future, I might even set up some older protocols (Gopher, FTP, ..telnet..?) for fun. Info on that will come in a later post. Secondly, this site is now anycasted and edge cached. Hopefully this change will make the browsing experience a little faster for viewers outside of North America. [HTTP/3](https://en.wikipedia.org/wiki/HTTP/3) is now supported too. In the future, I might even set up some older protocols (Gopher, FTP, ..telnet..?) for fun. Info on that will come in a later post.
Anyways, thanks for reading. I'm always amazed to see my analytics data. A surprising number of people read these posts :smile: Anyways, thanks for reading. I'm always amazed to see my analytics data. A surprising number of people read these posts 🙂

View File

@ -87,4 +87,4 @@ const BANNED_TERMS = [
## A side effect of doing this ## A side effect of doing this
And now, after publishing this post, I am about to share it on Hacker News... where I will never be able to find it again because the title of *this post* contains the term `AI` as well :facepalm: And now, after publishing this post, I am about to share it on Hacker News... where I will never be able to find it again because the title of *this post* contains the term `AI` as well 🤦‍♂️

View File

@ -61,7 +61,7 @@ The top 10 packet sources (RF and internet) are:
![](/assets/blog/aprs-usage/top_10_sources.png) ![](/assets/blog/aprs-usage/top_10_sources.png)
And look! I'm in there :laughing:. My `VA3UJF-1` station that injects canadian passenger train telemetry into the APRS network sits at position #8. The [WINLINK](https://aprs.fi/info/a/Winlink) station takes first place though. This is another automated station for bridging [WinLink](https://winlink.org/) and APRS traffic. And look! I'm in there 😆. My `VA3UJF-1` station that injects canadian passenger train telemetry into the APRS network sits at position #8. The [WINLINK](https://aprs.fi/info/a/Winlink) station takes first place though. This is another automated station for bridging [WinLink](https://winlink.org/) and APRS traffic.
How about the destinations? How about the destinations?

View File

@ -42,7 +42,7 @@ Of course, in real life, the wiring looks a.. um.. appropriate amount of sketchy
## A custom LED controller ## A custom LED controller
The LED controller that came with my LED strips isn't awesome... mainly because it doesn't even power on :laughing:. So, equipped with an Arduino and a soldering iron, I set out to make my own. The LED controller that came with my LED strips isn't awesome... mainly because it doesn't even power on 😆. So, equipped with an Arduino and a soldering iron, I set out to make my own.
The software isn't really important here, since its basically the [NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) example code, but I did opt to make my program function with one button. The software isn't really important here, since its basically the [NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) example code, but I did opt to make my program function with one button.

View File

@ -34,7 +34,7 @@ Having already built one of these antennas before, I just set out to the local C
So I began searching for *literally anything conductive*, and came across a pile of spools of 24-ft "lamp wire". So I began searching for *literally anything conductive*, and came across a pile of spools of 24-ft "lamp wire".
Lamp wire looks like speaker wire, so I figured its probably fine. Although the **24ft** part was a bit more of a problem. You generally don't want to build your antennas *too short*, but :man_shrugging: thats what antenna tuners are for I guess. Lamp wire looks like speaker wire, so I figured its probably fine. Although the **24ft** part was a bit more of a problem. You generally don't want to build your antennas *too short*, but 🤷‍♂️ thats what antenna tuners are for I guess.
Armed with a surprisingly large amount of wire, I began the process of splicing and measuring. Armed with a surprisingly large amount of wire, I began the process of splicing and measuring.
@ -104,4 +104,4 @@ Pictured above, days 1 & 2, and below 3 & 4.
![](/assets/blog/camping-radio/IMG_0218.jpg) ![](/assets/blog/camping-radio/IMG_0218.jpg)
All on...*checks notes*.. 7 watts :slightly_smiling_face: All on...*checks notes*.. 7 watts 🙂