update website
This commit is contained in:
parent
c6495852ba
commit
354e41873a
17 changed files with 441 additions and 319 deletions
|
@ -6,7 +6,7 @@ timestamp: 2022-06-01T00:00:00-04:00
|
||||||
|
|
||||||
Much like any ordinary child, I spent much of my childhood watching math videos on YouTube. During this time I discovered many channels that you might already be familiary with: [3Blue1Brown](https://www.youtube.com/c/3blue1brown), [Numberphile](https://www.youtube.com/user/numberphile), [Stand-up Maths](https://www.youtube.com/user/standupmaths), and many, many others. I credit these videos with inspiring me to continue my fascination with mathematics. However, one of these channels rises above all others in terms of how it shaped me: [Vihart](https://www.youtube.com/user/Vihart).
|
Much like any ordinary child, I spent much of my childhood watching math videos on YouTube. During this time I discovered many channels that you might already be familiary with: [3Blue1Brown](https://www.youtube.com/c/3blue1brown), [Numberphile](https://www.youtube.com/user/numberphile), [Stand-up Maths](https://www.youtube.com/user/standupmaths), and many, many others. I credit these videos with inspiring me to continue my fascination with mathematics. However, one of these channels rises above all others in terms of how it shaped me: [Vihart](https://www.youtube.com/user/Vihart).
|
||||||
|
|
||||||
Vi's videos, although lacking in pixels, more than make up for it with their humor, art, music, and beautiful introductions into various mathematics concepts that one would be lucky to even mention in a school curriculum. These videos introduced me to [$$ \tau $$](https://www.youtube.com/watch?v=FtxmFlMLYRI) (tau) - the superior circle constant, equal to the ratio between a circle's circumference and its radius (two times $$ \pi $$). Each day this June, leading up to June 28 ([tau day](https://tauday.org)), I will be posting a creative demonstration of the beauty of this constant, circles, and mathematics as a whole.
|
Vi's videos, although lacking in pixels, more than make up for it with their humor, art, music, and beautiful introductions into various mathematics concepts that one would be lucky to even mention in a school curriculum. These videos introduced me to [$\tau$](https://www.youtube.com/watch?v=FtxmFlMLYRI) (tau) - the superior circle constant, equal to the ratio between a circle's circumference and its radius (two times $\pi$). Each day this June, leading up to June 28 ([tau day](https://tauday.org)), I will be posting a creative demonstration of the beauty of this constant, circles, and mathematics as a whole.
|
||||||
|
|
||||||
All code used to generate these visualizations will be available [on GitHub](https://github.com/TriMill/28-days-of-tau/) the same day the blog post is released.
|
All code used to generate these visualizations will be available [on GitHub](https://github.com/TriMill/28-days-of-tau/) the same day the blog post is released.
|
||||||
|
|
||||||
|
@ -14,6 +14,6 @@ All code used to generate these visualizations will be available [on GitHub](htt
|
||||||
|
|
||||||
![Day 1 - Labyrinth](/static/i/blog/tau-day1.png)
|
![Day 1 - Labyrinth](/static/i/blog/tau-day1.png)
|
||||||
|
|
||||||
This image shows the digits of tau (as represented in a base-10 positional system) by assigning each one an angle, where 0 is directly right and each subsequent digit is $$ \frac{\tau}{10} $$ radians counterclockwise. The first digit is right next to the center, and following digits are further out and connected by arcs.
|
This image shows the digits of tau (as represented in a base-10 positional system) by assigning each one an angle, where 0 is directly right and each subsequent digit is $\frac{\tau}{10}$ radians counterclockwise. The first digit is right next to the center, and following digits are further out and connected by arcs.
|
||||||
|
|
||||||
[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day1)
|
[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day1)
|
||||||
|
|
|
@ -8,6 +8,6 @@ timestamp: 2022-06-03T00:00:00-04:00
|
||||||
|
|
||||||
![Day 3 - Polygons](/static/i/blog/tau-day3.png)
|
![Day 3 - Polygons](/static/i/blog/tau-day3.png)
|
||||||
|
|
||||||
One of the oldest methods known to calculate circle constants is inscribing polygons of increasing side counts within circles. It is easy to find the area of these polygons, and as the number of sides increases the area approaches $$ \frac{\tau}{2} $$ (assuming a circle with radius 1).
|
One of the oldest methods known to calculate circle constants is inscribing polygons of increasing side counts within circles. It is easy to find the area of these polygons, and as the number of sides increases the area approaches $\frac{\tau}{2}$ (assuming a circle with radius 1).
|
||||||
|
|
||||||
[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day3)
|
[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day3)
|
||||||
|
|
|
@ -9,5 +9,5 @@ My favorite number is 12. Some people I have talked to do not understand the con
|
||||||
- 12 has 6 factors (1, 2, 3, 4, 6, and 12), which is more factors than any positive integer less than it.
|
- 12 has 6 factors (1, 2, 3, 4, 6, and 12), which is more factors than any positive integer less than it.
|
||||||
- The dodecahedron, one of the five platonic solids (and the only one to have pentagonal faces), has 12 faces. The cube (the only platonic solid with square faces) has 12 edges.
|
- The dodecahedron, one of the five platonic solids (and the only one to have pentagonal faces), has 12 faces. The cube (the only platonic solid with square faces) has 12 edges.
|
||||||
- Base 12 is a very good positional number system, much more practical than base 10 (although not as good as base 6)
|
- Base 12 is a very good positional number system, much more practical than base 10 (although not as good as base 6)
|
||||||
- The Riemann zeta function evaluated at -1 is equal to $$ \frac{-1}{12} $$
|
- The Riemann zeta function evaluated at -1 is equal to $\frac{-1}{12}$
|
||||||
- i like it :)
|
- i like it :)
|
||||||
|
|
|
@ -4,9 +4,8 @@ desc: The future of syndication is finally here
|
||||||
timestamp: 2022-07-04T12:49:00-04:00
|
timestamp: 2022-07-04T12:49:00-04:00
|
||||||
---
|
---
|
||||||
|
|
||||||
![citrons: "we should have a unified GEORGE RSS feed that combines all of the RSS feeds in GEORGE
|
![citrons: "we should have a unified GEORGE RSS feed that combines all of the RSS feeds in GEORGE"](/static/i/blog/rssb_origins.png)
|
||||||
"](/static/i/blog/rssb_origins.png)
|
|
||||||
|
|
||||||
When this idea was brought up a few months ago, I stated in response that I would pursue it at a later date if no one else had (possibly). Recently, that later date has occured.
|
When this idea was brought up a few months ago, I stated in response that I would pursue it at a later date if no one else had (possibly). Recently, that later date has occured.
|
||||||
|
|
||||||
RSS Bundler is a program that reads from multiple RSS feeds, merges them into one, and serves the resulting feed using an embedded HTTP server. The source code is available [here on GitHub](https://github.com/TriMill/rss-bundler). The aforementioned GEORGE RSS bundle is available [here](https://api.trimill.xyz/george-bundle/rss.xml).
|
RSS Bundler is a program that reads from multiple RSS feeds, merges them into one, and serves the resulting feed using an embedded HTTP server. The source code is available [here on GitHub](https://github.com/TriMill/rss-bundler). The aforementioned GEORGE RSS bundle is available [here](https://api.trimill.xyz/george-bundle/rss.xml).
|
||||||
|
|
|
@ -16,5 +16,5 @@ If you are not happy with preexisting pies, it is quite simple to innovate an en
|
||||||
|
|
||||||
With pie, the possibilities are endless.
|
With pie, the possibilities are endless.
|
||||||
|
|
||||||
[^1]: [this list](https://thepizzacalc.com/pizza-toppings-list-4/) includes 80 standard pizza toppings. this yields $$ 2^{80} $$ possible pizzas. if a human lives for 100 years and eats 3 meals per day, they will eat about 110,000 meals, which is far less than $$ 2^{80} $$.
|
[^1]: [this list](https://thepizzacalc.com/pizza-toppings-list-4/) includes 80 standard pizza toppings. this yields $2^{80}$ possible pizzas. if a human lives for 100 years and eats 3 meals per day, they will eat about 110,000 meals, which is far less than $2^{80}$.
|
||||||
|
|
||||||
|
|
BIN
flaskr/static/i/bg.png
Normal file
BIN
flaskr/static/i/bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 747 B |
BIN
flaskr/static/i/bg_light.png
Normal file
BIN
flaskr/static/i/bg_light.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 736 B |
76
flaskr/static/pygments.css
Normal file
76
flaskr/static/pygments.css
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
.codehilite .c { color: #999999; font-style: italic } /* Comment */
|
||||||
|
.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
.codehilite .esc { color: #d0d0d0 } /* Escape */
|
||||||
|
.codehilite .g { color: #d0d0d0 } /* Generic */
|
||||||
|
.codehilite .k { color: #6ab825; font-weight: bold } /* Keyword */
|
||||||
|
.codehilite .l { color: #d0d0d0 } /* Literal */
|
||||||
|
.codehilite .n { color: #d0d0d0 } /* Name */
|
||||||
|
.codehilite .o { color: #d0d0d0 } /* Operator */
|
||||||
|
.codehilite .x { color: #d0d0d0 } /* Other */
|
||||||
|
.codehilite .p { color: #d0d0d0 } /* Punctuation */
|
||||||
|
.codehilite .ch { color: #999999; font-style: italic } /* Comment.Hashbang */
|
||||||
|
.codehilite .cm { color: #999999; font-style: italic } /* Comment.Multiline */
|
||||||
|
.codehilite .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
|
||||||
|
.codehilite .cpf { color: #999999; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
.codehilite .c1 { color: #999999; font-style: italic } /* Comment.Single */
|
||||||
|
.codehilite .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
.codehilite .gd { color: #d22323 } /* Generic.Deleted */
|
||||||
|
.codehilite .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||||
|
.codehilite .gr { color: #d22323 } /* Generic.Error */
|
||||||
|
.codehilite .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||||
|
.codehilite .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
.codehilite .go { color: #cccccc } /* Generic.Output */
|
||||||
|
.codehilite .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||||
|
.codehilite .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||||
|
.codehilite .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
.codehilite .gt { color: #d22323 } /* Generic.Traceback */
|
||||||
|
.codehilite .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
|
||||||
|
.codehilite .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.codehilite .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
.codehilite .kp { color: #6ab825 } /* Keyword.Pseudo */
|
||||||
|
.codehilite .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.codehilite .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
|
||||||
|
.codehilite .ld { color: #d0d0d0 } /* Literal.Date */
|
||||||
|
.codehilite .m { color: #3677a9 } /* Literal.Number */
|
||||||
|
.codehilite .s { color: #ed9d13 } /* Literal.String */
|
||||||
|
.codehilite .na { color: #bbbbbb } /* Name.Attribute */
|
||||||
|
.codehilite .nb { color: #24909d } /* Name.Builtin */
|
||||||
|
.codehilite .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
|
||||||
|
.codehilite .no { color: #40ffff } /* Name.Constant */
|
||||||
|
.codehilite .nd { color: #ffa500 } /* Name.Decorator */
|
||||||
|
.codehilite .ni { color: #d0d0d0 } /* Name.Entity */
|
||||||
|
.codehilite .ne { color: #bbbbbb } /* Name.Exception */
|
||||||
|
.codehilite .nf { color: #447fcf } /* Name.Function */
|
||||||
|
.codehilite .nl { color: #d0d0d0 } /* Name.Label */
|
||||||
|
.codehilite .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
|
||||||
|
.codehilite .nx { color: #d0d0d0 } /* Name.Other */
|
||||||
|
.codehilite .py { color: #d0d0d0 } /* Name.Property */
|
||||||
|
.codehilite .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
|
||||||
|
.codehilite .nv { color: #40ffff } /* Name.Variable */
|
||||||
|
.codehilite .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
|
||||||
|
.codehilite .w { color: #666666 } /* Text.Whitespace */
|
||||||
|
.codehilite .mb { color: #3677a9 } /* Literal.Number.Bin */
|
||||||
|
.codehilite .mf { color: #3677a9 } /* Literal.Number.Float */
|
||||||
|
.codehilite .mh { color: #3677a9 } /* Literal.Number.Hex */
|
||||||
|
.codehilite .mi { color: #3677a9 } /* Literal.Number.Integer */
|
||||||
|
.codehilite .mo { color: #3677a9 } /* Literal.Number.Oct */
|
||||||
|
.codehilite .sa { color: #ed9d13 } /* Literal.String.Affix */
|
||||||
|
.codehilite .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||||
|
.codehilite .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||||
|
.codehilite .dl { color: #ed9d13 } /* Literal.String.Delimiter */
|
||||||
|
.codehilite .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||||
|
.codehilite .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||||
|
.codehilite .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||||
|
.codehilite .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||||
|
.codehilite .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||||
|
.codehilite .sx { color: #ffa500 } /* Literal.String.Other */
|
||||||
|
.codehilite .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||||
|
.codehilite .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||||
|
.codehilite .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||||
|
.codehilite .bp { color: #24909d } /* Name.Builtin.Pseudo */
|
||||||
|
.codehilite .fm { color: #447fcf } /* Name.Function.Magic */
|
||||||
|
.codehilite .vc { color: #40ffff } /* Name.Variable.Class */
|
||||||
|
.codehilite .vg { color: #40ffff } /* Name.Variable.Global */
|
||||||
|
.codehilite .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||||
|
.codehilite .vm { color: #40ffff } /* Name.Variable.Magic */
|
||||||
|
.codehilite .il { color: #3677a9 } /* Literal.Number.Integer.Long */
|
|
@ -1,202 +1,200 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Merriweather;
|
font-family: Merriweather;
|
||||||
src: url(/static/f/Merriweather-Light.woff2);
|
src: url(/static/f/Merriweather-Light.woff2);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Merriweather;
|
font-family: Merriweather;
|
||||||
src: url(/static/f/Merriweather-LightItalic.woff2);
|
src: url(/static/f/Merriweather-LightItalic.woff2);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Merriweather;
|
font-family: Merriweather;
|
||||||
src: url(/static/f/Merriweather-Bold.woff2);
|
src: url(/static/f/Merriweather-Bold.woff2);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Merriweather;
|
font-family: Merriweather;
|
||||||
src: url(/static/f/Merriweather-BoldItalic.woff2);
|
src: url(/static/f/Merriweather-BoldItalic.woff2);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Roboto Slab";
|
font-family: "Roboto Slab";
|
||||||
src: url(/static/f/RobotoSlab-Medium.woff2);
|
src: url(/static/f/RobotoSlab-Medium.woff2);
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
:root.theme-system {
|
:root.theme-system {
|
||||||
--bg: #131720;
|
--bg: #131720;
|
||||||
--bg-intense: #000000;
|
--bg-intense: #000000;
|
||||||
--bg-faded: #293441;
|
--bg-faded: #293441;
|
||||||
--fg: #e6ded6;
|
--fg: #e6ded6;
|
||||||
--fg-faded: #908a81;
|
--fg-faded: #908a81;
|
||||||
--accent-1: #2aca98;
|
--accent-1: #2aca98;
|
||||||
--accent-1-dark: #268d78;
|
--accent-1-dark: #268d78;
|
||||||
--error: #ee6d7d;
|
--error: #ee6d7d;
|
||||||
}
|
--error-bg: #9b3440;
|
||||||
.only-theme-light {
|
--bgimg: url("/static/i/bg.png");
|
||||||
display: none;
|
}
|
||||||
}
|
.only-theme-light {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
:root.theme-system {
|
:root.theme-system {
|
||||||
--bg: #f6f5f2;
|
--bg: #f6f5f2;
|
||||||
--bg-intense: #ffffff;
|
--bg-intense: #ffffff;
|
||||||
--bg-faded: #cbc4c7;
|
--bg-faded: #cbc4c7;
|
||||||
--fg: #28262b;
|
--fg: #28262b;
|
||||||
--fg-faded: #989097;
|
--fg-faded: #989097;
|
||||||
--accent-1: #0642c3;
|
--accent-1: #0642c3;
|
||||||
--accent-1-dark: #07136d;
|
--accent-1-dark: #07136d;
|
||||||
--accent-2: #0f7904;
|
--accent-2: #0f7904;
|
||||||
--accent-2-dark: #094a05;
|
--accent-2-dark: #094a05;
|
||||||
--error: #a50518;
|
--error: #a50518;
|
||||||
}
|
--error-bg: #ee6d7d;
|
||||||
.only-theme-dark {
|
--bgimg: url("/static/i/bg_light.png");
|
||||||
display: none;
|
}
|
||||||
}
|
.only-theme-dark {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:root.theme-dark {
|
:root.theme-dark {
|
||||||
--bg: #131720;
|
--bg: #131720;
|
||||||
--bg-intense: #000000;
|
--bg-intense: #000000;
|
||||||
--bg-faded: #293441;
|
--bg-faded: #293441;
|
||||||
--fg: #e6ded6;
|
--fg: #e6ded6;
|
||||||
--fg-faded: #908a81;
|
--fg-faded: #908a81;
|
||||||
--accent-1: #2aca98;
|
--accent-1: #2aca98;
|
||||||
--accent-1-dark: #268d78;
|
--accent-1-dark: #268d78;
|
||||||
--error: #ee6d7d;
|
--error: #ee6d7d;
|
||||||
|
--error-bg: #9b3440;
|
||||||
|
--bgimg: url("/static/i/bg.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
:root.theme-light {
|
:root.theme-light {
|
||||||
--bg: #f6f5f2;
|
--bg: #f6f5f2;
|
||||||
--bg-intense: #ffffff;
|
--bg-intense: #ffffff;
|
||||||
--bg-faded: #cbc4c7;
|
--bg-faded: #cbc4c7;
|
||||||
--fg: #28262b;
|
--fg: #28262b;
|
||||||
--fg-faded: #989097;
|
--fg-faded: #989097;
|
||||||
--accent-1: #0642c3;
|
--accent-1: #0642c3;
|
||||||
--accent-1-dark: #07136d;
|
--accent-1-dark: #07136d;
|
||||||
--error: #a50518;
|
--error: #a50518;
|
||||||
}
|
--error-bg: #ee6d7d;
|
||||||
|
--bgimg: url("/static/i/bg_light.png");
|
||||||
:root.theme-special {
|
|
||||||
--bg: #ffff00;
|
|
||||||
--bg-intense: #ffffff;
|
|
||||||
--bg-faded: #00ff00;
|
|
||||||
--fg: #ff00ff;
|
|
||||||
--fg-faded: #ff0000;
|
|
||||||
--accent-1: #00ffff;
|
|
||||||
--accent-1-dark: #0000ff;
|
|
||||||
--error: #000000;
|
|
||||||
font-family: "Comic Sans MS", cursive;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
--text-fonts: "Merriweather", "DejaVu Serif", serif;
|
--text-fonts: "Merriweather", "DejaVu Serif", serif;
|
||||||
font-family: var(--text-fonts);
|
font-family: var(--text-fonts);
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
--link: var(--accent-1);
|
--link: var(--accent-1);
|
||||||
--link-hover: var(--accent-1-dark);
|
--link-hover: var(--accent-1-dark);
|
||||||
--link-active: var(--accent-1-dark);
|
--link-active: var(--accent-1-dark);
|
||||||
--button: var(--bg-intense);
|
--button: var(--bg-intense);
|
||||||
--button-hover: var(--bg-faded);
|
--button-hover: var(--bg-faded);
|
||||||
--button-active: var(--accent-1-dark);
|
--button-active: var(--accent-1-dark);
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, nav {
|
h1, h2, h3, nav {
|
||||||
font-family: "Roboto Slab", serif;
|
font-family: "Roboto Slab", serif;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: var(--bg);
|
background-image: var(--bgimg);
|
||||||
width: min(750px, 90vw);
|
background-color: var(--bg);
|
||||||
margin: auto;
|
image-rendering: pixelated;
|
||||||
min-height: 100vh;
|
width: min(750px, 90vw);
|
||||||
display: flex;
|
margin: auto;
|
||||||
flex-direction: column;
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
background-color: var(--bg-intense);
|
background-color: var(--bg-intense);
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: var(--fg-faded);
|
color: var(--fg-faded);
|
||||||
margin-top: auto;
|
margin-top: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
min-height: 50px;
|
min-height: 50px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer code {
|
footer code {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav > svg {
|
nav > svg {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 16px;
|
top: 16px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
width: auto;
|
width: auto;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
fill: var(--fg);
|
fill: var(--fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
nav > a {
|
nav > a {
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav > a:hover { color: var(--fg-faded); }
|
nav > a:hover { color: var(--fg-faded); }
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: var(--link);
|
color: var(--link);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root[theme="contrast"] a, :root[theme="contrast-dark"] a {
|
:root[theme="contrast"] a, :root[theme="contrast-dark"] a {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover { color: var(--link-hover); }
|
a:hover { color: var(--link-hover); }
|
||||||
|
@ -204,55 +202,84 @@ a:hover { color: var(--link-hover); }
|
||||||
a:active { color: var(--link-active); }
|
a:active { color: var(--link-active); }
|
||||||
|
|
||||||
.faded {
|
.faded {
|
||||||
color: var(--fg-faded);
|
color: var(--fg-faded);
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
border-left: 2px solid var(--fg-faded);
|
border-left: 2px solid var(--fg-faded);
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
code, pre {
|
code, pre {
|
||||||
background-color: var(--bg-intense);
|
background-color: var(--bg-intense);
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
padding-right: 3px;
|
padding-right: 3px;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
font-family: "Fira Mono", monospace;
|
font-family: "Fira Mono", monospace;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
padding-top: 3px;
|
padding-top: 3px;
|
||||||
padding-bottom: 3px;
|
padding-bottom: 3px;
|
||||||
padding-left: 12px;
|
padding-left: 12px;
|
||||||
border-left: 5px solid var(--accent-1-dark);
|
border-left: 5px solid var(--accent-1-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
button, input, select, textarea {
|
button, input, select, textarea {
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
background-color: var(--bg-faded);
|
background-color: var(--bg-faded);
|
||||||
border: 2px solid var(--fg-faded);
|
border: 2px solid var(--fg-faded);
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
font-family: var(--text-fonts);
|
font-family: var(--text-fonts);
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
button:active, input[type=button]:active {
|
button:active, input[type=button]:active {
|
||||||
background-color: var(--bg);
|
background-color: var(--bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
button:active, input[type=button]:active {
|
button:active, input[type=button]:active {
|
||||||
background-color: var(--bg);
|
background-color: var(--bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
color: var(--error);
|
color: var(--error);
|
||||||
|
}
|
||||||
|
|
||||||
|
#abdetect-container {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#abthankyou {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
color: var(--fg-faded);
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ad {
|
||||||
|
z-index: 99999;
|
||||||
|
background: var(--error-bg);
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
color: var(--fg);
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,77 +1,90 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" class="theme-{{ theme }}">
|
<html lang="en" class="theme-{{ theme }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>{{ meta.title }}</title>
|
|
||||||
|
|
||||||
<meta name="author" content="trimill">
|
<meta name="author" content="trimill">
|
||||||
<meta name="description" content="{{ meta.desc }}">
|
<meta name="description" content="{{ meta.desc }}">
|
||||||
<meta property="og:description" content="{{ meta.desc }}">
|
<meta name="theme-color" content="#2aca98">
|
||||||
<meta property="og:title" content="{{ meta.title }}">
|
<meta property="og:description" content="{{ meta.desc }}">
|
||||||
<meta property="og:site_name" content="trimill.xyz">
|
<meta property="og:title" content="{{ meta.title }}">
|
||||||
|
<meta property="og:site_name" content="trimill.xyz">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='logo16.png') }}">
|
<meta property="og:image" content="{{ url_for('static', filename='logo640.png') }}">
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='logo32.png') }}">
|
|
||||||
<link rel="icon" type="image/png" sizes="64x64" href="{{ url_for('static', filename='logo64.png') }}">
|
|
||||||
<link rel="icon" type="image/png" sizes="320x320" href="{{ url_for('static', filename='logo320.png') }}">
|
|
||||||
<link rel="icon" type="image/png" sizes="640x640" href="{{ url_for('static', filename='logo640.png') }}">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
<title>{{ meta.title }}</title>
|
||||||
<style>
|
|
||||||
body {
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='logo16.png') }}">
|
||||||
{% if meta.fullscreen == True %}
|
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='logo32.png') }}">
|
||||||
width: 100%;
|
<link rel="icon" type="image/png" sizes="64x64" href="{{ url_for('static', filename='logo64.png') }}">
|
||||||
{% else %}
|
<link rel="icon" type="image/png" sizes="320x320" href="{{ url_for('static', filename='logo320.png') }}">
|
||||||
width: min({{ meta.pagewidth or "800px"}}, 80vw);
|
<link rel="icon" type="image/png" sizes="640x640" href="{{ url_for('static', filename='logo640.png') }}">
|
||||||
{% endif %}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{% block head %} {% endblock %}
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
{% if meta.fullscreen == True %}
|
||||||
|
width: 100%;
|
||||||
|
{% else %}
|
||||||
|
width: min({{ meta.pagewidth or "800px"}}, 80vw);
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{% block head %} {% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{% if meta.fullscreen != True %}
|
{% if meta.fullscreen != True %}
|
||||||
<nav>
|
<nav>
|
||||||
<a href="/">Home</a> ·
|
<a href="/">Home</a> ·
|
||||||
<a href="/projects/">Projects</a> ·
|
<a href="/projects/">Projects</a> ·
|
||||||
<a href="/blog/">Blog™</a> ·
|
<a href="/blog/">Blog™</a> ·
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8" style="position: sticky;">
|
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8" style="position: sticky;">
|
||||||
<a href="?theme={{ data.next_theme[theme] | safe }}">
|
<a href="?theme={{ data.next_theme[theme] | safe }}">
|
||||||
<!--<rect width="8" height="8" fill="#00000000">-->
|
{% if theme == "dark" %}
|
||||||
{% if theme == "dark" %}
|
<path d="M2.72 0c-1.58.53-2.72 2.02-2.72 3.78 0 2.21 1.79 4 4 4 1.76 0 3.25-1.14 3.78-2.72-.4.13-.83.22-1.28.22-2.21 0-4-1.79-4-4 0-.45.08-.88.22-1.28z" />
|
||||||
<path d="M2.72 0c-1.58.53-2.72 2.02-2.72 3.78 0 2.21 1.79 4 4 4 1.76 0 3.25-1.14 3.78-2.72-.4.13-.83.22-1.28.22-2.21 0-4-1.79-4-4 0-.45.08-.88.22-1.28z" />
|
<title>Dark theme</title>
|
||||||
<title>Dark theme</title>
|
{% elif theme == "light" %}
|
||||||
{% elif theme == "light" %}
|
<path d="M4 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm5 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-3.5 1.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-6 2.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm5 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5z" />
|
||||||
<path d="M4 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm5 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-3.5 1.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-6 2.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm5 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-2.5 1c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5z" />
|
<title>Light theme</title>
|
||||||
<title>Light theme</title>
|
{% else %}
|
||||||
{% elif theme == "special" %}
|
<path d="M3.41 0a.5.5 0 0 0-.13.06l-3 1.5a.5.5 0 1 0 .44.88l3-1.5a.5.5 0 0 0-.31-.94zm1 1.5a.5.5 0 0 0-.13.06l-4 2a.5.5 0 1 0 .44.88l4-2a.5.5 0 0 0-.31-.94zm0 2a.5.5 0 0 0-.13.06l-3 1.5a.5.5 0 0 0 .22.94h2a.5.5 0 0 0 .16-1l1.06-.56a.5.5 0 0 0-.31-.94zm-2.56 3.5a.5.5 0 0 0 .16 1h1a.5.5 0 1 0 0-1h-1a.5.5 0 0 0-.09 0 .5.5 0 0 0-.06 0z" transform="translate(1)" />
|
||||||
<image href="/static/i/apioform1.png" width="8" height="8" />
|
<title>System default theme</title>
|
||||||
transform="translate(0 1)">
|
{% endif %}
|
||||||
<title>Ocular apiation occuring, do not close page until eyes have been apiated to completion.</title>
|
</a>
|
||||||
{% else %}
|
</svg>
|
||||||
<path d="M3.41 0a.5.5 0 0 0-.13.06l-3 1.5a.5.5 0 1 0 .44.88l3-1.5a.5.5 0 0 0-.31-.94zm1 1.5a.5.5 0 0 0-.13.06l-4 2a.5.5 0 1 0 .44.88l4-2a.5.5 0 0 0-.31-.94zm0 2a.5.5 0 0 0-.13.06l-3 1.5a.5.5 0 0 0 .22.94h2a.5.5 0 0 0 .16-1l1.06-.56a.5.5 0 0 0-.31-.94zm-2.56 3.5a.5.5 0 0 0 .16 1h1a.5.5 0 1 0 0-1h-1a.5.5 0 0 0-.09 0 .5.5 0 0 0-.06 0z" transform="translate(1)" />
|
</nav>
|
||||||
<title>System default theme</title>
|
|
||||||
{% endif %}
|
|
||||||
<!--</rect>-->
|
|
||||||
</a>
|
|
||||||
</svg>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<h1>{{ meta.title }}</h1>
|
<h1>{{ meta.title }}</h1>
|
||||||
|
|
||||||
<hr style="width: 100%">
|
<hr style="width: 100%">
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<main>
|
<main>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
{% if meta.fullscreen != True %}
|
{% if meta.fullscreen != True %}
|
||||||
<hr>
|
<hr>
|
||||||
{% block footer_content %}{% endblock %}
|
<div id="abdetect-container">
|
||||||
<footer>
|
<span class="ad-slot" id="ad">
|
||||||
{{ data.feet | random | safe }}
|
you aren't using an adblocker! click
|
||||||
</footer>
|
<a href="https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/">here (firefox)</a> or
|
||||||
{% endif %}
|
<a href="https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm">here (chrome)</a> to install one.
|
||||||
|
</span>
|
||||||
|
<span id="abthankyou">
|
||||||
|
thank you for using an adblocker!
|
||||||
|
</span>
|
||||||
|
<span style="visibility: hidden;">
|
||||||
|
you aren't using an adblocker! click
|
||||||
|
<a href="">here (firefox)</a> or
|
||||||
|
<a href="">here (chrome)</a> to install one.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% block footer_content %}{% endblock %}
|
||||||
|
<footer>
|
||||||
|
{{ data.feet | random | safe }}
|
||||||
|
</footer>
|
||||||
|
{% endif %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -2,30 +2,31 @@
|
||||||
{% block head %}
|
{% block head %}
|
||||||
<!-- KaTex -->
|
<!-- KaTex -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="/static/pygments.css">
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.js" integrity="sha384-X/XCfMm41VSsqRNQgDerQczD69XqmjOOOwYQvr/uuC+j4OPoNhVgjdGFwhvN02Ja" crossorigin="anonymous"></script>
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.js" integrity="sha384-X/XCfMm41VSsqRNQgDerQczD69XqmjOOOwYQvr/uuC+j4OPoNhVgjdGFwhvN02Ja" crossorigin="anonymous"></script>
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js" integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" crossorigin="anonymous"></script>
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js" integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" crossorigin="anonymous"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
renderMathInElement(document.body, {
|
renderMathInElement(document.body, {
|
||||||
delimiters: [
|
delimiters: [
|
||||||
{left: '$$', right: '$$', display: false},
|
{left: '$', right: '$', display: false},
|
||||||
{left: '\\[', right: '\\]', display: true},
|
{left: '\\[', right: '\\]', display: true},
|
||||||
],
|
],
|
||||||
throwOnError : false
|
throwOnError : false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
img {
|
img {
|
||||||
display: block;
|
display: block;
|
||||||
max-width: 80%;
|
max-width: 80%;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
p {
|
p {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
<title>Blog™</title>
|
<title>Blog™</title>
|
||||||
<link href="https://trimill.xyz/blog/atom.xml" rel="self" />
|
<link href="https://trimill.xyz/blog/atom.xml" rel="self" />
|
||||||
<link href="https://trimill.xyz/blog/" />
|
<link href="https://trimill.xyz/blog/" />
|
||||||
<updated>{{ data.blogposts[0].timestamp.isoformat() }}</updated>
|
<updated>{{ data.blogposts[0].timestamp.isoformat() }}</updated>
|
||||||
<author>
|
<author>
|
||||||
<name>TriMill</name>
|
<name>TriMill</name>
|
||||||
</author>
|
</author>
|
||||||
<id>https://trimill.xyz/blog/</id>
|
<id>https://trimill.xyz/blog/</id>
|
||||||
|
|
||||||
{% for post in data.blogposts %}
|
{% for post in data.blogposts %}
|
||||||
<entry>
|
<entry>
|
||||||
<title>{{ post.title }}</title>
|
<title>{{ post.title }}</title>
|
||||||
<link href="https://trimill.xyz/{{ post.url }}" />
|
<link href="https://trimill.xyz/{{ post.url }}" />
|
||||||
<summary>{{ post.desc }}</summary>
|
<summary>{{ post.desc }}</summary>
|
||||||
<updated>{{ post.timestamp.isoformat() }}</updated>
|
<updated>{{ post.timestamp.isoformat() }}</updated>
|
||||||
<id>https://trimill.xyz/{{ post.url }}</id>
|
<id>https://trimill.xyz/{{ post.url }}</id>
|
||||||
</entry>
|
</entry>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</feed>
|
</feed>
|
||||||
|
|
|
@ -6,7 +6,7 @@ get updates delivered directly to you using the <a href="/blog/rss.xml">RSS</a>
|
||||||
{% for post in data.blogposts %}
|
{% for post in data.blogposts %}
|
||||||
<hr style="width: 20%">
|
<hr style="width: 20%">
|
||||||
<h2 style="margin-top: 10px; margin-bottom: 10px">
|
<h2 style="margin-top: 10px; margin-bottom: 10px">
|
||||||
<a href="{{ post.url }}">{{ post.title }}</a>
|
<a href="{{ post.url }}">{{ post.title }}</a>
|
||||||
</h2>
|
</h2>
|
||||||
<p class="faded">{{ post.date.isoformat() }}</p>
|
<p class="faded">{{ post.date.isoformat() }}</p>
|
||||||
<p>{{ post.desc }}</p>
|
<p>{{ post.desc }}</p>
|
||||||
|
|
|
@ -36,18 +36,16 @@
|
||||||
{% block footer_content %}
|
{% block footer_content %}
|
||||||
|
|
||||||
{% if theme == "light" %}
|
{% if theme == "light" %}
|
||||||
<iframe height="50" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23f6f5f2&c_fg=%2328262b&c_links=%230642c3&c_george=%230d8101&c_underline=%230d8101" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
<iframe title="GEORGE" height="50" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23f6f5f2&c_fg=%2328262b&c_links=%230642c3&c_george=%230d8101&c_underline=%230d8101" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
||||||
{% elif theme == "special" %}
|
|
||||||
<iframe height="50" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23ffff00&c_fg=%23ff00ff&c_links=%2300ffff&c_george=%2300ff00&c_underline=%2300ff00" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
|
||||||
{% elif theme == "system" %}
|
{% elif theme == "system" %}
|
||||||
<iframe height="50" class="only-theme-dark" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23131720&c_fg=%23e6ded6&c_links=%232aca98&c_george=%23268d78&c_underline=%23268d78" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
<iframe title="GEORGE" height="50" class="only-theme-dark" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23131720&c_fg=%23e6ded6&c_links=%232aca98&c_george=%23268d78&c_underline=%23268d78" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
||||||
<iframe height="50" class="only-theme-light" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23f6f5f2&c_fg=%2328262b&c_links=%230642c3&c_george=%230d8101&c_underline=%230d8101" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
<iframe title="GEORGE" height="50" class="only-theme-light" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23f6f5f2&c_fg=%2328262b&c_links=%230642c3&c_george=%230d8101&c_underline=%230d8101" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
||||||
{% else %}
|
{% else %}
|
||||||
<iframe height="50" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23131720&c_fg=%23e6ded6&c_links=%232aca98&c_george=%23268d78&c_underline=%23268d78" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
<iframe title="GEORGE" height="50" src="https://george.gh0.pw/embed.cgi?trimill&c_bg=%23131720&c_fg=%23e6ded6&c_links=%232aca98&c_george=%23268d78&c_underline=%23268d78" style="border:none;width:100%;" sandbox="allow-top-navigation"></iframe>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<iframe src="https://john.citrons.xyz/embed?ref=trimill.xyz" style="margin-left:auto;display:block;margin-right:auto;max-width:732px;width:100%;height:94px;border:none;"></iframe>
|
<iframe title="johnvertisement" src="https://john.citrons.xyz/embed?ref=trimill.xyz" style="margin-left:auto;display:block;margin-right:auto;max-width:732px;width:100%;height:94px;border:none;"></iframe>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
|
@ -2,81 +2,89 @@
|
||||||
{% extends "/_base.html" %}
|
{% extends "/_base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h2><a href="https://g.trimill.xyz/trimill/complexpr">complexpr</a></h2>
|
<h2><a href="https://cx.trimill.xyz/">CXGraph</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Complexpr is a toy programming language with an interpreter written in Rust. It is dynamically typed, with
|
CXGraph is the successor to Complex Grapher. It allows the definition of multiple functions,
|
||||||
native support for rational and complex numbers, lists and maps, and first-class functions. It features
|
iteration, and interactive sliders and draggable points. It is implemented primarily in Rust
|
||||||
pipeline operators (similar to Elixir's <code>|></code>) to express nested function calls more cleanly.
|
using WASM and WebGPU.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a href="https://g.trimill.xyz/trimill/talc">Talc</a></h2>
|
||||||
|
<p>
|
||||||
|
Talc is a procedural/functional programming language implemented in Rust. It supports
|
||||||
|
several numeric types, first-class functions, file I/O, string manipulation, exceptions,
|
||||||
|
and several other features.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="https://g.trimill.xyz/trimill/quectocraft">Quectocraft</a></h2>
|
<h2><a href="https://g.trimill.xyz/trimill/quectocraft">Quectocraft</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server. By doing away with most
|
Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server.
|
||||||
features of the vanilla server (such as world generation and interaction) it can run without consuming many system
|
By doing away with most features of the vanilla server (such as world generation and
|
||||||
resources. It is written primarily in Rust, but can load simple plugins written in Lua to add chat features and commands.
|
interaction) it can run without consuming many system resources. It is written primarily
|
||||||
|
in Rust, but can load simple plugins written in Lua to add chat features and commands.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="https://g.trimill.xyz/trimill/rss-bundler">RSS Bundler</a></h2>
|
<h2><a href="https://g.trimill.xyz/trimill/rss-bundler">RSS Bundler</a></h2>
|
||||||
<p>
|
<p>
|
||||||
RSS Bundler is a tool that bundles multiple RSS feeds into one. At a fixed interval it fetches content from the configured
|
RSS Bundler is a tool that bundles multiple RSS feeds into one. At a fixed interval it fetches content from the configured
|
||||||
feeds, merges them together, and stores and serves the result. RSS Bundler is written in Rust.
|
feeds, merges them together, and stores and serves the result. RSS Bundler is written in Rust.
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2><a href="/projects/complex_grapher">Complex grapher</a></h2>
|
|
||||||
<p>
|
|
||||||
Complex grapher allows you to functions using <a href="https://en.wikipedia.org/wiki/Domain_coloring">domain coloring</a>.
|
|
||||||
Functions are written in a custom expression language and compiled to GLSL. WebGL is then used to generate a color for each pixel.
|
|
||||||
Complex grapher also has support for iterating functions, allowing you to generate fractals such as the Mandelbrot and Julia sets.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/zzcxz_vis">zzcxz visualizer</a></h2>
|
<h2><a href="/projects/zzcxz_vis">zzcxz visualizer</a></h2>
|
||||||
<p>
|
<p>
|
||||||
zzcxz visualizer displays a force-directed graph of <a href="https://zzcxz.citrons.xyz/">zzcxz</a>, a collaborative interactive
|
zzcxz visualizer displays a force-directed graph of <a href="https://zzcxz.citrons.xyz/">zzcxz</a>, a collaborative interactive
|
||||||
fiction project. It is written in JavaScript and uses D3.js.
|
fiction project. It is written in JavaScript and uses D3.js.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a href="https://g.trimill.xyz/trimill/complexpr">complexpr</a></h2>
|
||||||
|
<p>
|
||||||
|
Complexpr is a toy programming language with an interpreter written in Rust. It is dynamically typed, with
|
||||||
|
native support for rational and complex numbers, lists and maps, and first-class functions. It features
|
||||||
|
pipeline operators (similar to Elixir's <code>|></code>) to express nested function calls more cleanly.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="https://g.trimill.xyz/trimill/sysh">sysh</a></h2>
|
<h2><a href="https://g.trimill.xyz/trimill/sysh">sysh</a></h2>
|
||||||
<p>
|
<p>
|
||||||
sysh is a shell that allows users to run Linux syscalls directly. It supports the entire set of x86_64 syscalls, as well as
|
sysh is a shell that allows users to run Linux syscalls directly. It supports the entire set of x86_64 syscalls, as well as
|
||||||
several other commands to manage memory, manipulate data, and perform arithmetic. sysh is written in C, using Python to
|
several other commands to manage memory, manipulate data, and perform arithmetic. sysh is written in C, using Python to
|
||||||
automatically generate some code.
|
automatically generate some code.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="https://g.trimill.xyz/trimill/musidl">Musidl</a></h2>
|
<h2><a href="https://g.trimill.xyz/trimill/musidl">Musidl</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Musidl is a Bash script that downloads music using <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a> and
|
Musidl is a Bash script that downloads music using <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a> and
|
||||||
automatically add ID3v2 tags based on Youtube Music metadata.
|
automatically add ID3v2 tags based on Youtube Music metadata.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/mazemaker">Maze maker</a></h2>
|
<h2><a href="/projects/mazemaker">Maze maker</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Generate random mazes based on a variety of parameters. Written in JavaScript using <a href="https://p5js.org/">p5.js</a>.
|
Generate random mazes based on a variety of parameters. Written in JavaScript using <a href="https://p5js.org/">p5.js</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/converter">Unit converter</a></h2>
|
<h2><a href="/projects/converter">Unit converter</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Convert between various different units, including commonly-used ones as well as unusual or archaic ones.
|
Convert between various different units, including commonly-used ones as well as unusual or archaic ones.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h2><a href="/projects/fracbase">Fraction base converter</a></h2>
|
<h2><a href="/projects/fracbase">Fraction base converter</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Convert a fraction to its positional notation in an arbitrary base.
|
Convert a fraction to its positional notation in an arbitrary base.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/number">number</a></h2>
|
<h2><a href="/projects/number">number</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Make number go up.
|
Make number go up.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/pixelcircle">Pixel circle</a></h2>
|
<h2><a href="/projects/pixelcircle">Pixel circle</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Create pixelated circles with a specified radius.
|
Create pixelated circles with a specified radius.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a href="/projects/stars">Stars</a></h2>
|
<h2><a href="/projects/stars">Stars</a></h2>
|
||||||
<p>
|
<p>
|
||||||
Generate stars.
|
Generate stars.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Blog™</title>
|
<title>Blog™</title>
|
||||||
<link>https://trimill.xyz/blog/</link>
|
<link>https://trimill.xyz/blog/</link>
|
||||||
<description>Blog™</description>
|
<description>Blog™</description>
|
||||||
<language>en</language>
|
<language>en</language>
|
||||||
<pubDate>{{ data.blogposts[0].timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
|
<pubDate>{{ data.blogposts[0].timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
|
||||||
|
|
||||||
{% for post in data.blogposts %}
|
{% for post in data.blogposts %}
|
||||||
<item>
|
<item>
|
||||||
<title>{{ post.title }}</title>
|
<title>{{ post.title }}</title>
|
||||||
<link>https://trimill.xyz/{{ post.url }}</link>
|
<link>https://trimill.xyz/{{ post.url }}</link>
|
||||||
<description>{{ post.desc }}</description>
|
<description>{{ post.desc }}</description>
|
||||||
<pubDate>{{ post.timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
|
<pubDate>{{ post.timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
|
||||||
<guid>https://trimill.xyz/{{ post.url }}</guid>
|
<guid>https://trimill.xyz/{{ post.url }}</guid>
|
||||||
</item>
|
</item>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|
2
test.sh
2
test.sh
|
@ -3,4 +3,4 @@
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
export FLASK_APP=flaskr
|
export FLASK_APP=flaskr
|
||||||
export FLASK_ENV=development
|
export FLASK_ENV=development
|
||||||
flask run
|
flask run
|
||||||
|
|
Loading…
Reference in a new issue