add all the images
This commit is contained in:
parent
b6b750b16a
commit
3eddc387b1
49
package-lock.json
generated
49
package-lock.json
generated
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
</script>
|
||||
|
||||
<header>
|
||||
<div class="title">Kaan Barmore-Genç</div>
|
||||
<a href="/" class="title">Kaan Barmore-Genç</a>
|
||||
<Spacer />
|
||||
<a href="/foo">Portfolio</a>
|
||||
<a href="/foo">Blog</a>
|
||||
<a href="/portfolio">Portfolio</a>
|
||||
<a href="/posts">Blog</a>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
|
@ -19,10 +19,10 @@
|
|||
}
|
||||
|
||||
.title::before {
|
||||
content: '> ';
|
||||
content: '>';
|
||||
}
|
||||
.title::after {
|
||||
content: ' █';
|
||||
content: '█';
|
||||
color: var(--color-tertiary);
|
||||
}
|
||||
.title {
|
||||
|
|
0
src/routes/portfolio/+page.md
Normal file
0
src/routes/portfolio/+page.md
Normal file
|
@ -1,16 +1,60 @@
|
|||
<script lang="ts">
|
||||
import { format } from 'date-fns';
|
||||
import { entries } from 'lodash';
|
||||
|
||||
export let data;
|
||||
function groupPosts(posts: any[]) {
|
||||
const postsByYear = new Map<string, any[]>();
|
||||
posts.forEach((post) => {
|
||||
const year = format(new Date(post.meta.date), 'yyyy');
|
||||
if (!postsByYear.has(year)) {
|
||||
postsByYear.set(year, []);
|
||||
}
|
||||
postsByYear.get(year)!.push(post);
|
||||
});
|
||||
return postsByYear;
|
||||
}
|
||||
</script>
|
||||
|
||||
<ul>
|
||||
{#each data.posts as post}
|
||||
<ul class="years">
|
||||
{#each groupPosts(data.posts).entries() as [year, posts]}
|
||||
<li>
|
||||
<h2>
|
||||
<a href={post.path}>
|
||||
{post.meta.title}
|
||||
</a>
|
||||
</h2>
|
||||
Published {post.meta.date}
|
||||
<h2>{year}</h2>
|
||||
<ul class="posts">
|
||||
{#each posts as post}
|
||||
<a href={`/${post.path}`}>
|
||||
<li>
|
||||
<div>
|
||||
{post.meta.title}
|
||||
</div>
|
||||
<time datetime={post.meta.date}>
|
||||
{format(new Date(post.meta.date), 'MMMM d')}
|
||||
</time>
|
||||
</li>
|
||||
</a>
|
||||
{/each}
|
||||
</ul>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
|
||||
<style>
|
||||
time {
|
||||
width: 8rem;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
.years,
|
||||
.posts {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.years {
|
||||
gap: 4rem;
|
||||
}
|
||||
.posts {
|
||||
gap: 1.5rem;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import _ from 'lodash';
|
||||
|
||||
export async function load() {
|
||||
const allPostFiles = import.meta.glob<SvelteAllProps>('/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)) };
|
||||
}
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: foo
|
||||
date: 2023
|
||||
---
|
BIN
static/apple-touch-icon.png
(Stored with Git LFS)
Normal file
BIN
static/apple-touch-icon.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/extra/Crafty Poster.pdf
Normal file
BIN
static/extra/Crafty Poster.pdf
Normal file
Binary file not shown.
BIN
static/extra/DepAware Poster.pdf
Normal file
BIN
static/extra/DepAware Poster.pdf
Normal file
Binary file not shown.
BIN
static/extra/cv.pdf
Executable file
BIN
static/extra/cv.pdf
Executable file
Binary file not shown.
70
static/extra/emacs.css
Normal file
70
static/extra/emacs.css
Normal file
|
@ -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 */
|
52
static/extra/kaangenc.gpg
Normal file
52
static/extra/kaangenc.gpg
Normal file
|
@ -0,0 +1,52 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
2Vw6bCeYRslIgNo=
|
||||
=tme2
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
BIN
static/favicon-16x16.png
(Stored with Git LFS)
Normal file
BIN
static/favicon-16x16.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/favicon-32x32.png
(Stored with Git LFS)
Normal file
BIN
static/favicon-32x32.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
static/img/2022-03-29-00-16-13.png
(Stored with Git LFS)
Normal file
BIN
static/img/2022-03-29-00-16-13.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2022-03-29-00-17-38.png
(Stored with Git LFS)
Normal file
BIN
static/img/2022-03-29-00-17-38.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2022-03-29-00-20-48.png
(Stored with Git LFS)
Normal file
BIN
static/img/2022-03-29-00-20-48.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2022-03-29-00-22-48.png
(Stored with Git LFS)
Normal file
BIN
static/img/2022-03-29-00-22-48.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2022-12-17.firefox.xml-parsing-error.png
(Stored with Git LFS)
Normal file
BIN
static/img/2022-12-17.firefox.xml-parsing-error.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2023-04-25.tailscale.png
(Stored with Git LFS)
Normal file
BIN
static/img/2023-04-25.tailscale.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/2023-08-10.chartjs.png
(Stored with Git LFS)
Normal file
BIN
static/img/2023-08-10.chartjs.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/ace-jump-mode.png
(Stored with Git LFS)
Normal file
BIN
static/img/ace-jump-mode.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/app-search-bar.png
(Stored with Git LFS)
Normal file
BIN
static/img/app-search-bar.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/browser-caching-after.png
(Stored with Git LFS)
Normal file
BIN
static/img/browser-caching-after.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/browser-caching-before.png
(Stored with Git LFS)
Normal file
BIN
static/img/browser-caching-before.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/bulgur-cloud-2022-12-30.png
(Stored with Git LFS)
Normal file
BIN
static/img/bulgur-cloud-2022-12-30.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/bulgur-cloud-basic-html.png
(Stored with Git LFS)
Normal file
BIN
static/img/bulgur-cloud-basic-html.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/cc-by-sa-4.0-88x31.png
(Stored with Git LFS)
Normal file
BIN
static/img/cc-by-sa-4.0-88x31.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/company-flycheck.png
(Stored with Git LFS)
Normal file
BIN
static/img/company-flycheck.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/deus-ex-render-settings.png
(Stored with Git LFS)
Normal file
BIN
static/img/deus-ex-render-settings.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/deus-ex-renderer-comparison.png
(Stored with Git LFS)
Normal file
BIN
static/img/deus-ex-renderer-comparison.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/devcontainer-debian-example.png
(Stored with Git LFS)
Normal file
BIN
static/img/devcontainer-debian-example.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/docview.png
(Stored with Git LFS)
Normal file
BIN
static/img/docview.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/elfeed.png
(Stored with Git LFS)
Normal file
BIN
static/img/elfeed.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/emacs-terminal.png
(Stored with Git LFS)
Normal file
BIN
static/img/emacs-terminal.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/erc.png
(Stored with Git LFS)
Normal file
BIN
static/img/erc.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/eshell.png
(Stored with Git LFS)
Normal file
BIN
static/img/eshell.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/eww.png
(Stored with Git LFS)
Normal file
BIN
static/img/eww.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/game-cover.jpg
Normal file
BIN
static/img/game-cover.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
static/img/gh-do-not-merge-action.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-do-not-merge-action.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-do-not-merge-fail.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-do-not-merge-fail.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-menu-actions-general.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-menu-actions-general.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-repository-defaults-labels.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-repository-defaults-labels.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-repository-defaults.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-repository-defaults.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-required-workflows-config.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-required-workflows-config.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/gh-required-workflows.png
(Stored with Git LFS)
Normal file
BIN
static/img/gh-required-workflows.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/magit.png
(Stored with Git LFS)
Normal file
BIN
static/img/magit.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/mu4e.png
(Stored with Git LFS)
Normal file
BIN
static/img/mu4e.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/passmenu.png
(Stored with Git LFS)
Normal file
BIN
static/img/passmenu.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/password_store.png
(Stored with Git LFS)
Normal file
BIN
static/img/password_store.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/profile.2022.12.avif
Normal file
BIN
static/img/profile.2022.12.avif
Normal file
Binary file not shown.
BIN
static/img/profile.2022.12.jpeg
Normal file
BIN
static/img/profile.2022.12.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 201 KiB |
BIN
static/img/profile.2022.12.webp
Normal file
BIN
static/img/profile.2022.12.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
BIN
static/img/profile.jpg
Normal file
BIN
static/img/profile.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
static/img/react-redux-after-flamegraph.png
(Stored with Git LFS)
Normal file
BIN
static/img/react-redux-after-flamegraph.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/react-redux-component-hooks.png
(Stored with Git LFS)
Normal file
BIN
static/img/react-redux-component-hooks.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/react-redux-rerender-flamegraph.png
(Stored with Git LFS)
Normal file
BIN
static/img/react-redux-rerender-flamegraph.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
static/img/tor-censorship-snowflake-chart.webp
Normal file
BIN
static/img/tor-censorship-snowflake-chart.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
57
static/portfolio.md
Normal file
57
static/portfolio.md
Normal file
|
@ -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!
|
68
static/publications.md
Normal file
68
static/publications.md
Normal file
|
@ -0,0 +1,68 @@
|
|||
---
|
||||
no-ttr: true
|
||||
---
|
||||
|
||||
<div> <div class="publication">
|
||||
## Crafty: Efficient, HTM-Compatible Persistent Transactions
|
||||
<div class="authors">Kaan Genç, Michael D. Bond, and Guoqing Harry Xu</div>
|
||||
<div class="conf">ACM SIGPLAN Conference on Programming Language Design and Implementation <a href="https://pldi20.sigplan.org/home">(PLDI 2020)</a>, Online, June 2020</div>
|
||||
|
||||
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)
|
||||
</div>
|
||||
|
||||
|
||||
<div class="publication">
|
||||
## Dependence Aware, Unbounded Sound Predictive Race Detection
|
||||
<div class="authors">Kaan Genç, Jake Roemer, Yufan Xu, and Michael D. Bond</div>
|
||||
<div class="conf">ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications <a href="https://2019.splashcon.org/track/splash-2019-oopsla">(OOPSLA 2019)</a>, Athens, Greece, October 2019</div>
|
||||
|
||||
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)
|
||||
</div>
|
||||
|
||||
|
||||
<div class="publication">
|
||||
## SmartTrack: Efficient Predictive Race Detection
|
||||
<div class="authors">Jake Roemer, Kaan Genç, and Michael D. Bond</div>
|
||||
<div class="conf">ACM SIGPLAN Conference on Programming Language Design and Implementation <a href="https://pldi20.sigplan.org/home">(PLDI 2020)</a>, Online, June 2020 </div>
|
||||
|
||||
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)
|
||||
</div>
|
||||
|
||||
|
||||
<div class="publication">
|
||||
## High-Coverage, Unbounded Sound Predictive Race Detection
|
||||
<div class="authors">Jake Roemer, Kaan Genç, and Michael D. Bond</div>
|
||||
<div class="conf">ACM SIGPLAN Conference on Programming Language Design and Implementation <a href="https://pldi18.sigplan.org/">(PLDI 2018)</a>, Philadelphia, PA, USA, June 2018</div>
|
||||
|
||||
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)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
# 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
|
BIN
static/vid/react-redux-causes-re-renders.mp4
Normal file
BIN
static/vid/react-redux-causes-re-renders.mp4
Normal file
Binary file not shown.
Loading…
Reference in a new issue