Frage zu MeeusJS

slart

Aktives Mitglied
Hallo,

eine schöne Weihnachtszeit wünsch ich Allen!

Nach Monaten bin ich nun dran mit meinem Projekt weiterzumachen.
thread-385910
thread-386122

Das Projekt: Die Erd-Koordinaten [Latitude, Longitude] der Mondposition ermitteln.
Erd-Koordinaten sind Koordinaten eines Koordinatensystems auf der Erde, wie WGS84. Die Umrechnung von Werten in Koordinaten ist kein Problem.

Der letzte Stand ist: Ein Skript zum Projekt ist fertig, jedoch mit zuzammengeklaubten Skriptteilen. Es soll auf das MeeusJS Repository umgestellt werden.

Habe mich nun nochmals in mein bereits fertiges Skript hineingearbeitet. Im Prinzip ist die Umstellung einfach: Die Werte aus dem fertigen Skript dienen als Grundlage. Im MeeusJS Repo wird nach vergleichbaren Werten gesucht und durch die bereits vorhandenen ersetzt. Klingt leider zu einfach als es ist ...

MeeusJS: GitHub - Fabiz/MeeusJs: MeeusJs is an implementation of some algorithms of the Book 'Astronomical Algorithms of Jean Meeus' in Javascript.

Gesucht wird im MeeusJS: Erd-Koordinaten der Mondposition. Da gibt es:
apparentEquatorial returns the apparent position of the moon as equatorial coordinates.
A.Moon.apparentEquatorial(jdo)
Die Funktion liefert:
eq { ra: value, dec: value }
delta: value

Da bin ich wieder ganz am Anfang ... Wieso sind RA und DEC equatorial coordinates? DEC scheint equatorial zu sein, aber ist mit ±0.5 schwierig in ±90° Koordinaten umzurechnen, wenn der Mond nur max 28.5° erreicht. RA? RA hat einen Range von 0.0-6.x sowie den eines Mondmonats? Ich verstehe es mal wieder nicht.

Welche Funktion im MeeusJS Repo liefert die Erd-Koordinaten?
 
Hmmmm, alle in Weihnachtsferien?

Dieses A.Moon.apparentEquatorial(jdo).eq.ra ist also nur eine Rohzahl mit max 2Pi. RA hab ich bereits in meinem Skript. Umrechnung vom MeeusJS ra mit rad_to_deg (ra * (180 / Math.PI)) ergibt gleiche Werte wie RA. Die Abweichung zu MeeusJS ist ~0.01°. Das ist OK. Aber ...

zur Umrechnung in eine Erd-Koordinate benötigt es wieder die Aries() Funktion und diese benötigt wiederum weitere Werte und so fängt der Katzenschwanz an ... Die Frage ist also - und ich habe im MeeusJS Repo nichts gefunden - wie mittels dem MeeusJS diese Aries() Berechnung durchgeführt werden kann? Das von mir erstellte Skript berechnet die benötigten Variablen in der Funktion Nutation().

Javascript:
function Aries() {
    GHAAmean = norm(280.46061837 + 360.98564736629 * (JD - 2451545) + 0.000387933 * T2 - T3 / 38710000);
    GHAAtrue = norm(GHAAmean + delta_psi * cosd(eps));
}
 
@h_c_greier , wohlverdiente Weihnachtsauszeit oder am Okkular eingefroren und Auftauen erst im Frühjahr?

Die Aries() finde ich nicht im MeeusJS. Mir fehlen die Variablen delta_psi und eps. Aber, diese scheinen eher gering zu sein.
delta_psi: 0.00148...
eps: 23.438...
cosd(eps): 0.917...
delta_psi * cosd(eps): 0.0013...
Das GHAAtrue wird mit RA subtrahiert.
Also könnte ich darauf verzichten und die Aries() nur mit GHAAmean, also ohne GHAAtrue verwenden.

Die Differenz zwischen dem Skript von Cabañero und dem Skript von MeeusJS beträgt ~0.01+° von 360°. Das sind so zwischen 2 und 3 Sekunden. Das ist wohl tolerierbar.

Jetzt muss ich mir nur noch JD, T2 und T3 aus dem MeeusJS heraussuchen und eine eigene Aries() für MeeusJS schreiben.
- erledigt.

Messung der Differenz der Longitude-Werte: von bis zu unter -0.0006 vor 1960, ... aktuell um die 0.011 bis 0.015 (2-3 Sekunden), ... bis 2100 steigernd auf bis zu 0.036 (8,5 Sekunden).
Also wäre es schon nicht schlecht dieses GHAAtrue zu berechnen und zu inkludieren. Aber da braucht es diese delta_psi und eps Werte aus der Nutation() ... schwierig, bzw. keine Ahnung.

Dann geht es jetzt an die Latitude im MeeusJS. Da habe ich noch keine Ahnung was dieser Wert von eq.dec mit ±0.5 sein soll, bzw. wie dieser umzurechnen wäre. Ist das eventuell äquivalent zu ±28.5°?
 
Zuletzt bearbeitet:
Wenn ich den Wert von A.Moon.apparentEquatorial(jdo).eq.dec (±0.5) im Dreisatz umrechne ((eq.dec / 0.5) * 28.6), dann ist der Unterschied zum Cabañero Skript am Äquator ~0.0005° und an den Extremen ~0.05° (150 Meter?). Ist das tolerierbar? Mit 28.5 oder 28.7 wird die Differenz größer. Habe im Skript leider nichts gefunden, was es mit den ±0.5 bei eq.dec auf sich hat und was die Referenz ist. Mit ±0.49 oder ±0.51 wird die Differenz größer.
 
Zuletzt bearbeitet:
Wieso sind RA und DEC equatorial coordinates?

Anscheinend versuchst du von hinten auf das Pferd zu kommen und das geht häufig nicht gut aus.

Wenn dir die grundlegenden astronomischen Begriffe wie RA und DEC nicht klar sind, solltest du wohl erst mal damit anfangen, bevor du mit solchen Skripten jonglierst. Das würde dann auch die meisten deiner Fragen von selbst beantworten.

Anscheinend kann das "Aha", mit dem du die Nachhilfebemühungen von Harald Greier am 9. Oktober kommentierst, noch erheblich vertieft werden. Aber dazu musst du vor allem erst mal die Grundlagen studieren.

Equatorial Coordinate System

Gruß, Peter
 
Zuletzt bearbeitet:
Hi Peter, och nee, bitte nicht so.

Bei RA und DEC im MeeusJS geht es doch nicht um deren Bedeutung, sondern dass da geschrieben steht: apparentEquatorial returns the apparent position of the moon as equatorial coordinates. Aber die Funktion liefert RA und DEC und kein Latitude und Longitude Koordinaten, die sofort verwendet werden können. Denn somit berechnet das MeeusJS die Werte genauso wie dieses uralte Skript (auch von Meeus):
https://www2.arnes.si/~gljsentvid10/jmoonpos.html
Sowie ebenso nur mit einer Toleranz von 10 arcsec. Aber soweit war ich ja schon ganz am Anfang. Für das Erreichen des Ziels fehlt auch da die Aries(). Nach ein paar Monaten Pause bin ich nun wieder selbst drauf gekommen. So wie es den Anschein hat ist dieses MeeusJS diesbezüglich ungenauer, weil es nur eine simple Nutation mit einberechnet. Aber das wissen die Profis besser.

Ich muss mich nun im Bezug auf die Toleranz entscheiden, sowie bei der Entscheidung im Weiteren die weiteren Funktionen im MeeusJS integrieren. Ein paar mehr Werte berechnen kommt mir ganz gelegen, aber dann ist die Toleranz größer. Da der Mond visuell sehr schnell um die Erde kreist, machen Bruchteile von einem ° gleich ein paar Kilometer?
0.01° = ~1.1 km.
0.036° = 4.0 km.
0.05° = ~5.5 km.
Das dann jeweils (Lon/Lat), das ist schon nicht wenig (bis zu 6.8 km). Allerdings sind es wegen der Schnelligkeit in der Longitude nur wenige Sekunden Zeit. Die Abweichung in der Latitude ist unangenehmer, da sie nicht durch Zeit ausgeglichen wird. Die Berechnung und Inkludierung der Variable GHAAtrue im Cabañero-Skript ist also doch nicht ganz ohne.

Das nächste ist wieder die Sache mit der Variable gst (für den Mond), und da sehe ich gerade ... die hat im derzeitigen Skript einen stetigen Wert von 0, aber es funktioniert auch damit. Dazu werden mehrere Formeln benötigt, damit am Ende 0 raus kommt. Das ist mal wieder alles sehr seltsam - und nicht von mir. Wobei es schon sehr eigenartig ist, dass die Sache auch mit dem Wert 0 funktioniert. Das bedeutet, dass das Shadow-Skript für den Mond nur einen Wert 0 für gst benötigt: (gst - long / 15).
Bei der Sonne wird unbedingt ein variabler Wert benötigt:

Dafür sind bei der Variable gst (für die Sonne) das Original und das Äquivalent aus (GHAAmean / 15), wozu es die Aries(), bzw. eine Aries() für MeeusJS benötigt, absolut zu jederzeit identisch. Das ist auch plausibel, da bei beiden derselbe Input sowie dieselbe Berechnung.

Na da bin ich mal gespannt, was die Sache noch so für Überraschungen für mich übrig hat.
 
Hallo slart,

• schmeiß mal alles weg mit Aries(bla...) und alle anderen zusammengewürfelten Funktionen aus irgendwelchen PDFs.
• Lade dir das Repository "MeeusJS" von Github herunter
• Öffne mal die index.html im heruntergeladenen Ordner, du siehst eine kontinuierliche Berechnung von Sonnen- und Monddaten.
• Schau in die einzelnen JavaScript-Dateien des Repositorys im Ordner "lib", dann erkennst du, was diese tun.


Hier eine von mir umgeschriebene index.html, ich habe das lästige setIntervall für die sekündliche Neuberechnung rausgeworfen, ist ja fürchterlich sowas. Weiters habe ich das Laden von jQuery rausgenommen, das braucht auch keiner hier. *schüttel*

HTML:
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  </meta>
  <meta name="viewport" content="width=device-width">
  </meta>
  <title>MeeusJS Beispieldatei</title>


  <script src="./lib/Astro.js"></script>
  <script src="./lib/Astro.Coord.js"></script>
  <script src="./lib/Astro.DeltaT.js"></script>
  <script src="./lib/Astro.Globe.js"></script>
  <script src="./lib/Astro.Interp.js"></script>
  <script src="./lib/Astro.JulianDay.js"></script>
  <script src="./lib/Astro.Math.js"></script>
  <script src="./lib/Astro.Moon.js"></script>
  <script src="./lib/Astro.MoonIllum.js"></script>
  <script src="./lib/Astro.Nutation.js"></script>
  <script src="./lib/Astro.Parallax.js"></script>
  <script src="./lib/Astro.Refraction.js"></script>
  <script src="./lib/Astro.Rise.js"></script>
  <script src="./lib/Astro.Sidereal.js"></script>
  <script src="./lib/Astro.Solar.js"></script>

  <style>
    .container {
      width: 65%;
      margin: 0 auto;
      padding: 20px;
      font-family: 'Courier New', Courier, monospace;
      font-weight: 700;
      font-size: 20px;
      border-left: 1px solid cadetblue;
      border-right: 1px solid cadetblue;
      border-bottom: 1px solid cadetblue;
      background-color: rgb(170, 239, 172);
    }
  </style>
</head>

<body>
  <div class="container">
    <h1>MeeusJS Beispieldatei</h1>
    <div>Beobachtungsort: Mitteleuropa, lat: 50.0N, lng: 10.0E<div>

        <div id="date"></div>

        <h2>Sonnenposition</h2>
        <div id="sunpos"></div>

        <h2>Mondposition</h2>
        <div id="moonpos"></div>

        <h2>Mond Beleuchtungsgrad</h2>
        <div id="moonillum"></div>

        <h2>Sonne:</h2>
        <div id="suntimes"></div>

        <h2>Mond:</h2>
        <div id="moontimes"></div>
      </div>
    </div>


    <script>

      // Abkürzung für console.log
      const cl = console.log.bind(console);
      // Who the f### needs jQuery?
      const $ = document.getElementById.bind(document);


      // Angaben Länge/Breite/Höhe und Zeitpunkt
      const lon = 10.0;
      const lat = 50.0;
      const hgt = 0.0;
      const date = new Date(2025, 11, 28, 13, 0, 0);  // Monate = 0 indiziert!
      cl('date=', date);





      // Berechnungen
      let jdo = new A.JulianDay(date);
      let coord = A.EclCoord.fromWgs84(lat, lon, hgt);
      cl('coord=', coord);

      let suntp = A.Solar.topocentricPosition(jdo, coord, true);
      let moontp = A.Moon.topocentricPosition(jdo, coord, true);
      cl('Sonne topoz.=', suntp);
      cl('Mond topoz.=', moontp);

      let i = A.MoonIllum.phaseAngleEq2(moontp.eq, suntp.eq);
      let k = A.MoonIllum.illuminated(i);

      $('date').innerHTML = (date.toString() + "<br>jd: " + jdo.jd);
      $('sunpos').innerHTML = (suntp.hz.toString());
      $('moonpos').innerHTML = (moontp.hz.toString() + ", dist: " + moontp.delta);

      $('moonillum').innerHTML = ("phase: " + i + ", illuminated: " + k);

      let suntimes = A.Solar.times(jdo, coord);
      let moontimes = A.Moon.times(jdo, coord);

      $('suntimes').innerHTML = ("rise: " + A.Coord.secondsToHMSStr(suntimes.rise) +
        ", transit: " + A.Coord.secondsToHMSStr(suntimes.transit) +
        ", set: " + A.Coord.secondsToHMSStr(suntimes.set));

      $('moontimes').innerHTML = ("rise: " + A.Coord.secondsToHMSStr(moontimes.rise) +
        ", transit: " + A.Coord.secondsToHMSStr(moontimes.transit) +
        ", set: " + A.Coord.secondsToHMSStr(moontimes.set));
    </script>

</body>

</html>

Vorsicht ist geboten bei den Auf- und Untergangszeiten, ich habe das getestet, und ein paarmal lagen die Daten für den Mond ganz schön daneben. Aber Auf- und Untergangszeiten benötigst du eh nicht.

cs,
harald

--
 
  • Like
Reaktion: hhh
So wie es den Anschein hat ist dieses MeeusJS diesbezüglich ungenauer, weil es nur eine simple Nutation mit einberechnet.
Das wiederum stimmt überhaupt nicht!
Das Script implementiert die Nutation in Länge bzw. Schiefe genau so, wie es bei Meeus im Kap.22 angegeben wird, mit allen 63 Tabellentermen. Ich habe das mit den Testdaten im Buch überprüft, das passt.

cs,
harald

--
 
Hey, Grüß dich Harald!

Sehr fein dein Beispiel. Habe das gleich mal gespeichert und getestet. Es ist zwar (topocentricPosition) nicht das was ich verwenden will (apparentEquatorial), aber ich bin da jetzt auf das A.EclCoord.fromWgs84() aufmerksam geworden - leider zu spät, denn ich bin mal wieder vorher selbst drauf gekommen. In der Astronomie wird eher selten der Dreisatz verwendet, sondern PI. Da musste ich erst wieder drauf kommen. Werden die Werte mit (180 / Math.PI) multipliziert, sieht das schon brauchbarer aus. Die Abweichungen zum Cabanero-Skript sind in der Latitude bis zu ~0.011 (Thu, 25 Nov 2077 20:27:29 GMT). Also ~1 km. Das ist tolerierbar. Zumal der Beweis fehlt, welches Skript genauer ist.

Für die Berechnung der topocentricPosition wird kein Aries() benötigt. Aber für apparentEquatorial schon. Weil RA da ebenso nur ein Wert (Hrs) innerhalb eines Mondmonats und nicht eines 360° Erd-Koordinatensystem ist. Eine Aries() habe ich im MeeusJS nicht gefunden.

Das Cabanero-Skript verwendet eine etwas aufwendigere Nutation und so weiter. Das ist ein bisschen umfänglicher. In der Kopie, die ich dir zugesandt hatte, sind die Daten stark komprimiert und auch stark komprimiert berechnet. Im Original sind das endlos viele Zeilen Code. Die hatte ich alle aufwendig komprimiert in Einzeiler-Arrays und zudem die Berechnung der Werte daraus in For-Schleifen gestaltet. Damit wurde das Skript übersichtlicher - zumal alle Funktionen zusammen in einer Datei gespeichert sind. Bei Cabanero sind das noch vielmal mehr Zahlentabellen als im MeeusJS. Bei Cabanero sind es mehr als 5. Im MeeusJS ist es nur eine:

Zudem verwendet Cabanero die Aries() mit dem GHAAtrue. Das scheint den kleinen feinen Unterschied zu machen. Aber wie das GHAAtrue mit MeeusJS zu berechnen wäre, da habe ich keine Ahnung. Außerdem ist immer die Frage, ob es einen Sinn macht. Beim Mond scheinbar nicht, da der Wert wohl immer gleich 0 ist. Bei der Sonne hingegen ist er relevant.

Dass die Meeus Tabellenwerte mit dem MeeusJS Repo Ergebnissen übereinstimmen klingt schlüssig. Was äquivalent dazu fehlt wären Cabanero Tabellenwerte.

Ich denke schon, dass das Canabero-Skript genauere Werte liefert., weil es viel mehr Daten in die Berechnung inkludiert. Überprüfen kann ich es nicht. Da wären wir bei dem Thema, dass ich bereits mal erwähnt hatte: Es geht nicht nur um Toleranzen/Abweichungen, sondern um die Veränderung von Toleranzen über lange Zeiträume. Da scheint das Cabanero-Skript stabilere Werte zu liefern als das MeeusJS. Aber das Cabanero-Skript liefert nicht so viele Werte wie das MeeusJS.

Die Auf- und Untergangszeiten werden mit der separaten Shadow-Funktion berechnet, bzw. nicht als Uhrzeiten, sondern als Shadow angezeigt. Die ist eher grob, aber genügt.
 
Jetzt habe ich es dann doch durcheinander gebracht. Das GHAAtrue aus Aries() wird bei Sun() und Moon() verwendet und macht einen kleine Korrektur von 0.0... beim GHAAmean, das zwingend für Erd-Koordinaten bei Sun() und Moon() benötigt wird. Das gst ist bei Moon() seltsamerweise immer 0 und funktioniert so. Bei Sun() hat gst einen Wert größer/kleiner als 0.
 
Hö? Im MeeusJS Repo ist an verschiedenen Standorten Neumond nicht zur gleichen Zeit?

@h_c_greier , wenn in deinem Example einmal lon = 0 und einmal lon = 180 eingegeben wird, haben Phase und Illumination verschiedene Werte. Wie ist das zu erklären? Überall steht geschrieben, dass Neumond weltweit zur gleichen (GMT) Zeit ist. Sehen die Chinesen den Neumond eher als die Europäer?

Zudem scheint die Phase nie 0 zu erreichen, sondern wrapt schon vorher.
 
Hö? Im MeeusJS Repo ist an verschiedenen Standorten Neumond nicht zur gleichen Zeit?

Und so sollte es auch sein!

Man muss hier unterscheiden zwischen der rein formalen Definition von Neumond für die Kalendermacher, welche einen geozentrischen Bezugspunkt zugrunde legt, und dem tatsächlichen Zeitpunkt, für den die ekliptikale Länge von Mond und Sonne an einem bestimmten Ort auf der Erde zusammenfallen.

Dass dieser Zeitpunkt tatsächlich stark ortabhängig ist, sieht man ja sofort, wenn man die Begebenheiten einer totalen Sonnenfinsternis betrachtet:


SE2026Aug12T.gif

Sonnenfinsternis vom 12. August 2026
A.T. Sinclair - http://eclipse.gsfc.nasa.gov/

SE2027Aug02T.gif

Sonnenfinsternis vom 2. August 2027
A.T. Sinclair - http://eclipse.gsfc.nasa.gov/

Gruß, Peter
 
Zuletzt bearbeitet:
  • Like
Reaktion: hhh
Immer langsam mit den jungen Pferden.
Zunächst schau dir mal die Berechnung der Sternzeit θ genau an.

HTML:
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  </meta>
  <meta name="viewport" content="width=device-width">
  </meta>
  <title>MeeusJS Beispiel Sternzeit</title>


  <script src="./lib/Astro.js"></script>
  <script src="./lib/Astro.DeltaT.js"></script>
  <script src="./lib/Astro.JulianDay.js"></script>
  <script src="./lib/Astro.Math.js"></script>
  <script src="./lib/Astro.Nutation.js"></script>
  <script src="./lib/Astro.Sidereal.js"></script>


  <style>
    body {
      font-size: 18px;
    }

    .container {
      width: 70%;
      margin: 0 auto;
      padding: 1rem;
      font-family: 'Courier New', Courier, monospace;
      font-weight: 700;
      border: 1px solid cadetblue;
      background-color: rgb(170, 239, 172);
    }
  </style>
</head>

<body>
  <div class="container">
    <h1>MeeusJS Beispiel Sternzeit</h1>

    <h2>Datum</h2>
    <div id="date"></div>

    <h2>Mittlere Sternzeit in GW</h2>
    <div id="mean"></div>

    <h2>Wahre Sternzeit in GW</h2>
    <div id="app"></div>

    <h2>Differenz</h2>
    <div id="diff"></div>

  </div>



  <script>

    // Abkürzung für console.log
    const cl = console.log.bind(console);
    // Who the f### needs jQuery?
    const $ = document.getElementById.bind(document);

    const DEGS = Math.PI / 180;
    const range = x => ((x % 360) + 360) % 360;
    const ipart = n => n >= 0 ? Math.floor(n) : Math.ceil(n);
    const fpart = n => n >= 0 ? n - ipart(n) : n + ipart(-n);

    function toHMS(dd, dp = 3) {
      let sgn, dip, mins, minsip, secs;
      sgn = dd < 0 ? -1 : 1;
      dd *= dd < 0 ? -1 : 1;
      dip = ipart(dd);
      mins = fpart(dd) * 60;
      minsip = ipart(mins);
      secs = fpart(mins) * 60;
      secs = parseFloat(secs.toFixed(dp));
      return `${dip}h ${minsip}m ${secs}s`;
      // return [dip, minsip, secs];
    }




    let date, jd0, theataGWMean, theataGWApp;


    // Sternzeit Test
    // Meeus Kap.12, S.88
    date = new Date(1987, 3, 10, 2, 0, 0); // = 10.4.1987, 00:00 UT
    cl('date=', date);
    jd0 = new A.JulianDay(date);
    cl('JD0=', jd0.jd);

    // Mittlere Sternzeit, Dezimalstunden
    theataGWMean = A.Sidereal.mean(jd0) / 3600;
    cl('theataGWMean=', theataGWMean);

    // Wahre Sternzeit, Dezimalstunden
    theataGWApp = A.Sidereal.apparent(jd0) / 3600;
    cl('theataGWMean=', theataGWApp);

    // Ausgabe
    $('date').innerHTML = `${date}\nJD=${jd0.jd}`;
    $('mean').innerHTML = `${theataGWMean} h = ${toHMS(theataGWMean, 4)}`;
    $('app').innerHTML = `${theataGWApp} h = ${toHMS(theataGWApp, 4)}`;
    $('diff').innerHTML = `${(theataGWMean - theataGWApp) * 3600} s`;


  </script>

</body>

</html>

Benenne die Datei sternzeit.html oder wie auch immer und speichere sie im Ordner, der die "index.html" enthält.

cs,
harald

--
 
Stundenwinkel berechnen ...

Ich bin erstmal dabei die Ergebnisse von MeeusJS zu checken.
Wegen der Angabe einer Topo-Koordinate bei der Berechnung von Phase und Illumination, verwende ich da jetzt simpel die Mond-Zenith-Koordinaten, die das Skript berechnet. Der Standort ist also immer Mond-Zenith.

// MeeusJS
// Phase
// Illumination
// https://de.wikipedia.org/wiki/Mondphasen_(Tabelle)

// Vollmond
// Sat, 03 Jan 2026 10:26:59 GMT
// 0.07469256866624588
// 0.9986059033637626
// Wikipedia: 3. Jan., 11:02 Uhr

// Neumond
// Sun, 18 Jan 2026 20:25:12 GMT
// 3.082951092201882
// 0.0008594618426898126
// Wikipedia: 18. Jan., 20:52 Uhr

// Vollmond
// Sun, 01 Feb 2026 22:33:08 GMT
// 0.03991865413755941
// 0.999601678160962
// Wikipedia: 1. Feb., 23:09 Uhr

Es wurde Sekundenweise gemessen. Dabei ist zu beobachten, dass die Werte nie 0 oder 1 sowie PI (3.14...) erreichen, sondern schon (weit) vorher wrappen. Wieso die Phase ebenso wie die Illumination wrappt ist etwas unbrauchbar. So ganz überzeugt bin ich von dem MeeusJS jetzt nicht. Aber Phase und Illu würd ich schon gerne verwenden. Da wäre dann die Frage, wie das mittels dem Cabanero-Skript zu berechnen wäre. Aber vorerst das MeeusJS nocht nicht gleich verwerfen. Mal sehen ... (ins Skript lunzt ...)
 
opps. die Vergleichswerte im letzten Post sind:
// A.MoonIllum.phaseAngleEq2 (less accurate) - GMT
// Wikipedia - MEZ
Wobei die von Wikipedia mittels dem Cabanero-Skript berechnet wurden.

Hier weitere Vergleichswerte:
// MeeusJS - A.MoonIllum.phaseAngleEq
// Phase
// Illumination

// Sat, 03 Jan 2026 10:23:53 GMT
// 0.07451593166444372
// 0.9986124861888803
// Wikipedia: 3. Jan., 10:02 Uhr GMT

// Sun, 18 Jan 2026 20:23:27 GMT
// 3.082798648632611
// 0.0008639348455543039
// Wikipedia: 18. Jan., 19:52 Uhr GMT (Cabanero)
// Astropixels.com: 18.01.2026 19:52GMT (Fred Espenak)

// Sun, 01 Feb 2026 22:32:11 GMT
// 0.03982105682566992
// 0.9996036232409076
// Wikipedia: 1. Feb., 22:09 Uhr GMT

Auch hier wrappen die Werte nicht bei 0 oder 1 oder PI, sondern schon vorher. Was sagt ihr, ist das bei allen Skripts so?

Falls du mich fragst, ich würde den Stundenwinkel des Objekts berechnen!
Da ist jetzt die Frage:
- Das MeeusJS scheint gegenüber dem Cabanero ungenauer zu sein.
- Da die Lat/Lon von Sun/Moon im Cabanero berechnet werden ... (bin mir nicht sicher, ob auch Moon delta)
- könnte daraus die Phase und Illumination berechnet werden.
Ist die Formel zur Berechnung von Phase und Illu im MeeusJS einigermaßen genau und könnte übernommen werden?
Siehe hier: https://github.com/Fabiz/MeeusJs/blob/master/lib/Astro.MoonIllum.js
- die _coselong am Ende.
Oder gibt es eine genauere Berechnung?
 
Nochmal zur geografischen Variabilität von "Neumond":


Sofi_2027.jpg

Fred Espenak, NASA's GSFC - http://eclipse.gsfc.nasa.gov/

Aber das müsste doch minimal sein? Das sind doch vom einen Rand der Erde zum anderen nur 1° auf die Entfernung?
Wenn eine Zeitspanne von mehr als drei Stunden für die geografische Variabilität von Neumond egal ist, kannst du ja auch gleich den geozentrischen Zeitpunkt aus einem beliebigen Kalender nehmen.
 
Wenn eine Zeitspanne von mehr als drei Stunden für die geografische Variabilität von Neumond egal ist, kannst du ja auch gleich den geozentrischen Zeitpunkt aus einem beliebigen Kalender nehmen.
Naja, dann habe ich ja alles richtig gemacht und verwende die vom Skript (unter Mithilfe der Aries()) berechneten Mond-Zenith-Koordinaten zur Berechnung von Phase und Illumination. Denn einen Standort auf der Erde wird es in meinem Skript nicht geben. Das ist mir zu anthropozentrisch.

Nur, das MeeusJS scheint etwas grob zu sein. Das taugt mir nicht wirklich. Sprünge beim Wrappen von Neumond und Vollmond sind untauglich. Wie sieht denn das aus? Neumond und Vollmond werden so ja visualisiert nie erreicht. Ich bin grad am überlegen ein altes und sehr umfängliches PHP-Skript dafür umzuschreiben. Das ist aber eine etwas größere Nummer.
 
Ohne jetzt das Repo MeeusJS schlechtmachen zu wollen, meine 2¢:

• der Kollege rechnet alles in RAD, wegen der Trig-Funktionen in JS wahrscheinlich, das ist nachvollziehbar, aber unintuitiv (brrr!). Man schreibt sich sin/cos/tan...Funktionen und deren Umkehrfunktionen für Argumente in Grad, das ist keine Kunst, und gut ist.

• Weiters wirft er alles und jedes in Objekte. Das sieht dann zwar aufgeräumt aus, mir persönlich geht das aber fürchterlich auf die Nerven. Konstruktoren und Auslesemechanismen werden dann elendslang. Auch für Funktionsparameter werden teilweise Objekte übergeben (brrr!). Wenn man weiß, was man tut, braucht man das alles nicht. (BTW: mir ist schon klar, dass Arrays in JS auch "Objekte" sind.)
Der einzige Vorteil ist, dass man beliebig viele Instanzen initialisieren kann und das dann sauber getrennt hat. Wenn man ein konkretes Berechnungs-Problem hat, ist das überflüssig.

• Mir ist aufgefallen, dass das Repo teilweise kryptische und möglicherweise sogar falsche Bezeichnungen einführt. So steht z.B. in Astro.Moon.js in Zeile 88

@param {A.EclCoord} eclCoord - geographic location of the observer

Für mich wären eclCoord eher die ekliptikalen Koordinaten (eines Objekts), ich brächte das nicht mit den topozentrischen Beobachterkoordinaten in Verbindung!?

Weiters, in den examples.html ist mit "phase" eigentlich der Phasenwinkel i des Objekts (z.B. Mond) gemeint. Es gibt dort "phaseAngleEq" und das weniger genaue "phaseAngleEq2". Nicht mit den Mondphasen Neumond, 1. Viertel, Vollmond usw. verwechseln.

Also, alles nicht ganz so einfach, das mal schnell zu durchdringen. Ich habe auch nicht die Zeit dazu.

cs,
harald

--
 
Die Ästhetik kann in die Irre führen. Das hat auch schon Sabine Hossenfelder vom Max-Planck-Institut für empirische Ästhetik herausgefunden. So schön das MeeusJS auch aussehen mag ...

Phase ist nicht Mondphase, sondern Phasenwinkel? Da hörts bei mir schon wieder auf.

Die Vorgehensweise mit Funktionen und alles in Objekte ist im Grunde JavaScript typisch. Da sind default auch viele Funktionen in Objekten: string.trim(); array.push();

Das von mir erwähnte PHP wird vom Autor nicht mehr angeboten, aber als Fork hier:
Das sieht schon umfänglicher aus. Hat aber wohl auch seine Schwächen, insbesondere bei den Vorhersagen zukünftiger Mondphasen. Was ist deine bescheidene Meinung zu dem PHP-Skript?
 
Die Ästhetik kann in die Irre führen. Das hat auch schon Sabine Hossenfelder vom Max-Planck-Institut für empirische Ästhetik herausgefunden. So schön das MeeusJS auch aussehen mag ...

S. Hossenfelder hat ja durchaus schon für Diskussionsstoff gesorgt, aber das ist ein ganz anderes Thema und gehört IMHO auch nicht hierher.

Phase ist nicht Mondphase, sondern Phasenwinkel? Da hörts bei mir schon wieder auf.

Könnte es sein, dass vielleicht genau hier der Knackpunkt liegt? :cool:
Wenn man in den Code der examples.html schaut, ist das leicht ersichtlich. In Zeile 57 steht:

var i = A.MoonIllum.phaseAngleEq2(moontp.eq, suntp.eq);

Phase & Beleuchtungsdefekt

Das von mir erwähnte PHP wird vom Autor nicht mehr angeboten, aber als Fork hier:
https://github.com/BitAndBlack/php-moon-phase/blob/master/moon-phase.php Das sieht schon umfänglicher aus. Hat aber wohl auch seine Schwächen, insbesondere bei den Vorhersagen zukünftiger Mondphasen. Was ist deine bescheidene Meinung zu dem PHP-Skript?

Der Link führt auf nix. Nochmal, ich habe nicht die Zeit und auch keine Lust mich durch die PHP durchzugraben. Ich kann das zwar lesen, aber warum sollte ich das tun? Auch mein Tag hat nur 24 Stunden.

cs,
harald

--
 
@slart

nochmals, ich möchte nicht unhöflich rüberkommen, falls das der Fall war, sorry. Aber ich kann leider nicht immer so hüpfen, wie es dir genehm wäre.

Will sagen: Bitte setze dich mal mit den Basics auseinander, wie z.B.
• Koordinatenberechnung (heliozentrische, geozentrische, topozentrische)
• mittlere und wahre Sternzeit (in Greenwich, am Ort)
• Stundenwinkel eines Objekts
• Koordinatentransformationen (ekliptikal <=> äquatorial <=> horizontal)

Solange du querbeet alles zusammenwurstest aus verschiedenen Quellen mit verschiedenen Bezeichnungen, Bedeutungen und Berechnungsmethoden wirst du auf keinen grünen Zweig kommen.

cs,
harald

--
 
Alles gut. Wird eine Weile dauern mit dem PHP zu JavaScript.
Github ... keine Ahnung. Hier dann eventuell: php-moon-phase/src/MoonPhase.php at master · BitAndBlack/php-moon-phase
Link getestet: funktioniert.
Ansonsten: BitAndBlack / php-moon-phase / src / MoonPhase.php

Ich habe ja so gesehen schon was ich wollte. Bin dann aber auf eine weitere Idee gekommen und habe dafür auch eine mögliche Lösung gefunden. Doch dazu benötige ich die Daten für Mondphase und Illumination. Alles wird gut.
 
Hier ein autarker JavaScript für die Mondphasen nach Meeus. Sämtliche Hilfsfunktionen sind beinhaltet wie Ganzahliger/Nachkomma-Anteil einer Zahl, Sinus/Cosinus für Winkel in Grad, JD Umrechnung und Überlaufs-Funktionen. Der Hauptscript ist darunter. 'Schöne Ausgaben' usw. musste selber machen.

Javascript:
// ################################################################
// Hilfs-Funktionen

// Faktor für Grad => Radiant
const DEGS = Math.PI/180;

// Ganzzahl Anteil und Komma-Anteil einer Zahl (truncation)
const ipart = n => n >= 0 ? Math.floor(n) : Math.ceil(n);
const fpart = n => n >= 0 ? n - ipart(n) : n + ipart(-n);

// Große Winkelwerte in das Intervall [0°-360°] bringen
const range = deg => (deg % 360 + 360) % 360;

// Winkelfuntionen für Argumente in Dezimalgrad
const sin = x => Math.sin(x*DEGS);
const cos = x => Math.cos(x*DEGS);

// ---------------------------
// Schaltjahr (ja/nein == 1/0)
// ---------------------------
function isLeap(y) {
  if (y > 1582) {
    // Gregorianischer Kalender
    return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) ? 1 : 0;
  }
  else {
    // Julianischer Kalender
    return (y % 4 == 0) ? 1 : 0;
  }
}

// -----------------------------------------------------------------------
// Rückrechnung der Julianischen Tagzahl in ein bürgerliches Kalenderdatum
// Ergebnis in Weltzeit UT
// -----------------------------------------------------------------------
function JDtoCal(jd) {
  let Z, F, A, alpha, B, C, D, E;
  let yrs, mth, dys, dysHMS;
  jd += 0.5;
  Z = ipart(jd);
  F = fpart(jd);
  if (Z < 2299161) {
    A = Z;
  } else {
    alpha = ipart((Z - 1867216.25) / 36524.25);
    A = Z + 1 + alpha - ipart(alpha / 4);
  }
  //
  B = A + 1524;
  C = ipart((B - 122.1) / 365.25);
  D = ipart(365.25*C);
  E = ipart((B - D) / 30.6001);
  //
  dys = B - D - ipart(30.6001*E) + F;
  E < 14 ? mth = E - 1 : mth = E - 13;
  mth > 2 ? yrs = C - 4716 : yrs = C - 4715;
  // Dezimaltag in h/m/s umrechnen
  dysHMS = toHMS(dys);
  return timeCorr(yrs, mth, ipart(dys), dysHMS[0], dysHMS[1], parseFloat(dysHMS[2].toFixed(1)));
}

// -----------------------------------------------------------------
// Funktion zur Korrektur von Überläufen bei der Umwandlung
// von JD zurück in ein Kalenderdatum. Durch Rundung könnten Werte
// wie z.B. '60 Sekunden' auftreten.
// -----------------------------------------------------------------
function timeCorr(yrs, mth, dys, hrs, mins, secs) {
  const md = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  // Februar Tage
  md[1] = isLeap(yrs) ? 29 : 28;
  if (secs >= 60) {
    secs -= 60;
    mins += 1;
  }
  if (mins >= 60) {
    mins -= 60;
    hrs += 1;
  }
  if (hrs >= 24) {
    hrs -= 24;
    dys += 1;
  }
  // Monate-Tage-Problem lösen
  if (dys > md[mth - 1]) {
    dys -= md[mth - 1];
    mth += 1;
  }
  if (mth > 12) {
    mth -= 12;
    yrs += 1;
  }
  return [yrs, mth, dys, hrs, mins, secs];
}

// Dezimaltag in Stunden/Minuten/Sekunden umrechnen
function toHMS(dd, dp = 1) {
  let hrs, hrsip, mins, minsip, secs, corr;
  hrs = fpart(dd)*24;
  hrsip = ipart(hrs);
  mins = fpart(hrs)*60;
  minsip = ipart(mins);
  secs = parseFloat((fpart(mins)*60).toFixed(dp));
  return hmsCorr(hrsip, minsip, secs);
}

// Korrektur für Rundungsfehler bei der
// Umrechnung von Dezimaltag in h,m,s
function hmsCorr(h, m, s) {
  if (s >= 60) {
    s -= 60;
    m += 1;
  }
  if (m >= 60) {
    m -= 60;
    h += 1;
  }
  if (h >= 24) {
    h -= 24;
  }
  return [h, m, s];
}
// ################################################################




// ################################################################
// Hauptscript Mondphase ermitteln
// ################################################################
/*
getCycleEstimate(year, month) Gibt eine Schätzung des Mondphasen-Zyklus zurück, die an getPhaseDate() übergeben werden soll. Da es sich hierbei nur um eine Schätzung handelt, sollte der Benutzer auch die Phasendaten für Zyklen vor und nach der von dieser Funktion zurückgegebenen Zyklusnummer berechnen.
Zyklus 1 => Neumond 2000-01-06, 18:13:31 UT

year  - Jahreszahl, 4-stellig, Integer
month - Monatszahl, Integer, Januar = 0, Februar = 1, ... , Dezember = 11
*/

function getCycleEstimate(year, month) {
  const yearfrac = (month*30 + 15) / 365;  // Schätzen für den Jahres-Bruchteil
  let k = 12.3685*((year + yearfrac) - 2000);
  return Math.floor(k);
}

/*
Gibt die angegebene Phase innerhalb einer bestimmten Zyklusnummer basierend auf dem Jahr 2000 zurück.
Die Zyklusschätzung wird mit der oben genannten Funktion 'getCycleEstimate()' berechnet.

Zyklus – Integer aus 'getCycleEstimate()'
Phase:
0 =    Neumond,
0.25 = 1. Viertel,
0.5 =  Vollmond,
0.75 = letztes Viertel;
Alle anderen Werte sind ungültig!

Gibt die Julianische Tagzahl JDE der angegebenen Phase in der TD-Zeitskala zurück
*/

// J. Meeus, Astronomical Algorithms, Kap. 49
function getPhaseDate(cycle, phase) {
  let correction;
  const k = cycle + phase;
  const T = k / 1236.85;
  let JDE = 2451550.09766 + 29.530588861*k + 0.00015437*T*T - 0.000000150*T*T*T + 0.00000000073*T*T*T*T;

  const E = 1 - 0.002516*T - 0.0000074*T*T;

  const M = range(2.5534 + 29.10535670*k - 0.0000014*T*T - 0.00000011*T*T*T);
  const Mp = range(201.5643 + 385.81693528*k + 0.0107582*T*T + 0.00001238*T*T*T - 0.000000058*T*T*T*T);
  const F = range(160.7108 + 390.67050284*k - 0.0016118*T*T - 0.00000227*T*T*T + 0.000000011*T*T*T*T);
  const Om = range(124.7746 - 1.56375588*k + 0.0020672*T*T + 0.00000215*T*T*T);

  // Planetenterme
  const A1 = range(299.77 + 0.107408*k - 0.009173*T*T);
  const A2 = range(251.88 + 0.016321*k);
  const A3 = range(251.83 + 26.651886*k);
  const A4 = range(349.42 + 36.412478*k);
  const A5 = range(84.66 + 18.206239*k);
  const A6 = range(141.74 + 53.303771*k);
  const A7 = range(207.14 + 2.453732*k);
  const A8 = range(154.84 + 7.306860*k);
  const A9 = range(34.52 + 27.261239*k);
  const A10 = range(207.19 + 0.121824*k);
  const A11 = range(291.34 + 1.844379*k);
  const A12 = range(161.72 + 24.198154*k);
  const A13 = range(239.56 + 25.513099*k);
  const A14 = range(331.55 + 3.592518*k);


  // Phasenkorrekturen
  if (phase == 0) {
    correction = +0.00002*sin(4*Mp)
                 -0.00002*sin(3*Mp + M)
                 -0.00002*sin(Mp - M - 2*F)
                 +0.00003*sin(Mp - M + 2*F)
                 -0.00003*sin(Mp + M + 2*F)
                 +0.00003*sin(2*Mp + 2*F)
                 +0.00003*sin(Mp + M - 2*F)
                 +0.00004*sin(3*M)
                 +0.00004*sin(2*Mp - 2*F)
                 -0.00007*sin(Mp + 2*M)
                 -0.00017*sin(Om)
                 -0.00024*E*sin(2*Mp - M)
                 +0.00038*E*sin(M - 2*F)
                 +0.00042*E*sin(M + 2*F)
                 -0.00042*sin(3*Mp)
                 +0.00056*E*sin(2*Mp + M)
                 -0.00057*sin(Mp + 2*F)
                 -0.00111*sin(Mp - 2*F)
                 +0.00208*E*E*sin(2*M)
                 -0.00514*E*sin(Mp + M)
                 +0.00739*E*sin(Mp - M)
                 +0.01039*sin(2*F)
                 +0.01608*sin(2*Mp)
                 +0.17241*E*sin(M)
                 -0.40720*sin(Mp);
  } else if ((phase == 0.25) || (phase == 0.75)) {
    correction = -0.00002*sin(3*Mp + M)
                 +0.00002*sin(Mp - M + 2*F)
                 +0.00002*sin(2*Mp - 2*F)
                 +0.00003*sin(3*M)
                 +0.00003*sin(Mp + M - 2*F)
                 +0.00004*sin(Mp - 2*M)
                 -0.00004*sin(Mp + M + 2*F)
                 +0.00004*sin(2*Mp + 2*F)
                 -0.00005*sin(Mp - M - 2*F)
                 -0.00017*sin(Om)
                 +0.00027*E*sin(2*Mp + M)
                 -0.00028*E*E*sin(Mp + 2*M)
                 +0.00032*E*sin(M - 2*F)
                 +0.00032*E*sin(M + 2*F)
                 -0.00034*E*sin(2*Mp - M)
                 -0.00040*sin(3*Mp)
                 -0.00070*sin(Mp + 2*F)
                 -0.00180*sin(Mp - 2*F)
                 +0.00204*E*E*sin(2*M)
                 +0.00454*E*sin(Mp - M)
                 +0.00804*sin(2*F)
                 +0.00862*sin(2*Mp)
                 -0.01183*E*sin(Mp + M)
                 +0.17172*E*sin(M)
                 -0.62801*sin(Mp);

    const W = +0.00306 - 0.00038*E*cos(M)
              +0.00026*cos(Mp)
              -0.00002*cos(Mp - M)
              +0.00002*cos(Mp + M)
              +0.00002*cos(2*F);
    if (phase == 0.25) {
      correction += W;
    } else {
      correction -= W;
    }

  } else if (phase == 0.5) {
    correction = +0.00002*sin(4*Mp)
                 -0.00002*sin(3*Mp + M)
                 -0.00002*sin(Mp - M - 2*F)
                 +0.00003*sin(Mp - M + 2*F)
                 -0.00003*sin(Mp + M + 2*F)
                 +0.00003*sin(2*Mp + 2*F)
                 +0.00003*sin(Mp + M - 2*F)
                 +0.00004*sin(3*M)
                 +0.00004*sin(2*Mp- 2*F)
                 -0.00007*sin(Mp + 2*M)
                 -0.00017*sin(Om)
                 -0.00024*E*sin(2*Mp - M)
                 +0.00038*E*sin(M - 2*F)
                 +0.00042*E*sin(M + 2*F)
                 -0.00042*sin(3*Mp)
                 +0.00056*E*sin(2*Mp + M)
                 -0.00057*sin(Mp + 2*F)
                 -0.00111*sin(Mp - 2*F)
                 +0.00209*E*E*sin(2*M)
                 -0.00514*E*sin(Mp + M)
                 +0.00734*E*sin(Mp - M)
                 +0.01043*sin(2*F)
                 +0.01614*sin(2*Mp)
                 +0.17302*E*sin(M)
                 -0.40614*sin(Mp);
  }

  JDE += correction;

  // Zusatzkorrekturen
  correction = +0.000325*sin(A1)
               +0.000165*sin(A2)
               +0.000164*sin(A3)
               +0.000126*sin(A4)
               +0.000110*sin(A5)
               +0.000062*sin(A6)
               +0.000060*sin(A7)
               +0.000056*sin(A8)
               +0.000047*sin(A9)
               +0.000042*sin(A10)
               +0.000040*sin(A11)
               +0.000037*sin(A12)
               +0.000035*sin(A13)
               +0.000023*sin(A14);

  JDE += correction;

  return JDE;
}


// =========================================================
// Test für 2026
// =========================================================

const year = 2026;


const deltaT = 71; // ≈ momentaner Wert von deltaT (2026)

const cycle = getCycleEstimate(year, 1) - 2;
console.log('Jahr=', year);
console.log('cycle=', cycle);


// Alle Neumonde
for (j = 0; j < 13; j++) {
  let moonUT = getPhaseDate(cycle + j, 0) - deltaT / 86400;
  console.log(`Neu JD = ${moonUT}\t UT = ${JDtoCal(moonUT)}`);
}

console.log('-----------------------------------------------------------');
// Alle 1. Viertel
for (j = 0; j < 13; j++) {
  let moonUT = getPhaseDate(cycle + j, 0.25) - deltaT / 86400;
  console.log(`1.V. JD = ${moonUT}\t UT = ${JDtoCal(moonUT)}`);
}

console.log('-----------------------------------------------------------');
// Alle Vollmonde
for (j = 0; j < 13; j++) {
  let moonUT = getPhaseDate(cycle + j, 0.5) - deltaT / 86400;
  console.log(`Voll JD = ${moonUT}\t UT = ${JDtoCal(moonUT)}`);
}

console.log('-----------------------------------------------------------');
// Alle letzen Viertel
for (j = 0; j < 13; j++) {
  let moonUT = getPhaseDate(cycle + j, 0.75) - deltaT / 86400;
  console.log(`L.V. JD = ${moonUT}\t UT = ${JDtoCal(moonUT)}`);
}

Das gesamte Script-Gedöns kopieren und z.B. hier testen.
Keine Gewähr auf Korrektheit!

cs,
harald

--
 
Danke Harald. Auch ein schönes Skript. Es wird eine Mondphase eingegeben und es kommen die Datumsangaben zurück. Habe es mir in der Browser-Konsole angesehen. Es ist exakt das Gegenteil von dem was ich suche. Es wäre für eine meiner Ideen brauchbar, wenn da nicht stehen würde "Alle anderen Werte sind ungültig!". Es ist dann wohl nur für geviertelte Mondphasen gültig. Unter welcher Lizenz veröffentlichst du es hier?
 
Es ist exakt das Gegenteil von dem was ich suche.
Na dann formuliere mal in Worten aus, was genau du benötigst?

Es wäre für eine meiner Ideen brauchbar, wenn da nicht stehen würde "Alle anderen Werte sind ungültig!"
So steht es da. Die Formeln gelten nur für eben diese Werte: 0, 0.25, 0.5, 0.75. Macht ja auch Sinn.

Unter welcher Lizenz veröffentlichst du es hier?
Hm? Das ist ein von mir angepasstes Skript, der Hauptscript stammt ursprünglich von Greg Miller. Ich habe oberhalb ein paar meiner eigenen Hilfs-Funktionen eingefügt. Ich verstehe halt nicht, warum die Leute immer Math.sin(...) und Math.cos(...) nehmen und dann in jedem Sinus/Cosinus die Parameter umrechnen? Das ist mir einfach zuviel Tipparbeit. *degTorad, *degTorad, *degTorad, *degTorad, .... stumpfsinnig.

cs,
harald
--
 
Ah, das ist wohl aus einer Email Newsgroups, 1990er Jahre. Paul Schlyter? Damals haben das diese Leute nicht so ernst genommen mit dem Copyright und Lizenzen. Da genügt es den Namen zu erwähnen.
... All die schönen alten 90er Websites ... viele gibts schon nicht mehr.

Skript-Anpassung und -Optimierung ... es kommt drauf an, wie penibel ich da sein will. Manchmal ist mir alles egal und andermal soll es perfekt sein. Am Ende zählt, was vorne angezeigt wird, und der Code ist dahinter versteckt. Mir ist da eine saubere Console wichtiger als ein gestylter Code. Was ich eher nicht mag ist Short-Code oder minified. Das wäre bei mir auch zuviel des Guten. Sowas brauchts nur für Websites, die millionenfach aufgerufen werden. Was ich auch nicht mag ist JQuery, aber auch node.js und andere Frameworks sind nix für mich.

Du hast halt die Ahnung von der Materie. Andere schlängen/schummeln sich so durch. ;)
 
Skript-Anpassung und -Optimierung ... es kommt drauf an, wie penibel ich da sein will. Manchmal ist mir alles egal und andermal soll es perfekt sein. Am Ende zählt, was vorne angezeigt wird, und der Code ist dahinter versteckt. Mir ist da eine saubere Console wichtiger als ein gestylter Code. Was ich eher nicht mag ist Short-Code oder minified. Das wäre bei mir auch zuviel des Guten. Sowas brauchts nur für Websites, die millionenfach aufgerufen werden. Was ich auch nicht mag ist JQuery, aber auch node.js und andere Frameworks sind nix für mich.
Refactoring ist auch nicht meine Stärke, aber ich schreibe ja zum Vergnügen und zum Entspannen und keine professionellen Softwaren zum Verkauf. Ein wenig aufgeräumt darf es aber schon sein. Wer im Team arbeitet, der muss auch Code von den anderen lesen können. Muss ich aber nicht. Ich muss nur meinen nach 5 jahren wieder lesen können :cool: "Minified" ist gut für größere JS, aber un-minifyen ist sinnlos weil die Variablen und functions verstümmelt sind, da schreibe ich's dann gleich selbst. jQuery ist wie's aussieht nicht totzukriegen, ich kenne Leute, die verwenden das immer noch, ich habe das Zeugs nie wirklich benötigt. Alles, was ich in astronomischen Scripts benötige kann heute der Browser+Konsole. Das Einzige an Fremdcode sind z.B. so Repos wie "chart.js" für die Visualisierung von Daten, aber immer lokal vom Server laufend. Node.js hab ich schon zu Testzwecken, brauche das aber wenig, ich baue keine WebAPI's oder Echtzeit Apps.

Du hast halt die Ahnung von der Materie. Andere schlängen/schummeln sich so durch.
Es gibt viele Leute hier, die wesentlich mehr Ahnung haben als ich. Mit Ephemeriderechnung beschäftigen sich heutzutage aber nur mehr wenige. Ist halt sehr schnell geworden die Zeit. App auf Handy - zack.

cs,
harald

--
 
Zurück
Oben