version 0

This commit is contained in:
Peter Harpending
2026-09-07 22:22:21 -07:00
parent 063eaed88f
commit 2ee912c779
8 changed files with 257 additions and 13 deletions
+7
View File
@@ -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
View File
+33
View File
@@ -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; }
View File
+98
View File
@@ -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);
}
Binary file not shown.
+12 -11
View File
@@ -8,20 +8,21 @@
</head> </head>
<body> <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> <h2>Quick Reference</h2>
<li><a href="/portfolio/">Portfolio</a></li>
</ul>
<h2>External links</h2> <ul>
<ul> <li><a href="/portfolio/">Portfolio</a></li>
<li><a href="https://git.harpending.org">Git</a></li> <li><a href="/assets/misc/PeterHarpendingResume.pdf">Resume (PDF)</a></li>
</ul> <li><a href="https://git.harpending.org/pharpend/">git.harpending.org</a></li>
<li><a href="https://git.harpending.org">X</a></li> <li><a href="https://www.youtube.com/@NoBSCryptoDev">YouTube Channel (No BS Crypto Development)</a></li>
</ul>
</div>
</body> </body>
</html> </html>
+107 -2
View File
@@ -9,9 +9,114 @@
<body> <body>
<div class="content"> <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> </div>
<script src="/assets/js/enum.js"></script>
</body> </body>
</html> </html>