1
0

vault backup: 2025-12-07 12:39:26
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 1m21s

This commit is contained in:
2025-12-07 12:39:26 +01:00
parent 713dae01cc
commit fc5133b214
7 changed files with 374 additions and 694 deletions

1
.gitignore vendored
View File

@@ -4,3 +4,4 @@
.quartz-cache .quartz-cache
node_modules node_modules
public public
wip/output

View File

@@ -33,6 +33,6 @@ Finns det värde i att svara alla med AI?
- [ ] göra klart introduktion till metabolismen - [ ] göra klart introduktion till metabolismen
- [ ] glykolysen, lägg till vilka steg som är reversibla - [ ] glykolysen, lägg till vilka steg som är reversibla
- [ ] också vilka steg som producerar ATP+NADPH - [ ] också vilka steg som producerar ATP+NADPH
- [ ] β-oxidation - [ ] β-oxidation (men har använt emils)
- [ ] glykogen - [ ] glykogen
- [ ] ETK - [ ] ETK

73
wip/script.js Normal file
View File

@@ -0,0 +1,73 @@
MathJax.Hub.Config({
config: ["MMLorHTML.js"],
jax: ["input/TeX", "output/HTML-CSS", "output/NativeMML"],
extensions: ["MathMenu.js", "MathZoom.js"]
});
let indexData = null;
async function loadIndex() {
if (indexData) return indexData;
const res = await fetch("/index.json");
indexData = await res.json();
return indexData;
}
const templates = {
folder: i => `<li><details><summary>${i.key}</summary>${i.inner}</details></li>`,
file: i => `<li><a href="${i.href}">${i.title}</a></li>`
};
function renderTree(data) {
const items = Object.entries(data).map(([key, note]) => {
if (key === "children") return null;
if (note.children) return { type: "folder", key, inner: renderTree(note.children) };
if (note.folder && note.filename) {
const title = note.title || note.filename.replace(/\.md$/, "");
let href = title + ".html";
if (note.folder !== ".") href = `${note.folder}/${href}`;
href = "/" + href;
return { type: "file", href, title };
}
return null;
}).filter((i) => i !== null);
// Sort: folders first (alphabetically), then files (alphabetically)
// Use natural sorting for numbers (1, 2, 10 instead of 1, 10, 2)
items.sort((a, b) => {
if (a.type !== b.type) return a.type === "folder" ? -1 : 1;
const nameA = (a.type === "folder" ? a.key : a.title);
const nameB = (b.type === "folder" ? b.key : b.title);
return nameA.localeCompare(nameB, undefined, { numeric: true, sensitivity: "base" });
});
return `<ul>${items.map(i => templates[i.type](i)).join("")}</ul>`;
}
loadIndex().then(data => {
const sidebar = document.querySelector(".sidebar");
if (sidebar) {
sidebar.innerHTML = renderTree(data);
// Find and highlight the current page link
const currentPath = window.location.pathname;
const links = sidebar.querySelectorAll("a");
for (const link of links) {
const linkPath = new URL(link.href, window.location.origin).pathname;
if (linkPath === currentPath) {
link.classList.add("active");
// Expand all parent <details> elements
let parent = link.parentElement;
while (parent && parent !== sidebar) {
if (parent.tagName === "DETAILS") {
parent.open = true;
}
parent = parent.parentElement;
}
break;
}
}
}
});

View File

@@ -1,16 +1,27 @@
import argparse
import http.server
import json
import os
import pathlib import pathlib
import re import re
import shutil
import jinja2 import jinja2
from markdown.core import Markdown from markdown.core import Markdown
from markdown.extensions import Extension from markdown.extensions import Extension
from markdown.preprocessors import Preprocessor from markdown.preprocessors import Preprocessor
from obsidian_parser import Vault from obsidian_parser import Note, Vault
def out_content(self):
content = self.content
if content.startswith("---\n"):
content = content.split("---\n", 2)[2]
return content
Note.our_content = property(out_content)
root_dir = pathlib.Path(__file__).parent root_dir = pathlib.Path(__file__).parent
vault = Vault(root_dir.parent / "content") vault = Vault(root_dir.parent / "content")
note = vault.get_note("Biokemi/Cellulära processer/Transport över cellmembran/Anteckningar.md")
loader = jinja2.FileSystemLoader(root_dir / "templates") loader = jinja2.FileSystemLoader(root_dir / "templates")
env = jinja2.Environment(loader=loader) env = jinja2.Environment(loader=loader)
@@ -23,9 +34,9 @@ class ObsidianImage(Preprocessor):
if m: if m:
if "|" in m.group(1): if "|" in m.group(1):
img, width = m.group(1).split("|") img, width = m.group(1).split("|")
new_lines.append("<img src='../content/attachments/" + img + "' style='width:" + width + ";'/>") new_lines.append(f"<img src='attachments/{img}' style='width:{width};'/>")
else: else:
new_lines.append("<img src='../content/attachments/" + m.group(1) + "'/>") new_lines.append(f"<img src='attachments/{m.group(1)}'/>")
else: else:
new_lines.append(line) new_lines.append(line)
return new_lines return new_lines
@@ -35,35 +46,145 @@ class ObsidianImageExtension(Extension):
def extendMarkdown(self, md): def extendMarkdown(self, md):
md.preprocessors.register(ObsidianImage(md), 'obsidianimage', 175) md.preprocessors.register(ObsidianImage(md), 'obsidianimage', 175)
m = Markdown( def make_markdown():
extensions=[ return Markdown(
"mdx_math", extensions=[
"nl2br", "fenced_code",
ObsidianImageExtension(), "mdx_math",
], "nl2br",
extension_configs={ "tables",
"mdx_math": { ObsidianImageExtension(),
"enable_dollar_delimiter": True ],
} extension_configs={
}, "mdx_math": {
tab_length=2, "enable_dollar_delimiter": True
) }
env.filters["markdown"] = m.convert },
tab_length=2,
)
def markdown_filter(text):
md = make_markdown()
return md.convert(text)
env.filters["markdown"] = markdown_filter
output = root_dir / "test.html"
template = env.get_template("base.html") template = env.get_template("base.html")
output_dir = root_dir / "output"
def out_content(self):
content = note.content
if content.startswith("---\n"):
content = content.split("---\n", 2)[2]
return content
note.__class__.our_content = property(out_content) def build_tree(vault: Vault):
with output.open("w", encoding="utf-8") as f: root = vault.path
data = template.render(note=note, vault=vault) tree = {}
f.write(data) for folder, dirnames, filenames in root.walk():
for dirname in dirnames[:]:
if dirname.startswith(".") or dirname == "attachments":
dirnames.remove(dirname)
cur = tree
for part in folder.relative_to(root).parts:
cur = cur.setdefault(part, {"children": {}})["children"]
import webbrowser for filename in filenames:
webbrowser.open(output.as_uri()) # .DS_Store etc
print(f"Written to {output}") if filename.startswith("."):
continue
item = {
"filename": filename,
"folder": str(folder.relative_to(root)),
}
note = vault.get_note((folder / filename).relative_to(root))
if note:
item["title"] = note.title
# TODO: for search add tags, modified time, content etc
cur[filename] = item
return tree
def write_note(item, tree_json):
if "children" in item:
for child in item["children"].values():
write_note(child, tree_json)
else:
path = pathlib.Path(item["folder"]) / item["filename"]
note = vault.get_note(path)
if note:
out_path = output_dir / item["folder"] / (item["title"] + ".html")
out_path.parent.mkdir(parents=True, exist_ok=True)
# Calculate relative base_path based on folder depth
folder = item["folder"]
if folder == ".":
base_path = ""
else:
depth = len(pathlib.Path(folder).parts)
base_path = "../" * depth
with out_path.open("w", encoding="utf-8") as f:
data = template.render(note=note, vault=vault, base_path=base_path, index_json=tree_json)
f.write(data)
else:
print(f"Note not found for {path}")
def build():
"""Build the static site."""
print("Building...")
# 1. Create output dir
shutil.rmtree(output_dir, ignore_errors=True)
output_dir.mkdir(exist_ok=True)
# 1b. Symlink CSS/JS to output root
(output_dir / "style.css").symlink_to(root_dir / "style.css")
(output_dir / "script.js").symlink_to(root_dir / "script.js")
# 1c. Symlink attachments directory
attachments_src = root_dir.parent / "content" / "attachments"
attachments_dst = output_dir / "attachments"
attachments_dst.symlink_to(attachments_src)
# 2. Build tree and write index json
tree = build_tree(vault)
tree_json = json.dumps(tree)
with (output_dir / "index.json").open("w") as f:
f.write(tree_json)
# 3. Write out each note as html
write_note({"children": tree}, tree_json)
print(f"Built to {output_dir}")
def serve(port):
"""Build and serve the site."""
build()
os.chdir(output_dir)
print(f"Serving at http://localhost:{port}")
server = http.server.HTTPServer(("", port), http.server.SimpleHTTPRequestHandler)
try:
server.serve_forever()
except KeyboardInterrupt:
print("\nStopped.")
def main():
parser = argparse.ArgumentParser(description="Static site generator for medical notes")
subparsers = parser.add_subparsers(dest="command", required=True)
subparsers.add_parser("build", help="Build the static site")
serve_parser = subparsers.add_parser("serve", help="Build and serve the site")
serve_parser.add_argument("-p", "--port", type=int, default=8000, help="Port to serve on")
args = parser.parse_args()
if args.command == "build":
build()
elif args.command == "serve":
serve(args.port)
if __name__ == "__main__":
main()

139
wip/style.css Normal file
View File

@@ -0,0 +1,139 @@
:root {
color-scheme: light dark;
--font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-mono: ui-monospace, "SF Mono", Menlo, monospace;
--max-width: 70ch;
--line-height: 1.15;
--space: 1.25rem;
--radius: 6px;
--sidebar-width: 250px;
}
body {
margin: 0;
display: flex;
font-family: var(--font-sans-serif);
line-height: var(--line-height);
font-size: 1rem;
}
.sidebar {
width: var(--sidebar-width);
height: 100vh;
position: sticky;
top: 0;
overflow-y: auto;
padding: var(--space);
box-sizing: border-box;
}
.sidebar ul { list-style: none; padding: 0; margin: 0; }
.sidebar details ul { padding-left: 1rem; }
.sidebar li { margin: 0.2rem 0; }
.sidebar a { text-decoration: none; }
.sidebar a.active { font-weight: 600; }
.sidebar details { margin: 0.2rem 0; }
.sidebar summary { cursor: pointer; }
.content {
flex: 1;
max-width: var(--max-width);
padding: calc(var(--space) * 1.2);
}
@media (prefers-color-scheme: light) {
body { background: #fafafa; color: #222; }
.sidebar { background: #f0f0f0; }
a { color: #0645ad; }
code, pre { background: #f0f0f0; }
hr { border-color: #ddd; }
}
@media (prefers-color-scheme: dark) {
body { background: #111; color: #ddd; }
.sidebar { background: #1a1a1a; }
a { color: #7bbaff; }
code, pre { background: #222; }
hr { border-color: #333; }
}
p, ul, ol, blockquote, pre, table {
margin: var(--space) 0;
}
h1, h2, h3, h4, h5, h6 {
line-height: 1.25;
margin: calc(var(--space) * 1.6) 0 var(--space);
font-weight: 600;
}
h1 {
font-size: 1.8rem;
}
h2 {
font-size: 1.45rem;
}
h3 {
font-size: 1.25rem;
}
h4 {
font-size: 1.1rem;
}
h5, h6 {
font-size: 1rem;
}
ul, ol {
padding-inline-start: 1.4rem;
margin-block-start: var(--space);
}
li {
margin: 0.3rem 0;
}
code, pre {
font-family: var(--font-mono) monospace;
font-size: 0.9rem;
border-radius: var(--radius);
}
pre {
padding: 0.75rem 1rem;
overflow-x: auto;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 0.95rem;
}
th, td {
padding: 0.5rem 0.75rem;
border: 1px solid currentcolor;
}
th {
font-weight: 600;
}
blockquote {
padding: 0.75rem 1rem;
border-inline-start: 4px solid currentcolor;
opacity: 0.9;
}
img, video {
max-width: 100%;
height: auto;
display: block;
border-radius: var(--radius);
margin: var(--space) 0;
}
hr {
margin: calc(var(--space) * 2) 0;
border: none;
border-bottom: 1px solid;
opacity: 0.2;
}

View File

@@ -1,175 +1,14 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<style> <base href="{{base_path}}">
/* Root scales + light/dark system colors */ <link rel="stylesheet" href="style.css">
:root {
color-scheme: light dark;
--font-body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-mono: ui-monospace, "SF Mono", Menlo, monospace;
--max-width: 70ch;
--line-height: 1.15;
--space: 1.25rem;
--radius: 6px;
}
body {
margin: 0 auto;
max-width: var(--max-width);
padding: calc(var(--space) * 1.2);
font-family: var(--font-body);
line-height: var(--line-height);
font-size: 1rem;
word-wrap: break-word;
text-rendering: optimizeLegibility;
}
/* Color auto-adjusts with system theme */
@media (prefers-color-scheme: light) {
body {
background: #fafafa;
color: #222;
}
a {
color: #0645ad;
}
code, pre {
background: #f0f0f0;
}
hr {
border-color: #ddd;
}
}
@media (prefers-color-scheme: dark) {
body {
background: #111;
color: #ddd;
}
a {
color: #7bbaff;
}
code, pre {
background: #222;
}
hr {
border-color: #333;
}
}
p, ul, ol, blockquote, pre, table {
margin: var(--space) 0;
}
/* Headings: predictable rhythm, not oversized */
h1, h2, h3, h4, h5, h6 {
line-height: 1.25;
margin: calc(var(--space) * 1.6) 0 var(--space);
font-weight: 600;
}
h1 {
font-size: 1.8rem;
}
h2 {
font-size: 1.45rem;
}
h3 {
font-size: 1.25rem;
}
h4 {
font-size: 1.1rem;
}
h5, h6 {
font-size: 1rem;
}
/* Lists */
ul, ol {
padding-inline-start: 1.4rem;
margin-block-start: var(--space);
}
li {
margin: 0.3rem 0;
}
/* Code */
code, pre {
font-family: var(--font-mono);
font-size: 0.9rem;
border-radius: var(--radius);
}
pre {
padding: 0.75rem 1rem;
overflow-x: auto;
}
/* Tables */
table {
width: 100%;
border-collapse: collapse;
font-size: 0.95rem;
}
th, td {
padding: 0.5rem 0.75rem;
border: 1px solid currentcolor;
border-opacity: 0.2;
}
th {
font-weight: 600;
}
/* Blockquotes */
blockquote {
padding: 0.75rem 1rem;
border-inline-start: 4px solid currentcolor;
border-opacity: 0.4;
opacity: 0.9;
}
/* Images & media */
img, video {
max-width: 100%;
height: auto;
display: block;
border-radius: var(--radius);
margin: var(--space) 0;
}
/* Horizontal rule */
hr {
margin: calc(var(--space) * 2) 0;
border: none;
border-bottom: 1px solid;
opacity: 0.2;
}
</style>
<title>{{note.title}}</title> <title>{{note.title}}</title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
config: ["MMLorHTML.js"],
jax: ["input/TeX", "output/HTML-CSS", "output/NativeMML"],
extensions: ["MathMenu.js", "MathZoom.js"]
});
</script>
</head> </head>
<body> <body>
<div class="sidebar"></div>
<div class="content">
<h1>{{note.title}}</h1> <h1>{{note.title}}</h1>
<ul> <ul>
{% for key, value in note.frontmatter.items() %} {% for key, value in note.frontmatter.items() %}
@@ -186,5 +25,7 @@
{% endfor %} {% endfor %}
</ul> </ul>
{{note.our_content | markdown}} {{note.our_content | markdown}}
</div>
<script src="script.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,495 +0,0 @@
<html lang="en">
<head>
<meta charset="utf-8">
<style>
/* Root scales + light/dark system colors */
:root {
color-scheme: light dark;
--font-body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-mono: ui-monospace, "SF Mono", Menlo, monospace;
--max-width: 70ch;
--line-height: 1.15;
--space: 1.25rem;
--radius: 6px;
}
body {
margin: 0 auto;
max-width: var(--max-width);
padding: calc(var(--space) * 1.2);
font-family: var(--font-body);
line-height: var(--line-height);
font-size: 1rem;
word-wrap: break-word;
text-rendering: optimizeLegibility;
}
/* Color auto-adjusts with system theme */
@media (prefers-color-scheme: light) {
body {
background: #fafafa;
color: #222;
}
a {
color: #0645ad;
}
code, pre {
background: #f0f0f0;
}
hr {
border-color: #ddd;
}
}
@media (prefers-color-scheme: dark) {
body {
background: #111;
color: #ddd;
}
a {
color: #7bbaff;
}
code, pre {
background: #222;
}
hr {
border-color: #333;
}
}
p, ul, ol, blockquote, pre, table {
margin: var(--space) 0;
}
/* Headings: predictable rhythm, not oversized */
h1, h2, h3, h4, h5, h6 {
line-height: 1.25;
margin: calc(var(--space) * 1.6) 0 var(--space);
font-weight: 600;
}
h1 {
font-size: 1.8rem;
}
h2 {
font-size: 1.45rem;
}
h3 {
font-size: 1.25rem;
}
h4 {
font-size: 1.1rem;
}
h5, h6 {
font-size: 1rem;
}
/* Lists */
ul, ol {
padding-inline-start: 1.4rem;
margin-block-start: var(--space);
}
li {
margin: 0.3rem 0;
}
/* Code */
code, pre {
font-family: var(--font-mono);
font-size: 0.9rem;
border-radius: var(--radius);
}
pre {
padding: 0.75rem 1rem;
overflow-x: auto;
}
/* Tables */
table {
width: 100%;
border-collapse: collapse;
font-size: 0.95rem;
}
th, td {
padding: 0.5rem 0.75rem;
border: 1px solid currentcolor;
border-opacity: 0.2;
}
th {
font-weight: 600;
}
/* Blockquotes */
blockquote {
padding: 0.75rem 1rem;
border-inline-start: 4px solid currentcolor;
border-opacity: 0.4;
opacity: 0.9;
}
/* Images & media */
img, video {
max-width: 100%;
height: auto;
display: block;
border-radius: var(--radius);
margin: var(--space) 0;
}
/* Horizontal rule */
hr {
margin: calc(var(--space) * 2) 0;
border: none;
border-bottom: 1px solid;
opacity: 0.2;
}
</style>
<title>Anteckningar</title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js">
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
config: ["MMLorHTML.js"],
jax: ["input/TeX", "output/HTML-CSS", "output/NativeMML"],
extensions: ["MathMenu.js", "MathZoom.js"]
});
</script>
</head>
<body>
<h1>Anteckningar</h1>
<ul>
<li>
<strong>föreläsare</strong>
Ingela Parmryd
</li>
<li>
<strong>tags</strong>
#biokemi
#anteckningar
#transport-över-cellmembran
</li>
<li>
<strong>date</strong>
2025-11-25
</li>
</ul>
<p>Diffusion är något INTE behöver hjälp<br />
Passiv vs Aktiv transport<br />
Faciliterad diffusion</p>
<p>plasmamembransystem</p>
<ul>
<li>tar in och tar</li>
<li>när det går ut, börjar det i <ul>
<li>ER → Golgi → sekretoriska vesiklar → PM eller </li>
<li>ER → golgi → PM</li>
<li>heter sekretoriska vägen</li>
<li></li>
</ul>
</li>
<li>när det går ut<ul>
<li>tidigt endosom → sen endosom → lysosom</li>
</ul>
</li>
<li>Vad påverkar utgången?<ul>
<li>tjocklek</li>
<li>kolesterol i membranet</li>
<li>mättade fettsyror/acylgrupper</li>
<li>tätare packning</li>
</ul>
</li>
<li>Vad påverkar ingången?<ul>
<li>permeabilitet (hur genomsläppligt)</li>
</ul>
</li>
</ul>
<hr />
<h2>Diffusion över membran</h2>
<p>Vad är lättast att diffunder?</p>
<ul>
<li>lättast → svårast<ul>
<li>(små) hydrofoba, <script type="math/tex">O_2</script> (stora kommer här också)</li>
<li>små polära <script type="math/tex">H_2O</script> (osmos)</li>
<li>stora polära, glykos (kolhydrater) </li>
<li>joner, laddade har det svårast (aminosyrer, nukleotider)</li>
</ul>
</li>
</ul>
<hr />
<p>Glukostransportörer faciliterar diffusion<br />
<img src='../content/attachments/Pasted image 20251125132516.png'/><br />
Även kallade bärarproteiner </p>
<h1>Passiv transport</h1>
<p>med gradienten - Man behöver inte tillföra energi, använder energin som tillför gradienten </p>
<h3>Transportörer/Bärarproteiner</h3>
<ul>
<li>transport av polära moleklyer</li>
<li>
<script type="math/tex">k_m</script> uppnår mättnad är när alla transportörer är upptagna</li>
</ul>
<p>GLUT1-5 har olika affinitet för glukos<br />
Varje transportör kan ta ungefär ~1000 molekyler per sekund<br />
Högre i blodet och ECM, transport av glukos sker oftast inåt i cellen<br />
Hastigheten beror på<br />
- antal transportprotein<br />
- hur hög koncentration</p>
<p>
<script type="math/tex">\Delta G = RTln(C_2/C_1)</script>
<br />
C1 = till<br />
C2 = från</p>
<p>Q: Behöver vi kunna formeln. Svaret är att vi inte behöver en miniräknare på tentan.</p>
<h3>Diffusion av <script type="math/tex">H_2O</script>
</h3>
<p>Fysiologiskt salt ~150mM = isotonisk<br />
- Det är så mkt joner vi har i miljön runt om och i våra celler<br />
- Har man exakt händer ingenting<br />
- Har man mer eller mindre så händer osmos<br />
- hypertonisk, högre saltkoncentration<br />
- då kommer vatten gå ut ur cellen för att xxx koncentrationsgradienten<br />
- Då får vi en cell som krymper<br />
- hypotonisk, lägre saltkoncentration<br />
- då försöker vattnet att ta sig in<br />
- då sväller cellen<br />
- när det kommer in för mycket vatten så går den sönder, då säger den lysering<br />
- man kan använda saltlösning för att få ut innehållet i en cell<br />
- sen centrifugerar man så man får ut sina mitokondrier<br />
- osmos = strävar mot utjämning av koncentrationsgradienten</p>
<hr />
<h3>Diffusion av vatten faciliteras av aquaporiner</h3>
<h3>Aquaporiner</h3>
<ul>
<li>Ett ökat vattenflöde ibland, t.ex. i njurarna</li>
<li>Utsöndring av svett och tårar</li>
<li>Passiv transport</li>
<li>Epitel - njurar</li>
<li>Det här går mkt snabbare <script type="math/tex">10^6</script> /s 𝛼-poriner</li>
<li>Faciliterad diffusion</li>
</ul>
<h3>Jonkanalerna</h3>
<ul>
<li>Faciliterar diffusion pendlar mellan att vara öppna eller stängda</li>
<li>Faciliterad diffusion</li>
<li>
<script type="math/tex">10^6</script> /s per kanal<ul>
<li>men bara öppna någon millisekund</li>
</ul>
</li>
<li>Pendlar mellan öppen och stängd</li>
<li>Aktiveras betyder att den öppnas<ul>
<li>ligandbindning - kommer någonting utanför cellen, får en konformationsändring och öppnar sig<ul>
<li>i sliden nämns att det kan t.ex. vara acetylkolin</li>
<li>elektriskt rocka, har 20k per kvmm, det gör att det kan komma upp i höga spänningar</li>
</ul>
</li>
<li>ändring av spänning<ul>
<li>membranpotential, skillnad mellan joner över ett membran</li>
</ul>
</li>
<li>mekaniskt</li>
</ul>
</li>
</ul>
<hr />
<h3>Transporthastigheten genom jonkanaler styrs av skillnader i koncentrations- och elektriska gradienter</h3>
<p>Beroende av andra joner<br />
<script type="math/tex">\Delta G = RT ln(C_2/C_1) + ZF\Delta V</script>
</p>
<p><strong>R:</strong> gaskonstanten = 8.314 J·mol⁻¹·K⁻¹<br />
<strong>T:</strong> absoluta temperaturen i Kelvin (t.ex. 310 K för 37°C)<br />
<strong>C₂:</strong> koncentration <em>utanför</em> cellen<br />
<strong>C₁:</strong> koncentration <em>innanför</em> cellen<br />
<strong>Z:</strong> jonens laddning (t.ex. Na⁺ = +1, Ca²⁺ = +2, Cl⁻ = 1)<br />
<strong>F:</strong> Faradays konstant (≈ 96 485 C/mol), laddning per mol elektroner<br />
<strong>ΔV:</strong> skillnaden i membranpotential (V₂ V₁), mäts i volt</p>
<hr />
<h3>Hur skulle en jonkanal vara uppbyggd?</h3>
<ul>
<li>amfipatiska hydrofila mot kanalen, hydrofoba mot insidan av cellmembranet</li>
<li>8 helixar ovanför</li>
<li>slicad i mitten av hydrofob/fil</li>
</ul>
<hr />
<h3>Uppbyggnaden av katjonkanaler är konserverad</h3>
<p><img src='../content/attachments/Pasted image 20251125135429.png'/><br />
- central por av helix S5 och S6<br />
- S1-4 bildar paddel utanför por</p>
<p>S4 positivt laddad, känner av ändring i membranpotential<br />
padel fälls upp vid aktivering</p>
<hr />
<h3>
<script type="math/tex">K^+</script>-kanalen passar <script type="math/tex">K^+</script> perfekt om dehydratisering sker</h3>
<p>Selektivitetsfilter K+-kanalen<br />
Det känner igen storlek, konkurrerar mot Na och Ka.<br />
<script type="math/tex">NA^+</script> 0.95 Å <br />
<script type="math/tex">K^+</script> 1.33 Å</p>
<p>För att passa den här kanalen som är 3 Å, <br />
Dehydratiseras, bort med vatten<br />
Binder till röda grupper som är karbonylgrupper<br />
Dehydratisering av <script type="math/tex">K^+</script> ger lika många bindingar i filtret som till <script type="math/tex">H_2O</script>
<br />
1000 gr höre selektivitet för <script type="math/tex">K^+</script> än <script type="math/tex">Na^+</script>
</p>
<p>Kostar energi att föra igenom Na+, då blir det inte effektivt<br />
Transport via repulsion i fyra bindingsställning (skjutsa vidare)</p>
<p>Na⁺ är mindre → har mycket högre laddningstäthet → binder vatten hårdare. Att ta bort vatten kostar därför mer energi för Na⁺ än för K⁺.</p>
<p><strong>Varför kan K⁺ passera utan kostnad?</strong><br />
Selektivitetsfiltret är byggt exakt för K⁺-storlek: karbonylgrupperna sitter så att de ersätter <em>precis</em> de vattenbindningar K⁺ förlorar. Energin blir nästan neutral.</p>
<hr />
<h3>Jonkanal stängs snabbt efter att ha öppnats</h3>
<p>Bolldomän i cytoplasman med en länk med ett bindningsställe i den aktiverade, öppna kanalen den kan binda in till<br />
- I öppen kanal blir <em>bindningen</em>→inaktiverad<br />
- States<br />
- Closed hänger och slänger<br />
- Open precis utanför<br />
- Inactivated inne i hållet</p>
<p>Kanalen stängs efter ms efter aktivering</p>
<p>Acetylkolinreceptorn är en receptor för ormgift<br />
Alkaliner, cuarve, hämar transport av jonkanaler</p>
<p>kanaler och transportförer har olika mekanismer för att öppna och stänga</p>
<hr />
<h3>Kanalfogar</h3>
<p>(gap junctions)</p>
<p>Möliggör snabb transport mellan celler<br />
Förbinder cytoplasman<br />
Uppbyggda av konnexinringar<br />
Fri passage för <em>små</em> hydrofila molekyler/joner &lt; kDa</p>
<p>Näringsöverföring: lins &amp; ben<br />
Synkronisering: <br />
- finns mkt i hjärtat så allt drar åt sig samtidigt<br />
- livmoder för forlossning, för sammandrarning<br />
- stängs av <script type="math/tex">[Ca^{2+}]</script> går upp eller <script type="math/tex">[H^+]</script>
</p>
<hr />
<h1>Aktiv transport</h1>
<p>mot gradient<br />
kräver energitillsförsel</p>
<p>Det finns jongradienter i däggdjursceller<br />
- Na+ lågt i högt utanför<br />
- K högt inne, lågt utanför<br />
- Cl lågt inne, högt utanför</p>
<h4>Na+K+ ATPaset, en jonpump</h4>
<p>1/3 av all energi i alla celler används till det här<br />
(mer i vissa celler än andra)</p>
<ul>
<li>Nervsignalering</li>
<li>för att få in aminosyror/andra byggstenar</li>
<li>Pendlar mellan två konformationer (öppna åt olika håll, in/ut, ut/in)<ul>
<li>de fosfyliseras, tar upp en P från ATP från Aspartat</li>
</ul>
</li>
<li>6 steg<ul>
<li>1: 3 Na+ binder på cyt-sidan</li>
<li>2: Fosforylering</li>
<li>3: Eversion (vänder sig), frisläppning av Na+ extra cellulärt</li>
<li>4: 2 Ka+ binder in på ECM-sidan</li>
<li>5: Defosfylering</li>
<li>6: Eversion, K+ frisläpps i cytoplasman</li>
<li>Alltid Na+ cytoplasma→ECM och Ka+ ECM→cytoplasma<br />
Finns 70 st andra kända pumpar</li>
</ul>
</li>
</ul>
<hr />
<h4>Kardiotona steoider hämmar Na+-K+ ATPaset</h4>
<p>Används som läkemedel för personer som har hjärtsvikt, leder till starkar kontraktioner av hjärtmuskler<br />
Läkemedel heter Digitoxin, Onabain som man kan plocka från växter</p>
<p>Behöver veta vad det här proteinet gör</p>
<hr />
<h4>ABC-transportörer ändrar konformation när de binder och hydrolyserar ATP</h4>
<p>ATP-bindande kasett<br />
Kräver två ATP per transportcykel<br />
Används för att transportera ut socker i eukaryota (i prokaryoter in)<br />
1. Substrat binder från cytoplasman<br />
2. Konformationsändring - ökad affinitet för ATP<br />
3. ATP binder - eversion (vänder)<br />
4. Substrat frisläpps ECM<br />
5. Defosfylering 2 ATP → 2 ADP, konformationsändring, eversion</p>
<p>Ställer till besvär inom medicinen, skickar in hydrofoba föreningar. Många läkemedel är hydrofoba. Men sådana här proteiner finns det som inducerar läkemedel, multidrog-resistans, när de fått en så skickar de ut. Men de skickar ut andra läkemedel också</p>
<h4>MDR-multidrogresistens</h4>
<ul>
<li>ABC-transportör</li>
<li>Skickar ut xenobiotika=kroppsfrämmande</li>
<li>Induceras t.ex. av läkemedel</li>
<li>Blir fler om de utsätts av mkt<br />
CFTR-muterat cystisk firos, ABC-transportör. Segare slem i lungorna, olika mkt vatten som attraheras till det här slemmet.</li>
</ul>
<hr />
<h3>Tre grupper av membrantransportör</h3>
<p>Kan vara både passiva och transporta</p>
<ul>
<li>Uniporter<ul>
<li><em>passiv transport</em></li>
<li>en förening, två håll</li>
<li>t.ex. glukostransportören</li>
</ul>
</li>
<li>Symport<ul>
<li><em>sekundär aktiv transport</em><ul>
<li>p-typ ATP eller ABC-transportörer heter <em>primär aktiv transport</em></li>
</ul>
</li>
<li>två föreningar, samma håll</li>
<li>använder en gradient för att skapa en annan</li>
<li>händer t.ex. epitelceller där det krävs mkt in</li>
<li>Na+ hjälper glukos in mot sin gradient</li>
</ul>
</li>
<li>Antiporter<ul>
<li><em>sekundär aktiv transport</em></li>
<li>två föreningar, olika håll<ul>
<li>en med gradient - nästan alltid <script type="math/tex">Na^+_{(in)}</script>
</li>
<li>en mot gradient - tex <script type="math/tex">Ca^{2+}_{(in)}</script>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr />
<h3>Glukos kan tas upp mot koncentrationsgradient med sekundär aktiv transport Glukosupptag</h3>
<hr />
<h3>Glukosupptag från tarmarna involverar transportörer av olika typer Begrepp</h3>
<p>I samma cell kan man ha olika typer av transport av samma typ av</p>
<h1>Summary</h1>
<p>transportör med gradient<br />
hyperton mer joner, ut vatten<br />
hypoton mindre joner, in vatten<br />
aquaporiner släpper bara igenom vatten<br />
jonkanaler behöver aktiveras 3 st (ligand, potential, mekaniska dragningar)<br />
primärt om ATP är med i reaktionen<br />
sekundär om ATP hjälpt till att bygga upp gradienten<br />
kanalfogar binder ihop små celler, t.ex. näring i benceller<br />
Jongradienter Na/Kalium mkt inne/ut på av ATPaset-pump<br />
ABC kräver 2 ATP fosfo+defosfo<br />
MDR inblandat i pumpar</p>
</body>
</html>