version 0
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# repo structure
|
||||
|
||||
```
|
||||
dist/ this gets made into a tarball
|
||||
```
|
||||
|
||||
idea is for now it's just dumb html website, in the future it could be hakyll or some dynamic buildy thing... we'll see
|
||||
Vendored
Vendored
+33
@@ -0,0 +1,33 @@
|
||||
/* common definitions, such as colors */
|
||||
* {
|
||||
/* colors, picked randomishly off gajumining.com */
|
||||
--white: #f7f8fb;
|
||||
/* black */
|
||||
--black: #1a2b29;
|
||||
|
||||
/* fonts */
|
||||
--sfdefault: Helvetica, "Liberation Sans", FreeSans, Roboto, sans-serif;
|
||||
--ttdefault: Inconsolata, "Liberation Mono", "Roboto Mono", monospace;
|
||||
--def-line-height: 1.4;
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
background: var(--white);
|
||||
color: var(--black);
|
||||
font-family: var(--sfdefault);
|
||||
font-size: 12pt;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: var(--def-line-height);
|
||||
}
|
||||
|
||||
.content {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.toc2 { margin-left: 8px; }
|
||||
.toc3 { margin-left: 16px; }
|
||||
.toc4 { margin-left: 24px; }
|
||||
.toc5 { margin-left: 32px; }
|
||||
Vendored
Vendored
+98
@@ -0,0 +1,98 @@
|
||||
// makes a table of contents
|
||||
// top level is h2, goes down from there
|
||||
|
||||
let elt_toc = document.getElementById("toc");
|
||||
let elts_enum = document.getElementsByClassName("enum");
|
||||
|
||||
// top level is h2
|
||||
// if we see a bigger level
|
||||
let last_level = 2;
|
||||
|
||||
let h2_idx = 0;
|
||||
let h3_idx = 0;
|
||||
let h4_idx = 0;
|
||||
let h5_idx = 0;
|
||||
|
||||
// if we see an h2, reset the h3/h4/h5 indexes to 0
|
||||
// if we see an h3, reset the h4/h5 indexes to 0
|
||||
// so on
|
||||
function reset_below(level) {
|
||||
switch(level) {
|
||||
case 2: h3_idx = 0;
|
||||
case 3: h4_idx = 0;
|
||||
case 4: h5_idx = 0;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
// str index; e.g. "1.3.4"
|
||||
function str_idx(level) {
|
||||
// build up components in reverse
|
||||
// so an h4 shouldn't have any h5 data
|
||||
let components = [];
|
||||
switch(level) {
|
||||
case 5: components.push(h5_idx);
|
||||
case 4: components.push(h4_idx);
|
||||
case 3: components.push(h3_idx);
|
||||
case 2: components.push(h2_idx);
|
||||
default: break;
|
||||
}
|
||||
components.reverse();
|
||||
return components.join(".");
|
||||
}
|
||||
|
||||
// when we see a new element, increment the index
|
||||
function incr(level) {
|
||||
switch(level) {
|
||||
case 2: h2_idx += 1; break;
|
||||
case 3: h3_idx += 1; break;
|
||||
case 4: h4_idx += 1; break;
|
||||
case 5: h5_idx += 1; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
for (let this_enum_elt of elts_enum)
|
||||
{
|
||||
switch(this_enum_elt.tagName) {
|
||||
case "H2": this_level = 2; break;
|
||||
case "H3": this_level = 3; break;
|
||||
case "H4": this_level = 4; break;
|
||||
case "H5": this_level = 5; break;
|
||||
default: this_level = 0;
|
||||
}
|
||||
|
||||
//console.log(this_enum_elt);
|
||||
|
||||
// increment index, reset those below
|
||||
// so if we see an h2, bump up the h2 index, reset h3/h4/h5 to 0
|
||||
reset_below(this_level);
|
||||
incr(this_level);
|
||||
|
||||
// "Foo Bar" -> "1.3.4. Foo Bar"
|
||||
let old_section_title = this_enum_elt.innerText;
|
||||
let new_section_title = str_idx(this_level) + ". " + this_enum_elt.innerText;
|
||||
|
||||
this_enum_elt.innerText = new_section_title;
|
||||
|
||||
//console.log(new_section_title);
|
||||
let entry_a = document.createElement('a');
|
||||
|
||||
// make an id for this entry if it doesn't exist
|
||||
if (!this_enum_elt.id) {
|
||||
// "Foo Bar" -> "foo-bar"
|
||||
let words = old_section_title.split(" ");
|
||||
let ident = words.map(function (s) { return s.toLowerCase(); }).join("-");
|
||||
this_enum_elt.id = ident;
|
||||
}
|
||||
|
||||
entry_a.href = "#" + this_enum_elt.id;
|
||||
entry_a.innerText = new_section_title;
|
||||
entry_a.classList += "toc" + this_level;
|
||||
|
||||
//console.log(entry_a);
|
||||
let entry_br = document.createElement('br');
|
||||
|
||||
toc.appendChild(entry_a);
|
||||
toc.appendChild(entry_br);
|
||||
}
|
||||
BIN
Binary file not shown.
Vendored
+12
-11
@@ -8,20 +8,21 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>harpending.org</h1>
|
||||
<div class="content">
|
||||
<p>Up: <a href="/">Home</a>; Last Updated: 2026-09-07</p>
|
||||
|
||||
<p>Personal website of Peter Harpending</p>
|
||||
<h1>harpending.org</h1>
|
||||
|
||||
<h2>Site tree</h2>
|
||||
<p>Personal website of Peter Harpending</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="/portfolio/">Portfolio</a></li>
|
||||
</ul>
|
||||
<h2>Quick Reference</h2>
|
||||
|
||||
<h2>External links</h2>
|
||||
<ul>
|
||||
<li><a href="https://git.harpending.org">Git</a></li>
|
||||
</ul>
|
||||
<li><a href="https://git.harpending.org">X</a></li>
|
||||
<ul>
|
||||
<li><a href="/portfolio/">Portfolio</a></li>
|
||||
<li><a href="/assets/misc/PeterHarpendingResume.pdf">Resume (PDF)</a></li>
|
||||
<li><a href="https://git.harpending.org/pharpend/">git.harpending.org</a></li>
|
||||
<li><a href="https://www.youtube.com/@NoBSCryptoDev">YouTube Channel (No BS Crypto Development)</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Vendored
+107
-2
@@ -9,9 +9,114 @@
|
||||
|
||||
<body>
|
||||
<div class="content">
|
||||
<h1>Portfolio</h1>
|
||||
<p>Up: <a href="/">Home</a>; Last Updated: 2026-09-07</p>
|
||||
|
||||
<h1>Portfolio - harpending.org</h1>
|
||||
|
||||
<p>
|
||||
The purpose of this page is roughly to be a more detailed
|
||||
version of <a href="/assets/misc/PeterHarpendingResume.pdf">my
|
||||
resume</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The projects here are listed roughly in order of how
|
||||
important/impressive <em>I</em> think they are.
|
||||
</p>
|
||||
|
||||
<h2 id="contents">Contents</h2>
|
||||
<div id="toc"></div>
|
||||
|
||||
<h2 class="enum">Flagship Projects</h2>
|
||||
<h3 class="enum">Rubicon</h3>
|
||||
<p>
|
||||
Rubicon is a first-party addressing and authentication scheme
|
||||
for online services that requires no trusted third party. All
|
||||
data can be stored locally on the client machine. Rubicon
|
||||
eliminates the neccesity for DNS and TLS, consequently
|
||||
eliminating both as vectors for abuse.
|
||||
</p>
|
||||
|
||||
<h5>Links</h5>
|
||||
<ul>
|
||||
<li><a href="https://git.harpending.org/pharpend/rbx">Git repo</a></li>
|
||||
</ul>
|
||||
|
||||
<h3 class="enum">SFP</h3>
|
||||
<p>
|
||||
</p>
|
||||
|
||||
<h3 class="enum">WFC</h3>
|
||||
<p>
|
||||
</p>
|
||||
|
||||
<h5>Links</h5>
|
||||
<ul>
|
||||
<li><a href="https://wfc.harpending.org/">Demo</a></li>
|
||||
<li><a href="https://git.harpending.org/pharpend/fewd">Demo git repo</a></li>
|
||||
<li>
|
||||
<a href="https://www.youtube.com/watch?v=_efyu4uF9b4">Talk explaining demo</a><br>
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/_efyu4uF9b4?si=IRrQOvqtxqgm1ncc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="enum">erlang-sha3</h3>
|
||||
<p>
|
||||
</p>
|
||||
|
||||
<h5>Links</h5>
|
||||
<ul>
|
||||
<li><a href="https://git.harpending.org/pharpend/kek">Pre-optimized implementation</a></li>
|
||||
<li><a href="https://git.harpending.org/pharpend/erlang-sha3">Official product</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 class="enum">Miscellany</h2>
|
||||
<h3 class="enum">ansi.hrl</h3>
|
||||
<p>
|
||||
I like making TUIs. This is an Erlang header file that has
|
||||
grown organically across many of my projects. It has macros
|
||||
for the useful ANSI control sequences (e.g. dimming text,
|
||||
underline/bold/color).
|
||||
</p>
|
||||
<p>
|
||||
ansi.hrl has grown organically over time across many
|
||||
different projects. It is <b>NOT</b> comprehensive, nor
|
||||
does it aim to solve every conceivable use case. It only
|
||||
has the macros I <i>actually</i> use, and it only aims to
|
||||
solve the problems I have <em>actually</em> encountered in
|
||||
the wild.
|
||||
</p>
|
||||
|
||||
<h5>Projects that use ansi.hrl</h5>
|
||||
<ul>
|
||||
<li>SFP</li>
|
||||
<li>Rubicon demo</li>
|
||||
<li>WFC TUI</li>
|
||||
</ul>
|
||||
|
||||
<h5>Links</h5>
|
||||
<ul>
|
||||
<li><a href="https://git.harpending.org/pharpend/ansi-hrl">Git repo</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<h2 class="enum">Deprecated Projects</h2>
|
||||
<h3 class="enum">Jex and Sidekick</h3>
|
||||
<p>
|
||||
</p>
|
||||
|
||||
<h5>Links</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://git.harpending.org/pharpend/Vanillae">Git repo</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Up: <a href="/">Home</a></p>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/enum.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user