SPB Git

Repository Public

en.ts 32.8 KB 590 lines typescript

1export const en = {2  langName: "English",3  otherLang: "Français",4  skip: "Skip to content",5  nav: {6    infrastructure: "Infrastructure",7    live: "Live",8    nodes: "Nodes",9    architecture: "Architecture",10    research: "Research",11    benchmarks: "Benchmarks",12    gallery: "Gallery",13    access: "Access",14    menu: "Menu",15    close: "Close",16    home: "MacLustr — home",17  },18  meta: {19    siteName: "MacLustr Research Infrastructure",20    home: {21      title: "MacLustr — a personal Apple Silicon research cluster",22      description:23        "MacLustr is a personally owned Apple Silicon computing cluster used for research in local language models, machine learning and scientific computing. Documented machine by machine, with real photographs.",24    },25    live: {26      title: "Live telemetry",27      description: "Live utilisation of the MacLustr cluster, machine by machine: CPU, memory and GPU load read about every 20 seconds by the cluster's own monitoring agent, with one day of history.",28    },29    nodes: {30      title: "Node inventory",31      description: "Every machine of the MacLustr cluster, one record each: chip, cores, unified memory, storage, role and the date the record was verified.",32    },33    architecture: {34      title: "Technical architecture",35      description: "How the MacLustr cluster is wired and operated: unified memory, networking, storage, orchestration, model serving, and what is and is not distributed.",36    },37    research: {38      title: "Research log",39      description: "Research carried out on the MacLustr cluster: completed working papers, ongoing experiments and proposed protocols, with their references.",40    },41    benchmarks: {42      title: "Benchmarks and methodology",43      description: "The measurement protocol for MacLustr benchmarks and the fields every published observation must carry. Results are published only once measured.",44    },45    gallery: {46      title: "Photographs of the infrastructure",47      description: "Unretouched photographs of the MacLustr shelving units, machines, cabling and cooling.",48    },49    access: {50      title: "Research collaboration and access",51      description: "How to propose a research collaboration or request discretionary access to the MacLustr cluster. Requests are reviewed individually; access is not guaranteed.",52    },53  },54  common: {55    notDocumented: "Not yet documented",56    verified: "Verified",57    source: "Source",58    cores: "cores",59    gb: "GB",60    tb: "TB",61    viewAll: "View all",62    back: "Back to the inventory",63    lifecycle: {64      active: "Active",65      offline: "Offline",66      maintenance: "Maintenance",67      planned: "Planned",68      retired: "Retired",69      unverified: "Unverified",70    },71    roles: {72      gateway: "Gateway and orchestration",73      services: "Service hosting",74      "research-compute": "Research compute",75      data: "Research data",76      monitoring: "Monitoring agent",77      worker: "Compute worker",78      portable: "Laptop node",79    },80    families: { "Mac Studio": "Mac Studio", "Mac mini": "Mac mini", "MacBook Pro": "MacBook Pro", "MacBook Air": "MacBook Air", Other: "Other" },81    status: { completed: "Completed", ongoing: "Ongoing", proposed: "Proposed" },82    kinds: { "working-paper": "Working paper", experiment: "Experiment", protocol: "Protocol" },83    themes: {84      "local-llm": "Local language models",85      "apple-silicon": "Apple Silicon and MLX",86      "distributed-computing": "Distributed workloads",87      "scientific-computing": "Scientific computing",88      "machine-learning": "Machine learning",89      benchmarking: "Reproducible benchmarking",90      agentic: "Agentic research",91    },92    photoOf: "Photograph",93    takenOn: "Taken on",94  },95  home: {96    eyebrow: "Independent research infrastructure",97    title: "Research at the edge of Apple Silicon.",98    lede: "A personal Apple Silicon research cluster, built to explore what distributed computing can make possible.",99    support:100      "MacLustr is an evolving distributed computing infrastructure supporting experiments in local language models, machine learning, and computational research.",101    ctaExplore: "Explore the infrastructure",102    ctaAccess: "Research collaboration",103    heroCaption: "Shelving unit A, photographed on 7 November 2026",104    metrics: {105      heading: "Measured, not estimated",106      note: "Totals are computed from the node records below. Core and memory figures are hardware specifications read from each machine; they are not performance results.",107      nodes: "machines documented",108      nodesSub: (active: number) => `${active} answered the latest discovery`,109      memory: "of unified memory",110      memorySub: "sum over separate machines, not one shared pool",111      cpu: "CPU cores",112      gpu: "GPU cores",113      gpuPartial: "GPU core total withheld: one record is incomplete",114      network: "wired link per machine",115      networkSub: "negotiated rate read on each node",116      asOf: "Inventory verified on",117    },118    real: {119      eyebrow: "Built from real machines",120      title: "Three steel shelving units, one machine at a time.",121      body: [122        "I built MacLustr gradually, starting from a few Mac Studio computers and adding Mac mini and laptop nodes as research needs grew. It lives on ordinary industrial shelving, not in a data centre.",123        "Nothing on this site is rendered or staged. The photographs show the cluster as it runs: labelled machines, tied cable runs, floor fans pushing air up through the shelves, and laptops working with their lids open.",124      ],125      link: "See all photographs",126    },127    topology: {128      eyebrow: "Topology",129      title: "How the machines are connected",130      intro: "A simplified map. It groups machines by kind and shows roles, not addresses; the internal layout is deliberately left out.",131      hint: "Select a block to read what it does.",132      link: "Read the technical architecture",133    },134    families: {135      eyebrow: "Hardware",136      title: "Four kinds of machine",137      intro: "Each family leads to its individual node records.",138      memory: "unified memory",139      link: "Browse the inventory",140      units: (n: number) => (n === 1 ? "1 machine" : `${n} machines`),141    },142    themes: {143      eyebrow: "Research themes",144      title: "What the cluster is used for",145      items: [146        { key: "local-llm", state: "active", title: "Local language models", body: "Running and studying open-weight models on machines I control: architecture experiments on small models, and inference on larger ones within a single node's memory." },147        { key: "apple-silicon", state: "active", title: "Apple Silicon and MLX", body: "Measuring what unified memory and the Apple GPU can do for numerical work, with MLX for models and Metal for custom kernels." },148        { key: "distributed-computing", state: "active", title: "Distributed workloads", body: "Statistical methods designed for many machines and few communication rounds, tested on real hosts rather than simulated ones." },149        { key: "scientific-computing", state: "active", title: "Scientific computing", body: "Large batch computations in econometrics and data analysis, split into independent jobs and placed in proportion to each node's cores." },150        { key: "agentic", state: "active", title: "Agentic research", body: "Autonomous coding agents operate the cluster through a single gateway, and are themselves a subject of study." },151        { key: "benchmarking", state: "planned", title: "Reproducible benchmarking", body: "A fixed protocol for comparing chip generations on identical models and prompts. The protocol is published; the measurements are not yet." },152      ],153      active: "Active",154      planned: "Planned",155    },156    experiments: {157      eyebrow: "Selected work",158      title: "Experiments that ran here",159      intro: "Each entry states how the cluster was actually used, including when it was a single machine.",160      link: "Open the research log",161      benchLink: "Benchmark methodology",162      clusterUse: "Use of the cluster",163    },164    gallery: { eyebrow: "Behind the scenes", title: "Photographic journal", link: "Open the gallery" },165    access: {166      eyebrow: "Collaboration",167      title: "Interested in using MacLustr for research?",168      body: "MacLustr primarily supports my own research. I am open to discussing collaborations and, where capacity and project fit permit, access for external researchers. Requests are reviewed individually; access is not guaranteed.",169      link: "How to propose a project",170    },171  },172  topology: {173    blocks: {174      studio: { title: "Mac Studio nodes", body: "The largest machines. They carry the memory-heavy research runs, the research data, and most long-running services." },175      mini: { title: "Mac mini nodes", body: "Smaller machines used as compute workers for batch jobs, and as hosts for lighter services." },176      laptop: { title: "Laptop nodes", body: "MacBook Pro and MacBook Air machines run with the lid open on wired Ethernet. They join batch computations like any other worker." },177      switch: { title: "Wired Ethernet", body: "Every machine reports a 1 GbE negotiated link. This is the measured rate; no faster interconnect is claimed." },178      gateway: { title: "Gateway node", body: "One Mac Studio is the single entry point. It holds the private git service and the orchestrator that places and repairs workloads. It runs no research job itself." },179      storage: { title: "Network storage", body: "Two network-attached storage units hold backups and shared files. Working data stays on each node's internal SSD." },180      external: { title: "Public gateway (external)", body: "One hosted bare-metal server outside the cluster terminates TLS for public websites and relays requests through an encrypted tunnel. It is not a compute node." },181      internet: { title: "Internet", body: "Visitors reach published sites through the public gateway only. No node is directly exposed." },182    },183    legend: { lan: "Local wired network", tunnel: "Encrypted tunnel", boundary: "Boundary of the cluster" },184    count: (n: number) => `${n} machines`,185    alt: "Diagram: Mac Studio, Mac mini and laptop nodes connect to wired Ethernet together with a gateway node and network storage; an encrypted tunnel links the cluster to one external public gateway, which faces the internet.",186  },187  nodes: {188    eyebrow: "Inventory",189    title: "Every machine, one record each",190    intro:191      "Each record below describes one physical computer. Specifications were read from the machine itself; anything not yet recorded is shown as such rather than filled in.",192    stats: { machines: "machines", memory: "unified memory", cpu: "CPU cores", verified: "last verified" },193    filters: {194      heading: "Filter the inventory",195      search: "Search by name or chip",196      family: "Family",197      chip: "Chip",198      memory: "Minimum memory",199      role: "Role",200      lifecycle: "Status",201      rack: "Shelving unit",202      any: "All",203      rackNone: "Not yet documented",204      rackLabel: (r: string) => `Unit ${r}`,205      reset: "Reset filters",206      atLeast: (n: number) => `${n} GB or more`,207    },208    view: { label: "View", grid: "Grid", table: "Table" },209    sort: { label: "Sort by", number: "Node number", name: "Name", family: "Family", chip: "Chip", cpu: "CPU cores", gpu: "GPU cores", memory: "Memory", storage: "Storage", asc: "ascending", desc: "descending" },210    results: (n: number, total: number) => `${n} of ${total} machines`,211    empty: "No machine matches these filters.",212    cols: { node: "Node", family: "Family", chip: "Chip", cpu: "CPU", gpu: "GPU", memory: "Memory", storage: "Storage", role: "Role", status: "Status", verified: "Verified" },213    statusNote: "“Active” means the machine answered the discovery on the verification date. The dot beside each name is separate: it is the live reading from the monitoring agent.",214    timeline: { eyebrow: "History", title: "How the cluster changed", intro: "Dated events taken from my own operating records." },215    planned: {216      eyebrow: "Planned hardware",217      title: "Not counted in any total",218      empty: "No planned or ordered hardware is documented at the moment. When there is, it will be listed here, separately from the inventory.",219    },220    detail: {221      eyebrow: "Node record",222      specs: "Hardware",223      family: "Family",224      model: "Model identifier",225      chip: "Chip",226      cpu: "CPU cores",227      layout: "Core layout",228      gpu: "GPU cores",229      memory: "Unified memory",230      storage: "Internal storage",231      network: "Network link",232      function: "Research function",233      placement: "Placement",234      rack: "Shelving unit",235      shelf: "Shelf",236      added: "Added to the cluster",237      provenance: "Provenance",238      status: "Status on verification date",239      caveats: "Caveats",240      caveatItems: [241        "Core counts and memory are specifications, not performance measurements.",242        "Storage is the size of the internal volume as reported by the machine, in decimal gigabytes.",243        "The status in this record reflects one discovery run. The live readings above are separate and current.",244      ],245      layoutLegend: "S = super cores, P = performance cores, E = efficiency cores, as named by the operating system.",246      photo: "Photograph",247      photoNone: "This machine has not yet been matched to a position in the photographs.",248      photoNote: "The machine is on this shelving unit; the photograph shows the whole unit.",249      history: "Workload history",250      historyNone: "No public workload history is recorded for this node.",251      benchmarks: "Benchmarks",252      benchmarksNone: "No benchmark has been published for this node.",253      prev: "Previous node",254      next: "Next node",255    },256  },257  architecture: {258    eyebrow: "Architecture",259    title: "A cluster of separate computers",260    intro:261      "MacLustr is a set of independent Apple Silicon machines on one wired network, coordinated by software. This page describes what that does and does not make possible.",262    diagramTitle: "Logical layout",263    diagramNote: "The diagram is abstracted on purpose: it shows roles and boundaries, not addresses or physical wiring.",264    sections: [265      {266        id: "unified-memory",267        title: "Unified memory, one machine at a time",268        body: [269          "On Apple Silicon the CPU and GPU share one pool of memory. A model that fits in a node's unified memory can be loaded once and used by the GPU without copying it to a separate graphics card. This is why a 96 GB Mac Studio can hold models that would not fit on most consumer GPUs.",270          "That pool stops at the edge of the machine. Connecting computers with Ethernet does not combine their unified memory into a single shared GPU address space, whatever the link speed. The memory total on this site is a sum over separate machines: the largest model the cluster can load is bounded by its largest single node, not by the total.",271        ],272      },273      {274        id: "workloads",275        title: "Three kinds of workload",276        body: [277          "Independent: most work runs on one node from start to finish, such as training a small model, estimating a statistical model, or serving an application. The cluster then acts as many computers that can be used at once.",278          "Scheduled across nodes: a large batch is cut into independent jobs and distributed in proportion to each node's core count. Nodes do not talk to each other during the run; results are collected at the end. Most multi-node computation here is of this kind.",279          "Truly distributed: a few experiments have nodes exchange messages during the computation, for example distributed maximum-likelihood estimation with a small number of communication rounds over TCP. These are specific research protocols, not a general capability.",280          "No model has been split across machines here. I make no claim of model sharding or of distributed inference, and training in the usual sense has been limited to models that fit on one node.",281        ],282      },283      {284        id: "network",285        title: "Network",286        body: [287          "Every machine that reported a wired link negotiates 1 GbE (1000BASE-T). I state the measured rate rather than the rated capacity of any switch or adapter. A faster interconnect is not in service on the nodes, and none is claimed.",288          "At 1 GbE the network is the bottleneck for anything that moves tensors between machines: a single generated token is cheap to send, but activations or model weights are not. This is the main reason the cluster favours independent and scheduled jobs.",289        ],290      },291      {292        id: "storage",293        title: "Storage",294        body: [295          "Working data lives on each node's internal SSD, between 245 GB and 995 GB per machine as reported by the machines. Large datasets are kept on the node that computes on them, to avoid reading them over the network.",296          "Two network-attached storage units provide backups and shared files. They are not used as a parallel filesystem.",297        ],298      },299      {300        id: "orchestration",301        title: "Orchestration and control plane",302        body: [303          "One Mac Studio is the gateway. It hosts a private git service and an orchestrator that I wrote: it scans each node's free memory, load, disk and installed runtimes, scores the candidates, places a workload on the best one, checks its health and records where it runs.",304          "A repair loop runs every few minutes and restarts what is missing after an interruption. Machines are configured to log in and resume on their own after a power cut; this was tested involuntarily in September 2026, when sixteen machines restarted together and came back unattended.",305          "This describes how the system is built. It is not an uptime commitment: the cluster is a research installation and can be stopped, rewired or reassigned at any time.",306        ],307      },308      {309        id: "serving",310        title: "Model serving",311        body: [312          "Open-weight models are served with MLX on a single node, started for the duration of an experiment. An always-on, OpenAI-compatible endpoint that served several models existed earlier and was dismantled in June 2026; it is listed in the history, not as a current service.",313          "No public inference endpoint is offered, and none of the node addresses is reachable from the internet.",314        ],315      },316      {317        id: "external",318        title: "External boundary",319        body: [320          "One hosted bare-metal server sits outside the cluster. It terminates TLS for the public websites and relays requests to the right node through an encrypted tunnel. It does no research computation and is not counted in the inventory.",321          "The site you are reading is served this way: by one node of the cluster, behind that gateway.",322        ],323      },324      {325        id: "power-cooling",326        title: "Power and cooling",327        body: [328          "The machines sit on open steel shelving at room temperature, with floor fans moving air up through the shelves, as the photographs show. There is no dedicated cooling plant.",329          "Power draw, temperatures and energy per task have not been measured systematically yet. Until they are, this site publishes no power or efficiency figure.",330        ],331      },332    ],333    diagram: {334      nodes: "Compute nodes",335      nodesSub: "independent machines, each with its own unified memory",336      gateway: "Gateway node",337      gatewaySub: "git service · orchestrator · repair loop",338      monitor: "Monitoring agent",339      monitorSub: "read-only probes",340      storage: "Network storage",341      storageSub: "backups · shared files",342      switch: "Wired Ethernet · 1 GbE measured",343      serving: "Model serving",344      servingSub: "MLX, per experiment, on one node",345      external: "Public gateway",346      externalSub: "TLS · reverse proxy · outside the cluster",347      internet: "Internet",348      tunnel: "encrypted tunnel",349      boundary: "Cluster boundary",350      alt: "Layered diagram. Inside the cluster boundary: compute nodes, a gateway node with the orchestrator, a monitoring agent and network storage all attach to wired Ethernet measured at 1 GbE; model serving runs on a single node. Outside the boundary, a public gateway connects to the cluster through an encrypted tunnel and faces the internet.",351    },352  },353  research: {354    eyebrow: "Research log",355    title: "What has been done, what is under way, what is proposed",356    intro:357      "Entries are listed with their status. Completed work links to its manuscript; ongoing and proposed work makes no result claim. For each entry I state how the cluster was used.",358    filterAll: "All",359    clusterUse: "Use of the cluster",360    reference: "Reference",361    noReference: "No public manuscript yet.",362    read: "Read the paper",363    stack: {364      title: "Software stack",365      intro: "What the experiments above are built with.",366      items: [367        { k: "Models", v: "MLX and mlx-lm for language models on Apple GPUs; PyTorch for conventional training" },368        { k: "Numerics", v: "C++20 with Metal for custom GPU kernels; Python scientific stack for analysis" },369        { k: "Data", v: "Columnar files on local SSD, PostgreSQL on the node that needs it" },370        { k: "Operations", v: "A custom orchestrator, a process manager per node, git as the source of truth" },371      ],372    },373    ownership: {374      title: "Ownership and affiliation",375      body: "MacLustr is personally owned, funded and operated. It does not belong to, and is not funded or endorsed by, any university or other institution. Papers listed here carry their own author and series information.",376    },377  },378  benchmarks: {379    eyebrow: "Benchmarks",380    title: "Reproducible evidence",381    intro: "A benchmark is only useful if someone else can repeat it. This page sets out the protocol; results are added only once they have been measured under it.",382    forthcoming: {383      label: "Results forthcoming",384      title: "No benchmark observation has been published yet.",385      body: "I prefer an empty table to an approximate one. The charts for this page are built and tested against example data in development, and stay hidden until real measurements exist.",386    },387    resultsTitle: "Published observations",388    plannedTitle: "Planned measurements",389    plannedItems: [390      "Generation speed in tokens per second",391      "Time to first token",392      "Throughput under concurrent requests",393      "Peak memory and memory pressure",394      "Power draw and energy per task, once a meter is in place",395      "Network throughput between nodes",396      "Completion time of batch workloads",397    ],398    protocolTitle: "What every observation must carry",399    protocolIntro: "The data model rejects an observation that lacks any of these fields.",400    fields: [401      { k: "Hardware", v: "Node record identifier from the inventory, hence chip, memory and core layout" },402      { k: "Model", v: "Model identifier and exact version or revision" },403      { k: "Quantization", v: "Bit width and scheme" },404      { k: "Runtime", v: "Runtime and version, such as the MLX release" },405      { k: "Lengths", v: "Prompt and output length in tokens" },406      { k: "Concurrency", v: "Number of simultaneous requests" },407      { k: "Method", v: "How the value was measured, including warm-up and what else was running" },408      { k: "Date", v: "Day of measurement" },409      { k: "Repetitions", v: "Number of runs" },410      { k: "Uncertainty", v: "Dispersion across runs" },411      { k: "Raw data", v: "Reference to the raw records" },412    ],413    limitsTitle: "Limits of comparison",414    limits: [415      "Different quantizations of the same model are different models. They are never placed on one axis without saying so.",416      "A node that also hosts services is not a clean test bench. Measurements are taken with the machine otherwise idle, or the load is reported.",417      "Laptops and desktops throttle differently under sustained load, so short runs flatter laptops.",418      "Results across runtime versions are not comparable unless the version is the variable being studied.",419      "Specifications such as core counts are not results. The inventory lists the former; only this page will ever list the latter.",420    ],421    elsewhere: {422      title: "Measurements already in papers",423      body: "Some working papers in the research log contain their own measured results with their own methods, for example GPU against CPU break-even points for numerical kernels. They are cited there rather than restated here, because they were not produced under this protocol.",424      link: "Open the research log",425    },426    chartAlt: (metric: string) => `Bar chart of ${metric} by node. The same values are listed in the table that follows.`,427    table: { node: "Node", model: "Model", quant: "Quantization", runtime: "Runtime", value: "Value", runs: "Runs", date: "Date" },428  },429  gallery: {430    eyebrow: "Gallery",431    title: "The infrastructure as it is",432    intro:433      "Four photographs I took of the cluster. They are cropped for layout only: no retouching, no generated imagery. They show three shelving units on one day and are not a census; the inventory, not the pictures, is the reference for machine counts.",434    open: "Enlarge photograph",435    close: "Close",436    prev: "Previous photograph",437    next: "Next photograph",438    counter: (i: number, n: number) => `${i} of ${n}`,439    note: "Location data and other embedded metadata were removed from the published files.",440  },441  access: {442    eyebrow: "Access",443    title: "Interested in using MacLustr for research?",444    lede: "MacLustr primarily supports my own research. I am open to discussing collaborations and, where capacity and project fit permit, access for external researchers. Requests are reviewed individually; access is not guaranteed.",445    kindsTitle: "What a request can be about",446    kinds: [447      { t: "Reproducibility experiments", d: "Re-running a published result on different hardware." },448      { t: "Language-model inference", d: "Open-weight models that fit in a single node's memory." },449      { t: "Comparative hardware benchmarking", d: "The same workload across chip generations, from M1 Max to M6." },450      { t: "Distributed computing", d: "Methods that need many real hosts rather than a simulation." },451      { t: "Academic collaboration", d: "A joint project where the cluster is one ingredient among others." },452    ],453    termsTitle: "Before any access is granted",454    terms: [455      "Data governance, security, licensing and scheduling are discussed and agreed first.",456      "There are no accounts, no self-service provisioning and no payment. This is not a commercial service.",457      "Capacity is limited and shared with my own work; a project may be declined or postponed.",458      "Availability is never guaranteed: the cluster can be stopped or reconfigured at any time.",459    ],460    contactTitle: "Contact",461    contactBody: "The simplest way is to write to me directly.",462    form: {463      title: "Request form",464      modeMail: "This form does not send anything from this site. It prepares an email in your own mail application, addressed to me, which you can review and send yourself.",465      modeServer: "This form sends your request to me by email. Nothing is stored on this site.",466      name: "Name",467      affiliation: "Institutional affiliation",468      email: "Email",469      projectTitle: "Project title",470      researchQuestion: "Research question",471      researchQuestionHint: "What you want to find out, in a few sentences.",472      compute: "Compute requirements",473      computeHint: "Model, memory, runtime, expected duration.",474      dates: "Proposed dates",475      dataConstraints: "Privacy and data constraints",476      dataConstraintsHint: "Please do not include confidential or personal data in this request.",477      expectedOutputs: "Expected outputs",478      optional: "optional",479      website: "Leave this field empty",480      submitMail: "Prepare the email",481      submitServer: "Send the request",482      sending: "Sending…",483      errors: {484        summary: "Please correct the highlighted fields.",485        name: "Enter your name.",486        email: "Enter a valid email address.",487        projectTitle: "Enter a project title.",488        researchQuestion: "Describe the research question in at least 20 characters.",489        compute: "Describe the compute you need.",490        server: "The request could not be sent. Please write to me by email instead.",491        rate: "Too many requests. Please try again later or write to me by email.",492      },493      mailReady: "Your mail application should now show a prepared message. It has not been sent: review it and send it from there.",494      mailFallback: "If nothing opened, copy the text below into an email to",495      sent: "Your request was sent by email. I reply to every request, though not always quickly.",496      subject: (title: string) => `MacLustr research request — ${title}`,497    },498    privacy: {499      title: "Privacy",500      body: "This site sets no tracking cookie and runs no analytics. Requests reach me by email only and are kept no longer than the discussion requires.",501    },502  },503  live: {504    eyebrow: "Live telemetry",505    title: "The cluster, right now",506    intro: "Utilisation of every machine, read about every 20 seconds by the cluster's own monitoring agent. These are operating readings, not benchmark results.",507    badge: "Live",508    updated: (s: number) => (s < 3 ? "updated just now" : `updated ${s} s ago`),509    loading: "Reading the cluster…",510    pill: (online: number, total: number, cpu: string) => `${online}/${total} online · CPU ${cpu}`,511    unavailable: {512      short: "Telemetry unavailable",513      title: "Live telemetry is unavailable at the moment",514      body: "The monitoring agent did not answer. The inventory remains valid, and live figures return on their own once the agent responds again.",515    },516    kpi: {517      online: "Machines online",518      onlineSub: (off: number) => (off === 0 ? "every machine answered" : off === 1 ? "1 machine not answering" : `${off} machines not answering`),519      cpu: "CPU in use",520      cpuSub: (cores: number) => `weighted over ${cores} cores`,521      memory: "Memory in use",522      memorySub: (used: string, total: string) => `${used} of ${total} GB`,523      gpu: "GPU in use",524      gpuSub: "weighted by GPU cores",525      network: "Network, inbound",526      networkSub: (out: string) => `${out} outbound, all machines`,527    },528    chart: {529      title: "Cluster utilisation",530      unit: "Percent in use, weighted by each machine's capacity",531      window: "Time range",532      w1h: "1 hour",533      w6h: "6 hours",534      w24h: "24 hours",535      cpu: "CPU",536      memory: "Memory",537      gpu: "GPU",538      empty: "No history is recorded for this period.",539      loading: "Loading history…",540      table: "Show the data as a table",541      time: "Time",542      alt: (range: string) => `Line chart of CPU, memory and GPU utilisation in percent over the last ${range}. The same data is available as a table below the chart.`,543    },544    nodes: {545      title: "Machine by machine",546      sort: "Sort by",547      sortNumber: "Number",548      filter: "Show",549      all: "All",550      laptops: "Laptops",551      online: "Online",552      offline: "Offline",553      noReading: "No reading",554      offlineBody: "Not answering the monitoring agent.",555      load: "Load",556      uptime: "Uptime",557      thermal: "Thermal state",558      spark: "CPU over the last hour",559      battery: "Battery",560    },561    node: {562      title: "Live readings",563      history: "Utilisation history",564      netIn: "Network in",565      netOut: "Network out",566      offlineBody: "This machine is not answering the monitoring agent at the moment. Its hardware record below is unaffected.",567    },568    home: {569      eyebrow: "Live",570      title: "What the machines are doing now",571      intro: "Read from the cluster's monitoring agent and refreshed while this page is open.",572      link: "Open the live dashboard",573      wall: "CPU load, one cell per machine",574      wallNote: "Each cell is one machine, numbered as in the inventory. Select a cell to open its record.",575    },576    note: "Readings come from the cluster's monitoring agent and pass through this site's server, which publishes utilisation figures only: no address, process or user information leaves the cluster.",577    thermal: { nominal: "Nominal", fair: "Fair", serious: "Serious", critical: "Critical" },578    units: { kbs: "KB/s", mbs: "MB/s", d: "d", h: "h", min: "min" },579  },580  footer: {581    purpose: "MacLustr is a personally owned and operated research computing installation. This site documents it; it does not sell or guarantee access to it.",582    disclaimer:583      "Not a commercial service. Not owned, funded or endorsed by any institution. Apple, Mac, Mac Studio, Mac mini, MacBook Pro and MacBook Air are trademarks of Apple Inc.; this site is not affiliated with or sponsored by Apple.",584    contact: "Contact",585    updated: "Last updated",586    sections: "Sections",587  },588  notFound: { title: "Page not found", body: "This page does not exist.", link: "Back to the overview" },589};590
Files main
Menu

Theme