Compare commits

...

29 Commits

Author SHA1 Message Date
f7eda2e4ec update add drafts 2026-01-24 14:26:26 +01:00
28f657fb07 update 2026-01-18 22:33:52 +01:00
709053b27e fix rss 2026-01-18 22:27:08 +01:00
76573dc378 update 2026-01-18 22:25:19 +01:00
Daniel Ledda
ba9bcbaa08 update 2026-01-18 22:22:01 +01:00
d93e2f8928 update homepage 2026-01-18 22:17:50 +01:00
cc8b8b6d8b update new article 2026-01-18 22:15:07 +01:00
1255ce4f07 update 2025-12-28 18:39:58 +01:00
a261eb62c8 update vue 2025-12-26 14:16:16 +01:00
e55af45fa3 update 2025-12-26 14:15:20 +01:00
f40c02585f styling 2025-12-21 23:39:07 +01:00
Daniel Ledda
2829504b2b update 2025-12-20 21:43:50 +01:00
Daniel Ledda
808338f547 update font 2025-12-20 21:26:15 +01:00
Daniel Ledda
498cb37561 big style update 2025-12-20 21:16:00 +01:00
Daniel Ledda
51e44db779 big updats 2025-12-20 00:10:42 +01:00
Daniel Ledda
a93ffff00d update 2025-12-11 16:26:52 +01:00
Daniel Ledda
2702d7dc8f update 2025-12-11 16:24:36 +01:00
Daniel Ledda
f26ab99960 udpate 2025-12-11 16:23:12 +01:00
Daniel Ledda
aaa2fe85f7 update 2025-12-11 16:20:15 +01:00
Daniel Ledda
9762d463ed update 2025-12-11 16:19:20 +01:00
Gitea
22d19d45f7 update 2024-11-06 21:39:21 +01:00
Daniel Ledda
a84e9418ba update 2024-11-06 21:35:14 +01:00
Daniel Ledda
3e517a8ce8 update 2024-11-06 10:52:15 +01:00
Gitea
13d995ec4d update 2024-11-05 22:08:02 +01:00
Gitea
33d1b343a0 update 2024-11-05 21:56:55 +01:00
Gitea
ec8ab9a7eb update 2024-11-05 21:56:00 +01:00
Gitea
0b530ac9be update 2024-11-05 21:54:38 +01:00
Daniel Ledda
6d64b61323 update 2024-11-05 21:53:17 +01:00
Daniel Ledda
98a00b6ad0 three hormones 2024-11-05 21:52:23 +01:00
73 changed files with 11057 additions and 574 deletions

13
README.md Normal file
View File

@@ -0,0 +1,13 @@
This repo is for content hosted at djledda.net
The basic idea is that the `/app` folder contains shared files (in the root)
and separate Vue apps (each folder) whose code doesn't need to be built and can
be run in SSR mode or sent to the client directly, transpiled on the fly using
Deno's built in transpilation API.
# Structure
- `/app/` contains shared files and individual vue apps ('sites')
- `/app/<site>/client.ts` is the javascript entry point for the client
- `/app/<site>/server.ts` is the javascript entry point for the server
- `/public/` contains static files publicly available using the same folder structure over HTTP
- `/public/home` and `/app/home` will be remapped to root requests: a request to `/img/*` is retrieved from `/public/home/img/*`

View File

@@ -1,21 +0,0 @@
import { defineComponent } from "vue";
export default defineComponent({
name: "dj-email",
setup(_props, { slots }) {
function clickMail() {
const a = "gmail";
const b = "com";
const c = "danjledda";
let link = "ma" + "il" + "" + "to:" + c + a + b;
link = link.slice(0, 10) + "." + link.slice(10, 11) + "." + link.slice(11, 16) + "@" + link.slice(16, 21) +
"." + link.slice(21);
window.location.href = link;
}
return () => (
<a href="#" onClick={clickMail}>
{slots.default ? slots.default() : "dan.j.ledda [at] gmail [dot] com"}
</a>
);
},
});

19
app/DjEmail.tsx Normal file
View File

@@ -0,0 +1,19 @@
import { defineComponent } from "vue";
export default defineComponent({
name: "dj-email",
setup(_props, { slots }) {
function clickMail() {
const a = "dan";
const b = "djledda";
const c = "net";
let link = "mailto:" + a + "@" + b + "." + c;
window.location.href = link;
}
return () => (
<a href="#" onClick={clickMail}>
{slots.default ? slots.default() : "dan [at] djledda [dot] net"}
</a>
);
},
});

View File

@@ -1,4 +1,4 @@
import { nextTick, inject, provide, watch, type InjectionKey, onBeforeUnmount, watchEffect, onMounted, type Ref, type CSSProperties, defineComponent, ref } from "vue";
import { nextTick, inject, provide, watch, type InjectionKey, onBeforeUnmount, watchEffect, onMounted, type Ref, defineComponent, ref } from "vue";
import { addCSS, css, h as djh } from "@/util.ts";
type TooltipContext = {
@@ -17,9 +17,10 @@ const tooltipStyles = css`
opacity: 0;
display: block;
pointer-events: none;
background-color: black;
border: white solid 1px;
color: white;
background-color: var(--dj-bgpalette1);
box-shadow: 0 0 12px 1px rgb(10 12 15 / 70%);
border: var(--dj-palette3) solid 1px;
color: var(--dj-palette3);
padding: 10px;
position: absolute;
z-index: 1;
@@ -91,7 +92,7 @@ export function setupTooltip(options: { carrier: Ref<HTMLElement | null> }) {
const ctx: TooltipContext = {
show(tooltip, x, y) {
if (carrier.value) {
carrier.value.firstChild!.textContent = tooltip;
(carrier.value.firstChild as HTMLElement)!.innerHTML = tooltip;
}
active.value = true;
listener({ x, y });
@@ -118,12 +119,12 @@ export default defineComponent({
onBeforeUnmount(() => tooltip.hide());
return () => <>
<div class="tooltip-container"
<span class="tooltip-container"
{...attrs}
onMouseenter={(e) => tooltip.show(props.tooltip, e.pageX, e.pageY)}
onMouseleave={() => tooltip.hide()}>
{slots.default && <slots.default />}
</div>
{slots.default?.()}
</span>
</>;
},
});

View File

@@ -1,4 +1,17 @@
export type DJAPIEndpoint = "/rp-articles";
export type DjAPIEndpoint =
| "/rp-articles"
| "/blog-entries"
;
type BlogEntry = {
title: string,
slug: string;
createdAt: string,
updatedAt: string,
tags?: string[],
guid: string,
teaser: string,
};
type RPArticle = {
title: string,
@@ -9,15 +22,16 @@ type RPArticle = {
tags?: string[],
};
export interface DJAPIResultMap extends Record<DJAPIEndpoint, unknown> {
export interface DjAPIResultMap extends Record<DjAPIEndpoint, unknown> {
"/rp-articles": RPArticle[];
"/blog-entries": BlogEntry[];
}
export type DJAPIResult = DJAPIResultMap[DJAPIEndpoint];
export type DjAPIResult = DjAPIResultMap[DjAPIEndpoint];
export default async function getDJAPI<T extends DJAPIEndpoint>(
export default async function getDjAPI<T extends DjAPIEndpoint>(
hostUrl: string,
endpoint: T,
): Promise<DJAPIResultMap[typeof endpoint]> {
): Promise<DjAPIResultMap[typeof endpoint]> {
return await (await fetch(`${hostUrl}/api${endpoint}`)).json();
}

98
app/blog/DjBlogEntry.tsx Normal file
View File

@@ -0,0 +1,98 @@
import { computed, createTextVNode, defineComponent, h, type VNode } from "vue";
import useHead from "@/useHead.ts";
import useAsyncState from "@/useAsyncState.ts";
import getDjAPI from "@/api.ts";
import getDomParser from "@/domParse.ts";
import { addCSS, css } from "../util.ts";
const style = css`
.byline {
font-style: italic;
color: gray;
}
h1 {
color: var(--dj-palette1);
}
p {
margin-bottom: 30px;
}
`;
export default defineComponent({
name: "DjBlogEntry",
props: {
slug: {
type: String,
required: true,
},
},
async setup(props) {
addCSS('DjBlogEntry', style);
const parseDom = getDomParser();
const blogpostContent = useAsyncState(
`dj-blog-article-content-${ props.slug }`,
async ({ hostUrl }) => {
const blogpostResponse = await fetch(`${hostUrl}/blog/content/${ props.slug }.html`);
const result = await blogpostResponse.text();
return result;
},
);
const blogpostsMetadata = useAsyncState('article-metadata', ({ hostUrl }) => getDjAPI(hostUrl, '/blog-entries'));
const blogpostMetadata = computed(() => blogpostsMetadata.result.value?.find(_ => _.slug === props.slug));
useHead({
title: () => blogpostMetadata.value?.title ?? '',
metatags: () => blogpostMetadata.value ? [
{ name: 'title', content: blogpostMetadata.value.title },
{ name: 'author', content: 'Daniel Ledda' },
] : [],
});
function transformPostNode(node: Node): VNode | string {
if (node.nodeType === node.ELEMENT_NODE) {
const el = node as Element;
const attrs: Record<string, string> = {};
const children = [...node.childNodes].map((_) => transformPostNode(_));
for (let i = 0; i < el.attributes.length; i++) {
const item = el.attributes.item(i);
if (item) {
attrs[item.name] = item.value;
}
}
return h((node as Element).tagName, attrs, children);
} else {
return createTextVNode(node.textContent ?? "");
}
}
function PostContentTransformed() {
if (blogpostContent.result.value) {
const dom = parseDom(blogpostContent.result.value);
return h("div", {}, [...dom.children].map((_) => transformPostNode(_)));
}
return <div>Blog post loading...</div>;
}
await Promise.allSettled([ blogpostContent.done, blogpostsMetadata.done ]);
return () => <>
{ blogpostMetadata.value
? <>
<h1>{ blogpostMetadata.value.title }</h1>
<div class="byline">by Daniel Ledda, first published { new Date(blogpostMetadata.value.createdAt).toLocaleDateString() }</div>
<PostContentTransformed />
</>
: "Sorry, this blog post doesn't seem to exist."
}
</>;
}
});

54
app/blog/DjBlogMain.tsx Normal file
View File

@@ -0,0 +1,54 @@
import { defineComponent } from "vue";
import useAsyncState from "@/useAsyncState.ts";
import getDjAPI from "@/api.ts";
import { RouterLink } from "vue-router";
import { addCSS, css } from "@/util.ts";
const style = css`
.dj-blog-main {
.entry {
display: flex;
flex-direction: row;
gap: 4px;
}
em {
color: gray;
}
h2 {
margin-top: 0;
}
}
`;
export default defineComponent({
name: "DjBlogMain",
async setup() {
addCSS('DjBlogMain', style);
const blogEntries = useAsyncState('blog-entries-meta', ({ hostUrl }) => getDjAPI(hostUrl, "/blog-entries"));
await blogEntries.done;
return () => <>
<main class="dj-blog-main">
<h2>Entries</h2>
<ul>
{blogEntries.result.value?.map(_ => (
<li key={_.slug}>
<div class="entry">
<RouterLink to={{ name: 'DjBlogEntry', params: { slug: _.slug }}}>{ _.title }</RouterLink>
</div>
<div>
<em>first published <time datetime={ _.createdAt }>{ new Date(_.createdAt).toLocaleDateString() }</time></em>
</div>
</li>
)) ?? <li>Blog posts loading...</li>}
</ul>
</main>
</>;
},
});

151
app/blog/DjBlogRoot.tsx Normal file
View File

@@ -0,0 +1,151 @@
import { defineComponent, ref, type VNode, Suspense } from "vue";
import { type RouteRecordRaw, RouterLink, RouterView } from "vue-router";
import DjTooltip, { setupTooltip } from "@/DjTooltip.tsx";
import DjBlogEntry from "@/blog/DjBlogEntry.tsx";
import DjBlogMain from "@/blog/DjBlogMain.tsx";
import DjEmail from "@/DjEmail.tsx";
import { addCSS, css } from "@/util.ts";
import useHead from "@/useHead.ts";
export const routes: RouteRecordRaw[] = [
{
path: "/",
name: "DjBlogMain",
component: DjBlogMain,
},
{
path: "/post/:slug",
name: "DjBlogEntry",
component: DjBlogEntry,
props: ({ params }) => {
if ("slug" in params) {
return { slug: params.slug };
} else {
return false;
}
},
},
];
const styles = css`
body {
height: 100svh;
}
.dj-blog-root {
display: flex;
flex-direction: column;
align-items: center;
margin: auto;
width: 800px;
.dot {
margin-left: 10px;
margin-right: 10px;
}
.container {
width: 100%;
}
footer {
width: 100%;
font-style: italic;
margin-left: 10px;
margin-bottom: 25px;
text-align: left;
}
a {
color: var(--dj-palette3);
text-decoration: solid line;
&:visited {
color: var(--dj-visited);
}
}
ul {
padding-left: 30px;
}
li {
list-style: disclosure-closed;
}
nav {
width: 100%;
font-size: 40px;
margin-top: 10px;
margin-bottom: 10px;
text-decoration: none;
text-align: right;
a, a:visited {
color: var(--dj-palette3);
}
}
@media only screen and (max-width: 1024px) {
width: calc(100% - 20px);
padding: 10px;
.dj-title {
margin-right: 30px;
}
footer {
margin-bottom: 0;
}
}
}
`;
export default defineComponent({
name: "DjBlogRoot",
setup() {
const carrier = ref<HTMLDivElement | null>(null);
setupTooltip({ carrier });
addCSS('dj-blog-root', styles);
useHead({ title: "djblog Home" });
return () => (
<>
<div ref={carrier} class="tooltip-carrier" />
<div class="dj-blog-root">
<nav>
<DjTooltip tooltip="flog, clog, bog, frog, cog, log, grog, fog, snog...">
<RouterLink to={{ name: 'DjBlogMain' }}>
dj blog
</RouterLink>
</DjTooltip>
</nav>
<div class="container">
<RouterView>
{{
default: ({ Component }: { Component: VNode }) => (Component &&
(
<Suspense>
{{
default: () => Component,
fallback: () => <div>Page loading...</div>,
}}
</Suspense>
)),
}}
</RouterView>
</div>
<hr />
<footer>
<div class="bottom">
<div>
<a href="/">djledda.net</a> {new Date().getFullYear()}<span class="dot">·</span><DjEmail>{() => "Contact"}</DjEmail><span class="dot">·</span><a href="/blog/djblog.rss">RSS Feed</a>
</div>
</div>
</footer>
</div>
</>
);
},
});

12
app/blog/client.ts Normal file
View File

@@ -0,0 +1,12 @@
import { createSSRApp } from "vue";
import { createRouter, createWebHistory } from "vue-router";
import DjBlogRoot, { routes } from "@/blog//DjBlogRoot.tsx";
import { cssRegistry } from "@/util.ts";
createSSRApp(DjBlogRoot)
.provide(cssRegistry, new Set())
.use(createRouter({
routes,
history: createWebHistory("/blog"),
}))
.mount("#app-root");

16
app/blog/index.html Normal file
View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/theme.css">
<meta name="description" content="dj blog - djledda's blog">
<!-- SSR HEAD OUTLET -->
</head>
<body>
<div id="app-root"><!-- SSR OUTLET --></ div>
</body>
</html>

12
app/blog/server.ts Normal file
View File

@@ -0,0 +1,12 @@
import { createSSRApp } from "vue";
import DjBlogRoot, { routes } from "@/blog/DjBlogRoot.tsx";
import { createMemoryHistory, createRouter } from "vue-router";
export default function createApp() {
const router = createRouter({
routes: routes,
history: createMemoryHistory("/blog"),
});
const app = createSSRApp(DjBlogRoot).use(router);
return { app, router };
}

8
app/domParse.ts Normal file
View File

@@ -0,0 +1,8 @@
import { inject } from "vue";
export default function getDomParser() {
return inject(
"dom-parse",
(innerHTML: string) => Object.assign(document.createElement("div"), { innerHTML }),
);
}

View File

@@ -1,21 +1,20 @@
import { defineComponent } from "vue";
import { RouterLink } from "vue-router";
import DJEmail from "@/DJEmail.tsx";
import DjEmail from "@/DjEmail.tsx";
import useHead from "@/useHead.ts";
import useAsyncState from "@/useAsyncState.ts";
import getDJAPI from "@/api.ts";
import getDjAPI from "@/api.ts";
import DjTooltip from "@/DjTooltip.tsx";
export default defineComponent({
name: "ge-deutsch",
async setup() {
useHead({ title: "Ray Peat Artikel auf Deutsch" });
const {
result: rpArticles,
stateIsReady,
} = useAsyncState("rp-articles", ({ hostUrl }) => getDJAPI(hostUrl, "/rp-articles"));
const rpArticles = useAsyncState("rp-articles", ({ hostUrl }) => getDjAPI(hostUrl, "/rp-articles"));
await rpArticles.done;
await stateIsReady;
return () => <>
<header>
<h1>Ray Peat Deutsche Übersetzungen</h1>
@@ -28,16 +27,35 @@ export default defineComponent({
<h2>Artikelliste</h2>
<div class="text-slab">
<ul id="article">
{rpArticles.value && rpArticles.value.map((_) => (
{rpArticles.result.value && rpArticles.result.value.map((_) => (
<li>
<DjTooltip tooltip={`Englischer Titel: <em>»${ _.titleEn }«</em>`}>
{_.tags?.includes('in-arbeit')
? _.titleDe
: (
<RouterLink to={{ name: "GEDeutschArticle", params: { articleName: _.slug } }}>
{_.titleDe}
</RouterLink>
)}
{_.tags?.map(tag => <span class="tag">{tag}</span>)}
</DjTooltip>
</li>
))}
</ul>
</div>
<hr />
<h3>Geplante Artikel (mit Link zum Original)</h3>
<div class="text-slab">
<ul>
<li><a href="http://raypeat.com/articles/articles/dark-side-of-stress-learned-helplessness.shtml">The dark side of stress (learned helplessness)</a></li>
<li><a href="http://raypeat.com/articles/articles/vegetables.shtml">Vegetables etc. - Who Defines Food?</a></li>
<li><a href="http://raypeat.com/articles/articles/glucose-sucrose-diabetes.shtml">Glucose and sucrose for diabetes</a></li>
<li><a href="http://raypeat.com/articles/articles/milk.shtml">Milk in context: allergies, ecology, and some myths</a></li>
<li><a href="http://raypeat.com/articles/articles/gelatin.shtml">Gelatin, stress, longevity</a></li>
<li><a href="http://raypeat.com/articles/articles/unsaturatedfats.shtml">Unsaturated fatty acids: Nutritionally essential, or toxic?</a></li>
</ul>
<DjEmail>Schick mir deine Vorschläge!</DjEmail>
</div>
</section>
<section>
<h3>Zu Ray</h3>
@@ -54,18 +72,15 @@ export default defineComponent({
<a href="http://raypeat.com/">seiner Website</a> zu finden sind.
</p>
<p>
Da er in meinem Leben zu einem enormen Verständnis meines Körpers und einem unglaublichen
Zurückerlangen meiner Gesundheit und meines Wohlbefindens trotz dem Scheitern mehrerer Ärzte
beigetragen hat, und sein Nachlass in Deutschland kaum Publikum aufgrund schwieriger
physiologischer Texte genießt, habe ich entschieden hauptsächlich für Freunde und Bekannte
einige seiner Artikel ins Deutsche zu übersetzen, damit vielleicht auch ein breiteres Publikum
von seinen Ideen profitieren könnte.
Da er in meinem Leben zu einem besseren Verständnis meines Körpers und dem Zurückerlangen
meiner Gesundheit beigetragen hat, und sein Nachlass in Deutschland kaum Publikum genießt, habe ich
einige seiner Artikel ins Deutsche übersetzt, damit mehr Leute wie ich von seinen Ideen und Ratschlägen profieren können.
</p>
</div>
<h3>Helfen</h3>
<p class="text-slab">
Falls was bei der Übersetzung auffällt oder besonders unidiomatisch klingt, bzw. der deutschen
Fachsprache der Medizin nicht gerecht sein sollte, kannst du mir unter <DJEmail />{" "}
Fachsprache der Medizin nicht gerecht sein sollte, kannst du mir unter <DjEmail />{" "}
eine Mail senden. Meine Muttersprache ist schließlich Englisch und ich bin kein professioneller
Übersetzer!
Falls jemand Hilfe leisten möchte, sag gerne Bescheid!

View File

@@ -1,9 +1,9 @@
import { createTextVNode, computed, defineComponent, h, inject, onServerPrefetch, ref, type VNode, watchEffect } from "vue";
import { createTextVNode, computed, defineComponent, h, inject, ref, type VNode } from "vue";
import { RouterLink } from "vue-router";
import useAsyncState from "@/useAsyncState.ts";
import useHead from "@/useHead.ts";
import DJEmail from "@/DJEmail.tsx";
import getDJAPI from "@/api.ts";
import DjEmail from "@/DjEmail.tsx";
import getDjAPI from "@/api.ts";
export default defineComponent({
name: "ge-deutsch-article",
@@ -25,8 +25,8 @@ export default defineComponent({
(innerHTML: string) => Object.assign(document.createElement("div"), { innerHTML }),
);
const { result: articleContent, stateIsReady } = useAsyncState(
"ge-deutsch-article-data",
const articleContent = useAsyncState(
"ge-deutsch-article-content",
async ({ hostUrl }) => {
const articleResponse = await fetch(`${hostUrl}/generative-energy/content/${props.articleName}.html`);
const result = await articleResponse.text();
@@ -34,12 +34,9 @@ export default defineComponent({
},
);
const {
result: articleData,
stateIsReady: articleDataReady,
} = useAsyncState('article-data', ({hostUrl}) => getDJAPI(hostUrl, '/rp-articles'));
const articlesMetadata = useAsyncState('article-metadata', ({hostUrl}) => getDjAPI(hostUrl, '/rp-articles'));
const articleMetadata = computed(() => articleData.value?.find(_ => _.slug === props.articleName));
const articleMetadata = computed(() => articlesMetadata.result.value?.find(_ => _.slug === props.articleName));
useHead({
title: () => articleMetadata.value?.title ?? '',
@@ -92,14 +89,14 @@ export default defineComponent({
}
function ArticleContentTransformed() {
if (articleContent.value) {
const dom = parseDom(articleContent.value);
if (articleContent.result.value) {
const dom = parseDom(articleContent.result.value);
return h("div", {}, [...dom.children].map((_) => transformArticleNode(_)));
}
return <div>Artikel lädt...</div>;
}
await Promise.all([stateIsReady, articleDataReady]);
await Promise.allSettled([ articleContent.done, articlesMetadata.done ]);
return () => (
<div class="ge-article">
@@ -111,7 +108,7 @@ export default defineComponent({
</div>
<p class="text-slab">
Bei dem untenstehenden Artikel handelt es sich um eine hobbymäßige, amateurhafte Übersetzung des
Artikels { articleMetadata.value?.titleEn } von Ray Peat. Bei Ungenauigkeiten oder Fehlübersetzungen freue ich mich über <DJEmail>eine Mail</DJEmail>!
Artikels { articleMetadata.value?.titleEn } von Ray Peat. Bei Ungenauigkeiten oder Fehlübersetzungen freue ich mich über <DjEmail>eine Mail</DjEmail>!
</p>
{ articleMetadata.value?.tags?.includes('in-arbeit') && <h5 class="baustelle">🚧 Bitte beachte, dass diese Übersetzung noch in Arbeit ist! 🚧</h5> }
<hr />

View File

@@ -1,6 +1,6 @@
import { RouterLink } from "vue-router";
import useHead from "@/useHead.ts";
import DJTooltip from "@/DJTooltip.tsx";
import DjTooltip from "@/DjTooltip.tsx";
export default {
name: "ge-main",
@@ -17,18 +17,33 @@ export default {
and my life in general. Hover over the links below for more detail.
</p>
</div>
<h2>Projects</h2>
<div class="text-slab">
<ul>
<li>
<DjTooltip tooltip="Convert to and from grains, set ratios, etc.">
<RouterLink to={{ name: "GECalculator" }}>Thyroid Calculator</RouterLink>
</DjTooltip>
</li>
<li>
<DjTooltip tooltip="A selection of articles by Ray that I have translated in my spare time into German.">
<RouterLink to={{ name: "GEDeutsch" }}>Ray Peat Articles in German</RouterLink>
</DjTooltip>
</li>
</ul>
</div>
<h2>Links</h2>
<div class="text-slab">
<ul>
<li>
<DJTooltip tooltip="Convert to and from grains, set ratios, etc.">
<RouterLink to={{ name: "GECalculator" }}>Thyroid Calculator</RouterLink>
</DJTooltip>
<DjTooltip tooltip="Full text search of the majority of Ray's interviews. Extremely helpful and fun to use.">
<a href="https://bioenergeic.life">bioenergetic.life - A Ray Peat Search Engine</a>
</DjTooltip>
</li>
<li>
<DJTooltip tooltip="A selection of articles by Ray that I have translated in my spare time into German.">
<RouterLink to={{ name: "GEDeutsch" }}>Ray Peat Articles in German</RouterLink>
</DJTooltip>
<DjTooltip tooltip="Ray's original website with articles and bookstore">
<a href="https://raypeat.com">raypeat.com</a>
</DjTooltip>
</li>
</ul>
</div>

View File

@@ -1,12 +1,12 @@
import { defineComponent, ref, Suspense, type VNode } from "vue";
import { type RouteRecordRaw, RouterLink, RouterView, useRoute } from "vue-router";
import GEMain from "@/generative-energy/GEMain.tsx";
import DJEmail from "@/DJEmail.tsx";
import DjEmail from "@/DjEmail.tsx";
import GEDeutsch from "@/generative-energy/GEDeutsch.tsx";
import GEDeutschArticle from "@/generative-energy/GEDeutschArticle.tsx";
import GECalculator from "@/generative-energy/GECalculator.tsx";
import DJDonate from "@/DJDonate.tsx";
import { setupTooltip } from "@/DJTooltip.tsx";
import DjDonate from "@/DjDonate.tsx";
import { setupTooltip } from "@/DjTooltip.tsx";
export const routes: RouteRecordRaw[] = [
{
@@ -67,9 +67,9 @@ export default defineComponent({
<footer>
<div class="bottom">
<div>
<a href="/">djledda.de</a> 2024 - <DJEmail>{() => "Contact"}</DJEmail>
<a href="/">djledda.net</a> {new Date().getFullYear()} - <DjEmail>{() => "Contact"}</DjEmail>
</div>
<DJDonate />
<DjDonate />
</div>
</footer>
</main>

View File

@@ -1,102 +0,0 @@
import { defineComponent, computed, ref, type Ref } from "vue";
import useHead from "@/useHead.ts";
import DJTooltip, { setupTooltip } from "@/DJTooltip.tsx";
import DJEmail from "@/DJEmail.tsx";
export default defineComponent({
name: "app-root",
setup() {
useHead({ title: "DJ Ledda's Homepage" });
const tooltipCarrier = ref<HTMLDivElement | null>(null);
setupTooltip({ carrier: tooltipCarrier });
const dude1Spinning = ref(false);
const dude2Spinning = ref(false);
function toggleDude(event: MouseEvent, dudeRef: Ref<boolean>) {
const dude = event.target as HTMLImageElement;
if (dudeRef.value) {
dude.addEventListener("animationiteration", function listener() {
dudeRef.value = false;
dude.removeEventListener("animationiteration", listener as EventListenerOrEventListenerObject);
});
} else {
dudeRef.value = true;
}
}
const shaking = computed(() => dude1Spinning.value || dude2Spinning.value);
return () => <>
<div ref={tooltipCarrier} class="tooltip-carrier" />
<div class="supercontainer">
<div class={{ shakeable: true, shakeMe: shaking.value }}>
<div class="title_name">
<DJTooltip tooltip="I wonder what he's listening to?">
<img src="/home/img/dj.gif" alt="dj legt krasse Mucke auf"
class={{ dude: true, spinMe: dude1Spinning.value }}
onClick={ (e) => toggleDude(e, dude1Spinning)} />
</DJTooltip>
<DJTooltip tooltip="Easily the coolest guy out there.">
<span>DJ Ledda</span>
</DJTooltip>
<DJTooltip tooltip="I once heard this guy played at revs.">
<img src="/home/img/dj.gif" alt="dj laying down some sick beats"
class={{ dude: true, spinMe: dude2Spinning.value }}
onClick={ (e) => toggleDude(e, dude2Spinning) } />
</DJTooltip>
</div>
<div class="main">
<div class="subject">
<div class="resourcelist">
<a href="https://drum-slayer.com">
<DJTooltip class="resource" tooltip="Small app for designing multitrack looped rhythms with local save and multiple files. Originally built using just vanilla TypeScript and CSS, now with Vue.">
Drum Slayer
</DJTooltip>
</a>
<a href="/somaesque">
<DJTooltip class="resource" tooltip="Puzzle solver app for puzzle cubes resembling the original Soma Cube puzzle. Save and edit your own puzzles! Built with Svelte, THREE.js and AssemblyScript.">
Somaesque
</DJTooltip>
</a>
<a href="/generative-energy">
<DJTooltip class="resource" tooltip="Thyroid calculator, German translations, and more...">
Generative Energy - Ray Peat Resources
</DJTooltip>
</a>
<a href="/home/muenchen-auf-englisch.html">
<DJTooltip class="resource" tooltip="
Authentic historically accurate translations of all of Munich's S-Bahn and U-Bahn
stations, as well as the main municipalities, into English. You live in Allach? It's
Axleigh now. Giesing? Nope! Kyesing! This is a WIP.
">
M&uuml;nchen auf Englisch - Munich in English
</DJTooltip>
</a>
<a href="/kadi/">
<DJTooltip class="resource" tooltip="Make an account and start saving paper and tracking your Yatzy stats with your
friends! Make your own rulesets, and more. Built with React, express.js, and
MongoDB. Currently inactive.">
K A D I: Online Yatzy Scoresheets
</DJTooltip>
</a>
<a href="http://git.djledda.de/Ledda">
<DJTooltip class="resource" tooltip="Check out what I'm coding!">
My git projects
</DJTooltip>
</a>
<DJEmail>
<DJTooltip class="resource" tooltip="You'll see my address when you click here.">
Click here to get in touch
</DJTooltip>
</DJEmail>
</div>
</div>
</div>
<div id="tooltipCarrier"></div>
</div>
</div>
</>;
},
});

166
app/home/DjHomeRoot.tsx Normal file
View File

@@ -0,0 +1,166 @@
import { defineComponent, ref } from "vue";
import useHead from "@/useHead.ts";
import DjTooltip, { setupTooltip } from "@/DjTooltip.tsx";
import DjEmail from "@/DjEmail.tsx";
import { addCSS, css } from "@/util.ts";
const styles = css`
.dj-home-root {
margin: auto;
width: 500px;
display: flex;
flex-direction: column;
.resource {
margin-bottom: 10px;
}
.dj-title {
font-size: 48px;
margin: 20px auto;
color: var(--dj-palette3);
text-align: right;
white-space: nowrap;
display: flex;
flex-direction: row;
flex-flow: row-reverse;
overflow: hidden;
}
.underline {
text-decoration: underline solid var(--dj-palette3);
}
.pad {
color: var(--dj-bgpalette1);
}
.main {
margin: 20px auto;
text-align: left;
}
li {
list-style: disclosure-closed;
}
a {
color: var(--dj-palette3);
&:visited {
color: var(--dj-visited);
}
}
footer {
margin-left: 10px;
margin-bottom: 20px;
font-style: italic;
}
@media only screen and (max-width: 1024px) {
width: 100%;
.dj-title {
margin-right: 30px;
}
footer {
margin-bottom: 0;
}
}
}
`;
export default defineComponent({
name: "DjHomeRoot",
setup() {
addCSS('DjHomeRoot', styles);
useHead({ title: "djledda" });
const tooltipCarrier = ref<HTMLDivElement | null>(null);
setupTooltip({ carrier: tooltipCarrier });
return () => <>
<div ref={tooltipCarrier} class="tooltip-carrier" />
<div class="dj-home-root">
<div>
<div class="dj-title">
<DjTooltip tooltip="Easily the coolest guy out there.">
<div class="underline">
<span class="pad">_ _ _ _ _ _ _ __</span><span>dj ledda</span>
</div>
</DjTooltip>
</div>
<main class="main">
<ul class="resourcelist">
<li>
<a href="/blog">
<DjTooltip class="resource" tooltip="My musings, my losings, my winnings, my thoughts">
Blog
</DjTooltip>
</a>
</li>
<li>
<a href="/generative-energy">
<DjTooltip class="resource" tooltip="Thyroid calculator, German translations, and more...">
Generative Energy - Ray Peat Resources
</DjTooltip>
</a>
</li>
<li>
<a href="https://git.djledda.net/Ledda">
<DjTooltip class="resource" tooltip="Check out what I'm coding!">
My git projects
</DjTooltip>
</a>
</li>
<li>
<a href="/home/muenchen-auf-englisch.html">
<DjTooltip class="resource" tooltip="
Authentic historically accurate translations of all of Munich's S-Bahn and U-Bahn
stations, as well as the main municipalities, into English. You live in Allach? It's
Axleigh now. Giesing? Nope! Kyesing! This is a WIP.
">
M&uuml;nchen auf Englisch - Munich in English
</DjTooltip>
</a>
</li>
<li>
<a href="https://drum-slayer.com">
<DjTooltip class="resource" tooltip="Small app for designing multitrack looped rhythms with local save and multiple files. Originally built using just vanilla TypeScript and CSS, now with Vue.">
Drum Slayer
</DjTooltip>
</a>
</li>
<li>
<a href="/somaesque/index.html">
<DjTooltip class="resource" tooltip="Puzzle solver app for puzzle cubes resembling the original Soma Cube puzzle. Save and edit your own puzzles! Built with Svelte, THREE.js and AssemblyScript.">
Somaesque
</DjTooltip>
</a>
</li>
<li>
<a href="/kadi/">
<DjTooltip class="resource" tooltip="Make an account and start saving paper and tracking your Yatzy stats with your
friends! Make your own rulesets, and more. Built with React, express.js, and
MongoDB. Currently inactive.">
K A D I: Online Yatzy Scoresheets
</DjTooltip>
</a>
</li>
</ul>
</main>
</div>
<hr />
<footer>
<div class="bottom">
<div>
<a href="/">djledda.net</a> {new Date().getFullYear()} - <DjEmail>{() => "Contact"}</DjEmail>
</div>
</div>
</footer>
</div>
</>;
},
});

View File

@@ -1,7 +1,7 @@
import { createSSRApp } from "vue";
import DJHomeRoot from "@/home/DJHomeRoot.tsx";
import DjHomeRoot from "@/home/DjHomeRoot.tsx";
import { cssRegistry } from "@/util.ts";
createSSRApp(DJHomeRoot)
createSSRApp(DjHomeRoot)
.provide(cssRegistry, new Set())
.mount("#app-root");

16
app/home/index.html Normal file
View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<link rel="icon" type="image/png" href="/favicon.png" sizes="256x256">
<link rel="icon" type="image/png" href="/favicon-small.png" sizes="32x32">
<link rel="stylesheet" href="/static/theme.css" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- SSR HEAD OUTLET -->
</head>
<body>
<div id="app-root"><!-- SSR OUTLET --></div>
</body>
</html>

View File

@@ -1,7 +1,7 @@
import { createSSRApp } from "vue";
import DJHomeRoot from "@/home/DJHomeRoot.tsx";
import DjHomeRoot from "@/home/DjHomeRoot.tsx";
export default function createApp() {
const app = createSSRApp(DJHomeRoot);
const app = createSSRApp(DjHomeRoot);
return { app, router: null };
}

View File

@@ -1,8 +1,7 @@
import { onMounted, onServerPrefetch, type ShallowRef, shallowRef } from "vue";
import useDJSSRContext from "@/useDJSSRContext.ts";
import useDjSSRContext from "@/useDjSSRContext.ts";
declare global {
// deno-lint-ignore no-var
var appstate: Partial<Record<string, unknown>>;
}
@@ -10,8 +9,8 @@ export default function useAsyncState<T>(
key: string,
getter: (context: { hostUrl: string }) => Promise<T | null>,
options?: { suspensible: boolean },
): { result: ShallowRef<T | null>; stateIsReady: Promise<unknown> } {
const ssrContext = useDJSSRContext();
): { result: ShallowRef<T | null>; done: Promise<void> } {
const ssrContext = useDjSSRContext();
const isClient = typeof ssrContext === "undefined";
const registry = ssrContext?.registry ?? globalThis?.appstate;
@@ -51,5 +50,5 @@ export default function useAsyncState<T>(
}
}
return { result: state, stateIsReady: promise };
return { result: state, done: promise };
}

View File

@@ -1,6 +1,6 @@
import { type MaybeRefOrGetter, useSSRContext } from "vue";
export type DJSSRContext = {
export type DjSSRContext = {
head: {
title: MaybeRefOrGetter<string>;
metatags: MaybeRefOrGetter<Array<{ name: string, content: string }>>;
@@ -9,6 +9,6 @@ export type DJSSRContext = {
styles: Record<string, string>;
};
export default function useDJSSRContext() {
return useSSRContext<DJSSRContext>();
export default function useDjSSRContext() {
return useSSRContext<DjSSRContext>();
}

View File

@@ -1,12 +1,12 @@
import { watch, toValue, type MaybeRefOrGetter } from 'vue';
import useDJSSRContext from "@/useDJSSRContext.ts";
import useDjSSRContext from "@/useDjSSRContext.ts";
import { h } from "@/util.ts";
export default function useHead(params: {
title: MaybeRefOrGetter<string>,
metatags?: MaybeRefOrGetter<Array<{ name: string, content: string }>>
}) {
const context = useDJSSRContext();
const context = useDjSSRContext();
if (context) {
context.head.title = params.title;

View File

@@ -1,5 +1,5 @@
import { type InjectionKey, inject } from 'vue';
import useDJSSRContext from "@/useDJSSRContext.ts";
import useDjSSRContext from "@/useDjSSRContext.ts";
export function gid(id: string, doc: (Document | ShadowRoot) | undefined) {
return ((doc ?? document).getElementById(id));
@@ -46,7 +46,7 @@ export function css(strs: TemplateStringsArray, ...vals: string[]) {
export const cssRegistry = Symbol('css-registry') as InjectionKey<Set<string>>;
export function addCSS(key: string, css: string) {
const context = useDJSSRContext();
const context = useDjSSRContext();
if (context && !context.styles[key]) {
context.styles[key] = css;
} else {
@@ -58,21 +58,3 @@ export function addCSS(key: string, css: string) {
}
}
}
/*
export class DJElement extends HTMLElement {
static styles: CSSStyleSheet;
static template: HTMLTemplateElement;
root: ShadowRoot;
constructor() {
super();
const statics = this.constructor as typeof DJElement;
this.root = this.attachShadow({ mode: "open" });
this.root.appendChild(statics.template.content.cloneNode(true));
this.root.adoptedStyleSheets = statics.styles ? [statics.styles] : [];
}
}
*/

View File

@@ -9,7 +9,12 @@
"indentWidth": 4
},
"imports": {
"vue": "npm:vue@^3.5.12",
"@b-fuze/deno-dom": "jsr:@b-fuze/deno-dom@^0.1.56",
"@deno/emit": "jsr:@deno/emit@^0.46.0",
"@std/fs": "jsr:@std/fs@^1.0.20",
"@std/http": "jsr:@std/http@^1.0.22",
"@std/path": "jsr:@std/path@^1.1.3",
"vue": "npm:vue@3.6.0-beta.1",
"vue-router": "npm:vue-router@4.4.5",
"vue/jsx-runtime": "npm:vue/jsx-runtime",
"@vue/devtools-api": "npm:@vue/devtools-api",

369
deno.lock generated
View File

@@ -1,35 +1,44 @@
{
"version": "4",
"version": "5",
"specifiers": {
"jsr:@b-fuze/deno-dom@*": "0.1.48",
"jsr:@b-fuze/deno-dom@~0.1.56": "0.1.56",
"jsr:@deno/cache-dir@0.13.2": "0.13.2",
"jsr:@deno/emit@*": "0.46.0",
"jsr:@deno/emit@0.46": "0.46.0",
"jsr:@deno/graph@~0.73.1": "0.73.1",
"jsr:@denosaurs/plug@1.1.0": "1.1.0",
"jsr:@std/assert@0.223": "0.223.0",
"jsr:@std/bytes@0.223": "0.223.0",
"jsr:@std/cli@^1.0.6": "1.0.6",
"jsr:@std/encoding@^1.0.5": "1.0.5",
"jsr:@std/cli@^1.0.24": "1.0.24",
"jsr:@std/encoding@1": "1.0.10",
"jsr:@std/encoding@^1.0.10": "1.0.10",
"jsr:@std/fmt@0.223": "0.223.0",
"jsr:@std/fmt@^1.0.3": "1.0.3",
"jsr:@std/fs@*": "0.223.0",
"jsr:@std/fmt@1": "1.0.8",
"jsr:@std/fmt@^1.0.8": "1.0.8",
"jsr:@std/fs@0.223": "0.223.0",
"jsr:@std/http@*": "1.0.9",
"jsr:@std/fs@1": "1.0.20",
"jsr:@std/fs@^1.0.20": "1.0.20",
"jsr:@std/html@^1.0.5": "1.0.5",
"jsr:@std/http@^1.0.22": "1.0.22",
"jsr:@std/internal@^1.0.12": "1.0.12",
"jsr:@std/io@0.223": "0.223.0",
"jsr:@std/media-types@^1.0.3": "1.0.3",
"jsr:@std/net@^1.0.4": "1.0.4",
"jsr:@std/path@*": "1.0.7",
"jsr:@std/media-types@^1.1.0": "1.1.0",
"jsr:@std/net@^1.0.6": "1.0.6",
"jsr:@std/path@0.223": "0.223.0",
"jsr:@std/path@^1.0.7": "1.0.7",
"jsr:@std/streams@^1.0.7": "1.0.7",
"npm:@types/node@*": "22.5.4",
"jsr:@std/path@1": "1.1.3",
"jsr:@std/path@^1.1.3": "1.1.3",
"jsr:@std/streams@^1.0.14": "1.0.14",
"npm:@vue/devtools-api@*": "6.6.4",
"npm:vue-router@4.4.5": "4.4.5_vue@3.5.12",
"npm:vue@*": "3.5.12",
"npm:vue@^3.5.12": "3.5.12"
"npm:vue-router@4.4.5": "4.4.5_vue@3.5.26",
"npm:vue@*": "3.5.26",
"npm:vue@3.6.0-beta.1": "3.6.0-beta.1_@vue+runtime-dom@3.6.0-beta.1"
},
"jsr": {
"@b-fuze/deno-dom@0.1.48": {
"integrity": "bf5b591aef2e9e9c59adfcbb93a9ecd45bab5b7c8263625beafa5c8f1662e7da"
"@b-fuze/deno-dom@0.1.56": {
"integrity": "8030e2dc1d8750f1682b53462ab893d9c3470f2287feecbe22f44a88c54ab148",
"dependencies": [
"jsr:@denosaurs/plug"
]
},
"@deno/cache-dir@0.13.2": {
"integrity": "c22419dfe27ab85f345bee487aaaadba498b005cce3644e9d2528db035c5454d",
@@ -51,43 +60,63 @@
"@deno/graph@0.73.1": {
"integrity": "cd69639d2709d479037d5ce191a422eabe8d71bb68b0098344f6b07411c84d41"
},
"@denosaurs/plug@1.1.0": {
"integrity": "eb2f0b7546c7bca2000d8b0282c54d50d91cf6d75cb26a80df25a6de8c4bc044",
"dependencies": [
"jsr:@std/encoding@1",
"jsr:@std/fmt@1",
"jsr:@std/fs@1",
"jsr:@std/path@1"
]
},
"@std/assert@0.223.0": {
"integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24"
},
"@std/bytes@0.223.0": {
"integrity": "84b75052cd8680942c397c2631318772b295019098f40aac5c36cead4cba51a8"
},
"@std/cli@1.0.6": {
"integrity": "d22d8b38c66c666d7ad1f2a66c5b122da1704f985d3c47f01129f05abb6c5d3d"
"@std/cli@1.0.24": {
"integrity": "b655a5beb26aa94f98add6bc8889f5fb9bc3ee2cc3fc954e151201f4c4200a5e"
},
"@std/encoding@1.0.5": {
"integrity": "ecf363d4fc25bd85bd915ff6733a7e79b67e0e7806334af15f4645c569fefc04"
"@std/encoding@1.0.10": {
"integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1"
},
"@std/fmt@0.223.0": {
"integrity": "6deb37794127dfc7d7bded2586b9fc6f5d50e62a8134846608baf71ffc1a5208"
},
"@std/fmt@1.0.3": {
"integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f"
"@std/fmt@1.0.8": {
"integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7"
},
"@std/fs@0.223.0": {
"integrity": "3b4b0550b2c524cbaaa5a9170c90e96cbb7354e837ad1bdaf15fc9df1ae9c31c",
"integrity": "3b4b0550b2c524cbaaa5a9170c90e96cbb7354e837ad1bdaf15fc9df1ae9c31c"
},
"@std/fs@1.0.20": {
"integrity": "e953206aae48d46ee65e8783ded459f23bec7dd1f3879512911c35e5484ea187",
"dependencies": [
"jsr:@std/assert",
"jsr:@std/path@0.223"
"jsr:@std/internal",
"jsr:@std/path@^1.1.3"
]
},
"@std/http@1.0.9": {
"integrity": "d409fc319a5e8d4a154e576c758752e9700282d74f31357a12fec6420f9ecb6c",
"@std/html@1.0.5": {
"integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e"
},
"@std/http@1.0.22": {
"integrity": "53f0bb70e23a2eec3e17c4240a85bb23d185b2e20635adb37ce0f03cc4ca012a",
"dependencies": [
"jsr:@std/cli",
"jsr:@std/encoding",
"jsr:@std/fmt@^1.0.3",
"jsr:@std/encoding@^1.0.10",
"jsr:@std/fmt@^1.0.8",
"jsr:@std/fs@^1.0.20",
"jsr:@std/html",
"jsr:@std/media-types",
"jsr:@std/net",
"jsr:@std/path@^1.0.7",
"jsr:@std/path@^1.1.3",
"jsr:@std/streams"
]
},
"@std/internal@1.0.12": {
"integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027"
},
"@std/io@0.223.0": {
"integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1",
"dependencies": [
@@ -95,11 +124,11 @@
"jsr:@std/bytes"
]
},
"@std/media-types@1.0.3": {
"integrity": "b12d30a7852f7578f4d210622df713bbfd1cbdd9b4ec2eaf5c1845ab70bab159"
"@std/media-types@1.1.0": {
"integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4"
},
"@std/net@1.0.4": {
"integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852"
"@std/net@1.0.6": {
"integrity": "110735f93e95bb9feb95790a8b1d1bf69ec0dc74f3f97a00a76ea5efea25500c"
},
"@std/path@0.223.0": {
"integrity": "593963402d7e6597f5a6e620931661053572c982fc014000459edc1f93cc3989",
@@ -107,139 +136,228 @@
"jsr:@std/assert"
]
},
"@std/path@1.0.7": {
"integrity": "76a689e07f0e15dcc6002ec39d0866797e7156629212b28f27179b8a5c3b33a1"
"@std/path@1.1.3": {
"integrity": "b015962d82a5e6daea980c32b82d2c40142149639968549c649031a230b1afb3",
"dependencies": [
"jsr:@std/internal"
]
},
"@std/streams@1.0.7": {
"integrity": "1a93917ca0c58c01b2bfb93647189229b1702677f169b6fb61ad6241cd2e499b"
"@std/streams@1.0.14": {
"integrity": "c0df6cdd73bd4bbcbe4baa89e323b88418c90ceb2d926f95aa99bdcdbfca2411"
}
},
"npm": {
"@babel/helper-string-parser@7.25.9": {
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
"@babel/helper-string-parser@7.27.1": {
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
},
"@babel/helper-validator-identifier@7.25.9": {
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
"@babel/helper-validator-identifier@7.28.5": {
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
},
"@babel/parser@7.26.2": {
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
"@babel/parser@7.28.5": {
"integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
"dependencies": [
"@babel/types"
]
],
"bin": true
},
"@babel/types@7.26.0": {
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"@babel/types@7.28.5": {
"integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
"dependencies": [
"@babel/helper-string-parser",
"@babel/helper-validator-identifier"
]
},
"@jridgewell/sourcemap-codec@1.5.0": {
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
"@jridgewell/sourcemap-codec@1.5.5": {
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
},
"@types/node@22.5.4": {
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
"dependencies": [
"undici-types"
]
},
"@vue/compiler-core@3.5.12": {
"integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
"@vue/compiler-core@3.5.26": {
"integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==",
"dependencies": [
"@babel/parser",
"@vue/shared",
"@vue/shared@3.5.26",
"entities",
"estree-walker",
"source-map-js"
]
},
"@vue/compiler-dom@3.5.12": {
"integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
"dependencies": [
"@vue/compiler-core",
"@vue/shared"
]
},
"@vue/compiler-sfc@3.5.12": {
"integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
"@vue/compiler-core@3.6.0-beta.1": {
"integrity": "sha512-Oiki36gKyoxc0pPnazo83coH6I4KTenCbhcMjALVo+vhz3cPVylo5Y5PyzX/u45IiMHc/25t492VB6CrFYKEgQ==",
"dependencies": [
"@babel/parser",
"@vue/compiler-core",
"@vue/compiler-dom",
"@vue/compiler-ssr",
"@vue/shared",
"@vue/shared@3.6.0-beta.1",
"entities",
"estree-walker",
"source-map-js"
]
},
"@vue/compiler-dom@3.5.26": {
"integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==",
"dependencies": [
"@vue/compiler-core@3.5.26",
"@vue/shared@3.5.26"
]
},
"@vue/compiler-dom@3.6.0-beta.1": {
"integrity": "sha512-6fbQSyjk6tdJO6UOvOtVl1BHw3CuzKSeNRU84LXvlyqm4K1LWJwKaceu5RZyi8+cFusuxtArpH6dwx9cPbejAg==",
"dependencies": [
"@vue/compiler-core@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1"
]
},
"@vue/compiler-sfc@3.5.26": {
"integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==",
"dependencies": [
"@babel/parser",
"@vue/compiler-core@3.5.26",
"@vue/compiler-dom@3.5.26",
"@vue/compiler-ssr@3.5.26",
"@vue/shared@3.5.26",
"estree-walker",
"magic-string",
"postcss",
"source-map-js"
]
},
"@vue/compiler-ssr@3.5.12": {
"integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
"@vue/compiler-sfc@3.6.0-beta.1": {
"integrity": "sha512-ntC1t5lbbbA5122ONOVQiQVXgDwJQ/xkB/KGUpP7e59An9m/I2CONRtAEB9wB6QQmMMP4ThoOuRH9+t2o6dqjQ==",
"dependencies": [
"@vue/compiler-dom",
"@vue/shared"
"@babel/parser",
"@vue/compiler-core@3.6.0-beta.1",
"@vue/compiler-dom@3.6.0-beta.1",
"@vue/compiler-ssr@3.6.0-beta.1",
"@vue/compiler-vapor",
"@vue/shared@3.6.0-beta.1",
"estree-walker",
"magic-string",
"postcss",
"source-map-js"
]
},
"@vue/compiler-ssr@3.5.26": {
"integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==",
"dependencies": [
"@vue/compiler-dom@3.5.26",
"@vue/shared@3.5.26"
]
},
"@vue/compiler-ssr@3.6.0-beta.1": {
"integrity": "sha512-8hvHjcNPcKYto87/vRCxFFCp6FEg9HAA/oQHQ6DZQe70xnJguCPvYhh+e59HuywN4E68RBOIPC9IYTXenTaIWA==",
"dependencies": [
"@vue/compiler-dom@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1"
]
},
"@vue/compiler-vapor@3.6.0-beta.1": {
"integrity": "sha512-NW1FMqjag5fPVf8uK199gw5qFzPBNc4OghchSffS7D2UOs5QMzIpC4XevGA5DeGEuxhpuG9ckisGN2r9BsnTzQ==",
"dependencies": [
"@babel/parser",
"@vue/compiler-dom@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1",
"estree-walker",
"source-map-js"
]
},
"@vue/devtools-api@6.6.4": {
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
},
"@vue/reactivity@3.5.12": {
"integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==",
"@vue/reactivity@3.5.26": {
"integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==",
"dependencies": [
"@vue/shared"
"@vue/shared@3.5.26"
]
},
"@vue/runtime-core@3.5.12": {
"integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==",
"@vue/reactivity@3.6.0-beta.1": {
"integrity": "sha512-IbmZR0/UVlfRgDE8oVERx8pmYpG0CtE8CWfkdrnjnQckuCoImXCn7W9HiShzmmDNus371hGw6cXCctjQL7hkZw==",
"dependencies": [
"@vue/reactivity",
"@vue/shared"
"@vue/shared@3.6.0-beta.1"
]
},
"@vue/runtime-dom@3.5.12": {
"integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==",
"@vue/runtime-core@3.5.26": {
"integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==",
"dependencies": [
"@vue/reactivity",
"@vue/runtime-core",
"@vue/shared",
"@vue/reactivity@3.5.26",
"@vue/shared@3.5.26"
]
},
"@vue/runtime-core@3.6.0-beta.1": {
"integrity": "sha512-UtZCF+rPSPsKQUTOwB3EHd2y8mY9lD6nr78Gt/fqwnSdxaXY0ksbhc1Q9BjHZPaDMpn8NKzQKlMXf/h1w8VMkg==",
"dependencies": [
"@vue/reactivity@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1"
]
},
"@vue/runtime-dom@3.5.26": {
"integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==",
"dependencies": [
"@vue/reactivity@3.5.26",
"@vue/runtime-core@3.5.26",
"@vue/shared@3.5.26",
"csstype"
]
},
"@vue/server-renderer@3.5.12_vue@3.5.12": {
"integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==",
"@vue/runtime-dom@3.6.0-beta.1": {
"integrity": "sha512-+vv8WwxSFzXzjXWvZ92q1ec13fp+RBtAiOTu7M5dWRLqsDEHuVnuzmPB5O+gmiNU0YViLEXP5c/+gDCP3y5yUw==",
"dependencies": [
"@vue/compiler-ssr",
"@vue/shared",
"vue"
"@vue/reactivity@3.6.0-beta.1",
"@vue/runtime-core@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1",
"csstype"
]
},
"@vue/shared@3.5.12": {
"integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg=="
"@vue/runtime-vapor@3.6.0-beta.1_@vue+runtime-dom@3.6.0-beta.1": {
"integrity": "sha512-XVethfYDcowADbaq1XVEq6BAqnpKgc/75WL5xjy2ChwEB9slMa7B2PBpGSGwvEKKsNyAapYQoa/af5fyogaSlw==",
"dependencies": [
"@vue/reactivity@3.6.0-beta.1",
"@vue/runtime-dom@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1"
]
},
"csstype@3.1.3": {
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
"@vue/server-renderer@3.5.26_vue@3.5.26": {
"integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==",
"dependencies": [
"@vue/compiler-ssr@3.5.26",
"@vue/shared@3.5.26",
"vue@3.5.26"
]
},
"entities@4.5.0": {
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
"@vue/server-renderer@3.6.0-beta.1_vue@3.6.0-beta.1__@vue+runtime-dom@3.6.0-beta.1": {
"integrity": "sha512-MpjAiqP/4JTDMswoDSWyS1PCDzR9+ud2aRAOhvtlpnsuNFLwYbf8tNOiPd3x3gty8ghWYMyKCP4isQHNcPRmLA==",
"dependencies": [
"@vue/compiler-ssr@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1",
"vue@3.6.0-beta.1_@vue+runtime-dom@3.6.0-beta.1"
]
},
"@vue/shared@3.5.26": {
"integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A=="
},
"@vue/shared@3.6.0-beta.1": {
"integrity": "sha512-M+JCCPvuXgRGkgRYQ9LISH8eJXlQgz862OBtO2n7Ef2cyz+DgLQTGfZoNzf3WbVnNUP9/5x7/O0P1ED42IDCCw=="
},
"csstype@3.2.3": {
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
},
"entities@7.0.0": {
"integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ=="
},
"estree-walker@2.0.2": {
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"magic-string@0.30.12": {
"integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
"magic-string@0.30.21": {
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dependencies": [
"@jridgewell/sourcemap-codec"
]
},
"nanoid@3.3.7": {
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
"nanoid@3.3.11": {
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"bin": true
},
"picocolors@1.1.1": {
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"postcss@8.4.47": {
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
"postcss@8.5.6": {
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dependencies": [
"nanoid",
"picocolors",
@@ -249,33 +367,46 @@
"source-map-js@1.2.1": {
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
},
"undici-types@6.19.8": {
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
},
"vue-router@4.4.5_vue@3.5.12": {
"vue-router@4.4.5_vue@3.5.26": {
"integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==",
"dependencies": [
"@vue/devtools-api",
"vue"
"vue@3.5.26"
]
},
"vue@3.5.12": {
"integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
"vue@3.5.26": {
"integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==",
"dependencies": [
"@vue/compiler-dom",
"@vue/compiler-sfc",
"@vue/runtime-dom",
"@vue/server-renderer",
"@vue/shared"
"@vue/compiler-dom@3.5.26",
"@vue/compiler-sfc@3.5.26",
"@vue/runtime-dom@3.5.26",
"@vue/server-renderer@3.5.26_vue@3.5.26",
"@vue/shared@3.5.26"
]
},
"vue@3.6.0-beta.1_@vue+runtime-dom@3.6.0-beta.1": {
"integrity": "sha512-z2VKatkexJ9XZ/eYbUUQaitaYC1MpTtE+7zESy7bBvfcExlF5ubBmCB001I6GznEw4vRR1WMZbDqT482QJEJHw==",
"dependencies": [
"@vue/compiler-dom@3.6.0-beta.1",
"@vue/compiler-sfc@3.6.0-beta.1",
"@vue/runtime-dom@3.6.0-beta.1",
"@vue/runtime-vapor",
"@vue/server-renderer@3.6.0-beta.1_vue@3.6.0-beta.1__@vue+runtime-dom@3.6.0-beta.1",
"@vue/shared@3.6.0-beta.1"
]
}
},
"workspace": {
"dependencies": [
"jsr:@b-fuze/deno-dom@~0.1.56",
"jsr:@deno/emit@0.46",
"jsr:@std/fs@^1.0.20",
"jsr:@std/http@^1.0.22",
"jsr:@std/path@^1.1.3",
"npm:@vue/devtools-api@*",
"npm:vue-router@4.4.5",
"npm:vue@*",
"npm:vue@^3.5.12"
"npm:vue@3.6.0-beta.1"
]
}
}

View File

@@ -1,6 +0,0 @@
import "jsr:@deno/emit";
import "jsr:@std/http";
import "vue";
import "jsr:@b-fuze/deno-dom";
import "jsr:@std/fs";
import "jsr:@std/path";

59
font-shortlist.txt Normal file
View File

@@ -0,0 +1,59 @@
Abhaya Libre
Alegreya
Alice
Amethysta
Antic Didone
Bacasime Antique
Baskervville
Batang
Bellefair
Benne
Bodoni Moda
Bona Nova
Cactus Classical Serif
Caudex
Charmonman
Chiron Sung HK
Cormorant
> Cormorant Garamond
> Cormorant Infant
EB Garamond
Estonia
Flamenco
Fondamento
Forum
Gentium PLus
GFS Didot
Grandiflora One
Gulzar
Ibarra Real Nova
IM FELL Double Pica
> IM FELL DW Pica
Jacques Fancois
KoHo
KoPub Batang
Lancelot
Libertinus Serif Display
Linden Hill
Lora
Milonga
Namdhinggo
NanumMyeongjo
Newsreader
Parastoo
Platwrite ED Deco
> Playwrite ID
> Playwrite IT Moderna
> Playwrite PE
Prata
Rosarivo
Scheherazade New
Sedan
Shippori Mincho B1
Spectral
Srisakdi
Tai Heritage Pro
Unna
Ysabeau Infant
Yuji Syuku
Zen Old Mincho

4
font-shortlist2.txt Normal file
View File

@@ -0,0 +1,4 @@
Baskervville
\

135
main.ts
View File

@@ -1,20 +1,104 @@
import { serveFile } from "jsr:@std/http/file-server";
import { STATUS_TEXT } from "jsr:@std/http/status";
import { serveFile } from "@std/http/file-server";
import { STATUS_TEXT } from "@std/http/status";
import { type App, toValue } from "vue";
import { type Router } from "vue-router";
import { renderToString } from "vue/server-renderer";
import transpileResponse from "./transpile.ts";
import { DOMParser } from "jsr:@b-fuze/deno-dom";
import { join } from "jsr:@std/path/join";
import { exists } from "jsr:@std/fs";
import { type DJSSRContext } from "@/useDJSSRContext.ts";
import { type DJAPIResult, type DJAPIResultMap } from "@/api.ts";
import { DOMParser } from "@b-fuze/deno-dom";
import { join } from "@std/path/join";
import { exists } from "@std/fs";
import { type DjSSRContext } from "@/useDjSSRContext.ts";
import { type DjAPIResult, type DjAPIResultMap } from "@/api.ts";
const utf8Decoder = new TextDecoder("utf-8");
const HOST = 'https://djledda.net';
const parser = new DOMParser();
function appHeaderScript(params: { ssrContext: DJSSRContext, entryPath: string }) {
async function getBlogEntries() {
const paths: string[] = [];
const contentDir = './public/blog/content/';
for await (const dirEnt of Deno.readDir(contentDir)) {
if (dirEnt.isFile && dirEnt.name.endsWith('.html')) {
paths.push(`${contentDir}${dirEnt.name}`);
}
}
const result: DjAPIResultMap['/blog-entries'] = [];
for (const filePath of paths) {
const content = await Deno.readTextFile(filePath);
const dom = parser.parseFromString(content, 'text/html');
const metadata = {
slug: '',
tags: [] as string[],
guid: '',
title: '',
createdAt: '',
updatedAt: '',
teaser: `${ dom.querySelector('article')?.textContent.slice(0, 256).trimStart().trimEnd() }...`,
};
const metaTags = dom.querySelectorAll('meta') as unknown as NodeListOf<HTMLMetaElement>;
for (const metaTag of metaTags) {
const name = metaTag.attributes.getNamedItem('name')?.value ?? '';
const content = metaTag.attributes.getNamedItem('content')?.value ?? '';
if (name === 'title') {
metadata.title = content;
} else if (name === 'tags') {
metadata.tags = content ? content.split(",") : [];
} else if (name === 'guid') {
metadata.guid = content;
} else if (name === 'slug') {
metadata.slug = content;
} else if (name === 'updatedAt') {
metadata.createdAt = content;
} else if (name === 'createdAt') {
metadata.updatedAt = content;
}
}
result.push(metadata);
}
result.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
return result;
}
async function rss() {
const articles = await getBlogEntries();
return `<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>djledda's blog</title>
<description>djledda's personal blog</description>
<link>${ HOST }/blog</link>
<managingEditor>Daniel Ledda</managingEditor>
<image>
<title>djledda's blog</title>
<url>${ HOST }/favicon.png</url>
<link>${ HOST }/blog</link>
<description>djledda's personal blog</description>
</image>
<language>en-au</language>
<copyright>${ new Date().getFullYear() } djledda.net All rights reserved</copyright>
<lastBuildDate>${ new Date(articles.at(-1)!.updatedAt).toUTCString() }</lastBuildDate>
<pubDate>${ new Date(articles.at(-1)!.updatedAt).toUTCString() }</pubDate>
<ttl>1440</ttl>
${ articles.map(article => `<item>
<title>${ article.title }</title>
<link>${ HOST }/blog/post/${ article.slug }</link>
<pubDate>${ new Date(article.createdAt).toUTCString() }</pubDate>
<author>Daniel Ledda</author>
<description>${ article.teaser }</description>
<guid>${ article.guid }</guid>
</item>
`).join('')}
<atom:link href="${ HOST }/blog/djblog.rss" rel="self" type="application/rss+xml" />
</channel>
</rss>`;
}
function appHeaderScript(params: { ssrContext: DjSSRContext, entryPath: string }) {
return `
<title>${ toValue(params.ssrContext.head.title) }</title>
${ toValue(params.ssrContext.head.metatags).map(_ => `<meta name="${ _.name }" content="${ _.content }">`).join('\n\t') }
@@ -42,20 +126,19 @@ async function* siteEntries(path: string): AsyncGenerator<string> {
for await (const dirEnt of Deno.readDir(path)) {
if (dirEnt.isDirectory) {
yield* siteEntries(join(path, dirEnt.name));
} else if (dirEnt.name === "index_template.html") {
} else if (dirEnt.name === "index.html") {
yield path.split("/")[1] ?? "";
}
}
}
const publicFiles = siteEntries("public");
const sites: string[] = [];
for await (const path of publicFiles) {
sites.push(path);
for await (const entry of siteEntries("app")) {
sites.push(entry);
}
async function getAPIResponse(apiReq: Request): Promise<Response> {
let jsonResponse: DJAPIResult | { error: string } | null = null;
let jsonResponse: DjAPIResult | { error: string } | null = null;
let status = 200;
const pathname = URL.parse(apiReq.url)?.pathname;
@@ -76,7 +159,7 @@ async function getAPIResponse(apiReq: Request): Promise<Response> {
paths.push(`${contentDir}${dirEnt.name}`);
}
}
const result: DJAPIResultMap['/rp-articles'] = [];
const result: DjAPIResultMap['/rp-articles'] = [];
for (const filePath of paths) {
const content = await Deno.readTextFile(filePath);
const dom = parser.parseFromString(content, 'text/html');
@@ -98,7 +181,10 @@ async function getAPIResponse(apiReq: Request): Promise<Response> {
}
result.push(metadata);
}
result.sort((a, b) => a.titleDe.localeCompare(b.titleDe));
jsonResponse = result;
} else if (apiPath === "/blog-entries") {
jsonResponse = await getBlogEntries();
}
if (!jsonResponse) {
@@ -154,6 +240,13 @@ Deno.serve({
response = await getAPIResponse(req);
}
// RSS
if (response === null) {
if (pathname === '/blog/djblog.rss') {
response = new Response(await rss(), { status: 200 });
}
}
// Public/static files
if (response === null) {
let filepath = join(".", "public", pathname);
@@ -183,12 +276,12 @@ Deno.serve({
// SSR
if (response === null) {
const baseDirectoryName = pathname.split("/")[1] ?? "";
let baseDirectoryName = pathname.split("/")[1] ?? "";
baseDirectoryName = baseDirectoryName === "" ? "home" : baseDirectoryName;
if (sites.includes(baseDirectoryName)) {
const appLocation = baseDirectoryName === "" ? "home" : baseDirectoryName;
const siteTemplate = join("public", baseDirectoryName, "index_template.html");
const siteEntry = join("app", appLocation, "server.ts");
const clientEntry = join("@", appLocation, "client.ts");
const siteTemplate = join("app", baseDirectoryName, "index.html");
const siteEntry = join("app", baseDirectoryName, "server.ts");
const clientEntry = join("@", baseDirectoryName, "client.ts");
const { app, router } = (await import("./" + siteEntry)).default() as {
app: App;
router: Router | null;
@@ -196,9 +289,9 @@ Deno.serve({
app.provide("dom-parse", (innerHTML: string) => {
return parser.parseFromString(innerHTML, "text/html").documentElement;
});
const ssrContext: DJSSRContext = { styles: {}, registry: {}, head: { title: "", metatags: [] } };
const ssrContext: DjSSRContext = { styles: {}, registry: {}, head: { title: "", metatags: [] } };
if (router) {
await router.replace(pathname.split("/generative-energy")[1]);
await router.replace(pathname.split('/' + baseDirectoryName)[1]);
await router.isReady();
}
const rendered = await renderToString(app, ssrContext);

View File

@@ -0,0 +1,105 @@
<meta name="title" content="Poof, and it's gone">
<meta name="slug" content="poof-and-its-gone">
<meta name="createdAt" content="2025-12-20T17:54:05.000Z">
<meta name="updatedAt" content="2025-12-20T17:54:05.000Z">
<meta name="tags" content="">
<meta name="guid" content="4655d2b9-0c4b-4dd7-bf95-538d36166000">
<article>
<p>
Since reading Ray Peat's work and drastically improving my wellbeing&mdash;something that had been declining for years&mdash;I've
been thinking more and more often about the phenomenon of learned helplessness and its relevance in my own life. Sometimes,
looking back to past times can be useful to help reorient yourself in the present. In doing so, you can be better equipped to
aim towards a more desirable future. Sometimes, a new perspective or experience might instantly obliterate previous
behaviour without any concerted mental or physical gruntwork to eradicate it.
</p>
<p>
On the flipside, I have sometimes hopelessly tried to forcefully change my behaviour, employing all the en vogue
self-help tricks to form long-term habits, only to lose them just as quickly as they formed in the months that
followed. These kinds of experiences remind me of those hypnosis advertisements that claim they'll have you give up smoking
after just a few sessions; sometimes it's even after just one visit. There's no short supply of <i>miracle cure</i> stories
or reports of sudden, permanent breaks in addiction. Cold-turkey clean cuts that seem to arise with no obvious effort on
the part of the addict, no signs of worn willpower.
</p>
<p>
When I was sixteen I spent six weeks abroad in a small town called Marburg in Hesse, Germany. I spent that time
living with a new family along with my exchange student, Arne, who had been staying with my own family in Melbourne for
the same period of time just prior. Those were six exciting weeks of school, new acquaintances, a new language
(albeit one I had been "studying" in the Australian school system) and unfamiliar cultural quirks.
</p>
<p>
It was a barrage of stimulation, I came home every day from school and would collapse, totally exhausted, onto my
exchange student's bed, which had been graciously given to me to use for the duration of my stay. Even tough I was utterly <i>kaputt</i> it's not like I was actually expected to
<i>learn</i> anything or do any homework whilst I was at school here&mdash;I was basically on holidays and could really
have just treated it as such. Plenty of my own classmates who had also been on a very similar trip certainly did. I'm not sure many of them
learnt or used much German beyond <i>"Wo ist McDonalds?"</i> Thanks to a romantic summer fling,
I had been gradually becoming more fascinated with the structure of German before arriving. Once there, the Deutsch on the blackboard looked more like a sophisticated puzzle game than a
complete drag of a memorisation task, presumably aided by my younger, more language sensitive age at the time. Each day was a new game of detective guesswork, and better still, I got to play
with new ideas about how the language works each day in the schoolyard with the new friends I was making. New ways to
describe how things are situated in space, adverbs for how they move in relation to one another, mysterious new prefixes and other quaint linguistic
quirks, like the insane backwards word order of German&mdash;unlimited entertainment to see if I was up to
the challenge. I practically spent all my time in class ogling the immaculate chalk handwriting of the various teachers, I remember biology and German class in particular, and
trying to work out what on Earth was going on. For some strange reason, it was a kind of bliss.
</p>
<p>
On top of this, I was in the grade just above mine back home in Australia. Whilst that really shouldn't have made much
difference, the amount of responsibility and independence these kids were allowed to exercise at sixteen or seventeen was
nothing short of amazing to me at that age. I had never seen anything like it. Some of my classmates would stand out
the front of school during lunchtime and smoke a couple of cigarettes with their own teachers, something I find kind of insane
still to this day; it certainly would never have been acceptable back at home. Starting in the senior
school, you were allowed to just leave and go home if you didn't have anywhere to be, so long as you were back in time
for class. And we did. School uniforms simply weren't part of the culture either. For everyone else this perhaps just meant stressful decision making,
another way to play the oft cruel status games of teenagerhood, but for me it was like every day was casual dress day back
home. To top it all off, the legal drinking age in Germany is sixteen, at least for wine, beer, and other weaker drinks.
</p>
<p>
These classmates of mine were running their own meetings headed by the <i>Klassensprecher</i>, the class
representatives, and much unlike similar candidates back home, they actually seemed cool, they seemed like people I
might like to hang out with and befriend. Alongside decision making regarding general classroom organisation, they would
organise class bus trips: we saw a local band comprised of kids from the local schools, and for the first time in my life I drank
alcohol along with everybody else there, just hanging out and left to our own devices. It was a sense of freedom and self-responsibility
that wasn't afforded to me by the school system back home. Increasingly Australia, and especially Victoria, from which I
hail, is branded as a "nanny state", and my experiences in Germany reinforce that.
</p>
<p>
I really felt like I was in the midst of some sort of Hollywood production, an atmosphere that didn't quite seem tangible in
Australia. The intersection in the Venn diagram of taking on responsibility and having free reign was
vanishingly small amongst teenagers. Either you wagged class and maybe did drugs, or you obediently followed the rules. As the
years went by, the fine line between the two seemed to vanish further and further, at least that's how it looked from where I was standing.
</p>
<p>
Back in Australia, a routine had begun to solidify itself leading up to this trip. I would come home,
maybe do homework, and then browse Reddit and play hours of Team Fortress 2. I had racked up an impressive 2000
hours in-game. It seemed fairly inconsequential to me, and my high school friends, unlike primary school, were mostly
fragmented, and so on weeknights I didn't find myself hanging out with many people regularly. I did try to get Team Fortress
working on the old computer my host family had in Germany, just for fun, but to no avail. However, even whilst
attempting to get it set up, something about it began to seem like an entirely futile endeavour.
</p>
<p>
When I arrived back in Australia, it was as if a switch had been flipped. I all but stopped playing Team
Fortress, a regular staple of my free time. Practically overnight it seemed to have turned from being an incredibly
seductive way to pass the time to being a colossal <i>waste</i> of it. I just stopped playing cold turkey, and as far as I could tell, no
effort went in to the dissolution of that habit whatsoever.
</p>
<p>
I'm not exactly sure what facet of my overseas trip pushed me to change my behaviour so effortlessly, but I think it was
the culmination of all my experiences in that incredibly enriched environment. As I have looked back on those times over the past few years, especially since
discovering Ray, I can't help but think that I found myself in a "rat park" experiment during that time. Or I perhaps I was one of the rats
looking on, watching as others were freed from certain death by drowning. My habits in Australia suddenly seemed dull and useless, like I was stuck in
what the Germans call a <i>goldener Käfig</i> or <i>gilded cage</i>; basically inescapably trapped in an environment forged by
my own riches and good intentions. Participating in the foreign exchange program widened my horizons. I could see that what
I was missing out on indeed <i>was</i> possible, and I had the power to change my lifestyle.
</p>
<p>
It would be nice if I could now say that I've since enjoyed a deeply enriched life and it has been smooth sailing from there on out, that this turning point in my life catapulted me into nirvana. But alas
I wouldn't be a fan of Ray's if I never encountered a struggle or two along the way. But it seems to have profoundly changed the course of my
life for the better. Ever since then, I've found it extremely difficult to waste my days away without having a
sense of direction in my life. Although, this has been a source of anxiety, some time more than others. I certainly don't think I
would have found it so simple to move abroad and continue to learn German whilst living, studying, and working in Munich for
several years like I have been if I had never gone on that trip.
</p>
<p>
So I guess, in that respect, watching your fellow rats have a good time, in real life, might just get you to settle for
no less. One look at those old menial habits and&mdash;<i>poof</i>&mdash;they're gone. And for that I'm grateful.
</p>
</article>

View File

@@ -0,0 +1,291 @@
<meta name="title" content="The Straightjacket of Indecision">
<meta name="slug" content="straightjacket-of-indecision">
<meta name="createdAt" content="2026-01-18T20:00:00.000Z">
<meta name="updatedAt" content="2026-01-18T20:00:00.000Z">
<meta name="tags" content="">
<meta name="guid" content="5d3b68de-35fb-48da-8caf-8f6f1f6398f5">
<article>
<p>
Over the last six or seven years living abroad in the faraway place of
Munich, Germany, Ive often wondered when, or even whether, I might return
home to Melbourne, Australia. Even though I never spent much time
contemplating my distant future, my mother certainly didnt let me forget
that she wished to have me back at home sooner rather than later. I'd
listen to her talk in absolutes every return visit, “when youre back
next year…,” and so on. I shrugged it off as just motherly love. I'm
in Germany, Mum, and Im staying here for now!
</p>
<p>
Despite this, the thought in the back of my mind that this overseas
journey would in all likelihood be ephemeral proved to be a constant
burden. Wherever I went, whichever decision I made, the immense doubt
haunted me. Before the COVID pandemic, I had originally planned
to study my Masters, probably work a couple of years at a local
company “in the industry”, and then return home ideally feeling fulfilled and
satisfied. Like I had earnt some kind of imaginary certificate of
intercultural aptitude. Secretly however, I imagined falling in love
with a beautiful German girl and living in the idyllic Bavarian
countryside, happily ever after, even if I was unwilling to admit it
even to myself.
</p>
<p>
But given the retreat of pandemic-related restrictions and regulations was
so gradual, as were too the many changes in my life circumstances
in-between, it never seemed like quite the right time to draw a line in the
sand. It would seem I became the frog in boiling water.
</p>
<p>
Finally, maybe around late 2023, things seemed to have settled. I chose to
move into my own apartment, after my roommate moved in with his
girlfriend. It became clear to me that I would soon have to give serious
thought as to whether I wanted to return home, or if I wanted to seriously
commit to “being German.” The weight I was carrying was growing
heavier, and somehow I knew this was slowing me down. I just didn't
realise how much exactly.
</p>
<p>
In the first few years here, sure&mdash;it never made much sense to paint my
student dorm room or invest in expensive furniture, even once I began earning a
full-time salary&mdash;I figured I probably wouldnt be here much longer,
anyway. But as the years went by and the dorm rooms became my own rental
apartments, I could feel the desire to invest in long-term commitments grow
stronger within me. Actually bringing any of them to fruition, on the other
hand, seemed impossible. I could hardly bring myself to buy a
dishwasher for the longest time: moving countries could have always been
right around the corner, so I had better not waste the money and effort.
</p>
<p>
Never knowing when I was going to leave, I froze in the face of more
important decisions, even ones that might have promised to greatly improve
my quality of life, and that seemed frankly banal to outsiders. It plagued
the back of my mind when searching for the motivation to meet people or go
on dates. What if I eventually want to go home? Will she lose interest in me
because Im a flight risk?
</p>
<p>
Whenever I would meet someone in my daily life, they would inevitably
ask me whether I would like to stay in Germany forever or if I plan to
move home at some stage. Over the years, I learnt to come with
pre-prepared answers that suggested I was comfortable with my
open-ended life abroad. But I wasnt. I felt trapped, like I couldnt
go anywhere. Like I couldnt start any meaningful projects. I wanted to
take on so much more and feel resolute in each step. But I felt
suffocated by the idea that the rug would soon be pulled out from under
my feet.
</p>
<p>
I did however eventually start voicing the idea that, as long as I
dont meet anybody here that I come to love so much that I simply must
stay, it would be better for me to go home. That was the beginning of
the end, I suppose, but the thought was so limp in spirit that it
hardly made any difference in my life. Instead it was the perfect
excuse to remain undecided: at any moment, the love of my life could
waltz around the corner. Ironically, this straitjacket of indecision
all but prevented me from doing anything about my bachelorhood.
</p>
<p>
Things did improve; I grew adamant that I would break down old habits
that were once born of helplessness. I found it increasingly easier to
“just do things,” as the chronically online say, but there was an upper
limit to their magnitude. Such things as buying more expensive home
furnishings or making slightly more long-term commitments became easier
(think “one year” rather than “a couple of months”), but nonetheless I
stillfelt tremendously stuck.
</p>
<p>
In the summer of 2025, my parents visited and stayed with me for two
months, during which we went on many European trips alongside my daily
life in Munich. Afterwards, I joined them on the plane ride home and
visited Melbourne. This time, it was outside of the usual Christmas
holiday period so as to really get a sense of how life back home had
changed.
</p>
<p>
I stayed a month, bringing the total time spent with family and friends
to three months, which was a lot of time for me after having lived for
so long abroad. Alhoutgh I had visited for a month almost every year,
this time around felt a bit different. I felt like I was actually back
home, and not just peering through the window. Maybe it was the time of
year, maybe because of the high school reunion I attended, or maybe
even just due to how much time had passed since COVID. Whatever it was,
those three months made their mark. After saying our goodbyes at the
airport, I headed to stand in line at the first security checkpoint.
After turning the corner, I lost sight of my parents, and my heart
sank.
</p>
<p>
For the first time in seven years, something felt wrong. I didnt want
to leave any more. I realised that my time in Munich was over. After
two years of deliberating over the minutiae of my life and where I
lived, the epiphany seemed to come in an instant. It was emotional.
There was no logical breakthrough. No intellectual victory. I was just
homesick. After six years, no less.
</p>
<p>
Once I arrived back in Munich, everything about this charming place
became grossly annoying overnight. The northern winter annoyed me. The
people annoyed me. My job annoyed me. My entire surroundings were so
fastidious that I couldnt wait to get home. Even the German language
that has brought me so much joy to learn, to which I effortlessly
dedicated so much time and interest; even it became a nuisance. I
wanted my native tongue back. I wanted effortless freedom of expression
back. I was imprinted with a culture when I was younger and I just
wanted it back.
</p>
<p>
Paradoxically, though, I felt fully liberated all of a sudden. Free to
do whatever I wanted. Having made the decision to pack up and leave
filled me with such a profound sense of direction that everything else
was able to just slide into place, as if a circuit had been completed.
</p>
<p>
By forfeiting many potential futures for just one that I could count
on, the organisation of the rest of my life was able to spontaneously
emerge. I guess I always sensed this would happen, but I seriously
underestimated the ramifications. A cataclysmic domino effect resolved
a hierarchy of assumptions about who I was, where I was, and what I was
doing, running incredibly deep. Before, I was basically floundering.
Even though I could feel that I knew what feeling I wanted out of
life&mdash;and indeed I strove to work towards it&mash;I was
nonetheless totally directionless. And it was painful. Not so any more.
</p>
<p>
The irony of all this is that by making this decision, I suddenly feel
like <em>I know what Im doing here right now</em> and can arrange the
coming months accordingly. I feel freer that ever to date people in
Germany and with even more intention than I did before. I feel like I
have permission to take on any domestic projects I feel like. Isnt
that strange? I sure thought so. In all honesty I expected the opposite
outcome. But now theres a timeline: I can see how it all fits into the
grand plan.
</p>
<hr>
<p>
There are more reasons to move home, however, than just family and
friends, as important as they are to me. They were simply the more
obvious tip of the iceberg, as it were.
</p>
<p>
Trying to live in two cultures at once results in a kind of purgatory,
and I suppose I never quite committed to living in one or the other.
But over the last few years, especially upon contemplating the
physiological and psychological impact of learnt helplessness, it
became clear that there was a deep desire in me to self-actualise, and
that it should be given more serious attention. During my preteen and
early teen years, I was a prolific user of the Adobe suite, I loved to
draw, write stories, and produce music. I loved to make silly games and
build worlds with atmosphere. It was here where I was completely in my
element, and I sense deep within myself that I need to reprise these
pursuits. Alas, it would seem I can hardly find the time (or if I am
honest, the energy) to invest in them. I have mostly blamed this on my
day job, but it has become increasingly obvious that Im mostly
being stifled simply by <em>living alone in a foreign country</em>.
</p>
<p>
The purpose of a culture is apparently to obviate the need to think
about what to do as much as possible so as to free up energy for more
niche specialisation. Having to think about how to greet somebody, or
what is appropriate to do in public versus in private, or even what
amount and what type of conversation is appropriate, and with
whom&mdash;these are all things that are imparted simply by virtue of
growing up in a particular culture. They are acquired in similar
fashion to language (and some might say that these two are indeed
exactly the same thing). If it werent for these effortless
assumptions, it might become an exhausting moment-by-moment decision
making process, in perpetuity. The broader cultural context can take
care of much of this, both in the aforementioned sense of traditions
and customs as well as by making use of particular industrial
specialisations, such as manufacturing and the provision of services
and application of expertise. This way, you can focus on you, so you
can “relax into complexity”.
</p>
<p>
The imprinting of childhood seems especially important. It's possible,
and certainly proven in the case of language acquisition, that children
growing up with multiple cultural contexts in parallel find the
context-switching relatively painless and easy, if not equally as easy
as the monoculturally reared child. These additional cultures are like
an extra sub-context within a single culture. Being “German” is, for
example, another social language, with its own grammar, akin to
attending church versus going to a bar. And it, too, has multiple
manifestations.
</p>
<p>
But I am not a child of Germany. Neither is German my native tongue. I
may have long been a C2 speaker, and indeed, I live my life basically
incognito unless I explicitly mention my background&mdash;no one really
notices Im not from around here. Yet no matter how good my language
skills get, this mismatch still presents as an extra layer of
abstraction. For the programmers out there: I do not feel like Im
running on “bare metal” like I do back home. The extra latency becomes
cumulatively exhausting. Im running in an interpreter, playing life on
hard mode, when the opportunity to compile to machine code and switch
to normal mode (or even easy) is right at my fingertips.
</p>
<p>
I previously described my circumstances as a purgatory, and this is an
apt word to exemplify the cultural incongruencies. The word itself is
frequently used&mdash;but only in English speaking cultures&mdash;in a
looser sense to refer to a state of suffering that is almost always
temporary, before a type of finalising “decision” relieves oneself of
it. This is not so in other languages. Whilst the word and idea of a
purgatory do exist in German (<em>Fegefeuer</em>), they dont in this
metaphorical sense. Many other types of analogies, turns of phrases,
and cultural metaphors used in everyday life don't neatly map to one
another (even though some do, thanks to the more remotely shared
cultural and linguistic history).
</p>
<p>
Ive come to believe that you might have to fully relinquish one
cultural context for another in order to remove the extra cognitive
burden. That would entail essentially “giving up” Australia once and
for all to stay in Germany and focus on more specialised pursuits. Upon
reflection, I think I really did do this for a few years, whilst I was
still enthralled by the joy of learning a new language to proficiency,
but its novelty soon faded.
</p>
<p>
When I use my computer, I always have two keyboard layouts active,
depending on what Im doing. One for writing German prose and
messaging, and another with my “native” layout for everything else. I
originally figured this two-pronged approach would make things easier,
but really, it's constant chaos. Forever having one foot in each door
is the same kind of chaos.
</p>
<p>
As such, it now seems obvious to me that I have to return to a single
keyboard layout and go home. If I want to “relax into complexity,” then
I must free up as much energy as possible, and in making this decision
I can feel another entanglement of helplessness slowly unravel.
</p>
<p>
And this time, its a big one.
</p>
</article>

View File

@@ -0,0 +1,17 @@
<meta name="title" content="Milk in Context: Five Years of Ray PEat">
<meta name="slug" content="milk-in-context-five-years-ray-peat">
<meta name="createdAt" content="">
<meta name="updatedAt" content="">
<meta name="tags" content="">
<meta name="guid" content="ca23e27a-7c6d-40be-8b8d-9aba6711ad09">
<article>
<p>
Growing up with grandparents from rural Sardinia, I was sensitised at a
young age to the vast differences in lifestyle and worldview that came
with inheriting two cultures. Donkeys pulling carts, milking goats, and
festivals straight out of a fantasy novel featured regularly in the
stories that my Nonno and Nonna told me.
</p>
</article>

BIN
public/favicon-small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -0,0 +1,452 @@
<meta name="slug" content="three-hormones">
<meta name="title-en" content="Progesterone Pregnenolone &amp; DHEA - Three Youth-Associated Hormones">
<meta name="title-de" content="Progesteron Pregnenolon &amp; DHEA - Drei Jugend-assoziierte Hormone">
<meta name="author" content="Ray Peat, übersetzt von Daniel Ledda">
<meta name="tags" content="">
<h1 data-tunit>
<span lang="en">Progesterone Pregnenolone &amp; DHEA - Three Youth-Associated Hormones</span>
<span lang="de">Progesteron Pregnenolon &amp; DHEA - Drei Jugend-assoziierte Hormone</span>
</h1>
<h3 data-tunit>
<strong lang="en">PROGESTERONE INFORMATION</strong>
<strong lang="de">INFORMATION ZU PROGESTERON</strong>
</h3>
<p>
<span lang="en">
Raymond Peat, MA, PhD (Univ. of Oregon), Endocrine Physiologist, specializing in hormonal changes in stress and aging
</span>
<span lang="de">
Raymond Peat, MA, PhD (Univ. of Oregon), Endokriner Physiologe, mit Schwerpunkt Stress- und Alterungs-bedingte hormonelle Veränderungen
</span>
</p>
<p>
<span lang="en">
Sixty years ago, progesterone was found to be the main hormone produced by the ovaries. Since it was
necessary for fertility and for maintaining a healthy pregnancy, it was called the "pro-gestational
hormone," and its name sometimes leads people to think that it isn't needed when you don't want to get
pregnant. In fact, it is the most protective hormone the body produces, and the large amounts that are
produced during pregnancy result from the developing baby's need for protection from the stressful
environment. Normally, the brain contains a very high concentration of progesterone, reflecting its
protective function for that most important organ. The thymus gland, the key organ of our immune system, is
also profoundly dependent on progesterone.
</span>
<span lang="de">
Vor sechzig Jahren wurde entdeckt, dass Progesteron das wichtigste Hormon ist, das von den Eierstöcken hergestellt
wird. Da es erkannt wurde, dass es für die Fruchtbarkeit notwendig ist, sowie für die Aufrechterhaltung einer
gesunden Schwangerschaft, wurde es das "Pro-Gestations-Hormon" genannt, und sein Name lässt manchmal glauben,
dass es nicht vonnöten ist, wenn man keine Schwangerschaft möchte. Tatsächlich ist es ein Hormon, das den größten Schutz
aller körpereigenen Hormone bietet, und die großen Mengen, die während einer Schwangerschaft
ausgeschüttet werden, sind auf darauf zurückzuführen, dass der Säugling ein hohes Bedürfnis nach Schutz gegen seine stressvolle
Umgebung hat. Normalerweise enthält das Gehirn eine sehr hohe Konzentration an Progesteron, was dessen
schützende Wirkung auf das wichtigste Organ widerspiegelt.
</span>
</p>
<p>
<span lang="en">
In experiments, progesterone was found to be the basic hormone of adaptation and of resistance to stress.
The adrenal glands use it to produce their anti-stress hormones, and when there is enough progesterone, they
don't have to produce the potentially harmful cortisone. In a progesterone deficiency, we produce too much
cortisone, and excessive cortisone causes osteoporosis, aging of the skin, damage to brain cells, and the
accumulation of fat, especially on the back and abdomen.
</span>
<span lang="de">
In Experimenten wurde gezeigt, dass Progesteron ein grundlegendes Adaptations- und Resistenzhormon gegen Stress
ist. Die Nebennieren nutzen es, um deren Antistress-Hormone herzustellen, und wenn genügend Progesteron
vorhanden ist, müssen sie das potenziell schädliche Cortison nicht produzieren. Bei einem Progesteronmangel
produzieren wir zu viel Cortison, und ein Cortisonüberschuss verursacht Osteoporose, Alterung der Haut,
Schädigung der Gehirnzellen, und die Ansammlung von Fett, vor allem am Rücken und am Bauch.
</span>
</p>
<p>
<span lang="en">
Experiments have shown that progesterone relieves anxiety, improves memory, protects brain cells, and even
prevents epileptic seizures. It promotes respiration, and has been used to correct emphysema. In the
circulatory system, it prevents bulging veins by increasing the tone of blood vessels, and improves the
efficiency of the heart. It reverses many of the signs of aging in the skin, and promotes healthy bone
growth. It can relieve many types of arthritis, and helps a variety of immunological problems.
</span>
<span lang="de">
Experimente zeigten, dass Progesteron Angstzustände lindert, das Gedächtnis fördert, die Gehirnzellen schützt,
und sogar epileptische Anfälle verhindert. Es fördert die Atmung, und wurde als wirksames Mittel gegen Emphysem
eingesetzt. Im Kreislaufsystem verhindert es hervortretende Adern, indem es den Tonus der Blutgefäße erhöht, und es
verbessert die Leistungsfähigkeit des Herzens. Es kehrt viele der Anzeichen des Alterns in der Haut um und
fördert gesundes Knochenwachstum. Es kann viele Arten von Arthrose entlasten und hilft bei einer Vielzahl von
immunologischen Problemen.
</span>
</p>
<p>
<span lang="en">
If progesterone is taken dissolved in vitamin E, it is absorbed very efficiently, and distributed quickly to
all of the tissues. If a woman has ovaries, progesterone helps them to produce both progesterone and
estrogen as needed, and also helps to restore normal functioning of the thyroid and other glands. If her
ovaries have been removed, progesterone should be taken consistently to replace the lost supply. A
progesterone deficiency has often been associated with increased susceptibility to cancer, and progesterone
has been used to treat some types of cancer.
</span>
<span lang="de">
Wenn Progesteron in einer Lösung mit Vitamin E zugeführt wird, wird es sehr effizient aufgenommen, und wird
schnell an alle Körpergewebe abgegeben. Sollte eine Frau Eierstöcke haben, hilft ihr Progesteron dabei,
bei Bedarf sowohl Progesteron selber als auch Östrogen zu produzieren, und hilft auch, eine normale
Funktionsweise der Schilddrüse sowie der anderen Drüsen wiederherzustellen. Sollten ihre Eierstöcke entfernt
worden sein, sollte Progesteron konsequent eingenommen werden, um die fehlende Versorgung zu ersetzen. Ein
Progesteronmangel wurde oft mit einem erhöhten Krebsrisiko assoziiert und es wurde ebenfalls oft bei einer
Krebsbehandlung eingesetzt.
</span>
</p>
<p>
<span lang="en">
It is important to emphasize that progesterone is not just the hormone of pregnancy. To use it only "to
protect the uterus" would be like telling a man he doesn't need testosterone if he doesn't plan to father
children, except that progesterone is of far greater and more basic significance than testosterone. While
men do naturally produce progesterone, and can sometimes benefit from using it, it is not a male hormone.
Some people get that impression, because some physicians recommend combining estrogen with either
testosterone or progesterone, to protect against some of estrogen's side effects, but progesterone is the
body's natural complement to estrogen. Used alone, progesterone often makes it unnecessary to use estrogen
for hot flashes or insomnia, or other symptoms of menopause.
</span>
<span lang="de">
Es ist wichtig zu betonen, dass Progesteron nicht einfach nur ein Schwangerschaftshormon ist. Es "nur zu
verwenden, um die Gebärmutter zu schützen", wäre, als würde man einem Mann erzählen, er würde Testosteron nicht
brauchen, wenn er keine Kinderpläne haben sollte, außer dass Progesteron eine viel größere, grundlegendere
Bedeutung als Testosteron hat. Obwohl Männer auch natürlicherweise Progesteron produzieren,
und manchmal von dessen Gebrauch profitieren, ist es kein männliches Hormon. Einige Leute bekommen diesen
Eindruck, weil einige Ärzte empfehlen, Östrogen mit entweder Testosteron oder Progesteron zu kombinieren, um vor
einigen der Nebeneffekte von Östrogen zu schützen, aber Progesteron ist das natürliche Gegenstück des Körpers zu
Östrogen. Der isolierte Einsatz von Progesteron sorgt oft dafür, dass der Gebrauch von Östrogen als Mittel gegen
Hitzewallungen oder Schlaflosigkeit, oder andere Wechseljahrsbeschwerden, unnötig wird.
</span>
</p>
<p>
<span lang="en">
When dissolved in vitamin E, progesterone begins entering the blood stream almost as soon as it contacts any
membrane, such as the lips, tongue, gums, or palate, but when it is swallowed, it continues to be absorbed
as part of the digestive process. When taken with food, its absorption occurs at the same rate as the
digestion and absorption of the food.
</span>
<span lang="de">
In einer Lösung mit Vitamin E beginnt Progesteron, kurz nachdem es eine Membran berührt (zum Beispiel die Lippen, die
Zunge, das Zahnfleisch, oder den Gaumen) in die Blutbahn zu gelangen, aber wenn es verschluckt wird, wird es
kontinuierlich im Laufe des Verdauungsprozesses aufgenommen. Bei gleichzeitiger Einnahme mit Essen findet die Aufnahme
mit der gleichen Geschwindigkeit der Verdauung und der Aufnahme des Essens statt.
</span>
</p>
<hr>
<h3 data-tunit>
<strong lang="en">PREGNENOLONE</strong>
<strong lang="de">PREGNENOLON</strong>
</h3>
<p>
<span lang="en">
Pregnenolone, which is the raw material for producing many of the hormones of stress and adaptation, was
known as early as 1934, but for several years it was considered to be an "inert" substance. A reason for
this belief is that it was first tested on healthy young animals. Since these animals were already producing
large amounts of pregnenolone (in the brain, adrenal glands, and gonads), additional pregnenolone had no
effect.
</span>
<span lang="de">
Pregnenolon, das Rohmaterial zur Herstellung vieler der Hormone von Stress und Adaptation, ist seit bereits
1934 bekannt, aber es wurde einige Jahre als inaktive Substanz wahrgenommen. Ein Grund für diesen Glauben ist,
dass die ersten Versuche mit Pregnenolon mit gesunden Jungtieren waren. Da diese Tiere bereits hohe Mengen von
Pregnenolon produzierten (und zwar im Gehirn, in den Nebennieren und in den Gonaden), war die zusätzliche Gabe
von Pregnenolon wirkungslos.
</span>
</p>
<p>
<span lang="en">
In the 1940s, pregnenolone was tested in people who were sick or under stress, and it was found to have a
wide range of beneficial actions, but the drug industry never had much interest in it. Its very generality
made it seem unlike a drug, and its natural occurrence made it impossible to patent. Thus, many synthetic
variants, each with a more specialized action and some serious side effects, came to be patented and
promoted for use in treating specific conditions. The drug companies created an atmosphere in which many
people felt that each disease should have a drug, and each drug, a disease. The side effects of some of
those synthetic hormones were so awful that many people came to fear them. For example, synthetic varieties
of "cortisone" can destroy immunity, and can cause osteoporosis, diabetes, and rapid aging, with loss of
pigment in the skin and hair, and extreme thinning of the skin.
</span>
<span lang="de">
In den 1940er Jahren wurde Pregnenolon an Personen getestet, die entweder krank oder gestresst waren, und es
wurde herausgefunden, dass es über eine breite Palette von positiven Wirkungen verfügt, aber die Pharmaindustrie
hatte nie irgendein besonderes Interesse daran. Gerade seine Allgemeingültigkeit sorgte dafür, dass es kaum wie
eine Droge wirkte, und es war aufgrund seines natürlichen Vorkommens unmöglich, es zu patentieren.
Dementsprechend wurden viele synthetische Varianten, jede mit seiner spezialisierten Wirkung und einigen
schwerwiegenden Nebeneffekten, patentiert und als Gegenmittel spezifischer Krankheiten vermarktet. Die
Pharmaunternehmen schufen eine Atmosphäre, in der viele Leute das Gefühl hatten, dass jede Krankheit eine Droge
haben müsste, und jede Droge eine Krankheit. Die Nebeneffekte einiger dieser synthetischen Hormone waren so
schrecklich, dass viele mit der Zeit Angst vor ihnen bekamen. Zum Beispiel können synthetische Varianten von
"Cortison" die Immunität zerstören und Osteoporose, Diabetes, und schnelles Altern verursachen, mit dem Verlust
von Haut- und Haarpigmentierung sowie extremer Verdünnung der Haut.
</span>
</p>
<p>
<span lang="en">
Natural pregnenolone is present in young people of both sexes at a very high concentration, and one reason
for the large amount produced in youth is that it is one of our basic defenses against the harmful side
effects that an imbalance of even our natural hormones can produce. In excess, natural cortisone or estrogen
can be dangerous, but when there is an abundance of pregnenolone, their side effects are prevented or
minimized.
</span>
<span lang="de">
Natürliches Pregnenolon ist in jungen Menschen beider Geschlechter in hohen Konzentrationen vorhanden und ein
Grund für die hohe Menge, die während der Jugend produziert wird, ist, dass es uns einen grundlegenden Schutz
gegen die schädlichen Nebeneffekte bietet, die von einem Ungleichgewicht selbst unserer eigenen natürlichen Hormone
hervorgerufen werden können. Ein Überschuss natürlichen Cortisons oder Östrogens kann schädlich sein, aber wenn
ein Überfluss von Pregnenolon besteht, werden diese Nebeneffekte verhindert oder minimiert.
</span>
</p>
<p>
<span lang="en">
In a healthy young person or animal, taking even a large dose of pregnenolone has no hormone-like or
drug-like action at all. It is unique in this way. But if the animal or person is under stress, and
producing more cortisone than usual, taking pregnenolone causes the cortisone to come down to the normal
level. After the age of 40 or 45, it seems that everyone lives in a state of continuous "stress," just as a
normal part of aging. This coincides with the body's decreased ability to produce an abundance of
pregnenolone.
</span>
<span lang="de">
Bei einem gesunden, jungen Menschen oder Tier weist die Zufuhr von selbst einer hohen Dosis Pregnenolon keine hormon-
oder drogenähnlichen Wirkungen auf. Es ist auf diese Weise einzigartig. Aber wenn der Mensch oder das Tier unter
Stress leidet und mehr Cortison als gewöhnlich produziert, sorgt die Gabe von Pregnenolon dafür, dass das
Cortison auf seinen normalen Spiegel sinkt. Nach dem Alter von 40 oder 45 Jahren befindet sich scheinbar jeder einfach
im Zuge des normalen Alterungsprozesses in einem ununterbrochenen "Stresszustand". Das geht mit der geringeren
Fähigkeit des Körpers einher, einen Überfluss von Pregnenolon herzustellen.
</span>
</p>
<p>
<span lang="en">
When aging rats are given a supplement of pregnenolone, it immediately improves their memory and general
performance. Human studies, as early as the 1940s, have also demonstrated improved performance of ordinary
tasks. It is now known that pregnenolone is one of the major hormones in the brain. It is produced by
certain brain cells, as well as being absorbed into the brain from the blood. It protects brain cells from
injury caused by fatigue, and an adequate amount has a calming effect on the emotions, which is part of the
reason that it protects us from the stress response that leads to an excessive production of cortisone.
People feel a mood of resilience and an ability to confront challenges.
</span>
<span lang="de">
Wenn alternden Ratten Pregnenolon zugeführt wird, steigert es sofort ihr Gedächtnis und ihre allgemeine Leistung.
Studien zu Menschen demonstrierten bereits in den 1940er Jahren eine gesteigerte Leistung bei alltäglichen
Aufgaben. Es ist mittlerweile bekannt, dass Pregnenolon eines der wichtigsten Hormone im Gehirn ist. Es wird von
bestimmten Gehirnzellen produziert und wird zudem vom Gehirn aus dem Blut aufgenommen. Es schützt Gehirnzellen
vor durch Erschöpfung hervorgerufenen Verletzungen und eine ausreichende Menge wirkt beruhigend auf die
Emotionen. Gerade diese Wirkung erklärt zumindest zum Teil, warum es uns vor der Stressreaktion schützt, die zu einer
erhöhten Cortisonproduktion führt. Es führt zu einer subjektiven Wahrnehmung von Belastbarkeit und der
Fähigkeit, sich Herausforderungen stellen zu können.
</span>
</p>
<p>
<span lang="en">
Many people have noticed that pregnenolone has a "face-lifting" action. This effect seems to be produced by
improved circulation to the skin, and by an actual contraction of some muscle-like cells in the skin. A
similar effect can improve joint mobility in arthritis, tissue elasticity in the lungs, and even eyesight.
Many studies have shown it to be protective of "fibrous tissues" in general, and in this connection it was
proven to prevent the tumors that can be caused by estrogen.
</span>
<span lang="de">
Es wurde von vielen Personen bemerkt, dass Pregnenolon eine gesichtsstraffende Wirkung hat. Diese Wirkung scheint
durch eine verbesserte Durchblutung der Haut hervorgerufen zu werden, sowie durch die tatsächliche Anspannung einiger
muskelähnlichen Zellen in der Haut. Eine ähnliche Wirkung kann bei einer Arthrose die Mobilität der Gelenke
verbessern, sowie die Elastizität des Lungengewebes oder sogar die Sehkraft. Es wurde in vielen Studien gezeigt,
dass es allgemein vor "fibrotischen Geweben" schützt, und in diesem Zusammenhang wurde bewiesen, dass es den
Tumoren vorbeugen kann, die durch Östrogen verursacht werden können.
</span>
</p>
<p>
<span lang="en">
Pregnenolone is largely converted into two other "youth-associated" protective hormones, progesterone and
DHEA. At the age of 30, both men and women produce roughly 30 to 50 mg. of pregnenolone daily. When taken
orally, even in the powdered form, it is absorbed fairly well. One dose of approximately 300 mg (the size of
an aspirin tablet) keeps acting for about a week, as absorption continues along the intestine, and as it is
"recycled" in the body. Part of this long lasting effect is because it improves the body's ability to
produce its own pregnenolone. It tends to improve function of the thyroid and other glands, and this
"normalizing" effect on the other glands helps to account for its wide range of beneficial effects.
</span>
<span lang="de">
Pregnenolon wird größtenteils in zwei andere "Jugend-assoziierte", schützende Hormone umgewandelt, nämlich Progesteron
und DHEA. Sowohl Männer als auch Frauen im Alter von 30 Jahren stellen ungefähr 30 bis 50 mg Pregnenolon
täglich her. Bei einer oralen Zufuhr, selbst in Pulverform, wird es relativ gut aufgenommen. Eine Dosis von ca. 300
mg (der Größe einer Aspirin-Tablette) behält ungefähr eine Woche lang seine Wirkung bei, während es entlang des
Verdauungstraktes weiter aufgenommen und im Körper "wiederverwertet" wird. Diese lang anhaltende Wirkung hat es
teilweise der Eigenschaft zu verdanken, dass es dem Körper dabei hilft, sein eigenes Pregnenolon herzustellen.
Es neigt dazu, die Schilddrüsenfunktion zu fördern sowie die Funktion anderer Drüsen, und diese "normalisierende" Wirkung
auf andere Drüsen hilft dabei, das breite Spektrum seiner positiven Wirkungen zu erklären.
</span>
</p>
<hr>
<h3 data-tunit>
<strong lang="en">DHEA: ANOTHER YOUTH-ASSOCIATED HORMONE</strong>
<strong lang="de">DHEA: EIN WEITERES JUGEND-ASSOZIIERTES HORMON</strong>
</h3>
<p>
<span lang="en">
Raymond Peat, MA, PhD (Univ. of Oregon), Endocrine Physiologist
</span>
<span lang="de">
Raymond Peat, MA, PhD (Univ. of Oregon), Endokriner Physiologe
</span>
</p>
<p>
<span lang="en">
DHEA (dehydroepiandrosterone) has a technical-sounding name because it has never been identified with a
single dominant function, in spite of its abundance in the body. Many researchers still think of it as a
substance produced by the adrenal glands, but experiments show that animals without adrenals are able to
produce it in normal amounts. Much of it is formed in the brain (from pregnenolone), but it is probably
produced in other organs, including the skin. The brain contains a much higher concentration of DHEA than
the blood does.
</span>
<span lang="de">
DHEA (Dehydroepiandrosteron) hat einen technisch klingenden Namen, weil dafür noch keine einzige dominante
Funktion identifiziert wurde, obwohl es sich im Körper in großen Mengen befindet. Viele Forscher betrachten es
immer noch als Substanz, die von den Nebennieren produziert wird, aber Experimente zeigen, dass Tiere ohne
Nebennieren in der Lage sind, es in normalen Mengen zu produzieren. Viel davon wird im Gehirn (aus Pregnenolon)
hergestellt, aber es wird wohl auch in anderen Organen produziert, wie der Haut. Das Gehirn hat eine höhere
Konzentration von DHEA als das Blut.
</span>
</p>
<p>
<span lang="en">
In old age, we produce only about 5% as much as we do in youth. This is about the same decrease that occurs
with progesterone and pregnenolone. The other hormones (for example, cortisone) do not decrease so much; as
a result, our balance shifts continually during aging toward dominance by hormones such as cortisone, which
use up more and more body substance, without rebuilding it. Protection against the toxic actions of these
specialized hormones is a major function of DHEA and the other youth-associated hormones.
</span>
<span lang="de">
Im hohen Alter produzieren wir nur noch ungefähr 5 % so viel davon, wie während der Jugend. Diese Abnahme
entspricht ungefähr der von Progesteron und Pregnenolon. Die anderen Hormone, wie zum Beispiel Cortison, nehmen
nicht so viel ab; das hat zur Folge, dass unser Hormonhaushalt im Laufe des Alterns immer weiter in die
Richtung der Dominanz von Hormonen wie Cortison rückt, die immer mehr Körpersubstanz verbrauchen, ohne sie
wiederherzustellen. Schutz gegen die toxischen Wirkungen dieser spezialisierten Hormone ist eine wichtige
Funktion von DHEA und den anderen Jugend-assoziierten Hormonen.
</span>
</p>
<p>
<span lang="en">
For example, starvation, aging, and stress cause the skin to become thin and fragile. An excess of
cortisone--whether it is from medical treatment, or from stress, aging, or malnutrition--does the same
thing. Material from the skin is dissolved to provide nutrition for the more essential organs. Other organs,
such as the muscles and bones, dissolve more slowly, but just as destructively, under the continued
influence of cortisone. DHEA blocks these destructive effects of cortisone, and actively restores the normal
growth and repair processes to those organs, strengthening the skin and bones and other organs. Stimulation
of bone-growth by DHEA has been demonstrated in vitro (in laboratory tests), and it has been used to relieve
many symptoms caused by osteoporosis and arthritis, even when applied topically in an oily solution.
</span>
<span lang="de">
Es führen zum Beispiel das Hungern, das Altern, und Stress dazu, dass sich die Haut verdünnt und dass sie
brüchiger wird. Ein Überschuss von Cortison—ob durch medizinische Behandlung oder durch Stress, Alterung, oder
Mangelernährung—hat immer dieselbe Wirkung. Material aus der Haut wird abgebaut, um essenziellere Organe mit
Ressourcen zu versorgen. Andere Organe, wie die Muskeln und die Knochen, lösen sich unter dem Einfluss von
Cortison etwas langsamer auf, aber tun das auf die gleiche zerstörerische Art und Weise. DHEA blockiert diese
zerstörerische Wirkung von Cortison und trägt aktiv zu normalem Wachstum und den Wiederherstellungsprozessen
dieser Organe bei, und stärkt dabei die Haut und die Knochen sowie die anderen Organe. Die Stimulierung von
Knochenwachstum durch DHEA wurde in vitro (in Laborversuchen) gezeigt, und es wurde zur Linderung vieler der
Symptome von Osteoporose und Arthrose eingesetzt, selbst wenn es in einer Lösung mit einem Öl auf die Haut
aufgetragen wird.
</span>
</p>
<p>
<span lang="en">
Estrogen is known to produce a great variety of immunological defects, and DHEA, apparently by its balancing
and restorative actions, is able to correct some of those immunological defects, including some "autoimmune"
diseases.
</span>
<span lang="de">
Östrogen kann bekanntermaßen eine große Zahl immunologischer Defekte hervorrufen, und DHEA ist
in der Lage, einige dieser Defekte (einschließlich einiger "autoimmunen" Krankheiten) zu korrigieren, scheinbar
durch seine ausgleichenden und stärkenden Wirkungen.
</span>
</p>
<p>
<span lang="en">
It is established that DHEA protects against cancer, but it isn't yet understood how it does this. It
appears to protect against the toxic cancer-producing effects of excess estrogen, but its anti-cancer
properties probably involve many other functions.
</span>
<span lang="de">
Es ist etabliert, dass DHEA vor Krebs schützt, aber der genaue Mechanismus ist noch nicht bekannt. Es scheint
vor den toxischen Krebs-verursachenden Wirkungen überschüssigen Östrogens zu schützen, aber bei seinen
Anti-Krebs-Eigenschaften spielen wahrscheinlich viele andere Funktionen eine Rolle.
</span>
</p>
<p>
<span lang="en">
Diabetes can be produced experimentally by certain poisons which kill the insulin-producing cells in the
pancreas. Rabbits were experimentally made diabetic, and when treated with DHEA their diabetes was cured. It
was found that the insulin-producing cells had regenerated. Many people with diabetes have used brewer's
yeast and DHEA to improve their sugar metabolism. In diabetes, very little sugar enters the cells, so
fatigue is a problem. DHEA stimulates cells to absorb sugar and to burn it, so it increases our general
energy level and helps to prevent obesity.
</span>
<span lang="de">
Diabetes kann in Experimenten durch einige Giftstoffe hervorgerufen werden, die die insulinproduzierenden Zellen
der Bauchspeicheldrüse abtöten. Kaninchen wurden experimentell zu Diabetikern gemacht und wurden nach einer
Behandlung mit DHEA geheilt. Es wurde entdeckt, dass die insulinproduzierenden Zellen regeneriert wurden. Viele
Diabetiker verwendeten Bierhefe und DHEA, um ihren Zuckerstoffwechsel zu verbessern. Bei Diabetes gelangt sehr
wenig Zucker in die Zellen und Ermüdung ist daher oft ein Problem. DHEA stimuliert die Zellen, Zucker aufzunehmen
und ihn zu verbrennen, und erhöht so das allgemeine Energieniveau.
</span>
</p>
<p>
<span lang="en">
Young people produce about 12 to 15 milligrams of DHEA per day, and that amount decreases by about 2 mg. per
day for every decade after the age of 30. This is one of the reasons that young people eat more without
getting fat, and tolerate cold weather better: DHEA, like the thyroid hormone, increases our heat production
and ability to burn calories. At the age of 50, about 4 mg. of DHEA per day will usually restore the level
of DHEA in the blood to a youthful level. It is important to avoid taking more than needed, since some
people (especially if they are deficient in progesterone, pregnenolone, or thyroid) can turn the excess into
estrogen or testosterone, and large amounts of those sex hormones can disturb the function of the thymus
gland and the liver.
</span>
<span lang="de">
Junge Menschen produzieren ungefähr 12 bis 15 Milligramm DHEA pro Tag und dieser Wert nimmt mit jedem
Jahrzehnt nach einem Alter von 30 Jahren um ca. 2 mg ab. Das ist einer der Gründe, warum junge Menschen mehr
essen, ohne dick zu werden, und die Kälte besser ertragen können: DHEA, wie das Schilddrüsenhormon, erhöht
unsere Hitzeproduktion und unsere Fähigkeit, Kalorien zu verbrennen. Im Alter von 50 Jahren sorgen ca. 4 mg
DHEA pro Tag dafür, den Blutspiegel auf ein jugendlicheres Niveau zu erhöhen. Es ist wichtig, nicht mehr als
nötig zu nehmen, da es von einigen Leuten (besonders denen, die einen Progesteron-, Pregnenolon- oder
Schilddrüsenhormonmangel aufweisen) in überschüssiges Östrogen oder Testosteron umgewandelt wird, und hohe
Mengen dieser Sexualhormone können die Funktion des Thymus und der Leber stören.
</span>
</p>
<p>
<span lang="en">
People who have taken an excess of DHEA have been found to have abnormally high estrogen levels, and this
can cause the liver to enlarge, and the thymus to shrink.
</span>
<span lang="de">
Bei Personen, die überschüssiges DHEA einnahmen, wurden abnormal hohe Östrogenspiegel festgestellt, und das kann
eine Vergrößerung der Leber verursachen sowie die Verkleinerung des Thymus.
</span>
</p>
<p>
<span lang="en">
One study has found that the only hormone abnormality in a group of Alzheimers patients' brains was an
excess of DHEA. In cell culture, DHEA can cause changes in glial cells resembling those seen in the aging
brain. These observations suggest that DHEA should be used with caution. Supplements of pregnenolone and
thyroid seem to be the safest way to optimize DHEA production.
</span>
<span lang="de">
Eine Studie zeigte, dass die einzige hormonelle Anomalie in den Gehirnen einer Gruppe von Alzheimer-Patienten
ein DHEA-Überschuss war. In einer Zellenkultur kann DHEA Veränderungen in Gliazellen verursachen, die denen
im alternden Gehirn ähneln. Diese Beobachtungen legen nahe, dass DHEA mit Vorsicht zu verwenden ist.
Pregnenolon- und Schilddrüsenhormonpräparate scheinen der sicherste Weg zu sein, die Produktion von DHEA zu
optimieren.
</span>
</p>
<p>
<span lang="en">
© Ray Peat 2006. All Rights Reserved. www.RayPeat.com
</span>
<span lang="de">
© Ray Peat 2006. All Rights Reserved. www.RayPeat.com
</span>
</p>
<p data-notranslate>
<a href="https://raypeat.com/articles/articles/three-hormones.shtml">Originalartikel und Quellenverzeichnis</a>
</p>

View File

@@ -1,185 +0,0 @@
:root {
--subject-spacing: 40px;
}
html,
body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
body {
background-color: #292929;
font-family: "Roboto", serif;
}
.title_name {
font-size: 50px;
color: floralwhite;
font-family: "Roboto Slab", "Times New Roman", Times, serif;
text-align: center;
}
.title_name img {
margin: 20px;
height: 100px;
width: auto;
vertical-align: middle;
}
.spinMe {
animation: spin 1s infinite linear;
}
.shakeMe {
animation: shake 0.2s infinite linear;
}
@keyframes shake {
0% {
transform: scale(1) translate(1px, 1px) rotate(0deg);
}
25% {
transform: scale(0.95) translate(-1px, -2px) rotate(-1deg);
}
50% {
transform: scale(0.9) translate(-3px, 0px) rotate(1deg);
}
75% {
transform: scale(0.95) translate(3px, 2px) rotate(0deg);
}
100% {
transform: scale(1) translate(-1px, 2px) rotate(-1deg);
}
}
@keyframes spin {
0% {
transform: rotate(0deg) scale(1);
filter: hue-rotate(0deg) saturate(5);
}
25% {
transform: rotate(90deg) scale(2);
}
50% {
transform: rotate(180deg) scale(1);
}
75% {
transform: rotate(270deg) scale(2);
}
100% {
transform: rotate(360deg) scale(1);
filter: hue-rotate(360deg) saturate(5);
}
}
.supercontainer {
padding-top: 3em;
margin: auto;
}
.main {
width: 50em;
margin: 20px auto;
text-align: center;
}
@media only screen and (max-width: 1024px) {
.main {
width: 35em;
padding: 20px;
}
:root {
--subject-spacing: 20px;
}
}
@media only screen and (max-width: 768px) {
.title_name img {
margin: 10px;
height: 60px;
width: auto;
}
.title_name {
font-size: 30px;
}
.main {
width: 20em;
padding: 20px;
}
}
span.subjecttitle {
height: 100%;
font-family: "Roboto Slab", "Times New Roman", Times, serif;
font-size: 20px;
padding-right: 5px;
}
.subject:first-child {
margin-top: 0;
}
.subject:last-child {
margin-bottom: 0;
}
.subject {
margin-top: var(--subject-spacing);
margin-bottom: var(--subject-spacing);
}
.resourcelist {
margin-top: 2px;
background-color: white;
border-style: solid;
border-color: #292929;
border-width: 1px;
border-radius: 5px;
a:first-of-type {
.resource {
padding: 15px 20px 10px 20px;
border-radius: 5px 5px 0 0;
}
}
a:last-of-type {
.resource {
padding: 10px 20px 15px 20px;
border-radius: 0 0 5px 5px;
}
}
a:only-of-type {
.resource {
border-radius: 5px;
}
}
}
.resource {
position: relative;
background-color: white;
padding: 10px 20px 10px 20px;
display: block;
color: #333333;
text-decorAtion: none;
transition: background-color 200ms;
}
.resource:hover {
background-color: #bde4ff;
}
.resource:active {
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.50) inset;
}
a {
color: #000;
text-decoration: none;
cursor: pointer;
}

View File

@@ -1,17 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link rel="icon" href="/home/icon.webp" />
<link rel="stylesheet" href="/home/main.css" />
<link rel="icon" href="/home/img/dj.gif" />
<link
href="https://fonts.googleapis.com/css2?family=Roboto&family=Roboto+Slab:wght@600&display=swap"
rel="stylesheet"
/>
<!-- SSR HEAD OUTLET -->
</head>
<body>
<div id="app-root"><!-- SSR OUTLET --></div>
</body>
</html>

0
public/manifest.json Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,72 @@
html, body {
position: relative;
width: 100%;
height: 100%;
}
* {
box-sizing: border-box;
}
body {
color: #333;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}
a {
color: rgb(0,100,200);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:visited {
color: rgb(0,80,160);
}
label {
display: block;
}
input, button, select, textarea {
font-family: inherit;
font-size: inherit;
-webkit-padding: 0.4em 0;
padding: 0.4em;
margin: 0 0 0.5em 0;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 2px;
}
input:disabled {
color: #ccc;
}
button {
color: #333;
background-color: #f4f4f4;
outline: none;
}
button:disabled {
color: #999;
}
button:not(:disabled):active {
background-color: #ddd;
}
button:focus {
border-color: #666;
}
::-webkit-scrollbar {
background-color: transparent;
}
::-webkit-scrollbar-thumb {
background-color: rgba(0,0,0,0.25);
}

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width,initial-scale=1'>
<title>Somaesque</title>
<link rel='icon' type='image/png' href='./favicon.png'>
<link rel='stylesheet' href='./global.css'>
<link rel='stylesheet' href='./build/bundle.css'>
<script defer src='./build/bundle.js'></script>
</head>
<script>
</script>
<body>
</body>
</html>

BIN
public/somaesque/main.wasm Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -0,0 +1,674 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
o Cube_Cube.001
v 0.399961 0.500000 -0.399961
v 0.500000 0.399961 -0.399961
v 0.399961 0.399961 -0.500000
v 0.438244 0.492385 -0.399961
v 0.470699 0.470699 -0.399961
v 0.399961 0.492385 -0.438244
v 0.439203 0.483194 -0.439203
v 0.465612 0.465612 -0.437212
v 0.457718 0.457718 -0.457718
v 0.492385 0.399961 -0.438244
v 0.470699 0.399961 -0.470699
v 0.492385 0.438244 -0.399961
v 0.483194 0.439203 -0.439203
v 0.465612 0.437212 -0.465612
v 0.399961 0.438244 -0.492385
v 0.399961 0.470699 -0.470699
v 0.438244 0.399961 -0.492385
v 0.439203 0.439203 -0.483194
v 0.437212 0.465612 -0.465612
v 0.500000 -0.399961 -0.399961
v 0.399961 -0.500000 -0.399961
v 0.399961 -0.399961 -0.500000
v 0.492385 -0.438244 -0.399961
v 0.470699 -0.470699 -0.399961
v 0.492385 -0.399961 -0.438244
v 0.483194 -0.439203 -0.439203
v 0.465612 -0.465612 -0.437212
v 0.457718 -0.457718 -0.457718
v 0.399961 -0.492385 -0.438244
v 0.399961 -0.470699 -0.470699
v 0.438244 -0.492385 -0.399961
v 0.439203 -0.483194 -0.439203
v 0.437212 -0.465612 -0.465612
v 0.438244 -0.399961 -0.492385
v 0.470699 -0.399961 -0.470699
v 0.399961 -0.438244 -0.492385
v 0.439203 -0.439203 -0.483194
v 0.465612 -0.437212 -0.465612
v 0.500000 0.399961 0.399961
v 0.399961 0.500000 0.399961
v 0.399961 0.399961 0.500000
v 0.492385 0.438244 0.399961
v 0.470699 0.470699 0.399961
v 0.492385 0.399961 0.438244
v 0.483194 0.439203 0.439203
v 0.465612 0.465612 0.437212
v 0.457718 0.457718 0.457718
v 0.399961 0.492385 0.438244
v 0.399961 0.470699 0.470699
v 0.438244 0.492385 0.399961
v 0.439203 0.483194 0.439203
v 0.437212 0.465612 0.465612
v 0.438244 0.399961 0.492385
v 0.470699 0.399961 0.470699
v 0.399961 0.438244 0.492385
v 0.439203 0.439203 0.483194
v 0.465612 0.437212 0.465612
v 0.399961 -0.399961 0.500000
v 0.399961 -0.500000 0.399961
v 0.500000 -0.399961 0.399961
v 0.399961 -0.438244 0.492385
v 0.399961 -0.470699 0.470699
v 0.438244 -0.399961 0.492385
v 0.439203 -0.439203 0.483194
v 0.437212 -0.465612 0.465612
v 0.457718 -0.457718 0.457718
v 0.438244 -0.492385 0.399961
v 0.470699 -0.470699 0.399961
v 0.399961 -0.492385 0.438244
v 0.439203 -0.483194 0.439203
v 0.465612 -0.465612 0.437212
v 0.492385 -0.399961 0.438244
v 0.470699 -0.399961 0.470699
v 0.492385 -0.438244 0.399961
v 0.483194 -0.439203 0.439203
v 0.465612 -0.437212 0.465612
v -0.500000 0.399961 -0.399961
v -0.399961 0.500000 -0.399961
v -0.399961 0.399961 -0.500000
v -0.492385 0.438244 -0.399961
v -0.470699 0.470699 -0.399961
v -0.492385 0.399961 -0.438244
v -0.483194 0.439203 -0.439203
v -0.465612 0.465612 -0.437212
v -0.457718 0.457718 -0.457718
v -0.399961 0.492385 -0.438244
v -0.399961 0.470699 -0.470699
v -0.438244 0.492385 -0.399961
v -0.439203 0.483194 -0.439203
v -0.437212 0.465612 -0.465612
v -0.438244 0.399961 -0.492385
v -0.470699 0.399961 -0.470699
v -0.399961 0.438244 -0.492385
v -0.439203 0.439203 -0.483194
v -0.465612 0.437212 -0.465612
v -0.399961 -0.399961 -0.500000
v -0.399961 -0.500000 -0.399961
v -0.500000 -0.399961 -0.399961
v -0.399961 -0.438244 -0.492385
v -0.399961 -0.470699 -0.470699
v -0.438244 -0.399961 -0.492385
v -0.439203 -0.439203 -0.483194
v -0.437212 -0.465612 -0.465612
v -0.457718 -0.457718 -0.457718
v -0.438244 -0.492385 -0.399961
v -0.470699 -0.470699 -0.399961
v -0.399961 -0.492385 -0.438244
v -0.439203 -0.483194 -0.439203
v -0.465612 -0.465612 -0.437212
v -0.492385 -0.399961 -0.438244
v -0.470699 -0.399961 -0.470699
v -0.492385 -0.438244 -0.399961
v -0.483194 -0.439203 -0.439203
v -0.465612 -0.437212 -0.465612
v -0.500000 0.399961 0.399961
v -0.399961 0.399961 0.500000
v -0.399961 0.500000 0.399961
v -0.492385 0.399961 0.438244
v -0.470699 0.399961 0.470699
v -0.492385 0.438244 0.399961
v -0.483194 0.439203 0.439203
v -0.465612 0.437212 0.465612
v -0.457718 0.457718 0.457718
v -0.399961 0.438244 0.492385
v -0.399961 0.470699 0.470699
v -0.438244 0.399961 0.492385
v -0.439203 0.439203 0.483194
v -0.437212 0.465612 0.465612
v -0.438244 0.492385 0.399961
v -0.470699 0.470699 0.399961
v -0.399961 0.492385 0.438244
v -0.439203 0.483194 0.439203
v -0.465612 0.465612 0.437212
v -0.399961 -0.399961 0.500000
v -0.500000 -0.399961 0.399961
v -0.399961 -0.500000 0.399961
v -0.438244 -0.399961 0.492385
v -0.470699 -0.399961 0.470699
v -0.399961 -0.438244 0.492385
v -0.439203 -0.439203 0.483194
v -0.465612 -0.437212 0.465612
v -0.457718 -0.457718 0.457718
v -0.492385 -0.438244 0.399961
v -0.470699 -0.470699 0.399961
v -0.492385 -0.399961 0.438244
v -0.483194 -0.439203 0.439203
v -0.465612 -0.465612 0.437212
v -0.399961 -0.492385 0.438244
v -0.399961 -0.470699 0.470699
v -0.438244 -0.492385 0.399961
v -0.439203 -0.483194 0.439203
v -0.437212 -0.465612 0.465612
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.650010 0.525010
vt 0.849990 0.525010
vt 0.849990 0.724990
vt 0.650010 0.724990
vt 0.400010 0.275010
vt 0.599990 0.275010
vt 0.599990 0.474990
vt 0.400010 0.474990
vt 0.400010 0.775010
vt 0.599990 0.775010
vt 0.599990 0.974990
vt 0.400010 0.974990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.400010 0.525010
vt 0.390439 0.525010
vt 0.390199 0.515199
vt 0.400010 0.515439
vt 0.375000 0.525010
vt 0.375000 0.515697
vt 0.390697 0.500000
vt 0.400010 0.500000
vt 0.375000 0.510570
vt 0.599990 0.265439
vt 0.609801 0.265199
vt 0.609561 0.275010
vt 0.599990 0.250000
vt 0.609303 0.250000
vt 0.625000 0.265697
vt 0.625000 0.275010
vt 0.614430 0.250000
vt 0.859561 0.724990
vt 0.859801 0.734801
vt 0.849990 0.734561
vt 0.875000 0.724990
vt 0.875000 0.734303
vt 0.859303 0.750000
vt 0.849990 0.750000
vt 0.875000 0.739430
vt 0.390439 0.275010
vt 0.390199 0.265199
vt 0.400010 0.265439
vt 0.375000 0.275010
vt 0.375000 0.265697
vt 0.390697 0.250000
vt 0.400010 0.250000
vt 0.375000 0.260570
vt 0.599990 0.015439
vt 0.609801 0.015199
vt 0.609561 0.025010
vt 0.599990 0.000000
vt 0.609303 0.000000
vt 0.625000 0.015697
vt 0.625000 0.025010
vt 0.614430 0.000000
vt 0.650010 0.734561
vt 0.640199 0.734801
vt 0.640439 0.724990
vt 0.650010 0.750000
vt 0.640697 0.750000
vt 0.625000 0.734303
vt 0.625000 0.724990
vt 0.635570 0.750000
vt 0.609561 0.474990
vt 0.609801 0.484801
vt 0.599990 0.484561
vt 0.625000 0.474990
vt 0.625000 0.484303
vt 0.609303 0.500000
vt 0.599990 0.500000
vt 0.625000 0.489430
vt 0.400010 0.724990
vt 0.400010 0.734561
vt 0.390199 0.734801
vt 0.390439 0.724990
vt 0.400010 0.750000
vt 0.390697 0.750000
vt 0.375000 0.734303
vt 0.375000 0.724990
vt 0.385570 0.750000
vt 0.349990 0.515439
vt 0.359801 0.515199
vt 0.359561 0.525010
vt 0.349990 0.500000
vt 0.359303 0.500000
vt 0.375000 0.515697
vt 0.375000 0.525010
vt 0.364430 0.500000
vt 0.140439 0.525010
vt 0.140199 0.515199
vt 0.150010 0.515439
vt 0.125000 0.525010
vt 0.125000 0.515697
vt 0.140697 0.500000
vt 0.150010 0.500000
vt 0.125000 0.510570
vt 0.609561 0.224990
vt 0.609801 0.234801
vt 0.599990 0.234561
vt 0.625000 0.224990
vt 0.625000 0.234303
vt 0.609303 0.250000
vt 0.599990 0.250000
vt 0.625000 0.239430
vt 0.400010 0.484561
vt 0.390199 0.484801
vt 0.390439 0.474990
vt 0.400010 0.500000
vt 0.390697 0.500000
vt 0.375000 0.484303
vt 0.375000 0.474990
vt 0.385570 0.500000
vt 0.609561 0.974990
vt 0.609801 0.984801
vt 0.599990 0.984561
vt 0.625000 0.974990
vt 0.625000 0.984303
vt 0.609303 1.000000
vt 0.599990 1.000000
vt 0.625000 0.989430
vt 0.599990 0.525010
vt 0.599990 0.515439
vt 0.609801 0.515199
vt 0.609561 0.525010
vt 0.599990 0.500000
vt 0.609303 0.500000
vt 0.625000 0.515697
vt 0.625000 0.525010
vt 0.614430 0.500000
vt 0.849990 0.515439
vt 0.859801 0.515199
vt 0.859561 0.525010
vt 0.849990 0.500000
vt 0.859303 0.500000
vt 0.875000 0.515697
vt 0.875000 0.525010
vt 0.864430 0.500000
vt 0.640439 0.525010
vt 0.640199 0.515199
vt 0.650010 0.515439
vt 0.625000 0.525010
vt 0.625000 0.515697
vt 0.640697 0.500000
vt 0.650010 0.500000
vt 0.625000 0.510570
vt 0.390439 0.025010
vt 0.390199 0.015199
vt 0.400010 0.015439
vt 0.375000 0.025010
vt 0.375000 0.015697
vt 0.390697 0.000000
vt 0.400010 0.000000
vt 0.375000 0.010570
vt 0.400010 0.984561
vt 0.390199 0.984801
vt 0.390439 0.974990
vt 0.400010 1.000000
vt 0.390697 1.000000
vt 0.375000 0.984303
vt 0.375000 0.974990
vt 0.385570 1.000000
vt 0.599990 0.765439
vt 0.609801 0.765199
vt 0.609561 0.775010
vt 0.599990 0.750000
vt 0.609303 0.750000
vt 0.625000 0.765697
vt 0.625000 0.775010
vt 0.614430 0.750000
vt 0.359561 0.724990
vt 0.359801 0.734801
vt 0.349990 0.734561
vt 0.375000 0.724990
vt 0.375000 0.734303
vt 0.359303 0.750000
vt 0.349990 0.750000
vt 0.375000 0.739430
vt 0.599990 0.724990
vt 0.609561 0.724990
vt 0.609801 0.734801
vt 0.599990 0.734561
vt 0.625000 0.724990
vt 0.625000 0.734303
vt 0.609303 0.750000
vt 0.599990 0.750000
vt 0.625000 0.739430
vt 0.150010 0.734561
vt 0.140199 0.734801
vt 0.140439 0.724990
vt 0.150010 0.750000
vt 0.140697 0.750000
vt 0.125000 0.734303
vt 0.125000 0.724990
vt 0.135570 0.750000
vt 0.390439 0.775010
vt 0.390199 0.765199
vt 0.400010 0.765439
vt 0.375000 0.775010
vt 0.375000 0.765697
vt 0.390697 0.750000
vt 0.400010 0.750000
vt 0.375000 0.760570
vt 0.400010 0.234561
vt 0.390199 0.234801
vt 0.390439 0.224990
vt 0.400010 0.250000
vt 0.390697 0.250000
vt 0.375000 0.234303
vt 0.375000 0.224990
vt 0.385570 0.250000
vn 0.1004 -0.1004 0.9899
vn 0.1004 0.1004 0.9899
vn -0.1004 0.1004 0.9899
vn -0.1004 -0.1004 0.9899
vn -0.1004 -0.1004 -0.9899
vn -0.1004 0.1004 -0.9899
vn 0.1004 0.1004 -0.9899
vn 0.1004 -0.1004 -0.9899
vn 0.9899 -0.1004 -0.1004
vn 0.9899 0.1004 -0.1004
vn 0.9899 0.1004 0.1004
vn 0.9899 -0.1004 0.1004
vn -0.9899 -0.1004 0.1004
vn -0.9899 0.1004 0.1004
vn -0.9899 0.1004 -0.1004
vn -0.9899 -0.1004 -0.1004
vn -0.1004 -0.9899 -0.1004
vn 0.1004 -0.9899 -0.1004
vn 0.1004 -0.9899 0.1004
vn -0.1004 -0.9899 0.1004
vn 0.1004 0.9899 -0.1004
vn 0.3792 0.9201 -0.0981
vn 0.3673 0.8545 -0.3673
vn 0.0981 0.9201 -0.3792
vn 0.7041 0.7041 -0.0919
vn 0.6663 0.6663 -0.3347
vn 0.3347 0.6663 -0.6663
vn 0.0919 0.7041 -0.7041
vn 0.5774 0.5774 -0.5774
vn 0.9201 0.0981 -0.3792
vn 0.8545 0.3673 -0.3673
vn 0.9201 0.3792 -0.0981
vn 0.7041 0.0919 -0.7041
vn 0.6663 0.3347 -0.6663
vn 0.0981 0.3792 -0.9201
vn 0.3673 0.3673 -0.8545
vn 0.3792 0.0981 -0.9201
vn 0.9201 -0.3792 -0.0981
vn 0.8545 -0.3673 -0.3673
vn 0.9201 -0.0981 -0.3792
vn 0.7041 -0.7041 -0.0919
vn 0.6663 -0.6663 -0.3347
vn 0.6663 -0.3347 -0.6663
vn 0.7041 -0.0919 -0.7041
vn 0.5774 -0.5774 -0.5773
vn 0.0981 -0.9201 -0.3792
vn 0.3673 -0.8545 -0.3673
vn 0.3792 -0.9201 -0.0981
vn 0.0919 -0.7041 -0.7041
vn 0.3347 -0.6663 -0.6663
vn 0.3792 -0.0981 -0.9201
vn 0.3673 -0.3673 -0.8545
vn 0.0981 -0.3792 -0.9201
vn 0.9201 0.3792 0.0981
vn 0.8545 0.3673 0.3673
vn 0.9201 0.0981 0.3792
vn 0.7041 0.7041 0.0919
vn 0.6663 0.6663 0.3347
vn 0.6663 0.3347 0.6663
vn 0.7041 0.0919 0.7041
vn 0.5774 0.5774 0.5773
vn 0.1004 0.9899 0.1004
vn 0.0981 0.9201 0.3792
vn 0.3673 0.8545 0.3673
vn 0.3792 0.9201 0.0981
vn 0.0919 0.7041 0.7041
vn 0.3347 0.6663 0.6663
vn 0.3792 0.0981 0.9201
vn 0.3673 0.3673 0.8545
vn 0.0981 0.3792 0.9201
vn 0.0981 -0.3792 0.9201
vn 0.3673 -0.3673 0.8545
vn 0.3792 -0.0981 0.9201
vn 0.0919 -0.7041 0.7041
vn 0.3347 -0.6663 0.6663
vn 0.6663 -0.3347 0.6663
vn 0.7041 -0.0919 0.7041
vn 0.5773 -0.5774 0.5774
vn 0.3792 -0.9201 0.0981
vn 0.3673 -0.8545 0.3673
vn 0.0981 -0.9201 0.3792
vn 0.7041 -0.7041 0.0919
vn 0.6663 -0.6663 0.3347
vn 0.9201 -0.0981 0.3792
vn 0.8545 -0.3673 0.3673
vn 0.9201 -0.3792 0.0981
vn -0.9201 0.3792 -0.0981
vn -0.8545 0.3673 -0.3673
vn -0.9201 0.0981 -0.3792
vn -0.7041 0.7041 -0.0919
vn -0.6663 0.6663 -0.3347
vn -0.6663 0.3347 -0.6663
vn -0.7041 0.0919 -0.7041
vn -0.5774 0.5774 -0.5773
vn -0.1004 0.9899 -0.1004
vn -0.0981 0.9201 -0.3792
vn -0.3673 0.8545 -0.3673
vn -0.3792 0.9201 -0.0981
vn -0.0919 0.7041 -0.7041
vn -0.3347 0.6663 -0.6663
vn -0.3792 0.0981 -0.9201
vn -0.3673 0.3673 -0.8545
vn -0.0981 0.3792 -0.9201
vn -0.0981 -0.3792 -0.9201
vn -0.3673 -0.3673 -0.8545
vn -0.3792 -0.0981 -0.9201
vn -0.0919 -0.7041 -0.7041
vn -0.3347 -0.6663 -0.6663
vn -0.6663 -0.3347 -0.6663
vn -0.7041 -0.0919 -0.7041
vn -0.5773 -0.5774 -0.5774
vn -0.3792 -0.9201 -0.0981
vn -0.3673 -0.8545 -0.3673
vn -0.0981 -0.9201 -0.3792
vn -0.7041 -0.7041 -0.0919
vn -0.6663 -0.6663 -0.3347
vn -0.9201 -0.0981 -0.3792
vn -0.8545 -0.3673 -0.3673
vn -0.9201 -0.3792 -0.0981
vn -0.9201 0.0981 0.3792
vn -0.8545 0.3673 0.3673
vn -0.9201 0.3792 0.0981
vn -0.7041 0.0919 0.7041
vn -0.6663 0.3347 0.6663
vn -0.6663 0.6663 0.3347
vn -0.7041 0.7041 0.0919
vn -0.5774 0.5774 0.5773
vn -0.0981 0.3792 0.9201
vn -0.3673 0.3673 0.8545
vn -0.3792 0.0981 0.9201
vn -0.0919 0.7041 0.7041
vn -0.3347 0.6663 0.6663
vn -0.1004 0.9899 0.1004
vn -0.3792 0.9201 0.0981
vn -0.3673 0.8545 0.3673
vn -0.0981 0.9201 0.3792
vn -0.3792 -0.0981 0.9201
vn -0.3673 -0.3673 0.8545
vn -0.0981 -0.3792 0.9201
vn -0.7041 -0.0919 0.7041
vn -0.6663 -0.3347 0.6663
vn -0.3347 -0.6663 0.6663
vn -0.0919 -0.7041 0.7041
vn -0.5774 -0.5774 0.5773
vn -0.9201 -0.3792 0.0981
vn -0.8545 -0.3673 0.3673
vn -0.9201 -0.0981 0.3792
vn -0.7041 -0.7041 0.0919
vn -0.6663 -0.6663 0.3347
vn -0.0981 -0.9201 0.3792
vn -0.3673 -0.8545 0.3673
vn -0.3792 -0.9201 0.0981
s 1
f 58/1/1 41/2/2 116/3/3 134/4/4
f 96/5/5 79/6/6 3/7/7 22/8/8
f 20/9/9 2/10/10 39/11/11 60/12/12
f 135/13/13 115/14/14 77/15/15 98/16/16
f 97/17/17 21/18/18 59/19/19 136/20/20
f 1/21/21 4/22/22 7/23/23 6/24/24
f 4/22/22 5/25/25 8/26/26 7/23/23
f 6/24/24 7/23/23 19/27/27 16/28/28
f 7/23/23 8/26/26 9/29/29 19/27/27
f 2/10/10 10/30/30 13/31/31 12/32/32
f 10/30/30 11/33/33 14/34/34 13/31/31
f 12/32/32 13/31/31 8/35/26 5/36/25
f 13/31/31 14/34/34 9/37/29 8/35/26
f 3/7/7 15/38/35 18/39/36 17/40/37
f 15/38/35 16/41/28 19/42/27 18/39/36
f 17/40/37 18/39/36 14/43/34 11/44/33
f 18/39/36 19/42/27 9/45/29 14/43/34
f 20/9/9 23/46/38 26/47/39 25/48/40
f 23/46/38 24/49/41 27/50/42 26/47/39
f 25/48/40 26/47/39 38/51/43 35/52/44
f 26/47/39 27/50/42 28/53/45 38/51/43
f 21/18/18 29/54/46 32/55/47 31/56/48
f 29/54/46 30/57/49 33/58/50 32/55/47
f 31/56/48 32/55/47 27/59/42 24/60/41
f 32/55/47 33/58/50 28/61/45 27/59/42
f 22/8/8 34/62/51 37/63/52 36/64/53
f 34/62/51 35/65/44 38/66/43 37/63/52
f 36/64/53 37/63/52 33/67/50 30/68/49
f 37/63/52 38/66/43 28/69/45 33/67/50
f 39/11/11 42/70/54 45/71/55 44/72/56
f 42/70/54 43/73/57 46/74/58 45/71/55
f 44/72/56 45/71/55 57/75/59 54/76/60
f 45/71/55 46/74/58 47/77/61 57/75/59
f 40/78/62 48/79/63 51/80/64 50/81/65
f 48/79/63 49/82/66 52/83/67 51/80/64
f 50/81/65 51/80/64 46/84/58 43/85/57
f 51/80/64 52/83/67 47/86/61 46/84/58
f 41/2/2 53/87/68 56/88/69 55/89/70
f 53/87/68 54/90/60 57/91/59 56/88/69
f 55/89/70 56/88/69 52/92/67 49/93/66
f 56/88/69 57/91/59 47/94/61 52/92/67
f 58/1/1 61/95/71 64/96/72 63/97/73
f 61/95/71 62/98/74 65/99/75 64/96/72
f 63/97/73 64/96/72 76/100/76 73/101/77
f 64/96/72 65/99/75 66/102/78 76/100/76
f 59/19/19 67/103/79 70/104/80 69/105/81
f 67/103/79 68/106/82 71/107/83 70/104/80
f 69/105/81 70/104/80 65/108/75 62/109/74
f 70/104/80 71/107/83 66/110/78 65/108/75
f 60/12/12 72/111/84 75/112/85 74/113/86
f 72/111/84 73/114/77 76/115/76 75/112/85
f 74/113/86 75/112/85 71/116/83 68/117/82
f 75/112/85 76/115/76 66/118/78 71/116/83
f 77/15/15 80/119/87 83/120/88 82/121/89
f 80/119/87 81/122/90 84/123/91 83/120/88
f 82/121/89 83/120/88 95/124/92 92/125/93
f 83/120/88 84/123/91 85/126/94 95/124/92
f 78/127/95 86/128/96 89/129/97 88/130/98
f 86/128/96 87/131/99 90/132/100 89/129/97
f 88/130/98 89/129/97 84/133/91 81/134/90
f 89/129/97 90/132/100 85/135/94 84/133/91
f 79/6/6 91/136/101 94/137/102 93/138/103
f 91/136/101 92/139/93 95/140/92 94/137/102
f 93/138/103 94/137/102 90/141/100 87/142/99
f 94/137/102 95/140/92 85/143/94 90/141/100
f 96/5/5 99/144/104 102/145/105 101/146/106
f 99/144/104 100/147/107 103/148/108 102/145/105
f 101/146/106 102/145/105 114/149/109 111/150/110
f 102/145/105 103/148/108 104/151/111 114/149/109
f 97/17/17 105/152/112 108/153/113 107/154/114
f 105/152/112 106/155/115 109/156/116 108/153/113
f 107/154/114 108/153/113 103/157/108 100/158/107
f 108/153/113 109/156/116 104/159/111 103/157/108
f 98/16/16 110/160/117 113/161/118 112/162/119
f 110/160/117 111/163/110 114/164/109 113/161/118
f 112/162/119 113/161/118 109/165/116 106/166/115
f 113/161/118 114/164/109 104/167/111 109/165/116
f 115/14/14 118/168/120 121/169/121 120/170/122
f 118/168/120 119/171/123 122/172/124 121/169/121
f 120/170/122 121/169/121 133/173/125 130/174/126
f 121/169/121 122/172/124 123/175/127 133/173/125
f 116/3/3 124/176/128 127/177/129 126/178/130
f 124/176/128 125/179/131 128/180/132 127/177/129
f 126/178/130 127/177/129 122/181/124 119/182/123
f 127/177/129 128/180/132 123/183/127 122/181/124
f 117/184/133 129/185/134 132/186/135 131/187/136
f 129/185/134 130/188/126 133/189/125 132/186/135
f 131/187/136 132/186/135 128/190/132 125/191/131
f 132/186/135 133/189/125 123/192/127 128/190/132
f 134/4/4 137/193/137 140/194/138 139/195/139
f 137/193/137 138/196/140 141/197/141 140/194/138
f 139/195/139 140/194/138 152/198/142 149/199/143
f 140/194/138 141/197/141 142/200/144 152/198/142
f 135/13/13 143/201/145 146/202/146 145/203/147
f 143/201/145 144/204/148 147/205/149 146/202/146
f 145/203/147 146/202/146 141/206/141 138/207/140
f 146/202/146 147/205/149 142/208/144 141/206/141
f 136/20/20 148/209/150 151/210/151 150/211/152
f 148/209/150 149/212/143 152/213/142 151/210/151
f 150/211/152 151/210/151 147/214/149 144/215/148
f 151/210/151 152/213/142 142/216/144 147/214/149
f 136/20/20 59/19/19 69/105/81 148/209/150
f 148/209/150 69/105/81 62/109/74 149/212/143
f 149/199/143 62/98/74 61/95/71 139/195/139
f 139/195/139 61/95/71 58/1/1 134/4/4
f 59/19/19 21/18/18 31/56/48 67/103/79
f 67/103/79 31/56/48 24/60/41 68/106/82
f 68/117/82 24/49/41 23/46/38 74/113/86
f 74/113/86 23/46/38 20/9/9 60/12/12
f 1/21/21 40/78/62 50/81/65 4/22/22
f 4/22/22 50/81/65 43/85/57 5/25/25
f 5/36/25 43/73/57 42/70/54 12/32/32
f 12/32/32 42/70/54 39/11/11 2/10/10
f 21/18/18 97/17/17 107/154/114 29/54/46
f 29/54/46 107/154/114 100/158/107 30/57/49
f 30/68/49 100/147/107 99/144/104 36/64/53
f 36/64/53 99/144/104 96/5/5 22/8/8
f 117/184/133 78/127/95 88/130/98 129/185/134
f 129/185/134 88/130/98 81/134/90 130/188/126
f 130/174/126 81/122/90 80/119/87 120/170/122
f 120/170/122 80/119/87 77/15/15 115/14/14
f 97/17/17 136/20/20 150/211/152 105/152/112
f 105/152/112 150/211/152 144/215/148 106/155/115
f 106/166/115 144/204/148 143/201/145 112/162/119
f 112/162/119 143/201/145 135/13/13 98/16/16
f 40/78/62 117/184/133 131/187/136 48/79/63
f 48/79/63 131/187/136 125/191/131 49/82/66
f 49/93/66 125/179/131 124/176/128 55/89/70
f 55/89/70 124/176/128 116/3/3 41/2/2
f 41/2/2 58/1/1 63/97/73 53/87/68
f 53/87/68 63/97/73 73/101/77 54/90/60
f 54/76/60 73/114/77 72/111/84 44/72/56
f 44/72/56 72/111/84 60/12/12 39/11/11
f 2/10/10 20/9/9 25/48/40 10/30/30
f 10/30/30 25/48/40 35/52/44 11/33/33
f 11/44/33 35/65/44 34/62/51 17/40/37
f 17/40/37 34/62/51 22/8/8 3/7/7
f 134/4/4 116/3/3 126/178/130 137/193/137
f 137/193/137 126/178/130 119/182/123 138/196/140
f 138/207/140 119/171/123 118/168/120 145/203/147
f 145/203/147 118/168/120 115/14/14 135/13/13
f 78/127/95 1/21/21 6/24/24 86/128/96
f 86/128/96 6/24/24 16/28/28 87/131/99
f 87/142/99 16/41/28 15/38/35 93/138/103
f 93/138/103 15/38/35 3/7/7 79/6/6
f 79/6/6 96/5/5 101/146/106 91/136/101
f 91/136/101 101/146/106 111/150/110 92/139/93
f 92/125/93 111/163/110 110/160/117 82/121/89
f 82/121/89 110/160/117 98/16/16 77/15/15
f 1/21/21 78/127/95 117/184/133 40/78/62

View File

@@ -0,0 +1,455 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c000001.mtl
o Cube_Cube.002
v -0.399961 0.399961 0.500000
v -0.399961 -0.399961 0.500000
v 0.499961 -0.399961 0.500000
v 0.499961 0.399961 0.500000
v 0.499961 0.399961 -0.500000
v 0.499961 -0.399961 -0.500000
v -0.399961 -0.399961 -0.500000
v -0.399961 0.399961 -0.500000
v -0.500000 0.399961 -0.399961
v -0.500000 -0.399961 -0.399961
v -0.500000 -0.399961 0.399961
v -0.500000 0.399961 0.399961
v 0.499961 0.500000 -0.399961
v -0.399961 0.500000 -0.399961
v -0.399961 0.500000 0.399961
v 0.499961 0.500000 0.399961
v -0.399961 -0.500000 -0.399961
v -0.438244 -0.492385 -0.399961
v -0.439203 -0.483194 -0.439203
v -0.399961 -0.492385 -0.438244
v -0.470699 -0.470699 -0.399961
v -0.465612 -0.465612 -0.437212
v -0.437212 -0.465612 -0.465612
v -0.399961 -0.470699 -0.470699
v -0.457718 -0.457718 -0.457718
v -0.492385 -0.399961 -0.438244
v -0.483194 -0.439203 -0.439203
v -0.492385 -0.438244 -0.399961
v -0.470699 -0.399961 -0.470699
v -0.465612 -0.437212 -0.465612
v -0.399961 -0.438244 -0.492385
v -0.439203 -0.439203 -0.483194
v -0.438244 -0.399961 -0.492385
v -0.492385 0.438244 -0.399961
v -0.483194 0.439203 -0.439203
v -0.492385 0.399961 -0.438244
v -0.470699 0.470699 -0.399961
v -0.465612 0.465612 -0.437212
v -0.465612 0.437212 -0.465612
v -0.470699 0.399961 -0.470699
v -0.457718 0.457718 -0.457718
v -0.399961 0.492385 -0.438244
v -0.439203 0.483194 -0.439203
v -0.438244 0.492385 -0.399961
v -0.399961 0.470699 -0.470699
v -0.437212 0.465612 -0.465612
v -0.438244 0.399961 -0.492385
v -0.439203 0.439203 -0.483194
v -0.399961 0.438244 -0.492385
v -0.492385 -0.438244 0.399961
v -0.483194 -0.439203 0.439203
v -0.492385 -0.399961 0.438244
v -0.470699 -0.470699 0.399961
v -0.465612 -0.465612 0.437212
v -0.465612 -0.437212 0.465612
v -0.470699 -0.399961 0.470699
v -0.457718 -0.457718 0.457718
v -0.399961 -0.500000 0.399961
v -0.399961 -0.492385 0.438244
v -0.439203 -0.483194 0.439203
v -0.438244 -0.492385 0.399961
v -0.399961 -0.470699 0.470699
v -0.437212 -0.465612 0.465612
v -0.438244 -0.399961 0.492385
v -0.439203 -0.439203 0.483194
v -0.399961 -0.438244 0.492385
v -0.399961 0.438244 0.492385
v -0.439203 0.439203 0.483194
v -0.438244 0.399961 0.492385
v -0.399961 0.470699 0.470699
v -0.437212 0.465612 0.465612
v -0.465612 0.437212 0.465612
v -0.470699 0.399961 0.470699
v -0.457718 0.457718 0.457718
v -0.438244 0.492385 0.399961
v -0.439203 0.483194 0.439203
v -0.399961 0.492385 0.438244
v -0.470699 0.470699 0.399961
v -0.465612 0.465612 0.437212
v -0.492385 0.399961 0.438244
v -0.483194 0.439203 0.439203
v -0.492385 0.438244 0.399961
v 0.499961 -0.500000 -0.399961
v 0.499961 -0.492385 -0.438244
v 0.499961 -0.470699 -0.470699
v 0.499961 -0.438244 -0.492385
v 0.499961 0.438244 -0.492385
v 0.499961 0.470699 -0.470699
v 0.499961 0.492385 -0.438244
v 0.499961 -0.438244 0.492385
v 0.499961 -0.470699 0.470699
v 0.499961 -0.500000 0.399961
v 0.499961 -0.492385 0.438244
v 0.499961 0.438244 0.492385
v 0.499961 0.470699 0.470699
v 0.499961 0.492385 0.438244
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.650010 0.525010
vt 0.849990 0.525010
vt 0.849990 0.724990
vt 0.650010 0.724990
vt 0.400010 0.275010
vt 0.599990 0.275010
vt 0.599990 0.474990
vt 0.400010 0.474990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.400010 0.525010
vt 0.390439 0.525010
vt 0.390199 0.515199
vt 0.400010 0.515439
vt 0.375000 0.525010
vt 0.375000 0.515697
vt 0.390697 0.500000
vt 0.400010 0.500000
vt 0.375000 0.510570
vt 0.599990 0.265439
vt 0.609801 0.265199
vt 0.609561 0.275010
vt 0.599990 0.250000
vt 0.609303 0.250000
vt 0.625000 0.265697
vt 0.625000 0.275010
vt 0.614430 0.250000
vt 0.859561 0.724990
vt 0.859801 0.734801
vt 0.849990 0.734561
vt 0.875000 0.724990
vt 0.875000 0.734303
vt 0.859303 0.750000
vt 0.849990 0.750000
vt 0.875000 0.739430
vt 0.390439 0.275010
vt 0.390199 0.265199
vt 0.400010 0.265439
vt 0.375000 0.275010
vt 0.375000 0.265697
vt 0.390697 0.250000
vt 0.400010 0.250000
vt 0.375000 0.260570
vt 0.599990 0.015439
vt 0.609801 0.015199
vt 0.609561 0.025010
vt 0.599990 0.000000
vt 0.609303 0.000000
vt 0.625000 0.015697
vt 0.625000 0.025010
vt 0.614430 0.000000
vt 0.650010 0.734561
vt 0.640199 0.734801
vt 0.640439 0.724990
vt 0.650010 0.750000
vt 0.640697 0.750000
vt 0.625000 0.734303
vt 0.625000 0.724990
vt 0.635570 0.750000
vt 0.609561 0.474990
vt 0.609801 0.484801
vt 0.599990 0.484561
vt 0.625000 0.474990
vt 0.625000 0.484303
vt 0.609303 0.500000
vt 0.599990 0.500000
vt 0.625000 0.489430
vt 0.400010 0.724990
vt 0.400010 0.734561
vt 0.390199 0.734801
vt 0.390439 0.724990
vt 0.400010 0.750000
vt 0.390697 0.750000
vt 0.375000 0.734303
vt 0.375000 0.724990
vt 0.385570 0.750000
vt 0.349990 0.515439
vt 0.359801 0.515199
vt 0.359561 0.525010
vt 0.349990 0.500000
vt 0.359303 0.500000
vt 0.375000 0.515697
vt 0.375000 0.525010
vt 0.364430 0.500000
vt 0.140439 0.525010
vt 0.140199 0.515199
vt 0.150010 0.515439
vt 0.125000 0.525010
vt 0.125000 0.515697
vt 0.140697 0.500000
vt 0.150010 0.500000
vt 0.125000 0.510570
vt 0.609561 0.224990
vt 0.609801 0.234801
vt 0.599990 0.234561
vt 0.625000 0.224990
vt 0.625000 0.234303
vt 0.609303 0.250000
vt 0.599990 0.250000
vt 0.625000 0.239430
vt 0.400010 0.484561
vt 0.390199 0.484801
vt 0.390439 0.474990
vt 0.400010 0.500000
vt 0.390697 0.500000
vt 0.375000 0.484303
vt 0.375000 0.474990
vt 0.385570 0.500000
vt 0.400010 0.234561
vt 0.400010 0.250000
vt 0.125000 0.724990
vt 0.140439 0.724990
vt 0.400010 0.015439
vt 0.400010 0.000000
vt 0.625000 0.525010
vt 0.640439 0.525010
vt 0.599990 0.724990
vt 0.599990 0.734561
vt 0.599990 0.750000
vt 0.375000 0.724990
vt 0.359561 0.724990
vt 0.599990 0.525010
vt 0.599990 0.515439
vt 0.599990 0.500000
vt 0.875000 0.525010
vt 0.859561 0.525010
vn 1.0000 0.0000 0.0000
vn -0.1004 0.1004 0.9899
vn -0.1004 -0.1004 0.9899
vn 0.0000 -0.0980 0.9952
vn -0.0000 0.0980 0.9952
vn 0.0000 0.0980 -0.9952
vn 0.0000 -0.0980 -0.9952
vn -0.1004 -0.1004 -0.9899
vn -0.1004 0.1004 -0.9899
vn -0.9899 0.1004 -0.1004
vn -0.9899 -0.1004 -0.1004
vn -0.9899 -0.1004 0.1004
vn -0.9899 0.1004 0.1004
vn 0.0000 0.9952 -0.0980
vn -0.1004 0.9899 -0.1004
vn -0.1004 0.9899 0.1004
vn 0.0000 0.9952 0.0980
vn -0.1004 -0.9899 -0.1004
vn -0.3792 -0.9201 -0.0981
vn -0.3673 -0.8545 -0.3673
vn -0.0981 -0.9201 -0.3792
vn -0.7041 -0.7041 -0.0919
vn -0.6663 -0.6663 -0.3347
vn -0.3347 -0.6663 -0.6663
vn -0.0919 -0.7041 -0.7041
vn -0.5774 -0.5774 -0.5773
vn -0.9201 -0.0981 -0.3792
vn -0.8545 -0.3673 -0.3673
vn -0.9201 -0.3792 -0.0981
vn -0.7041 -0.0919 -0.7041
vn -0.6663 -0.3347 -0.6663
vn -0.0981 -0.3792 -0.9201
vn -0.3673 -0.3673 -0.8545
vn -0.3792 -0.0981 -0.9201
vn -0.9201 0.3792 -0.0981
vn -0.8545 0.3673 -0.3673
vn -0.9201 0.0981 -0.3792
vn -0.7041 0.7041 -0.0919
vn -0.6663 0.6663 -0.3347
vn -0.6663 0.3347 -0.6663
vn -0.7041 0.0919 -0.7041
vn -0.5774 0.5774 -0.5773
vn -0.0981 0.9201 -0.3792
vn -0.3673 0.8545 -0.3673
vn -0.3792 0.9201 -0.0981
vn -0.0919 0.7041 -0.7041
vn -0.3347 0.6663 -0.6663
vn -0.3792 0.0981 -0.9201
vn -0.3673 0.3673 -0.8545
vn -0.0981 0.3792 -0.9201
vn -0.9201 -0.3792 0.0981
vn -0.8545 -0.3673 0.3673
vn -0.9201 -0.0981 0.3792
vn -0.7041 -0.7041 0.0919
vn -0.6663 -0.6663 0.3347
vn -0.6663 -0.3347 0.6663
vn -0.7041 -0.0919 0.7041
vn -0.5774 -0.5774 0.5773
vn -0.1004 -0.9899 0.1004
vn -0.0981 -0.9201 0.3792
vn -0.3673 -0.8545 0.3673
vn -0.3792 -0.9201 0.0981
vn -0.0919 -0.7041 0.7041
vn -0.3347 -0.6663 0.6663
vn -0.3792 -0.0981 0.9201
vn -0.3673 -0.3673 0.8545
vn -0.0981 -0.3792 0.9201
vn -0.0981 0.3792 0.9201
vn -0.3673 0.3673 0.8545
vn -0.3792 0.0981 0.9201
vn -0.0919 0.7041 0.7041
vn -0.3347 0.6663 0.6663
vn -0.6663 0.3347 0.6663
vn -0.7041 0.0919 0.7041
vn -0.5774 0.5774 0.5773
vn -0.3792 0.9201 0.0981
vn -0.3673 0.8545 0.3673
vn -0.0981 0.9201 0.3792
vn -0.7041 0.7041 0.0919
vn -0.6663 0.6663 0.3347
vn -0.9201 0.0981 0.3792
vn -0.8545 0.3673 0.3673
vn -0.9201 0.3792 0.0981
vn 0.0000 0.9239 0.3827
vn 0.0000 0.7071 0.7071
vn 0.0000 0.3827 0.9239
vn 0.0000 0.9239 -0.3827
vn 0.0000 0.7071 -0.7071
vn 0.0000 0.3827 -0.9239
vn -0.0000 -0.9952 0.0980
vn -0.0000 -0.9239 0.3827
vn -0.0000 -0.7071 0.7071
vn -0.0000 -0.3827 0.9239
vn -0.0000 -0.9952 -0.0980
vn -0.0000 -0.9239 -0.3827
vn -0.0000 -0.7071 -0.7071
vn -0.0000 -0.3827 -0.9239
usemtl Default_OBJ
s off
f 93/1/1 92/2/1 91/3/1
f 4/4/1 16/5/1 95/6/1
f 6/7/1 83/8/1 85/9/1
f 13/10/1 5/11/1 88/12/1
f 3/13/1 16/5/1 4/4/1
f 16/5/1 96/14/1 95/6/1
f 3/13/1 90/15/1 91/3/1
f 5/11/1 13/10/1 92/2/1
f 16/5/1 3/13/1 13/10/1
f 83/8/1 5/11/1 92/2/1
f 5/11/1 87/16/1 88/12/1
f 95/6/1 94/17/1 4/4/1
f 92/2/1 3/13/1 91/3/1
f 5/11/1 83/8/1 6/7/1
f 3/13/1 92/2/1 13/10/1
f 85/9/1 86/18/1 6/7/1
f 89/19/1 13/10/1 88/12/1
f 83/8/1 84/20/1 85/9/1
s 1
f 1/21/2 2/22/3 3/23/4 4/24/5
f 5/25/6 6/26/7 7/27/8 8/28/9
f 9/29/10 10/30/11 11/31/12 12/32/13
f 13/33/14 14/34/15 15/35/16 16/36/17
f 17/37/18 18/38/19 19/39/20 20/40/21
f 18/38/19 21/41/22 22/42/23 19/39/20
f 20/40/21 19/39/20 23/43/24 24/44/25
f 19/39/20 22/42/23 25/45/26 23/43/24
f 10/30/11 26/46/27 27/47/28 28/48/29
f 26/46/27 29/49/30 30/50/31 27/47/28
f 28/48/29 27/47/28 22/51/23 21/52/22
f 27/47/28 30/50/31 25/53/26 22/51/23
f 7/27/8 31/54/32 32/55/33 33/56/34
f 31/54/32 24/57/25 23/58/24 32/55/33
f 33/56/34 32/55/33 30/59/31 29/60/30
f 32/55/33 23/58/24 25/61/26 30/59/31
f 9/29/10 34/62/35 35/63/36 36/64/37
f 34/62/35 37/65/38 38/66/39 35/63/36
f 36/64/37 35/63/36 39/67/40 40/68/41
f 35/63/36 38/66/39 41/69/42 39/67/40
f 14/34/15 42/70/43 43/71/44 44/72/45
f 42/70/43 45/73/46 46/74/47 43/71/44
f 44/72/45 43/71/44 38/75/39 37/76/38
f 43/71/44 46/74/47 41/77/42 38/75/39
f 8/28/9 47/78/48 48/79/49 49/80/50
f 47/78/48 40/81/41 39/82/40 48/79/49
f 49/80/50 48/79/49 46/83/47 45/84/46
f 48/79/49 39/82/40 41/85/42 46/83/47
f 11/31/12 50/86/51 51/87/52 52/88/53
f 50/86/51 53/89/54 54/90/55 51/87/52
f 52/88/53 51/87/52 55/91/56 56/92/57
f 51/87/52 54/90/55 57/93/58 55/91/56
f 58/94/59 59/95/60 60/96/61 61/97/62
f 59/95/60 62/98/63 63/99/64 60/96/61
f 61/97/62 60/96/61 54/100/55 53/101/54
f 60/96/61 63/99/64 57/102/58 54/100/55
f 2/22/3 64/103/65 65/104/66 66/105/67
f 64/103/65 56/106/57 55/107/56 65/104/66
f 66/105/67 65/104/66 63/108/64 62/109/63
f 65/104/66 55/107/56 57/110/58 63/108/64
f 1/21/2 67/111/68 68/112/69 69/113/70
f 67/111/68 70/114/71 71/115/72 68/112/69
f 69/113/70 68/112/69 72/116/73 73/117/74
f 68/112/69 71/115/72 74/118/75 72/116/73
f 15/35/16 75/119/76 76/120/77 77/121/78
f 75/119/76 78/122/79 79/123/80 76/120/77
f 77/121/78 76/120/77 71/124/72 70/125/71
f 76/120/77 79/123/80 74/126/75 71/124/72
f 12/32/13 80/127/81 81/128/82 82/129/83
f 80/127/81 73/130/74 72/131/73 81/128/82
f 82/129/83 81/128/82 79/132/80 78/133/79
f 81/128/82 72/131/73 74/134/75 79/132/80
f 16/36/17 15/35/16 77/121/78 96/135/84
f 96/135/84 77/121/78 70/125/71 95/136/85
f 95/137/85 70/114/71 67/111/68 94/138/86
f 94/138/86 67/111/68 1/21/2 4/24/5
f 15/35/16 14/34/15 44/72/45 75/119/76
f 75/119/76 44/72/45 37/76/38 78/122/79
f 78/133/79 37/65/38 34/62/35 82/129/83
f 82/129/83 34/62/35 9/29/10 12/32/13
f 17/37/18 58/94/59 61/97/62 18/38/19
f 18/38/19 61/97/62 53/101/54 21/41/22
f 21/52/22 53/89/54 50/86/51 28/48/29
f 28/48/29 50/86/51 11/31/12 10/30/11
f 14/34/15 13/33/14 89/139/87 42/70/43
f 42/70/43 89/139/87 88/140/88 45/73/46
f 45/84/46 88/141/88 87/142/89 49/80/50
f 49/80/50 87/142/89 5/25/6 8/28/9
f 58/94/59 92/143/90 93/144/91 59/95/60
f 59/95/60 93/144/91 91/145/92 62/98/63
f 62/109/63 91/146/92 90/147/93 66/105/67
f 66/105/67 90/147/93 3/23/4 2/22/3
f 2/22/3 1/21/2 69/113/70 64/103/65
f 64/103/65 69/113/70 73/117/74 56/106/57
f 56/92/57 73/130/74 80/127/81 52/88/53
f 52/88/53 80/127/81 12/32/13 11/31/12
f 10/30/11 9/29/10 36/64/37 26/46/27
f 26/46/27 36/64/37 40/68/41 29/49/30
f 29/60/30 40/81/41 47/78/48 33/56/34
f 33/56/34 47/78/48 8/28/9 7/27/8
f 83/148/94 17/37/18 20/40/21 84/149/95
f 84/149/95 20/40/21 24/44/25 85/150/96
f 85/151/96 24/57/25 31/54/32 86/152/97
f 86/152/97 31/54/32 7/27/8 6/26/7
f 17/37/18 83/148/94 92/143/90 58/94/59

View File

@@ -0,0 +1,301 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c000011.mtl
o Cube_Cube.003
v 0.495579 0.504344 -0.499961
v 0.495579 0.504344 0.399961
v 0.504305 -0.495618 0.399961
v 0.503432 -0.395583 0.500000
v 0.504049 -0.466318 0.470699
v 0.503766 -0.433864 0.492385
v 0.504239 -0.488003 0.438244
v 0.496118 0.442590 0.492385
v 0.496452 0.404309 0.500000
v 0.495834 0.475044 0.470699
v 0.495645 0.496729 0.438244
v 0.504305 -0.495618 -0.499961
v -0.395583 -0.503471 -0.499961
v -0.433931 -0.496191 -0.499961
v -0.466574 -0.474789 -0.499961
v -0.404309 0.496491 -0.499961
v -0.503471 0.395583 -0.499961
v -0.474789 0.466574 -0.499961
v -0.496491 -0.404309 -0.499961
v -0.488542 -0.442524 -0.499961
v -0.442524 0.488542 -0.499961
v -0.496190 0.433931 -0.499961
v -0.496491 -0.404309 0.399961
v -0.503471 0.395583 0.399961
v -0.403436 0.396456 0.500000
v -0.396456 -0.403436 0.500000
v -0.404309 0.496491 0.399961
v -0.434737 -0.403770 0.492385
v -0.435354 -0.443019 0.483194
v -0.396122 -0.441717 0.492385
v -0.467191 -0.404053 0.470699
v -0.461779 -0.441258 0.465612
v -0.433132 -0.469410 0.465612
v -0.395838 -0.474171 0.470699
v -0.453706 -0.461695 0.457718
v -0.488542 -0.442524 0.399961
v -0.479343 -0.443403 0.439203
v -0.488876 -0.404242 0.438244
v -0.466574 -0.474789 0.399961
v -0.461531 -0.469657 0.437212
v -0.395583 -0.503471 0.399961
v -0.395649 -0.495856 0.438244
v -0.434970 -0.487008 0.439203
v -0.433931 -0.496191 0.399961
v -0.495856 0.395649 0.438244
v -0.487008 0.434970 0.439203
v -0.496191 0.433931 0.399961
v -0.474171 0.395838 0.470699
v -0.469410 0.433132 0.465612
v -0.469657 0.461531 0.437212
v -0.474789 0.466574 0.399961
v -0.461695 0.453706 0.457718
v -0.403770 0.434737 0.492385
v -0.443019 0.435354 0.483194
v -0.441718 0.396122 0.492385
v -0.404053 0.467191 0.470699
v -0.441258 0.461779 0.465612
v -0.442524 0.488542 0.399961
v -0.443403 0.479343 0.439203
v -0.404243 0.488876 0.438244
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.400010 0.775010
vt 0.599990 0.775010
vt 0.599990 0.974990
vt 0.400010 0.974990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.599990 0.765439
vt 0.609801 0.765199
vt 0.609561 0.775010
vt 0.599990 0.750000
vt 0.609303 0.750000
vt 0.625000 0.765697
vt 0.625000 0.775010
vt 0.614430 0.750000
vt 0.359561 0.724990
vt 0.359801 0.734801
vt 0.349990 0.734561
vt 0.375000 0.724990
vt 0.375000 0.734303
vt 0.359303 0.750000
vt 0.349990 0.750000
vt 0.375000 0.739430
vt 0.599990 0.724990
vt 0.609561 0.724990
vt 0.609801 0.734801
vt 0.599990 0.734561
vt 0.625000 0.724990
vt 0.625000 0.734303
vt 0.609303 0.750000
vt 0.599990 0.750000
vt 0.625000 0.739430
vt 0.150010 0.734561
vt 0.140199 0.734801
vt 0.140439 0.724990
vt 0.150010 0.750000
vt 0.140697 0.750000
vt 0.125000 0.734303
vt 0.125000 0.724990
vt 0.135570 0.750000
vt 0.390439 0.775010
vt 0.390199 0.765199
vt 0.400010 0.765439
vt 0.375000 0.775010
vt 0.375000 0.765697
vt 0.390697 0.750000
vt 0.400010 0.750000
vt 0.375000 0.760570
vt 0.400010 0.234561
vt 0.390199 0.234801
vt 0.390439 0.224990
vt 0.400010 0.250000
vt 0.390697 0.250000
vt 0.375000 0.234303
vt 0.375000 0.224990
vt 0.385570 0.250000
vt 0.599990 0.234561
vt 0.599990 0.250000
vt 0.125000 0.525010
vt 0.140439 0.525010
vt 0.599990 0.525010
vt 0.609561 0.525010
vt 0.625000 0.525010
vt 0.625000 0.974990
vt 0.609561 0.974990
vt 0.390439 0.025010
vt 0.375000 0.025010
vt 0.375000 0.974990
vt 0.390439 0.974990
vt 0.400010 0.724990
vt 0.400010 0.734561
vt 0.400010 0.750000
vt 0.375000 0.525010
vt 0.359561 0.525010
vt 0.400010 0.525010
vn 1.0000 0.0087 -0.0000
vn 1.0000 0.0088 -0.0000
vn 1.0000 0.0087 -0.0001
vn 0.0000 0.0000 -1.0000
vn -0.9960 0.0893 -0.0000
vn -0.9943 -0.1067 0.0000
vn -0.9890 -0.1090 0.1004
vn -0.9907 0.0917 0.1004
vn -0.1013 0.0995 0.9899
vn -0.0995 -0.1013 0.9899
vn 0.0009 -0.0980 0.9952
vn -0.0009 0.0980 0.9952
vn -0.0087 0.9951 0.0980
vn -0.0087 1.0000 -0.0000
vn -0.1067 0.9943 -0.0000
vn -0.1090 0.9890 0.1004
vn -0.3783 -0.1014 0.9201
vn -0.3641 -0.3705 0.8545
vn -0.0948 -0.3801 0.9201
vn -0.7033 -0.0981 0.7041
vn -0.6634 -0.3405 0.6663
vn -0.3289 -0.6692 0.6663
vn -0.0858 -0.7049 0.7041
vn -0.5723 -0.5824 0.5773
vn -0.9167 -0.3872 0.0981
vn -0.8512 -0.3748 0.3674
vn -0.9192 -0.1062 0.3792
vn -0.6979 -0.7102 0.0919
vn -0.6605 -0.6721 0.3347
vn -0.0917 -0.9907 0.1004
vn -0.0901 -0.9209 0.3792
vn -0.3599 -0.8576 0.3674
vn -0.3712 -0.9234 0.0982
vn -0.9209 0.0901 0.3792
vn -0.8576 0.3599 0.3674
vn -0.9234 0.3712 0.0982
vn -0.7049 0.0858 0.7041
vn -0.6692 0.3289 0.6663
vn -0.6721 0.6605 0.3347
vn -0.7102 0.6979 0.0919
vn -0.5824 0.5723 0.5773
vn -0.1014 0.3783 0.9201
vn -0.3705 0.3641 0.8545
vn -0.3801 0.0948 0.9201
vn -0.0981 0.7033 0.7041
vn -0.3405 0.6634 0.6663
vn -0.3872 0.9167 0.0981
vn -0.3748 0.8512 0.3674
vn -0.1062 0.9192 0.3792
vn -0.3907 0.9205 -0.0000
vn -0.7132 0.7009 -0.0000
vn -0.9272 0.3746 -0.0000
vn 0.0087 -0.9951 0.0980
vn 0.0081 -0.9238 0.3827
vn 0.0062 -0.7071 0.7071
vn 0.0033 -0.3827 0.9239
vn -0.0081 0.9238 0.3827
vn -0.0062 0.7071 0.7071
vn -0.0033 0.3827 0.9239
vn -0.0893 -0.9960 0.0000
vn -0.3746 -0.9272 0.0000
vn -0.7009 -0.7132 0.0000
vn -0.9205 -0.3907 0.0000
vn 0.0087 -1.0000 0.0000
usemtl Default_OBJ.003
s off
f 1/1/1 2/2/1 3/3/1
f 3/3/1 4/4/1 5/5/1
f 4/4/1 6/6/1 5/5/1
f 7/7/2 3/3/2 5/5/2
f 8/8/3 9/9/3 10/10/3
f 9/9/1 2/2/1 10/10/1
f 2/2/1 11/11/1 10/10/1
f 12/12/1 1/1/1 3/3/1
f 4/4/1 3/3/1 9/9/1
f 3/3/1 2/2/1 9/9/1
f 13/13/4 14/14/4 15/15/4
f 16/16/4 17/17/4 18/18/4
f 13/13/4 1/1/4 12/12/4
f 13/13/4 16/16/4 1/1/4
f 16/16/4 19/19/4 17/17/4
f 19/19/4 13/13/4 15/15/4
f 20/20/4 19/19/4 15/15/4
f 21/21/4 16/16/4 18/18/4
f 19/19/4 16/16/4 13/13/4
f 22/22/4 18/18/4 17/17/4
s 1
f 17/23/5 19/24/6 23/25/7 24/26/8
f 25/27/9 26/28/10 4/29/11 9/30/12
f 2/31/13 1/32/14 16/33/15 27/34/16
f 26/28/10 28/35/17 29/36/18 30/37/19
f 28/35/17 31/38/20 32/39/21 29/36/18
f 30/37/19 29/36/18 33/40/22 34/41/23
f 29/36/18 32/39/21 35/42/24 33/40/22
f 23/25/7 36/43/25 37/44/26 38/45/27
f 36/43/25 39/46/28 40/47/29 37/44/26
f 38/45/27 37/44/26 32/48/21 31/49/20
f 37/44/26 40/47/29 35/50/24 32/48/21
f 41/51/30 42/52/31 43/53/32 44/54/33
f 42/52/31 34/55/23 33/56/22 43/53/32
f 44/54/33 43/53/32 40/57/29 39/58/28
f 43/53/32 33/56/22 35/59/24 40/57/29
f 24/26/8 45/60/34 46/61/35 47/62/36
f 45/60/34 48/63/37 49/64/38 46/61/35
f 47/62/36 46/61/35 50/65/39 51/66/40
f 46/61/35 49/64/38 52/67/41 50/65/39
f 25/27/9 53/68/42 54/69/43 55/70/44
f 53/68/42 56/71/45 57/72/46 54/69/43
f 55/70/44 54/69/43 49/73/38 48/74/37
f 54/69/43 57/72/46 52/75/41 49/73/38
f 27/34/16 58/76/47 59/77/48 60/78/49
f 58/76/47 51/79/40 50/80/39 59/77/48
f 60/78/49 59/77/48 57/81/46 56/82/45
f 59/77/48 50/80/39 52/83/41 57/81/46
f 27/34/16 16/33/15 21/84/50 58/76/47
f 58/76/47 21/84/50 18/85/51 51/79/40
f 51/66/40 18/86/51 22/87/52 47/62/36
f 47/62/36 22/87/52 17/23/5 24/26/8
f 41/51/30 3/88/53 7/89/54 42/52/31
f 42/52/31 7/89/54 5/90/55 34/55/23
f 34/41/23 5/91/55 6/92/56 30/37/19
f 30/37/19 6/92/56 4/29/11 26/28/10
f 2/31/13 27/34/16 60/78/49 11/93/57
f 11/93/57 60/78/49 56/82/45 10/94/58
f 10/95/58 56/71/45 53/68/42 8/96/59
f 8/96/59 53/68/42 25/27/9 9/30/12
f 13/97/60 41/51/30 44/54/33 14/98/61
f 14/98/61 44/54/33 39/58/28 15/99/62
f 15/100/62 39/46/28 36/43/25 20/101/63
f 20/101/63 36/43/25 23/25/7 19/24/6
f 24/26/8 23/25/7 38/45/27 45/60/34
f 45/60/34 38/45/27 31/49/20 48/63/37
f 48/74/37 31/38/20 28/35/17 55/70/44
f 55/70/44 28/35/17 26/28/10 25/27/9
f 12/102/64 3/88/53 41/51/30 13/97/60

View File

@@ -0,0 +1,214 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c000111.mtl
o Cube_Cube.004
v 0.499961 -0.500000 0.399961
v 0.499961 -0.399961 0.500000
v 0.499961 -0.470699 0.470699
v 0.499961 -0.438244 0.492385
v 0.499961 -0.492385 0.438244
v 0.499961 0.499961 0.500000
v -0.399962 -0.500000 -0.499961
v -0.438245 -0.492385 -0.499961
v -0.470700 -0.470699 -0.499961
v -0.500000 -0.399961 -0.499961
v -0.492385 -0.438244 -0.499961
v -0.500000 0.499961 -0.499961
v -0.500000 -0.399961 0.399961
v -0.500000 0.499962 0.399961
v -0.399961 0.499962 0.500000
v -0.399961 -0.399961 0.500000
v -0.438244 -0.399961 0.492385
v -0.439203 -0.439203 0.483194
v -0.399962 -0.438243 0.492385
v -0.470699 -0.399961 0.470699
v -0.465612 -0.437211 0.465612
v -0.437212 -0.465612 0.465612
v -0.399961 -0.470699 0.470699
v -0.457718 -0.457718 0.457718
v -0.492385 -0.438244 0.399961
v -0.483194 -0.439203 0.439203
v -0.492385 -0.399960 0.438244
v -0.470699 -0.470699 0.399961
v -0.465612 -0.465612 0.437212
v -0.399961 -0.500000 0.399961
v -0.399961 -0.492384 0.438244
v -0.439203 -0.483194 0.439203
v -0.438244 -0.492385 0.399961
v 0.499961 0.500000 -0.499961
v 0.499961 -0.500000 -0.499961
v -0.492384 0.499961 0.438244
v -0.470699 0.499961 0.470699
v -0.438244 0.499962 0.492385
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.599990 0.775010
vt 0.400010 0.974990
vt 0.400010 0.775010
vt 0.599990 0.765439
vt 0.609561 0.775010
vt 0.599990 0.750000
vt 0.609801 0.765199
vt 0.625000 0.775010
vt 0.614430 0.750000
vt 0.625000 0.765697
vt 0.359561 0.724990
vt 0.349990 0.734561
vt 0.375000 0.724990
vt 0.359801 0.734801
vt 0.349990 0.750000
vt 0.375000 0.739430
vt 0.359303 0.750000
vt 0.609561 0.724990
vt 0.599990 0.734561
vt 0.599990 0.724990
vt 0.625000 0.724990
vt 0.609801 0.734801
vt 0.599990 0.750000
vt 0.625000 0.739430
vt 0.609303 0.750000
vt 0.000000 0.000000
vt 0.400010 0.525010
vt 0.599990 0.525010
vt 0.609561 0.525010
vt 0.609561 0.974990
vt 0.400010 0.724990
vt 0.400010 0.734561
vt 0.400010 0.750000
vt 0.375000 0.525010
vt 0.359561 0.525010
vt 0.349990 0.525010
vt 0.150010 0.734561
vt 0.150010 0.750000
vt 0.400010 0.750000
vt 0.400010 0.765439
vt 0.599990 0.974990
vt 0.609303 0.750000
vt 0.375000 0.734303
vt 0.625000 0.734303
vt 0.625000 0.525010
vt 0.625000 0.974990
vn 0.8575 -0.5120 0.0504
vn 0.8321 -0.0544 0.5520
vn 0.8321 -0.3922 0.3922
vn 0.2425 -0.3713 0.8963
vn 0.3162 -0.8765 0.3630
vn 0.6933 0.5095 0.5096
vn -0.0588 -0.5971 -0.8000
vn -0.3423 -0.8263 -0.4472
vn -0.5657 -0.5657 -0.6000
vn -0.5971 -0.0588 -0.8000
vn -0.8264 -0.3423 -0.4472
vn -0.5774 0.5773 -0.5774
vn -0.9905 -0.0970 0.0970
vn -0.7244 0.6857 0.0714
vn -0.0970 -0.0970 0.9905
vn -0.0714 0.6857 0.7244
vn -0.3783 -0.0972 0.9206
vn -0.0972 -0.3783 0.9206
vn -0.7041 -0.0919 0.7041
vn -0.3703 -0.3703 0.8519
vn -0.0919 -0.7041 0.7041
vn -0.5774 -0.5773 0.5774
vn -0.3266 -0.6683 0.6683
vn -0.9206 -0.3783 0.0972
vn -0.9206 -0.0972 0.3783
vn -0.7041 -0.7041 0.0919
vn -0.8519 -0.3703 0.3703
vn -0.6683 -0.3266 0.6683
vn -0.0972 -0.9206 0.3783
vn -0.3783 -0.9206 0.0972
vn -0.0970 -0.9905 0.0970
vn -0.3703 -0.8519 0.3703
vn -0.6683 -0.6683 0.3266
vn 0.5773 0.5774 -0.5773
vn 0.5000 -0.7071 -0.5000
vn -0.6894 0.6657 0.2856
vn -0.5277 0.6657 0.5276
vn -0.2856 0.6657 0.6894
usemtl Default_OBJ.005
s 1
f 1/1/1 2/2/2 3/3/3
f 2/2/2 4/4/4 3/3/3
f 5/5/5 1/1/1 3/3/3
f 2/2/2 1/1/1 6/6/6
f 7/7/7 8/8/8 9/9/9
f 10/10/10 7/7/7 9/9/9
f 11/11/11 10/10/10 9/9/9
f 12/12/12 13/13/13 14/14/14
f 16/15/15 6/16/6 15/17/16
f 17/18/17 19/19/18 16/15/15
f 20/20/19 18/21/20 17/18/17
f 18/21/20 23/22/21 19/19/18
f 18/21/20 24/23/22 22/24/23
f 25/25/24 27/26/25 13/13/13
f 28/27/26 26/28/27 25/25/24
f 26/28/27 20/29/19 27/26/25
f 26/28/27 24/30/22 21/31/28
f 31/32/29 33/33/30 30/34/31
f 23/35/21 32/36/32 31/32/29
f 32/36/32 28/37/26 33/33/30
f 32/36/32 24/38/22 29/39/33
f 10/10/10 12/12/12 34/40/34
f 34/40/34 1/1/1 35/41/35
f 34/40/34 14/14/14 15/17/16
f 1/42/1 31/32/29 30/34/31
f 5/43/5 23/35/21 31/32/29
f 23/22/21 4/44/4 19/19/18
f 4/44/4 16/15/15 19/19/18
f 7/45/7 33/33/30 8/46/8
f 33/33/30 9/47/9 8/46/8
f 9/48/9 25/25/24 11/49/11
f 25/25/24 10/50/10 11/49/11
f 13/13/13 36/51/36 14/14/14
f 27/26/25 37/52/37 36/51/36
f 37/53/37 17/18/17 38/54/38
f 17/18/17 15/17/16 38/54/38
f 35/41/35 30/34/31 7/45/7
f 12/12/12 10/50/10 13/13/13
f 16/15/15 2/55/2 6/16/6
f 17/18/17 18/21/20 19/19/18
f 20/20/19 21/56/28 18/21/20
f 18/21/20 22/24/23 23/22/21
f 18/21/20 21/56/28 24/23/22
f 25/25/24 26/28/27 27/26/25
f 28/27/26 29/57/33 26/28/27
f 26/28/27 21/31/28 20/29/19
f 26/28/27 29/57/33 24/30/22
f 31/32/29 32/36/32 33/33/30
f 23/35/21 22/58/23 32/36/32
f 32/36/32 29/39/33 28/37/26
f 32/36/32 22/58/23 24/38/22
f 35/41/35 7/7/7 34/40/34
f 7/7/7 10/10/10 34/40/34
f 34/40/34 6/16/6 1/1/1
f 12/12/12 14/14/14 34/40/34
f 14/14/14 36/51/36 38/54/38
f 36/51/36 37/52/37 38/54/38
f 38/54/38 15/17/16 14/14/14
f 15/17/16 6/16/6 34/40/34
f 1/42/1 5/43/5 31/32/29
f 5/43/5 3/59/3 23/35/21
f 23/22/21 3/60/3 4/44/4
f 4/44/4 2/55/2 16/15/15
f 7/45/7 30/34/31 33/33/30
f 33/33/30 28/37/26 9/47/9
f 9/48/9 28/27/26 25/25/24
f 25/25/24 13/13/13 10/50/10
f 13/13/13 27/26/25 36/51/36
f 27/26/25 20/29/19 37/52/37
f 37/53/37 20/20/19 17/18/17
f 17/18/17 16/15/15 15/17/16
f 35/41/35 1/42/1 30/34/31

View File

@@ -0,0 +1,213 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c001001.mtl
o Cube_Cube.010
v -0.499961 0.500000 -0.399961
v -0.499961 0.399961 0.500000
v -0.499961 0.500000 0.399961
v -0.499961 0.470699 0.470699
v -0.499961 0.492385 0.438244
v -0.499961 0.492385 -0.438244
v -0.499961 0.470699 -0.470699
v -0.499961 0.438244 -0.492385
v -0.499961 0.399961 -0.500000
v -0.499961 -0.399961 -0.500000
v -0.499961 -0.438244 -0.492385
v -0.499961 -0.470699 -0.470699
v -0.499961 0.438244 0.492385
v -0.499961 -0.399961 0.500000
v -0.499961 -0.500000 0.399961
v -0.499961 -0.470699 0.470699
v 0.499961 0.500000 0.399961
v 0.499961 0.399961 -0.500000
v 0.499961 0.500000 -0.399961
v -0.499961 -0.438244 0.492385
v -0.499961 -0.500000 -0.399961
v -0.499961 -0.492385 0.438244
v -0.499961 -0.492385 -0.438244
v 0.499961 0.470699 -0.470699
v 0.499961 0.492385 -0.438244
v 0.499961 0.492385 0.438244
v 0.499961 0.470699 0.470699
v 0.499961 0.438244 0.492385
v 0.499961 0.399961 0.500000
v 0.499961 -0.399961 0.500000
v 0.499961 -0.438244 0.492385
v 0.499961 -0.470699 0.470699
v 0.499961 0.438244 -0.492385
v 0.499961 -0.399961 -0.500000
v 0.499961 -0.500000 -0.399961
v 0.499961 -0.470699 -0.470699
v 0.499961 -0.438244 -0.492385
v 0.499961 -0.500000 0.399961
v 0.499961 -0.492385 -0.438244
v 0.499961 -0.492385 0.438244
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.650010 0.525010
vt 0.849990 0.525010
vt 0.849990 0.724990
vt 0.650010 0.724990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.599990 0.234561
vt 0.400010 0.234561
vt 0.599990 0.250000
vt 0.400010 0.250000
vt 0.125000 0.724990
vt 0.125000 0.525010
vt 0.140439 0.525010
vt 0.140439 0.724990
vt 0.400010 0.015439
vt 0.599990 0.015439
vt 0.400010 0.000000
vt 0.599990 0.000000
vt 0.625000 0.724990
vt 0.625000 0.525010
vt 0.640439 0.525010
vt 0.640439 0.724990
vt 0.400010 0.724990
vt 0.599990 0.724990
vt 0.599990 0.734561
vt 0.400010 0.734561
vt 0.599990 0.750000
vt 0.400010 0.750000
vt 0.375000 0.525010
vt 0.375000 0.724990
vt 0.359561 0.724990
vt 0.359561 0.525010
vt 0.599990 0.525010
vt 0.400010 0.525010
vt 0.400010 0.515439
vt 0.599990 0.515439
vt 0.400010 0.500000
vt 0.599990 0.500000
vt 0.875000 0.525010
vt 0.875000 0.724990
vt 0.859561 0.724990
vt 0.859561 0.525010
vn -1.0000 0.0000 -0.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 -0.9952 -0.0980
vn -0.0000 -0.9952 0.0980
vn 0.0000 0.9952 -0.0980
vn 0.0000 0.9952 0.0980
vn 0.0000 0.0980 -0.9952
vn 0.0000 -0.0980 -0.9952
vn 0.0000 -0.3827 -0.9239
vn 0.0000 -0.7071 -0.7071
vn -0.0000 -0.9239 -0.3827
vn 0.0000 0.3827 -0.9239
vn 0.0000 0.7071 -0.7071
vn 0.0000 0.9239 -0.3827
vn -0.0000 -0.0980 0.9952
vn -0.0000 -0.3827 0.9239
vn -0.0000 -0.7071 0.7071
vn -0.0000 -0.9239 0.3827
vn -0.0000 0.0980 0.9952
vn -0.0000 0.3827 0.9239
vn -0.0000 0.7071 0.7071
vn 0.0000 0.9239 0.3827
usemtl Default_OBJ.006
s off
f 1/1/1 2/2/1 3/3/1
f 4/4/1 5/5/1 3/3/1
f 1/1/1 6/6/1 7/7/1
f 8/8/1 9/9/1 7/7/1
f 10/10/1 11/11/1 12/12/1
f 2/2/1 13/13/1 4/4/1
f 14/14/1 15/15/1 16/16/1
f 15/15/1 14/14/1 9/9/1
f 2/2/1 1/1/1 14/14/1
f 10/10/1 15/15/1 9/9/1
f 17/17/2 18/18/2 19/19/2
f 3/3/1 2/2/1 4/4/1
f 9/9/1 1/1/1 7/7/1
f 1/1/1 9/9/1 14/14/1
f 20/20/1 14/14/1 16/16/1
f 21/21/1 10/10/1 12/12/1
f 15/15/1 22/22/1 16/16/1
f 15/15/1 10/10/1 21/21/1
f 12/12/1 23/23/1 21/21/1
f 24/24/2 25/25/2 19/19/2
f 17/17/2 26/26/2 27/27/2
f 28/28/2 29/29/2 27/27/2
f 30/30/2 31/31/2 32/32/2
f 18/18/2 33/33/2 24/24/2
f 34/34/2 35/35/2 36/36/2
f 35/35/2 34/34/2 29/29/2
f 18/18/2 17/17/2 34/34/2
f 30/30/2 35/35/2 29/29/2
f 19/19/2 18/18/2 24/24/2
f 29/29/2 17/17/2 27/27/2
f 17/17/2 29/29/2 34/34/2
f 37/37/2 34/34/2 36/36/2
f 38/38/2 30/30/2 32/32/2
f 35/35/2 39/39/2 36/36/2
f 35/35/2 30/30/2 38/38/2
f 32/32/2 40/40/2 38/38/2
s 1
f 35/41/3 38/42/4 15/43/4 21/44/3
f 1/45/5 3/46/6 17/47/6 19/48/5
f 9/49/7 18/50/7 34/51/8 10/52/8
f 10/52/8 34/51/8 37/53/9 11/54/9
f 11/54/9 37/53/9 36/55/10 12/56/10
f 12/57/10 36/58/10 39/59/11 23/60/11
f 23/60/11 39/59/11 35/41/3 21/44/3
f 18/50/7 9/49/7 8/61/12 33/62/12
f 33/62/12 8/61/12 7/63/13 24/64/13
f 24/65/13 7/66/13 6/67/14 25/68/14
f 25/68/14 6/67/14 1/45/5 19/48/5
f 30/69/15 14/70/15 20/71/16 31/72/16
f 31/72/16 20/71/16 16/73/17 32/74/17
f 32/75/17 16/76/17 22/77/18 40/78/18
f 40/78/18 22/77/18 15/43/4 38/42/4
f 2/79/19 29/80/19 28/81/20 13/82/20
f 13/82/20 28/81/20 27/83/21 4/84/21
f 4/85/21 27/86/21 26/87/22 5/88/22
f 5/88/22 26/87/22 17/47/6 3/46/6
f 29/80/19 2/79/19 14/70/15 30/69/15

View File

@@ -0,0 +1,131 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c001011.mtl
o Cube_Cube.011
v -0.499961 -0.500000 -0.499961
v -0.499961 -0.500000 0.499961
v -0.499961 0.500000 0.499961
v -0.499961 0.500000 -0.499961
v 0.399961 0.500000 -0.499961
v 0.438244 0.492385 -0.499961
v 0.470699 0.470699 -0.499961
v 0.399961 -0.500000 -0.499961
v 0.500000 -0.399961 -0.499961
v 0.470699 -0.470699 -0.499961
v 0.500000 0.399961 -0.499961
v 0.492385 0.438244 -0.499961
v 0.438244 -0.492385 -0.499961
v 0.492385 -0.438244 -0.499961
v 0.399961 0.500000 0.499961
v 0.399961 -0.500000 0.499961
v 0.500000 -0.399961 0.499961
v 0.500000 0.399961 0.499961
v 0.438244 -0.492385 0.499961
v 0.470699 -0.470699 0.499961
v 0.438244 0.492385 0.499961
v 0.470699 0.470699 0.499961
v 0.492385 0.438244 0.499961
v 0.492385 -0.438244 0.499961
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.599990 0.234561
vt 0.400010 0.234561
vt 0.599990 0.250000
vt 0.400010 0.250000
vt 0.125000 0.724990
vt 0.125000 0.525010
vt 0.140439 0.525010
vt 0.140439 0.724990
vt 0.400010 0.724990
vt 0.599990 0.724990
vt 0.599990 0.734561
vt 0.400010 0.734561
vt 0.599990 0.750000
vt 0.400010 0.750000
vt 0.375000 0.525010
vt 0.375000 0.724990
vt 0.359561 0.724990
vt 0.359561 0.525010
vt 0.400010 0.525010
vt 0.599990 0.525010
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.9952 -0.0980 0.0000
vn 0.9952 0.0980 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0980 -0.9952 0.0000
vn 0.3827 -0.9239 0.0000
vn 0.7071 -0.7071 0.0000
vn 0.9239 -0.3827 0.0000
vn 0.0980 0.9952 0.0000
vn 0.3827 0.9239 0.0000
vn 0.7071 0.7071 0.0000
vn 0.9239 0.3827 0.0000
vn 0.0000 1.0000 0.0000
usemtl Default_OBJ.007
s off
f 1/1/1 2/2/1 3/3/1
f 4/4/1 1/1/1 3/3/1
f 5/5/2 6/6/2 7/7/2
f 8/8/2 9/9/2 10/10/2
f 5/5/2 1/1/2 4/4/2
f 5/5/2 8/8/2 1/1/2
f 8/8/2 11/11/2 9/9/2
f 11/11/2 5/5/2 7/7/2
f 12/12/2 11/11/2 7/7/2
f 13/13/2 8/8/2 10/10/2
f 11/11/2 8/8/2 5/5/2
f 14/14/2 10/10/2 9/9/2
f 15/15/3 3/3/3 2/2/3
f 15/15/3 2/2/3 16/16/3
f 16/16/3 17/17/3 15/15/3
f 17/17/3 18/18/3 15/15/3
f 16/16/3 19/19/3 20/20/3
f 21/21/3 15/15/3 22/22/3
f 17/17/3 16/16/3 20/20/3
f 18/18/3 23/23/3 22/22/3
f 15/15/3 18/18/3 22/22/3
f 20/20/3 24/24/3 17/17/3
s 1
f 9/25/4 11/26/5 18/27/5 17/28/4
f 2/29/6 1/30/6 8/31/7 16/32/7
f 16/32/7 8/31/7 13/33/8 19/34/8
f 19/34/8 13/33/8 10/35/9 20/36/9
f 20/37/9 10/38/9 14/39/10 24/40/10
f 24/40/10 14/39/10 9/25/4 17/28/4
f 5/41/11 15/42/11 21/43/12 6/44/12
f 6/44/12 21/43/12 22/45/13 7/46/13
f 7/47/13 22/48/13 23/49/14 12/50/14
f 12/50/14 23/49/14 18/27/5 11/26/5
f 4/51/15 3/52/15 15/42/11 5/41/11

View File

@@ -0,0 +1,92 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
mtllib c001111.mtl
o Cube_Cube.011
v 0.505169 -0.500000 -0.494698
v -0.494698 -0.500000 -0.505169
v 0.495745 -0.500000 0.405174
v 0.494698 -0.399961 0.505208
v 0.495005 -0.470699 0.475909
v 0.494698 0.499961 0.505208
v 0.495344 -0.492385 0.443455
v 0.494777 -0.438244 0.497593
v -0.504122 -0.500000 0.394704
v -0.505169 -0.399961 0.494737
v -0.505169 0.499961 0.494737
v -0.504523 -0.492385 0.432985
v -0.504863 -0.470699 0.465438
v 0.505169 0.500000 -0.494698
v -0.494698 0.500000 -0.505169
v -0.505090 -0.438244 0.487123
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.150010 0.525010
vt 0.349990 0.525010
vt 0.349990 0.724990
vt 0.150010 0.724990
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.599990 0.234561
vt 0.400010 0.234561
vt 0.599990 0.250000
vt 0.400010 0.250000
vt 0.125000 0.724990
vt 0.125000 0.525010
vt 0.140439 0.525010
vt 0.140439 0.724990
vn 0.9280 -0.3696 0.0461
vn 0.8262 -0.0544 0.5607
vn 0.8279 -0.3922 0.4009
vn 0.8122 0.4082 0.4168
vn 0.4436 -0.8264 0.3469
vn 0.4385 -0.3423 0.8310
vn 0.5834 -0.5774 -0.5713
vn 0.5834 0.5774 -0.5713
vn -0.8990 -0.0438 0.4357
vn -0.9013 0.3015 -0.3110
vn -0.8948 -0.4451 0.0344
vn -0.3997 -0.4082 -0.8207
vn -0.4508 -0.8263 0.3376
vn -0.8361 -0.3922 0.3835
vn -0.4125 0.8165 0.4040
vn -0.4558 -0.3423 0.8216
usemtl Default_OBJ.007
s 1
f 3/1/1 4/2/2 5/3/3
f 3/1/1 6/4/4 4/2/2
f 7/5/5 3/1/1 5/3/3
f 8/6/6 5/3/3 4/2/2
f 1/7/7 14/8/8 3/1/1
f 10/9/9 15/10/10 9/11/11
f 14/8/8 2/12/12 15/10/10
f 9/11/11 12/13/13 13/14/14
f 11/15/15 14/8/8 15/10/10
f 10/9/9 9/11/11 13/14/14
f 11/15/15 6/4/4 14/8/8
f 14/8/8 1/7/7 2/12/12
f 13/14/14 16/16/16 10/9/9
f 4/17/2 6/18/4 11/19/15 10/20/9
f 2/21/12 1/22/7 3/23/1 9/24/11
f 9/24/11 3/23/1 7/25/5 12/26/13
f 12/26/13 7/25/5 5/27/3 13/28/14
f 13/29/14 5/30/3 8/31/6 16/32/16
f 16/32/16 8/31/6 4/17/2 10/20/9
f 14/8/8 6/4/4 3/1/1
f 15/10/10 2/12/12 9/11/11
f 11/15/15 15/10/10 10/9/9

View File

@@ -0,0 +1,45 @@
# Blender v2.82 (sub 7) OBJ File: ''
# www.blender.org
o Cube_Cube.001
v 0.499961 0.500000 -0.499961
v 0.499961 -0.500000 -0.499961
v 0.499961 0.500000 0.499961
v 0.499961 -0.500000 0.499961
v -0.499961 0.500000 -0.499961
v -0.499961 -0.500000 -0.499961
v -0.499961 0.500000 0.499961
v -0.499961 -0.500000 0.499961
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.400010 0.025010
vt 0.599990 0.025010
vt 0.599990 0.224990
vt 0.400010 0.224990
vt 0.400010 0.525010
vt 0.599990 0.525010
vt 0.599990 0.724990
vt 0.400010 0.724990
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000
s off
f 2/1/1 6/2/1 5/3/1
f 1/4/1 2/1/1 5/3/1
f 3/5/2 2/1/2 1/4/2
f 3/5/2 4/6/2 2/1/2
f 7/7/3 5/3/3 6/2/3
f 7/7/3 6/2/3 8/8/3
f 4/6/4 7/7/4 8/8/4
f 4/6/4 3/5/4 7/7/4
s 1
f 6/9/5 2/10/5 4/11/5 8/12/5
f 1/13/6 5/14/6 7/15/6 3/16/6

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

525
public/somaesque/worker.js Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="600"
height="200"
viewBox="0 0 158.74999 52.916668"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="leaf-hrule.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.7071068"
inkscape:cx="137.17871"
inkscape:cy="316.78383"
inkscape:window-width="1266"
inkscape:window-height="1393"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g5" /><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g5"
style="fill:#000000;stroke:#000000;stroke-opacity:1;stroke-width:1.3;stroke-dasharray:none;fill-opacity:1"><path
id="path2-0"
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
d="M 103.36799,2.0313828 C 97.919154,6.8995967 91.471199,11.753746 84.827928,14.831058 c -4.362977,1.802096 -7.940465,3.040049 -11.394641,4.403503 -3.454176,1.363449 -6.340528,3.057676 -8.267644,6.14033 -5.22085,8.35138 -2.842185,15.068204 -2.842185,18.481449 0,1.724681 -0.525164,2.55968 -1.088384,3.071689 -0.281623,0.256023 -0.581502,0.429253 -0.853178,0.571351 -0.271683,0.142059 -0.508375,0.220652 -0.726356,0.438636 l -0.312575,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.861888,0.72737 0.325042,0.274708 0.981643,0.921464 1.438104,1.018694 0.121413,-0.33841 0.149273,-0.378664 0.20343,-0.574424 0.08654,-0.303399 0.232353,-0.750599 0.467589,-1.236469 0.470475,-0.971733 1.282748,-2.076821 2.688155,-2.56133 1.994639,-0.687658 5.353958,-1.426431 8.946599,-2.343299 4.779239,-1.219641 10.22039,-3.069062 15.235023,-8.379103 3.958164,-4.191327 5.964278,-9.648825 8.06647,-14.648789 2.546547,-6.056845 4.690947,-13.8886065 5.770337,-18.4960119 z m -1.6799,2.6207028 C 99.213484,8.7236849 95.38472,13.701658 91.668482,16.58763 87.307543,19.974273 83.212921,21.794112 74.737857,30.305127 70.346392,34.715218 65.920596,41.07391 62.74313,46.05384 c 0.225405,-0.579954 0.367657,-1.301376 0.367657,-2.1975 0,-3.821879 -2.329429,-9.983672 2.722028,-18.064078 1.809189,-2.894025 4.502799,-4.488442 7.889987,-5.825454 3.387197,-1.337011 6.985264,-2.582493 11.406427,-4.408627 C 91.756327,12.8209 98.71462,7.200396 101.68809,4.6520856 Z m 0.41378,0.8876305 c -0.71109,2.8413561 -2.647102,8.5402999 -5.229556,14.6825349 -2.098514,4.991206 -4.085673,10.360534 -7.913256,14.413589 -4.882789,5.17043 -10.123643,6.948053 -14.857624,8.156201 -3.576477,0.912731 -6.922349,1.642756 -9.008606,2.362003 -0.373131,0.128561 -0.710252,0.293891 -1.014844,0.485256 3.110097,-4.803562 7.240508,-10.637834 11.291177,-14.705694 8.418826,-8.454539 12.395209,-10.186264 16.846328,-13.642933 3.719463,-2.888477 7.372902,-7.7041657 9.886381,-11.7509569 z"
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /><path
id="path2-0-3"
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
d="M 52.941073,2.0313827 C 47.492246,6.8995966 41.044291,11.753746 34.40102,14.831058 c -4.362977,1.802096 -7.940465,3.040049 -11.394641,4.403503 -3.454176,1.363449 -6.340528,3.057676 -8.267644,6.14033 -5.22085,8.35138 -2.842185,15.068204 -2.842185,18.481449 0,1.724681 -0.525164,2.55968 -1.088384,3.071689 -0.281623,0.256023 -0.581502,0.429253 -0.853178,0.571351 -0.271683,0.142059 -0.508375,0.220652 -0.726356,0.438636 l -0.312575,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.861888,0.72737 0.325042,0.274708 0.981643,0.921464 1.438104,1.018694 0.121413,-0.33841 0.149273,-0.378664 0.20343,-0.574424 0.08654,-0.303399 0.232353,-0.750599 0.467589,-1.236469 0.470475,-0.971733 1.282748,-2.076821 2.688155,-2.56133 1.994639,-0.687658 5.353958,-1.426431 8.946599,-2.343299 4.779239,-1.219641 10.22039,-3.069062 15.235023,-8.379103 3.958164,-4.191327 5.964278,-9.648825 8.06647,-14.648789 2.546551,-6.056845 4.690938,-13.8886066 5.770328,-18.496012 z m -1.6799,2.6207028 C 48.786576,8.7236848 44.957812,13.701658 41.241574,16.58763 36.880635,19.974273 32.786013,21.794112 24.310949,30.305127 19.919484,34.715218 15.493688,41.07391 12.316222,46.05384 c 0.225405,-0.579954 0.367657,-1.301376 0.367657,-2.1975 0,-3.821879 -2.329429,-9.983672 2.722028,-18.064078 1.809189,-2.894025 4.502799,-4.488442 7.889987,-5.825454 3.387197,-1.337011 6.985264,-2.582493 11.406427,-4.408627 C 41.329419,12.8209 48.287712,7.2003959 51.261173,4.6520855 Z m 0.41378,0.8876305 c -0.711087,2.8413561 -2.647093,8.5403 -5.229547,14.682535 -2.098514,4.991206 -4.085673,10.360534 -7.913256,14.413589 -4.882789,5.17043 -10.123643,6.948053 -14.857624,8.156201 -3.576477,0.912731 -6.922349,1.642756 -9.008606,2.362003 -0.373131,0.128561 -0.710252,0.293891 -1.014844,0.485256 3.110097,-4.803562 7.240508,-10.637834 11.291177,-14.705694 8.418826,-8.454539 12.395209,-10.186264 16.846328,-13.642933 3.719463,-2.888477 7.372902,-7.7041657 9.886372,-11.750957 z"
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /><path
id="path2-0-0"
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
d="m 153.79494,2.0313831 c -5.44882,4.868213 -11.89678,9.7223629 -18.54005,12.7996749 -4.36298,1.802096 -7.94047,3.040049 -11.39464,4.403503 -3.45418,1.363449 -6.34053,3.057676 -8.26765,6.14033 -5.22084,8.35138 -2.84218,15.068204 -2.84218,18.481449 0,1.724681 -0.52516,2.55968 -1.08838,3.071689 -0.28163,0.256023 -0.58151,0.429253 -0.85318,0.571351 -0.27168,0.142059 -0.50838,0.220652 -0.72636,0.438636 l -0.31257,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.86189,0.72737 0.32504,0.274708 0.98164,0.921464 1.4381,1.018694 0.12141,-0.33841 0.14927,-0.378664 0.20343,-0.574424 0.0865,-0.303399 0.23235,-0.750599 0.46759,-1.236469 0.47047,-0.971733 1.28275,-2.076821 2.68815,-2.56133 1.99464,-0.687658 5.35396,-1.426431 8.9466,-2.343299 4.77924,-1.219641 10.22039,-3.069062 15.23502,-8.379103 3.95817,-4.191327 5.96428,-9.648825 8.06647,-14.648789 2.54656,-6.056845 4.69094,-13.8886069 5.77033,-18.4960119 z m -1.6799,2.620702 c -2.47459,4.0716 -6.30336,9.0495729 -10.0196,11.9355449 -4.36093,3.386643 -8.45556,5.206482 -16.93062,13.717497 -4.39147,4.410091 -8.81726,10.768783 -11.99473,15.748713 0.22541,-0.579954 0.36766,-1.301376 0.36766,-2.1975 0,-3.821879 -2.32943,-9.983672 2.72203,-18.064078 1.80919,-2.894025 4.5028,-4.488442 7.88998,-5.825454 3.3872,-1.337011 6.98527,-2.582493 11.40643,-4.408627 6.6271,-2.737281 13.58539,-8.3577849 16.55885,-10.9060959 z m 0.41378,0.887631 c -0.71108,2.841356 -2.64709,8.5402999 -5.22954,14.6825349 -2.09852,4.991206 -4.08568,10.360534 -7.91326,14.413589 -4.88279,5.17043 -10.12364,6.948053 -14.85762,8.156201 -3.57648,0.912731 -6.92235,1.642756 -9.00861,2.362003 -0.37313,0.128561 -0.71025,0.293891 -1.01484,0.485256 3.11009,-4.803562 7.2405,-10.637834 11.29117,-14.705694 8.41883,-8.454539 12.39521,-10.186264 16.84633,-13.642933 3.71946,-2.888477 7.3729,-7.7041657 9.88637,-11.7509569 z"
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /></g></g></svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Binary file not shown.

96
public/static/theme.css Normal file
View File

@@ -0,0 +1,96 @@
@font-face {
font-family: "Quattrocento";
font-style: regular;
src: local("Quattrocento"), url("assets/quattrocento-regular.ttf") format("truetype")
}
@font-face {
font-family: "Quattrocento";
font-style: bold;
src: local("Quattrocento"), url("assets/quattrocento-bold.ttf") format("truetype");
}
@font-face {
font-family: "Baskervville";
font-style: regular;
src: local("Baskervville"), url("assets/baskervville.ttf") format("truetype")
}
@font-face {
font-family: "Baskervville";
font-style: italic;
src: local("Baskervville"), url("assets/baskervville-italic.ttf") format("truetype");
}
:root {
--dj-palette1: #83a6bf;
--dj-palette2: #5e81ac;
--dj-palette3: #8fbcbb;
--dj-prose: #98aab7;
--dj-visited: #8d8bd5;
--dj-bgpalette1: #2e3440;
}
html, body {
box-sizing: border-box;
background-color: var(--dj-bgpalette1);
color: var(--dj-palette1);
margin: 0;
padding: 0;
font-family: "Quattrocento", serif;
font-optical-sizing: auto;
font-style: normal;
font-size: 16px;
}
hr {
border: 0;
height: 1px;
background-image: linear-gradient(to right, transparent, var(--dj-prose), transparent);
margin: 40px 0 40px 0;
width: 100%;
&::before, &::after {
content: ' ';
position: absolute;
display: block;
margin: auto;
left: 0;
right: 0;
transform: translateY(-50%);
}
&::before {
background-color: var(--dj-bgpalette1);
width: 74px;
height: 30px;
}
&::after {
width: 66px;
height: 22px;
background-color: var(--dj-prose);
background-size: cover;
mask-image: url('assets/leaf-hrule.svg');
mask-size: cover;
}
}
p {
color: var(--dj-prose);
}
h1, h2, h3, h4, h5, nav, .dj-title {
font-family: "Baskervville", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
}
.spectral-regular, body {
font-family: "Spectral", serif;
font-weight: 400;
font-style: normal;
font-size: 19px;
}