diff --git a/flaskr/blog/2022-06-01-0.md b/flaskr/blog/2022-06-01-0.md index 46e796c..2c079ef 100644 --- a/flaskr/blog/2022-06-01-0.md +++ b/flaskr/blog/2022-06-01-0.md @@ -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). -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. @@ -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) -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) \ No newline at end of file +[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day1) diff --git a/flaskr/blog/2022-06-03-0.md b/flaskr/blog/2022-06-03-0.md index c527671..48eca20 100644 --- a/flaskr/blog/2022-06-03-0.md +++ b/flaskr/blog/2022-06-03-0.md @@ -8,6 +8,6 @@ timestamp: 2022-06-03T00:00:00-04:00 ![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) \ No newline at end of file +[GitHub](https://github.com/TriMill/28-days-of-tau/tree/main/day3) diff --git a/flaskr/blog/2022-06-26-0.md b/flaskr/blog/2022-06-26-0.md index cc35647..9341e61 100644 --- a/flaskr/blog/2022-06-26-0.md +++ b/flaskr/blog/2022-06-26-0.md @@ -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. - 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) -- The Riemann zeta function evaluated at -1 is equal to $$ \frac{-1}{12} $$ -- i like it :) \ No newline at end of file +- The Riemann zeta function evaluated at -1 is equal to $\frac{-1}{12}$ +- i like it :) diff --git a/flaskr/blog/2022-07-04-0.md b/flaskr/blog/2022-07-04-0.md index a1cdccd..6aa7ab3 100644 --- a/flaskr/blog/2022-07-04-0.md +++ b/flaskr/blog/2022-07-04-0.md @@ -4,9 +4,8 @@ desc: The future of syndication is finally here 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 -"](/static/i/blog/rssb_origins.png) +![citrons: "we should have a unified GEORGE RSS feed that combines all of the RSS feeds in GEORGE"](/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. -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). \ No newline at end of file +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). diff --git a/flaskr/blog/2022-12-24-0.md b/flaskr/blog/2022-12-24-0.md index 92916e3..888fd26 100644 --- a/flaskr/blog/2022-12-24-0.md +++ b/flaskr/blog/2022-12-24-0.md @@ -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. -[^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}$. diff --git a/flaskr/static/i/bg.png b/flaskr/static/i/bg.png new file mode 100644 index 0000000..2359feb Binary files /dev/null and b/flaskr/static/i/bg.png differ diff --git a/flaskr/static/i/bg_light.png b/flaskr/static/i/bg_light.png new file mode 100644 index 0000000..57e459d Binary files /dev/null and b/flaskr/static/i/bg_light.png differ diff --git a/flaskr/static/pygments.css b/flaskr/static/pygments.css new file mode 100644 index 0000000..6ce40c9 --- /dev/null +++ b/flaskr/static/pygments.css @@ -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 */ diff --git a/flaskr/static/style.css b/flaskr/static/style.css index c4570c6..94d3fb4 100644 --- a/flaskr/static/style.css +++ b/flaskr/static/style.css @@ -1,202 +1,200 @@ @font-face { - font-family: Merriweather; - src: url(/static/f/Merriweather-Light.woff2); - font-weight: 400; + font-family: Merriweather; + src: url(/static/f/Merriweather-Light.woff2); + font-weight: 400; } @font-face { - font-family: Merriweather; - src: url(/static/f/Merriweather-LightItalic.woff2); - font-weight: 400; - font-style: italic; + font-family: Merriweather; + src: url(/static/f/Merriweather-LightItalic.woff2); + font-weight: 400; + font-style: italic; } @font-face { - font-family: Merriweather; - src: url(/static/f/Merriweather-Bold.woff2); - font-weight: 700; + font-family: Merriweather; + src: url(/static/f/Merriweather-Bold.woff2); + font-weight: 700; } @font-face { - font-family: Merriweather; - src: url(/static/f/Merriweather-BoldItalic.woff2); - font-weight: 700; - font-style: italic; + font-family: Merriweather; + src: url(/static/f/Merriweather-BoldItalic.woff2); + font-weight: 700; + font-style: italic; } @font-face { - font-family: "Roboto Slab"; - src: url(/static/f/RobotoSlab-Medium.woff2); - font-weight: 500; + font-family: "Roboto Slab"; + src: url(/static/f/RobotoSlab-Medium.woff2); + font-weight: 500; } @media (prefers-color-scheme: dark) { - :root.theme-system { - --bg: #131720; - --bg-intense: #000000; - --bg-faded: #293441; - --fg: #e6ded6; - --fg-faded: #908a81; - --accent-1: #2aca98; - --accent-1-dark: #268d78; - --error: #ee6d7d; - } - .only-theme-light { - display: none; - } + :root.theme-system { + --bg: #131720; + --bg-intense: #000000; + --bg-faded: #293441; + --fg: #e6ded6; + --fg-faded: #908a81; + --accent-1: #2aca98; + --accent-1-dark: #268d78; + --error: #ee6d7d; + --error-bg: #9b3440; + --bgimg: url("/static/i/bg.png"); + } + .only-theme-light { + display: none; + } } @media (prefers-color-scheme: light) { - :root.theme-system { - --bg: #f6f5f2; - --bg-intense: #ffffff; - --bg-faded: #cbc4c7; - --fg: #28262b; - --fg-faded: #989097; - --accent-1: #0642c3; - --accent-1-dark: #07136d; - --accent-2: #0f7904; - --accent-2-dark: #094a05; - --error: #a50518; - } - .only-theme-dark { - display: none; - } + :root.theme-system { + --bg: #f6f5f2; + --bg-intense: #ffffff; + --bg-faded: #cbc4c7; + --fg: #28262b; + --fg-faded: #989097; + --accent-1: #0642c3; + --accent-1-dark: #07136d; + --accent-2: #0f7904; + --accent-2-dark: #094a05; + --error: #a50518; + --error-bg: #ee6d7d; + --bgimg: url("/static/i/bg_light.png"); + } + .only-theme-dark { + display: none; + } } :root.theme-dark { - --bg: #131720; - --bg-intense: #000000; - --bg-faded: #293441; - --fg: #e6ded6; - --fg-faded: #908a81; - --accent-1: #2aca98; - --accent-1-dark: #268d78; - --error: #ee6d7d; + --bg: #131720; + --bg-intense: #000000; + --bg-faded: #293441; + --fg: #e6ded6; + --fg-faded: #908a81; + --accent-1: #2aca98; + --accent-1-dark: #268d78; + --error: #ee6d7d; + --error-bg: #9b3440; + --bgimg: url("/static/i/bg.png"); } :root.theme-light { - --bg: #f6f5f2; - --bg-intense: #ffffff; - --bg-faded: #cbc4c7; - --fg: #28262b; - --fg-faded: #989097; - --accent-1: #0642c3; - --accent-1-dark: #07136d; - --error: #a50518; -} - -: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; + --bg: #f6f5f2; + --bg-intense: #ffffff; + --bg-faded: #cbc4c7; + --fg: #28262b; + --fg-faded: #989097; + --accent-1: #0642c3; + --accent-1-dark: #07136d; + --error: #a50518; + --error-bg: #ee6d7d; + --bgimg: url("/static/i/bg_light.png"); } :root { - color: var(--fg); - --text-fonts: "Merriweather", "DejaVu Serif", serif; - font-family: var(--text-fonts); - font-size: 19px; - font-weight: 400; - line-height: 1.6; - --link: var(--accent-1); - --link-hover: var(--accent-1-dark); - --link-active: var(--accent-1-dark); - --button: var(--bg-intense); - --button-hover: var(--bg-faded); - --button-active: var(--accent-1-dark); - overflow-wrap: break-word; + color: var(--fg); + --text-fonts: "Merriweather", "DejaVu Serif", serif; + font-family: var(--text-fonts); + font-size: 19px; + font-weight: 400; + line-height: 1.6; + --link: var(--accent-1); + --link-hover: var(--accent-1-dark); + --link-active: var(--accent-1-dark); + --button: var(--bg-intense); + --button-hover: var(--bg-faded); + --button-active: var(--accent-1-dark); + overflow-wrap: break-word; } h1, h2, h3, nav { - font-family: "Roboto Slab", serif; - font-weight: 500; - margin-top: 16px; - margin-bottom: 16px; + font-family: "Roboto Slab", serif; + font-weight: 500; + margin-top: 16px; + margin-bottom: 16px; } h1 { - width: fit-content; - margin-left: auto; - margin-right: auto; - margin-top: 4px; - margin-bottom: 0px; + width: fit-content; + margin-left: auto; + margin-right: auto; + margin-top: 4px; + margin-bottom: 0px; } body { - background: var(--bg); - width: min(750px, 90vw); - margin: auto; - min-height: 100vh; - display: flex; - flex-direction: column; + background-image: var(--bgimg); + background-color: var(--bg); + image-rendering: pixelated; + width: min(750px, 90vw); + margin: auto; + min-height: 100vh; + display: flex; + flex-direction: column; } main { - flex-grow: 1; + flex-grow: 1; } hr { - width: 100%; + width: 100%; } section { - padding-left: 10px; - background-color: var(--bg-intense); + padding-left: 10px; + background-color: var(--bg-intense); } footer { - text-align: center; - color: var(--fg-faded); - margin-top: auto; - flex-shrink: 0; - min-height: 50px; - font-size: 12px; + text-align: center; + color: var(--fg-faded); + margin-top: auto; + flex-shrink: 0; + min-height: 50px; + font-size: 12px; } footer code { - font-size: 12px; + font-size: 12px; } nav { - padding-top: 10px; - width: fit-content; - margin: auto; - font-size: 20px; + padding-top: 10px; + width: fit-content; + margin: auto; + font-size: 20px; } nav > svg { - position: absolute; - top: 16px; - height: 20px; - width: auto; - padding-left: 15px; - padding-right: 10px; - fill: var(--fg); + position: absolute; + top: 16px; + height: 20px; + width: auto; + padding-left: 15px; + padding-right: 10px; + fill: var(--fg); } nav > a { - color: var(--fg); - text-decoration: none; - padding-left: 10px; - padding-right: 10px; + color: var(--fg); + text-decoration: none; + padding-left: 10px; + padding-right: 10px; } nav > a:hover { color: var(--fg-faded); } a { - color: var(--link); - text-decoration: none; + color: var(--link); + text-decoration: none; } :root[theme="contrast"] a, :root[theme="contrast-dark"] a { - text-decoration: underline; + text-decoration: underline; } a:hover { color: var(--link-hover); } @@ -204,55 +202,84 @@ a:hover { color: var(--link-hover); } a:active { color: var(--link-active); } .faded { - color: var(--fg-faded); + color: var(--fg-faded); } p { - margin-top: 10px; - margin-bottom: 10px; + margin-top: 10px; + margin-bottom: 10px; } blockquote { - border-left: 2px solid var(--fg-faded); - margin-left: 2px; - padding-left: 15px; + border-left: 2px solid var(--fg-faded); + margin-left: 2px; + padding-left: 15px; } code, pre { - background-color: var(--bg-intense); - padding-left: 3px; - padding-right: 3px; - padding-top: 2px; - padding-bottom: 2px; - border-radius: 3px; - font-family: "Fira Mono", monospace; - font-size: 18px; + background-color: var(--bg-intense); + padding-left: 3px; + padding-right: 3px; + padding-top: 2px; + padding-bottom: 2px; + border-radius: 3px; + font-family: "Fira Mono", monospace; + font-size: 18px; } pre { - padding-top: 3px; - padding-bottom: 3px; - padding-left: 12px; - border-left: 5px solid var(--accent-1-dark); + padding-top: 3px; + padding-bottom: 3px; + padding-left: 12px; + border-left: 5px solid var(--accent-1-dark); } button, input, select, textarea { - color: var(--fg); - background-color: var(--bg-faded); - border: 2px solid var(--fg-faded); - border-radius: 3px; - font-family: var(--text-fonts); - font-size: 16px; + color: var(--fg); + background-color: var(--bg-faded); + border: 2px solid var(--fg-faded); + border-radius: 3px; + font-family: var(--text-fonts); + font-size: 16px; } button:active, input[type=button]:active { - background-color: var(--bg); + background-color: var(--bg); } button:active, input[type=button]:active { - background-color: var(--bg); + background-color: var(--bg); } .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; } diff --git a/flaskr/templates/_base.html b/flaskr/templates/_base.html index df63841..2c9b89d 100644 --- a/flaskr/templates/_base.html +++ b/flaskr/templates/_base.html @@ -1,77 +1,90 @@ - - - {{ meta.title }} + + - - - - - - - - - - - + + + + + + + - - + {{ meta.title }} + + + + + + - {% block head %} {% endblock %} + + + + + {% block head %} {% endblock %} - {% if meta.fullscreen != True %} - + {% if meta.fullscreen != True %} + -

{{ meta.title }}

+

{{ meta.title }}

-
+
- {% endif %} -
- {% block content %}{% endblock %} -
- {% if meta.fullscreen != True %} -
- {% block footer_content %}{% endblock %} - - {% endif %} + {% endif %} +
+ {% block content %}{% endblock %} +
+ {% if meta.fullscreen != True %} +
+
+ + + thank you for using an adblocker! + + + you aren't using an adblocker! click + here (firefox) or + here (chrome) to install one. + +
+ {% block footer_content %}{% endblock %} + + {% endif %} diff --git a/flaskr/templates/_blog.html b/flaskr/templates/_blog.html index b22aa29..8bfa2e8 100644 --- a/flaskr/templates/_blog.html +++ b/flaskr/templates/_blog.html @@ -2,30 +2,31 @@ {% block head %} + {% endblock %} diff --git a/flaskr/templates/atom.xml b/flaskr/templates/atom.xml index f9b9f11..f32f51b 100644 --- a/flaskr/templates/atom.xml +++ b/flaskr/templates/atom.xml @@ -1,21 +1,21 @@ - Blog™ - - - {{ data.blogposts[0].timestamp.isoformat() }} - - TriMill - - https://trimill.xyz/blog/ + Blog™ + + + {{ data.blogposts[0].timestamp.isoformat() }} + + TriMill + + https://trimill.xyz/blog/ - {% for post in data.blogposts %} - - {{ post.title }} - - {{ post.desc }} - {{ post.timestamp.isoformat() }} - https://trimill.xyz/{{ post.url }} - - {% endfor %} - \ No newline at end of file + {% for post in data.blogposts %} + + {{ post.title }} + + {{ post.desc }} + {{ post.timestamp.isoformat() }} + https://trimill.xyz/{{ post.url }} + + {% endfor %} + diff --git a/flaskr/templates/blog.html b/flaskr/templates/blog.html index 026811c..8cebce5 100644 --- a/flaskr/templates/blog.html +++ b/flaskr/templates/blog.html @@ -6,7 +6,7 @@ get updates delivered directly to you using the RSS {% for post in data.blogposts %}

- {{ post.title }} + {{ post.title }}

{{ post.date.isoformat() }}

{{ post.desc }}

diff --git a/flaskr/templates/index.html b/flaskr/templates/index.html index d9991de..1b21999 100644 --- a/flaskr/templates/index.html +++ b/flaskr/templates/index.html @@ -36,18 +36,16 @@ {% block footer_content %} {% if theme == "light" %} - -{% elif theme == "special" %} - + {% elif theme == "system" %} - - + + {% else %} - + {% endif %}

- +


diff --git a/flaskr/templates/projects.html b/flaskr/templates/projects.html index f4df888..b208ddf 100644 --- a/flaskr/templates/projects.html +++ b/flaskr/templates/projects.html @@ -2,81 +2,89 @@ {% extends "/_base.html" %} {% block content %} -

complexpr

+

CXGraph

- 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 |>) to express nested function calls more cleanly. + CXGraph is the successor to Complex Grapher. It allows the definition of multiple functions, + iteration, and interactive sliders and draggable points. It is implemented primarily in Rust + using WASM and WebGPU. +

+ +

Talc

+

+ 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.

Quectocraft

- Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server. By doing away with most - features of the vanilla server (such as world generation and 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. + Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server. + By doing away with most features of the vanilla server (such as world generation and + 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.

RSS Bundler

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

- -

Complex grapher

-

- Complex grapher allows you to functions using domain coloring. - 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. + 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.

zzcxz visualizer

- zzcxz visualizer displays a force-directed graph of zzcxz, a collaborative interactive - fiction project. It is written in JavaScript and uses D3.js. + zzcxz visualizer displays a force-directed graph of zzcxz, a collaborative interactive + fiction project. It is written in JavaScript and uses D3.js. +

+ +

complexpr

+

+ 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 |>) to express nested function calls more cleanly.

sysh

- 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 - automatically generate some code. + 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 + automatically generate some code.

Musidl

- Musidl is a Bash script that downloads music using yt-dlp and - automatically add ID3v2 tags based on Youtube Music metadata. + Musidl is a Bash script that downloads music using yt-dlp and + automatically add ID3v2 tags based on Youtube Music metadata.

Maze maker

- Generate random mazes based on a variety of parameters. Written in JavaScript using p5.js. + Generate random mazes based on a variety of parameters. Written in JavaScript using p5.js.

Unit converter

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

Fraction base converter

- Convert a fraction to its positional notation in an arbitrary base. + Convert a fraction to its positional notation in an arbitrary base.

number

- Make number go up. + Make number go up.

Pixel circle

- Create pixelated circles with a specified radius. + Create pixelated circles with a specified radius.

Stars

- Generate stars. + Generate stars.

diff --git a/flaskr/templates/rss.xml b/flaskr/templates/rss.xml index 6aae616..7e514a5 100644 --- a/flaskr/templates/rss.xml +++ b/flaskr/templates/rss.xml @@ -1,20 +1,20 @@ - Blog™ - https://trimill.xyz/blog/ - Blog™ - en - {{ data.blogposts[0].timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }} - - {% for post in data.blogposts %} - - {{ post.title }} - https://trimill.xyz/{{ post.url }} - {{ post.desc }} - {{ post.timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }} - https://trimill.xyz/{{ post.url }} - - {% endfor %} + Blog™ + https://trimill.xyz/blog/ + Blog™ + en + {{ data.blogposts[0].timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }} + + {% for post in data.blogposts %} + + {{ post.title }} + https://trimill.xyz/{{ post.url }} + {{ post.desc }} + {{ post.timestamp.strftime("%a, %d %b %Y %H:%M:%S %z") }} + https://trimill.xyz/{{ post.url }} + + {% endfor %} - \ No newline at end of file + diff --git a/test.sh b/test.sh index 4a16747..a8eb0aa 100755 --- a/test.sh +++ b/test.sh @@ -3,4 +3,4 @@ . venv/bin/activate export FLASK_APP=flaskr export FLASK_ENV=development -flask run \ No newline at end of file +flask run