diff --git a/astro.config.ts b/astro.config.ts index 2d24227..52cb67a 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -4,6 +4,7 @@ import sitemap from "@astrojs/sitemap"; import { astroImageTools } from "astro-imagetools"; import { remarkReadingTime } from "./plugin/remark-reading-time"; +import emoji from "remark-emoji"; import remarkMermaid from "astro-diagram/remark-mermaid"; // https://astro.build/config @@ -12,6 +13,6 @@ export default defineConfig({ integrations: [mdx(), sitemap(), astroImageTools], markdown: { syntaxHighlight: false, - remarkPlugins: [remarkReadingTime, remarkMermaid], + remarkPlugins: [remarkReadingTime, remarkMermaid, emoji], }, }); diff --git a/package-lock.json b/package-lock.json index 639a2e8..573a4ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "fork-awesome": "^1.2.0", "lodash-es": "^4.17.21", "mdast-util-to-string": "^4.0.0", - "reading-time": "^1.5.0" + "reading-time": "^1.5.0", + "remark-emoji": "^4.0.0" }, "devDependencies": { "@types/lodash-es": "^4.17.9", @@ -1394,6 +1395,17 @@ "node": ">= 8" } }, + "node_modules/@sindresorhus/is": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", + "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -2125,6 +2137,14 @@ "node": ">=4" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -2940,6 +2960,20 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==" + }, + "node_modules/emoticon": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", + "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5594,6 +5628,17 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" }, + "node_modules/node-emoji": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.0.tgz", + "integrity": "sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==", + "dependencies": { + "@sindresorhus/is": "^3.1.2", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -6507,6 +6552,83 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-emoji": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.0.tgz", + "integrity": "sha512-lQP1lFaYOz6zyJTBfOwYChM1YkgJEVcxSnUBkjo9qujqWwpY36MRFzDjYDk9YNdHqkw5yExB8MnVVHb6wX9QNA==", + "dependencies": { + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.0", + "node-emoji": "^2.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-emoji/node_modules/@types/mdast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.0.tgz", + "integrity": "sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-emoji/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==" + }, + "node_modules/remark-emoji/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-emoji/node_modules/mdast-util-find-and-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.0.tgz", + "integrity": "sha512-8wLPIKAvGdA5jgkI8AYKfSorV3og3vE6HA+gKeKEZydbi1EtUu2g4XCxIBj3R+AsFqY/uRtoYbH30tiWsFKkBQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-frontmatter": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", @@ -7035,6 +7157,17 @@ "npm": ">=5.6.0" } }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -7449,6 +7582,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "engines": { + "node": ">=4" + } + }, "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", diff --git a/package.json b/package.json index 37d8431..cb1aaff 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "fork-awesome": "^1.2.0", "lodash-es": "^4.17.21", "mdast-util-to-string": "^4.0.0", - "reading-time": "^1.5.0" + "reading-time": "^1.5.0", + "remark-emoji": "^4.0.0" }, "devDependencies": { "@types/lodash-es": "^4.17.9", diff --git a/src/content/partials/shortBio.md b/src/content/partials/shortBio.md index 2a4c455..e2fe508 100644 --- a/src/content/partials/shortBio.md +++ b/src/content/partials/shortBio.md @@ -1,8 +1,10 @@ -I'm a masters student at the University of Minnesota advised by [Favonia]. I -previously worked as a Software Developer at [AWS] and [SIFT]. My -computing-related interests lie in programming language design and formal -verification, systems security, cryptography, and distributed systems. +I'm a masters computer science student at the University of Minnesota advised by +[Favonia]. I currently work as a software engineer at [Swoop Search], and I've +worked at [AWS] and [SIFT] in the past. My computing-related interests lie in +programming language design and formal verification, systems security, +cryptography, and distributed systems. +[Swoop Search]: https://swoopsrch.com/ [aws]: https://aws.amazon.com/ [sift]: https://www.sift.net/ [favonia]: https://favonia.org/ diff --git a/src/content/posts/2023-09-01-ip-routing/cableHero.png b/src/content/posts/2023-09-01-ip-routing/cableHero.png new file mode 100644 index 0000000..efc8cbc Binary files /dev/null and b/src/content/posts/2023-09-01-ip-routing/cableHero.png differ diff --git a/src/content/posts/2023-09-01-ip-routing/index.md b/src/content/posts/2023-09-01-ip-routing/index.md new file mode 100644 index 0000000..cb5c8f9 --- /dev/null +++ b/src/content/posts/2023-09-01-ip-routing/index.md @@ -0,0 +1,28 @@ +--- +title: How IP routing works +date: 2023-09-01T03:50:38.386Z +tags: + - networking +draft: true + +heroImage: ./cableHero.png +heroAlt: futuristic photograph of a bunch of organized network cables +--- + +Many of us have probably heard of an IP address, but how does it actually work? +I'm going to try to give a high level overview to technical networking concepts. + +Throughout this post I'm going to keep referring back to a train station +analogy. We'll start off with a small network and build up into something that +scales into the internet we have today. + +## The simplest network + +First, the analogy isn't very far off. Just as there's multiple tracks +leading away from a train station, a computer has multiple ports to communicate +with other computers, and we typically call these **interfaces**. For example, a +laptop may have a Wi-Fi _interface_ and an Ethernet _interface_, while a cell +phone may have a cellular _interface_ as well. Server computers could have any +number of interfaces. + +You could imagine a simple network between 3 computers like this: diff --git a/src/pages/about.mdx b/src/pages/about.mdx index 752816c..e1c6d48 100644 --- a/src/pages/about.mdx +++ b/src/pages/about.mdx @@ -7,6 +7,8 @@ layout: ../layouts/BaseLayout.astro import Intro from "../content/partials/shortBio.md"; +Hi there! :wave: + ### Research @@ -16,8 +18,8 @@ write some blog posts as I learn more. My advisor is [Favonia]. ### University Involvement -During my time at the University of Minnesota, I like to be actively involved in -computing related student groups. +I also love to participate in computing related student groups at the University +of Minnesota. Here's some of the groups that I'm involved with: - **[GopherHack]**. I'm one of the founding officers at the GopherHack organization, hoping to grow a CTF community at the University. I prepare