add all the images

This commit is contained in:
Kaan Barmore-Genç 2023-11-19 17:32:25 -06:00
parent b6b750b16a
commit 3eddc387b1
Signed by: kaan
GPG key ID: B2E280771CD62FCF
63 changed files with 483 additions and 22 deletions

49
package-lock.json generated
View file

@ -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,

View file

@ -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",

View file

@ -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 {

View file

View 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>

View file

@ -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)) };
}

View file

@ -1,4 +0,0 @@
---
title: foo
date: 2023
---

BIN
static/apple-touch-icon.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
static/extra/cv.pdf Executable file

Binary file not shown.

70
static/extra/emacs.css Normal file
View 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
View file

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGLIy/wBEADIJv4lLqYooKxO/JGNfJlg75aT9Klv8upT4j5GgOy8NXQyg9HY
J3r7N2YFBmoiWjgm2MBV1kO43jJae5HWWw5fHY3G2n1j3b1Lj9g8AOIdyMbLQwXC
RW1bfCRBxDETBeNjLcu20QU9FEPifyxesbXucJiFpEn/SwuT6sb316vp7txt5FlY
XjHLUyiON40LMG1Wv90VIy+MNuLMzKELZFaPdSFZ0xw+ZStfIgMNmhnBROQoP6RB
4eWWPaVF6GskR+w/Aaz9o+kOWVPTYalAUxLUpTeOr6hwO6aJ74YTs9cQQwWMXZRm
bAlwmNjK4XcmU4ak1OG2h7a+NUdYHKqw9/LLm3bFIqYhygpUOv9KBawMT/Alunym
Ak1yo2eR+Nf8qp2j0WobAJfFFRiQI9d78oHaEe8lMKND6b189+uIj/A9VZECj8ma
1h80ewyxY2mY2z/K3jTAX0HL6LIt9WHSJQGV6pVlQkZZJfkcCrHCePsjAmCeRCca
wXm0I9HuKkDHiogOXMJ6WDi644cyAEy8KmKb9NlinnXW53rOIekQ6u6TZrjS/cD2
i7C3WnVwIAYWMwJ7RzbkyKhUuIX0zcnKuLa8YGKUU98CApqbsmFoyWxjfROEW3MZ
OrMPAAP/FfdUhkdIjH2Jp6B2kJyL/vrurkQ/SktvcYGa7yVskmEgtVvlSQARAQAB
tC9LYWFuIEdlbmMgKEthYW4gQmFybW9yZS1HZW7DpykgPGthYW5AYmdlbmMubmV0
PokCTgQTAQgAOBYhBPXexSaKpQHzX71ZeLLigHcc1i/PBQJiyMv8AhsDBQsJCAcC
BhUKCQgLAgQWAgMBAh4BAheAAAoJELLigHcc1i/PcPwQAIuFesWu+xHeft2duYta
J/tGSdnats9k0nro/0zr2tpsT4AKT/SY1Nv/yECPRrG5jYVM6m6XEb52ZTNgM5H6
T730Dgy7Bcxe7HsqQ2lUk/uWef2MFIUNvQe2m7+iOyBHhJUXGyPN6tVhk5gp9Eow
PfKzbcJ9iqx2l7TeCykZFz/cO+2w2jlLavLihg5qZ5clnxmZUN2W9piUi0k7JJye
4DFFYSIAZScJrZV5lwZE01OfHn4Y2QPnUCc/IEhfBhGdpT8r8YJ7c7s75Y8zmk+Z
EKjJFnyJR9CbV7+JELmHLR7yyYqDZlWvWXGIdkgMunvdoB7uoKH9+onYIe6R3Lso
NL35r4vVe7q/yA1TplA750DdEHNaiKby5uXklpksoOaWhNdeUM8DrRAUUtTvPsKf
VhiJ8QtQel/FMz2UZWErF6cVCs1xLFRNwsq4UAXZj3LfIJNopD0/2FGRSrSE8GTl
KJuc+e1hsIHP/F9WSlITYE90qYm5YyPQ9j1kpV2jzAt5FoZxW4zqSjC6CvCzfdKR
aX8weD9KPLaOPEC9641qoe8uQUS9iy1TKUh+UrdB+7ZTqbB8xuXea7htW712xDEw
tBYgYy2O3LYCioqz9nib6PuQ2IJ5CuyWG+QdkjfUORSH0t6q1P1DsomMRcMsiMf7
dLd2/xLxfTNQMxFl3BrTYZUcuQINBGLIy/wBEAC+SEk2MnIIllcWci/ERD6IKQSh
/A+98WHdQORk5Fu7XaTpZ8ZwqFsdKr9bAADM5GqQnuLm+5p5eiJaUOScxioNnJzQ
xw1YbATZg271PefCHhddKUSIWZgCF1kf7xF3yWHzRMTu/Nsw3zTheNjuCFTb8dhC
FAcdUthUjcDWUWZxA4ISn1gfz2IdUf5J75vO7K9W2bCD+bQmQX8qfEU+z+6BTXPp
nZUDkTrEiMDGniwnHuXLtTA18g8+/6PvTrCUArVx/9QEeeJRZAsgAmzYoHTvCXE5
3DVF5E+zgmGXt9usU1bIHWXD7WR1/I07+LnXldNcY/V+p2OZiYA9aNbyNenMvy0j
VmRKEYMV+2NouQ4xaPTnP4YkZk33EpnVyQTc0fExIfCCSXLLONru9zqfO3JMKqy7
BkW23F8xDqBP5Il/1BoQDL5aZWt3dc4aFF4LaDBFbXPO7HBZswu0H67DEOzksZdH
710Cvsll37K7JqlHL3SQsYyl82m0g2pJQWVBbc+P3bw4SDVdGoGjo6eJq4KdSRtX
MqsmcRDhlhP4elb61I/+Gg6CAUxXHrqfEArQczZ1qpbWVe3soVE1WYYuNuZwUvt4
w3xQOj84HgiGn+unUC1ARgBFim382N8dBHWzYHXQwDFhpzAZv+zEgcTmg2d+kVfz
3gb3OMGGz/ydLWEGfQARAQABiQI2BBgBCAAgFiEE9d7FJoqlAfNfvVl4suKAdxzW
L88FAmLIy/wCGwwACgkQsuKAdxzWL8+bEA//a0+qEztxg4Yu15KqjtABwe1r8+u1
uRlVqmbSZdpdhbDA6cb++PeQKy1r6MABKeMyDP6aKXykGfGNjY/bQWwkqiUdUjRj
pM0MAD4awOgiVDjvVdc8crqncwAzP90KwcFx16GTk4B0JokWw2bxrPeaQuRqj+EP
pIZMFU201pWynT491Gl8mKPuSoJHgUjDX6pemk9QYTrji78VNVYnj1DaXBNULp4x
TlCp9s50VuyVCgYyJm8r1QL8579aKXvF2lw/7bNwH2xqXNAerXCa7tuKl4s3tQds
bfn/xI4PHFkYS9H+XfcWTH1bwi3mdsnNdNHO2Qlek4ak2jba+ngC4EVETvHyUsNM
+JIOttNUxX+/EvnKlhkBttyNomdoGf9E1GowNLVUXpqOurJY9gJDwE2P2z6FJgRR
DPmK5u4SDnw67u+XdiWZZlvoNgY+ihtl1/4u9+9WEDI+XeMuD/qnXqbObNtVLLOu
Bvlq8sFqC/WL5B80E3xEBK7GjVlGnXCdhmGxt5hVC5ZPuKwzfU8zCeW65hACA+f5
eRzAtlfEVxxTRdlUZhjlkIxQdUGFKEax0lnEC7RNNNz4V02Udv/AexVBh8KMhdwi
18kzFejzCGurVuOzOFAtWjf+cOVbOb63Gk9UGMgnZLTPRLMeHmEi/FmdBJw5+IQF
2Vw6bCeYRslIgNo=
=tme2
-----END PGP PUBLIC KEY BLOCK-----

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

BIN
static/img/eww.png (Stored with Git LFS) Normal file

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

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

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

57
static/portfolio.md Normal file
View 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
View 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

Binary file not shown.