diff --git a/package-lock.json b/package-lock.json index 08c94c1..ddb68d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,14 @@ "devDependencies": { "@sveltejs/adapter-auto": "^2.1.1", "@sveltejs/kit": "^1.27.6", + "@types/lodash": "^4.14.201", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", + "date-fns": "^2.30.0", "eslint": "^8.54.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-svelte": "^2.35.0", + "lodash": "^4.17.21", "mdsvex": "^0.11.0", "phosphor-svelte": "^1.3.0", "prettier": "^3.1.0", @@ -47,6 +50,18 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.18.20", "cpu": [ @@ -352,6 +367,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/lodash": { + "version": "4.14.201", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", + "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==", + "dev": true + }, "node_modules/@types/pug": { "version": "2.0.9", "dev": true, @@ -911,6 +932,22 @@ "node": ">=4" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "dev": true, @@ -1738,6 +1775,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "dev": true, @@ -2349,6 +2392,12 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, "node_modules/resolve-from": { "version": "4.0.0", "dev": true, diff --git a/package.json b/package.json index b40e862..19c97a2 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,14 @@ "devDependencies": { "@sveltejs/adapter-auto": "^2.1.1", "@sveltejs/kit": "^1.27.6", + "@types/lodash": "^4.14.201", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", + "date-fns": "^2.30.0", "eslint": "^8.54.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-svelte": "^2.35.0", + "lodash": "^4.17.21", "mdsvex": "^0.11.0", "phosphor-svelte": "^1.3.0", "prettier": "^3.1.0", diff --git a/src/routes/header.svelte b/src/routes/header.svelte index 8320a9a..35b2891 100644 --- a/src/routes/header.svelte +++ b/src/routes/header.svelte @@ -3,10 +3,10 @@
-
Kaan Barmore-Genç
+ Kaan Barmore-Genç - Portfolio - Blog + Portfolio + Blog
diff --git a/src/routes/posts/+page.ts b/src/routes/posts/+page.ts index ac210f7..d5b93d8 100644 --- a/src/routes/posts/+page.ts +++ b/src/routes/posts/+page.ts @@ -1,3 +1,5 @@ +import _ from 'lodash'; + export async function load() { const allPostFiles = import.meta.glob('/src/routes/posts/*.md'); const iterablePostFiles = Object.entries(allPostFiles); @@ -5,16 +7,13 @@ export async function load() { const posts = await Promise.all( iterablePostFiles.map(async ([path, resolver]) => { const { metadata } = await resolver(); - const postPath = path.slice(11, -3); return { meta: metadata, - path: postPath + path: _.trimEnd(_.last(path.split('/')), '.md') }; }) ); - console.log(posts); - - return { posts }; + return { posts: _.reverse(_.sortBy(posts, ({ meta }) => meta.date)) }; } diff --git a/src/routes/posts/test.md b/src/routes/posts/test.md deleted file mode 100644 index 4f6e419..0000000 --- a/src/routes/posts/test.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: foo -date: 2023 ---- diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000..5bc435c --- /dev/null +++ b/static/apple-touch-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a27ecea2409cc72320fa78dc1de59a0e1ece93ee9a29d35249ac0102604b0dbb +size 7576 diff --git a/static/extra/Crafty Poster.pdf b/static/extra/Crafty Poster.pdf new file mode 100644 index 0000000..7cdc040 Binary files /dev/null and b/static/extra/Crafty Poster.pdf differ diff --git a/static/extra/DepAware Poster.pdf b/static/extra/DepAware Poster.pdf new file mode 100644 index 0000000..0c82379 Binary files /dev/null and b/static/extra/DepAware Poster.pdf differ diff --git a/static/extra/cv.pdf b/static/extra/cv.pdf new file mode 100755 index 0000000..667af62 Binary files /dev/null and b/static/extra/cv.pdf differ diff --git a/static/extra/emacs.css b/static/extra/emacs.css new file mode 100644 index 0000000..58a26e2 --- /dev/null +++ b/static/extra/emacs.css @@ -0,0 +1,70 @@ +/* pygments.org "emacs" style */ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #008800; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #AA22FF; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #008800; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #008800; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #008800 } /* Comment.Preproc */ +.highlight .cpf { color: #008800; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #008800; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #008800; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #AA22FF; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #AA22FF } /* Keyword.Pseudo */ +.highlight .kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #00BB00; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BB4444 } /* Literal.String */ +.highlight .na { color: #BB4444 } /* Name.Attribute */ +.highlight .nb { color: #AA22FF } /* Name.Builtin */ +.highlight .nc { color: #0000FF } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #00A000 } /* Name.Function */ +.highlight .nl { color: #A0A000 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #B8860B } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BB4444 } /* Literal.String.Affix */ +.highlight .sb { color: #BB4444 } /* Literal.String.Backtick */ +.highlight .sc { color: #BB4444 } /* Literal.String.Char */ +.highlight .dl { color: #BB4444 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BB4444 } /* Literal.String.Double */ +.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BB4444 } /* Literal.String.Heredoc */ +.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ +.highlight .s1 { color: #BB4444 } /* Literal.String.Single */ +.highlight .ss { color: #B8860B } /* Literal.String.Symbol */ +.highlight .bp { color: #AA22FF } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #00A000 } /* Name.Function.Magic */ +.highlight .vc { color: #B8860B } /* Name.Variable.Class */ +.highlight .vg { color: #B8860B } /* Name.Variable.Global */ +.highlight .vi { color: #B8860B } /* Name.Variable.Instance */ +.highlight .vm { color: #B8860B } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/static/extra/kaangenc.gpg b/static/extra/kaangenc.gpg new file mode 100644 index 0000000..ad20456 --- /dev/null +++ b/static/extra/kaangenc.gpg @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +2Vw6bCeYRslIgNo= +=tme2 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png new file mode 100644 index 0000000..9f73657 --- /dev/null +++ b/static/favicon-16x16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af177b7f4dc5ddb5bc3419f25a2aa1015a5db266416673aa9335a6d6f09a02d3 +size 517 diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png new file mode 100644 index 0000000..40cb9c2 --- /dev/null +++ b/static/favicon-32x32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb18b66f0f4f4c77c86c76b2eab2a5cc94ff5040cca9c99487353aa66fbd3d6 +size 1101 diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..47de3bf Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/img/2022-03-29-00-16-13.png b/static/img/2022-03-29-00-16-13.png new file mode 100644 index 0000000..31121d1 --- /dev/null +++ b/static/img/2022-03-29-00-16-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c0da82520fde8df3098b9724eed3140b02f56bac37bc3c686fe1731f6ac7ec4 +size 18088 diff --git a/static/img/2022-03-29-00-17-38.png b/static/img/2022-03-29-00-17-38.png new file mode 100644 index 0000000..0bbe279 --- /dev/null +++ b/static/img/2022-03-29-00-17-38.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f8d8229542e52ffe49fe4832e8a778693368fac6c16e7fdb193ab108d4a4817 +size 23489 diff --git a/static/img/2022-03-29-00-20-48.png b/static/img/2022-03-29-00-20-48.png new file mode 100644 index 0000000..81525f7 --- /dev/null +++ b/static/img/2022-03-29-00-20-48.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c079fa5209fd78d19fb65ff2723ee4c37e00ec8349428604bbfabc9f84afb64 +size 9464 diff --git a/static/img/2022-03-29-00-22-48.png b/static/img/2022-03-29-00-22-48.png new file mode 100644 index 0000000..546db8f --- /dev/null +++ b/static/img/2022-03-29-00-22-48.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcdf64dda68214a83fc46d2306b5d6800fd023359d774811d9ed296971b54bee +size 253890 diff --git a/static/img/2022-12-17.firefox.xml-parsing-error.png b/static/img/2022-12-17.firefox.xml-parsing-error.png new file mode 100644 index 0000000..62c9b71 --- /dev/null +++ b/static/img/2022-12-17.firefox.xml-parsing-error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8db9e0967b1242773ae909e1f0989b0aac19d289af31d1f4fb85b278b3ffe77 +size 9340 diff --git a/static/img/2023-04-25.tailscale.png b/static/img/2023-04-25.tailscale.png new file mode 100644 index 0000000..f4aba4e --- /dev/null +++ b/static/img/2023-04-25.tailscale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcd75bd3a362146581c204d22f7d83461fc4d2c6543e7aa0ec6d79b61ebe4cd6 +size 15384 diff --git a/static/img/2023-08-10.chartjs.png b/static/img/2023-08-10.chartjs.png new file mode 100644 index 0000000..9bd5146 --- /dev/null +++ b/static/img/2023-08-10.chartjs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63ec23bd29d1752c8451ba2bcd85a94d3364f7771bfae52ad3a041e8038034f0 +size 37015 diff --git a/static/img/ace-jump-mode.png b/static/img/ace-jump-mode.png new file mode 100644 index 0000000..fc52672 --- /dev/null +++ b/static/img/ace-jump-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:925877b33606ab5bec788cda38a0c588dd5933e8e58acd78915a99df8239d3db +size 141262 diff --git a/static/img/app-search-bar.png b/static/img/app-search-bar.png new file mode 100644 index 0000000..57d9d6f --- /dev/null +++ b/static/img/app-search-bar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d650120b02013cdad70681ba6fa8747d23493b127df56c514228172fbee08d7 +size 12490 diff --git a/static/img/browser-caching-after.png b/static/img/browser-caching-after.png new file mode 100644 index 0000000..6145092 --- /dev/null +++ b/static/img/browser-caching-after.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50d32e24aacb1ce97ca3f5462d5efb8be048d6066e85751a01cd58b9689909df +size 78106 diff --git a/static/img/browser-caching-before.png b/static/img/browser-caching-before.png new file mode 100644 index 0000000..4e51cd3 --- /dev/null +++ b/static/img/browser-caching-before.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd0f5a04f63cdef5b74fc958119540cb916e1a95ac00e43558afeb5d899dcbc5 +size 29473 diff --git a/static/img/bulgur-cloud-2022-12-30.png b/static/img/bulgur-cloud-2022-12-30.png new file mode 100644 index 0000000..0daf9cf --- /dev/null +++ b/static/img/bulgur-cloud-2022-12-30.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dfc94801a5e42dca8966a3caa22b839d90790d3731ed20e94910889de58b066 +size 22813 diff --git a/static/img/bulgur-cloud-basic-html.png b/static/img/bulgur-cloud-basic-html.png new file mode 100644 index 0000000..35daa6e --- /dev/null +++ b/static/img/bulgur-cloud-basic-html.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6f53c255a32cf30d3d83d400819d1cb4e95f6760f066d0867639f72a104197c +size 34909 diff --git a/static/img/cc-by-sa-4.0-88x31.png b/static/img/cc-by-sa-4.0-88x31.png new file mode 100644 index 0000000..9bcbea0 --- /dev/null +++ b/static/img/cc-by-sa-4.0-88x31.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:711f595442eb4f967e61940b1982cbacdae280fd38c3ec4d4950a7127ced78fe +size 1621 diff --git a/static/img/company-flycheck.png b/static/img/company-flycheck.png new file mode 100644 index 0000000..72530c1 --- /dev/null +++ b/static/img/company-flycheck.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b6bde7c01f690f12b448e9684667abc8880f643f7614ee8096ebb67dc5961fc +size 59286 diff --git a/static/img/deus-ex-render-settings.png b/static/img/deus-ex-render-settings.png new file mode 100644 index 0000000..57b1acc --- /dev/null +++ b/static/img/deus-ex-render-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:578b51bcabe31c16c21b531b158c1070d510a90e7614529184c13b9519cffbc7 +size 506915 diff --git a/static/img/deus-ex-renderer-comparison.png b/static/img/deus-ex-renderer-comparison.png new file mode 100644 index 0000000..01858cb --- /dev/null +++ b/static/img/deus-ex-renderer-comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:872b73dcbdf6a117886b199ff6cda606a390f4340662d92202ffeb2c2a153ebb +size 1356945 diff --git a/static/img/devcontainer-debian-example.png b/static/img/devcontainer-debian-example.png new file mode 100644 index 0000000..382f50b --- /dev/null +++ b/static/img/devcontainer-debian-example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f956c04f18968350598589511350a9b16c83ddd6ef73f902572c71efda30634 +size 11155 diff --git a/static/img/docview.png b/static/img/docview.png new file mode 100644 index 0000000..618ac8f --- /dev/null +++ b/static/img/docview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cde0a76dce3520e2bf248272848feb5d4cc3215b7a22e72a3b6ded442196e89 +size 118082 diff --git a/static/img/elfeed.png b/static/img/elfeed.png new file mode 100644 index 0000000..7e89947 --- /dev/null +++ b/static/img/elfeed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d32f857f52aa821ef983d90284fde91ff5fb356b0547608aca2c77633656740 +size 347307 diff --git a/static/img/emacs-terminal.png b/static/img/emacs-terminal.png new file mode 100644 index 0000000..0a84153 --- /dev/null +++ b/static/img/emacs-terminal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82b9703dc809b7989c28ae3b61fe61931239890af7cebbc1f842bec1cd67c73a +size 49244 diff --git a/static/img/erc.png b/static/img/erc.png new file mode 100644 index 0000000..d64487f --- /dev/null +++ b/static/img/erc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58fa1ef55940d41ebf1902fb5fdaf3e66b42bd674ac3b92aafa38c26639a1940 +size 126176 diff --git a/static/img/eshell.png b/static/img/eshell.png new file mode 100644 index 0000000..c5e2b64 --- /dev/null +++ b/static/img/eshell.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03727f2cbd4b1719cb6581620791558ef203d47740e590260c19b677663483b4 +size 128005 diff --git a/static/img/eww.png b/static/img/eww.png new file mode 100644 index 0000000..50da7a4 --- /dev/null +++ b/static/img/eww.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9f1b0bc2e43ed2d1893f8abc6c4ae0bea9767072f293208135a2d2bb42f5adb +size 221277 diff --git a/static/img/game-cover.jpg b/static/img/game-cover.jpg new file mode 100644 index 0000000..bce97a0 Binary files /dev/null and b/static/img/game-cover.jpg differ diff --git a/static/img/gh-do-not-merge-action.png b/static/img/gh-do-not-merge-action.png new file mode 100644 index 0000000..c0edf8a --- /dev/null +++ b/static/img/gh-do-not-merge-action.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4a8f9ac9cc8a68e33a615e397dacf8ef598fd57746ee84f9aba7095904d9837 +size 87515 diff --git a/static/img/gh-do-not-merge-fail.png b/static/img/gh-do-not-merge-fail.png new file mode 100644 index 0000000..77195e9 --- /dev/null +++ b/static/img/gh-do-not-merge-fail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39cbf3a20c178548441073548c957e4e211d96b43af997402a2f98cec8a6b657 +size 42943 diff --git a/static/img/gh-menu-actions-general.png b/static/img/gh-menu-actions-general.png new file mode 100644 index 0000000..c9a7a84 --- /dev/null +++ b/static/img/gh-menu-actions-general.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0c1ec9df09b8bc78e9f347a964538df8c3f16cc8c6e9ee4b0646effba6e6f63 +size 15153 diff --git a/static/img/gh-repository-defaults-labels.png b/static/img/gh-repository-defaults-labels.png new file mode 100644 index 0000000..b46e031 --- /dev/null +++ b/static/img/gh-repository-defaults-labels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20f1bc8fff6179ea47270ba776c75b674650a65902932a7d43a441f7d84629cc +size 35030 diff --git a/static/img/gh-repository-defaults.png b/static/img/gh-repository-defaults.png new file mode 100644 index 0000000..2591f71 --- /dev/null +++ b/static/img/gh-repository-defaults.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10a6dade5df66fa4646ba7d330d78aa1989b617384a1db95372431141e5e0ee2 +size 12928 diff --git a/static/img/gh-required-workflows-config.png b/static/img/gh-required-workflows-config.png new file mode 100644 index 0000000..9103f32 --- /dev/null +++ b/static/img/gh-required-workflows-config.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42cadb704d321de6987732aeb94975bc7724ef38ebe908781ab4f58fea21a1b4 +size 78267 diff --git a/static/img/gh-required-workflows.png b/static/img/gh-required-workflows.png new file mode 100644 index 0000000..073ba90 --- /dev/null +++ b/static/img/gh-required-workflows.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44268248745eddfe4e32c20b189a0751583e10037e6580c6b7bfc33d277f2a01 +size 30175 diff --git a/static/img/magit.png b/static/img/magit.png new file mode 100644 index 0000000..16e87cc --- /dev/null +++ b/static/img/magit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b190ac4f45f46372135af93d0a7d36a16b1ecb0985bf32aa9d72194f18e0ba7 +size 95474 diff --git a/static/img/mu4e.png b/static/img/mu4e.png new file mode 100644 index 0000000..d02eb7e --- /dev/null +++ b/static/img/mu4e.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35736d8856add25fe9485423084214a5a4fb323cb8708f30bdc2dde7882dc9b6 +size 94526 diff --git a/static/img/passmenu.png b/static/img/passmenu.png new file mode 100644 index 0000000..c1cefbd --- /dev/null +++ b/static/img/passmenu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9466ebe16de3397449e5389748d7c990ca748793346d146bd42a3debc9bc7ffe +size 189131 diff --git a/static/img/password_store.png b/static/img/password_store.png new file mode 100644 index 0000000..787db15 --- /dev/null +++ b/static/img/password_store.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5eb13bc3c229f3fac6557b0a6a8ad49dded910e8d646f07f0b5abc5d9ff9c1c +size 19446 diff --git a/static/img/profile.2022.12.avif b/static/img/profile.2022.12.avif new file mode 100644 index 0000000..5030a6c Binary files /dev/null and b/static/img/profile.2022.12.avif differ diff --git a/static/img/profile.2022.12.jpeg b/static/img/profile.2022.12.jpeg new file mode 100644 index 0000000..b83a1d8 Binary files /dev/null and b/static/img/profile.2022.12.jpeg differ diff --git a/static/img/profile.2022.12.webp b/static/img/profile.2022.12.webp new file mode 100644 index 0000000..86af945 Binary files /dev/null and b/static/img/profile.2022.12.webp differ diff --git a/static/img/profile.jpg b/static/img/profile.jpg new file mode 100644 index 0000000..10d26a5 Binary files /dev/null and b/static/img/profile.jpg differ diff --git a/static/img/react-redux-after-flamegraph.png b/static/img/react-redux-after-flamegraph.png new file mode 100644 index 0000000..3b78162 --- /dev/null +++ b/static/img/react-redux-after-flamegraph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66c777475fdeac0d980f2029f1395c1cd0835079aac515e63ca68861da9c6f4 +size 134415 diff --git a/static/img/react-redux-component-hooks.png b/static/img/react-redux-component-hooks.png new file mode 100644 index 0000000..78e67a9 --- /dev/null +++ b/static/img/react-redux-component-hooks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f4b0e11e40d4e6b684cb2583bde5d6d6a832e75b2dacd05afa9bbdb32792627 +size 66856 diff --git a/static/img/react-redux-rerender-flamegraph.png b/static/img/react-redux-rerender-flamegraph.png new file mode 100644 index 0000000..3748258 --- /dev/null +++ b/static/img/react-redux-rerender-flamegraph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1ea7fd467399164fec9af66956e4714f94a2dfd351b2b0df240ef30064d51db +size 166123 diff --git a/static/img/tor-censorship-snowflake-chart.webp b/static/img/tor-censorship-snowflake-chart.webp new file mode 100644 index 0000000..9cf3c16 Binary files /dev/null and b/static/img/tor-censorship-snowflake-chart.webp differ diff --git a/static/portfolio.md b/static/portfolio.md new file mode 100644 index 0000000..5094fa4 --- /dev/null +++ b/static/portfolio.md @@ -0,0 +1,57 @@ +This page lists the projects that I'm most proud of, and that I'm actively developing and supporting. + +### [Gandi Live Dns Rust ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/gandi-live-dns-rust) ![Docker Pulls](https://img.shields.io/docker/pulls/seriousbug/gandi-live-dns-rust)](https://github.com/SeriousBug/gandi-live-dns-rust) + +A dynamic DNS system that works with Gandi's live DNS feature. Allows you to +host servers without a static IP address by updating DNS records whenever your +IP changes. Flexible deployments through Docker or system packages with systemd +timers. + +### [Cuttlestore ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/cuttlestore) ![Crates.io](https://img.shields.io/crates/d/cuttlestore)](https://github.com/SeriousBug/cuttlestore) + +A generic key-value storage library for Rust. Cuttlestore allows you to write +your code once and run it on many key-value stores. Right now it comes with +support for Redis and Sqlite, with planned support for CouchDB and DynamoDB. + +### [Rust Embed for Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/rust-embed-for-web) ![Crates.io](https://img.shields.io/crates/d/rust-embed-for-web)](https://github.com/SeriousBug/rust-embed-for-web) + +Embed files into your Rust executable. You can embed HTML, CSS, JavaScript +files, all your assets into your server to bundle them together. This simplifies +updates as your assets are always guaranteed to update together with your server. + +This started as a fork of an existing project, but became a significant rewrite +of it. It includes many features useful for web servers like precomputed header +values and precompressed file contents. + +### [Rust Embed Responder for Actix Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/actix-web-rust-embed-responder) ![Crates.io](https://img.shields.io/crates/d/actix-web-rust-embed-responder)](https://github.com/SeriousBug/actix-web-rust-embed-responder) + +A sibling project to Rust Embed for Web, this is a responder for Actix Web that +efficiently serves your embedded files. It handles cache validation and content +type negotiation, and is built for high performance. + +### [Bulgur Cloud ![GitHub Repo stars](https://img.shields.io/github/stars/bulgur-cloud/bulgur-cloud) ![Docker Pulls](https://img.shields.io/docker/pulls/seriousbug/bulgur-cloud)](https://github.com/bulgur-cloud/bulgur-cloud) + +![](https://media.githubusercontent.com/media/bulgur-cloud/bulgur-cloud.github.io/main/static/img/homepage-screenshot.png) + +An easy to self host cloud file storage and sharing system. It's similar to Google Drive or NextCloud, but effortless to set up and maintain. Built in Rust and TypeScript, using Actix-Web and React Native. + +### [live limit ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/live-limit) ![npm](https://img.shields.io/npm/dt/live-limit)](https://github.com/SeriousBug/live-limit) + +A TypeScript library that can limit the number of concurrent async operations +running at a time. This is useful for making concurrent requests to a server +without overloading your connection. Works with promises, has no dependencies, +and comes under 1kb minzipped. + +### [Query Method Middleware for Actix Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/actix-web-query-method-middleware) ![Crates.io](https://img.shields.io/crates/d/actix-web-query-method-middleware)](https://github.com/SeriousBug/actix-web-query-method-middleware) + +Actix Web middleware that allows you to submit HTML forms using methods other +than `POST`. Forms normally can only be submitted through `GET` or `POST` +methods, but this middleware reroutes requests using a query parameter to other +methods. + +### [Http Drogue](https://github.com/SeriousBug/http-drogue) ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/http-drogue) + +![](https://raw.githubusercontent.com/SeriousBug/http-drogue/main/pub/screenshot.png) + +A tiny self-hosted service to download files over http, with support for resuming and restarting failed downloads. +Built with Rust, basic HTML templates using Askama, TailwindCSS, and DaisyUI. Uses no javascript! diff --git a/static/publications.md b/static/publications.md new file mode 100644 index 0000000..c6f7b44 --- /dev/null +++ b/static/publications.md @@ -0,0 +1,68 @@ +--- +no-ttr: true +--- + +
+## Crafty: Efficient, HTM-Compatible Persistent Transactions +
Kaan Genç, Michael D. Bond, and Guoqing Harry Xu
+
ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2020), Online, June 2020
+ +Crafty is a library for transactional storage, built for new non-volatile memory +hardware. Taking advantage of hardware transactional capabilities of modern +CPUs, it provides a low-overhead option that also eliminates the need for +additional concurrency control. + +[Talk](https://www.youtube.com/watch?v=wdVLlQXV1to) [Paper](https://dl.acm.org/doi/10.1145/3385412.3385991) [Extended Paper](https://arxiv.org/pdf/2004.00262.pdf) [Implementation](https://github.com/PLaSSticity/Crafty) [Poster](/extra/Crafty Poster.pdf) +
+ + +
+## Dependence Aware, Unbounded Sound Predictive Race Detection +
Kaan Genç, Jake Roemer, Yufan Xu, and Michael D. Bond
+
ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2019), Athens, Greece, October 2019
+ +This paper presents 2 data race detection analyses which analyze a single run of +a program to predict data races that can happen in other runs. These analyses +take advantage of data and control flow dependence to accurately understand how +the analyzed program works, expanding what races can be predicted. + +[Talk](https://www.youtube.com/watch?v=YgZWnc31tVQ) [Extended Paper (updated version)](https://arxiv.org/pdf/1904.13088.pdf) [Paper](https://dl.acm.org/doi/10.1145/3360605) [Corrigendum to paper](https://dl.acm.org/action/downloadSupplement?doi=10.1145%2F3360605&file=3360605-corrigendum.pdf) [Implementation](https://github.com/PLaSSticity/SDP-WDP-implementation) [Poster](/extra/DepAware Poster.pdf) +
+ + +
+## SmartTrack: Efficient Predictive Race Detection +
Jake Roemer, Kaan Genç, and Michael D. Bond
+
ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2020), Online, June 2020
+ +Predictive data race detection methods greatly improve the number of data races +found, but they typically significantly slow down programs compared to their +non-predictive counterparts. SmartTrack, through improved analyses and clever +algorithms, reduces their overhead to just around non-predictive analyses +without impacting their performance. + +[Paper](http://web.cse.ohio-state.edu/~mikebond/smarttrack-pldi-2020.pdf) [Extended Paper](https://arxiv.org/pdf/1905.00494.pdf) +
+ + +
+## High-Coverage, Unbounded Sound Predictive Race Detection +
Jake Roemer, Kaan Genç, and Michael D. Bond
+
ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2018), Philadelphia, PA, USA, June 2018
+ +Predictive data race detection methods typically walk a tight line between +predicting more races and avoiding false races. This paper presents a new +analysis that can predict more races, and a method to efficiently eliminate +false races. + +[Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018.pdf) [Extended Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018-xtr.pdf) +
+
+ +# Activities + +[PLDI 2021](https://pldi21.sigplan.org/track/pldi-2021-PLDI-Research-Artifacts) Artifact Evaluation Committee member + +[ASPLOS 2021](https://asplos-conference.org/2021/) Artifact Evaluation Committee member + +[OOPSLA 2020](https://2020.splashcon.org/track/splash-2020-Artifacts) Artifact Evaluation Committee member diff --git a/static/vid/react-redux-causes-re-renders.mp4 b/static/vid/react-redux-causes-re-renders.mp4 new file mode 100644 index 0000000..fc7d4e7 Binary files /dev/null and b/static/vid/react-redux-causes-re-renders.mp4 differ