<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>SUBLUNAR SPACE - timing</title><link href="https://sublunar.space/" rel="alternate"/><link href="https://sublunar.space/feeds/tag-timing.atom.xml" rel="self"/><id>https://sublunar.space/</id><updated>2022-09-19T00:00:00+02:00</updated><entry><title>Sublunar Almanac</title><link href="https://sublunar.space/2018-12-sublunar-almanac.html" rel="alternate"/><published>2018-12-24T18:30:00+01:00</published><updated>2022-09-19T00:00:00+02:00</updated><author><name>T. F.</name></author><id>tag:sublunar.space,2018-12-24:/2018-12-sublunar-almanac.html</id><summary type="html">&lt;p&gt;Version 1.2 - 19/09/2018&lt;/p&gt;
&lt;h3 id="javascript-necromancy"&gt;JavaScript Necromancy&lt;/h3&gt;
&lt;p&gt;Right at the beginning of the last &lt;em&gt;Retrograde&lt;/em&gt; phase that just ended in the beginning of December &lt;em&gt;Mercury&lt;/em&gt; had dragged me down into the "underworld" of my hard-drive where all the dead and forgotten projects lie. He made me dig up an …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Version 1.2 - 19/09/2018&lt;/p&gt;
&lt;h3 id="javascript-necromancy"&gt;JavaScript Necromancy&lt;/h3&gt;
&lt;p&gt;Right at the beginning of the last &lt;em&gt;Retrograde&lt;/em&gt; phase that just ended in the beginning of December &lt;em&gt;Mercury&lt;/em&gt; had dragged me down into the "underworld" of my hard-drive where all the dead and forgotten projects lie. He made me dig up an undertaking I had left abandoned over a year ago.&lt;/p&gt;
&lt;p&gt;Back when I did &lt;a href="https://runesoup.com/members-only/"&gt;Gordon White's premium member sigil course&lt;/a&gt; I had hacked together some horrendous JavaScript code copied and pasted from GitHub projects and ancient websites and stitched up a web-based tool called "&lt;em&gt;Hygromanteia Timer&lt;/em&gt;" that allowed me to find "&lt;em&gt;fruit machine days&lt;/em&gt;": Auspicious days and hours where planetary rulers, good lunar days and zodiacal moon positions could could be matched up with a desired magical goal - all as described in the &lt;a href="/tag-hygromanteia.html"&gt;Hygromanteia&lt;/a&gt;. Of course I could have used the spreadsheets provided by Gordon and other members and used &lt;a href="https://www.lunarium.co.uk"&gt;Lunarium&lt;/a&gt; to find certain lunar events, or the awesome tools over at &lt;a href="https://ghostlyharmless.com/"&gt;Ghostly Harmless&lt;/a&gt;, but I am not only an occultist but even more a nerd, I wanted to do it &lt;em&gt;better&lt;/em&gt; myself and as an &lt;em&gt;all-in-one&lt;/em&gt; tool.&lt;/p&gt;
&lt;p&gt;The initial code was chaotic but served me well and it was never meant to be used by anyone else. Soon I had reached a dead end when trying to add features to it and in a spontaneous Martian mood I heroically decided to &lt;em&gt;rewrite the whole thing from scratch&lt;/em&gt; and make it modular and extendable. But as with so many things in life, the Saturnian forces in me won by mere tenacity and I lost interest in rewriting the code and left an unfunctional &lt;em&gt;wasteland of code fragments&lt;/em&gt; behind.&lt;/p&gt;
&lt;p&gt;Now suddenly &lt;em&gt;Hermes Cthonios&lt;/em&gt; had kicked me hard and within several weeks of full-on &lt;em&gt;total antisocial geek mode&lt;/em&gt; I collected all the rubble, sorted and rebuilt it into a modular structure, and almost on the minute of Mercury stationing back direct I leaned back from my computer screen and found myself looking at a finished project I dubbed "&lt;em&gt;Sublunar Almanac&lt;/em&gt;".&lt;/p&gt;
&lt;p&gt;Here it is as a publicly available tool you can use to find all kinds of magically auspicious hours for your own ritual needs:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://almanac.sublunar.space"&gt;SUBLUNAR ALMANAC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Merry Christmas!&lt;/em&gt; Please read on for detailed instructions on how to use it and how you can help developing it further:&lt;/p&gt;
&lt;p&gt;&lt;a id="doc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="user-guide"&gt;User Guide&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;Sublunar Almanac&lt;/em&gt; is a browser based tool to display and filter a &lt;em&gt;roster of Planetary Hours&lt;/em&gt;, the most commonly used time-frames for starting magical operations. The starting and ending times, as well as the durations of Planetary Hours depend on the &lt;em&gt;geographic location&lt;/em&gt; because they are defined by the respective local rising and setting times of the sun. The &lt;em&gt;Sublunar Almanac&lt;/em&gt; can be used to find auspicious hours based on &lt;em&gt;place&lt;/em&gt; and &lt;em&gt;astrological data&lt;/em&gt; and information found in &lt;em&gt;grimoires&lt;/em&gt; and other &lt;em&gt;magical texts&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Too lazy to read the whole guide? Check these video examples:&lt;/p&gt;
&lt;div class="embed-responsive embed-responsive-16by9"&gt;
&lt;iframe class="embed-responsive-item" src="https://www.youtube-nocookie.com/embed/v_8VyjpQ_fk" frameborder="0" allow="encrypted-media;" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class="embed-responsive embed-responsive-16by9"&gt;
&lt;iframe class="embed-responsive-item" src="https://www.youtube-nocookie.com/embed/HaRJLscmexw" frameborder="0" allow="encrypted-media;" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h4 id="overview"&gt;Overview&lt;/h4&gt;
&lt;p&gt;When activated properly &lt;em&gt;Sublunar Almanac&lt;/em&gt; displays a roster of rectangular boxes, each representing a Planetary Hour.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Roster" src="/assets/images/slcal_phours.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;They are numbered from 1 to 24, the &lt;em&gt;yellow&lt;/em&gt; ones are during the &lt;em&gt;day&lt;/em&gt; (sunrise to sunset), the &lt;em&gt;blue&lt;/em&gt; ones during the &lt;em&gt;night&lt;/em&gt; (sunset to sunrise). The large number in the bottom row indicates the &lt;em&gt;number of the hour&lt;/em&gt;, the numbers in the center of the top row show the real &lt;a href="https://en.wikipedia.org/wiki/Gregorian_calendar"&gt;Gregorian Calendar&lt;/a&gt; &lt;em&gt;date&lt;/em&gt; in the format dd/mm. The symbol in the top left corner indicates the &lt;em&gt;ruler of the current Planetary Day&lt;/em&gt; (Sol, Luna, Mars, Mercury, Jupiter, Venus, Saturn) and the one in the right corner the &lt;em&gt;ruler of the Planetary Hour&lt;/em&gt;. Below you find the &lt;em&gt;starting time&lt;/em&gt; of this hour on the left in hh:mm format and the &lt;em&gt;ending time&lt;/em&gt; on the right, respectively.&lt;/p&gt;
&lt;p&gt;But before the &lt;em&gt;Sublunar Almanac&lt;/em&gt; shows you any of this, it needs to be individually &lt;em&gt;set up&lt;/em&gt;.&lt;/p&gt;
&lt;h4 id="settings"&gt;Settings&lt;/h4&gt;
&lt;p&gt;&lt;img alt="Navbar" src="/assets/images/slc_menu.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The program needs to know a &lt;em&gt;geographic location&lt;/em&gt; and a &lt;em&gt;range of hours&lt;/em&gt; to display, among other options. These must be set properly. To do that, click the &lt;em&gt;Settings&lt;/em&gt; button on the top left of the grey &lt;em&gt;navigation bar&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Settings" src="/assets/images/subal_settings.png" /&gt;&lt;/p&gt;
&lt;p&gt;The easiest way to set up a location is by clicking the &lt;em&gt;Locate Me&lt;/em&gt; button and allowing the browser to pass the geolocation information to the &lt;em&gt;Almanac&lt;/em&gt;. If your browser does not support that feature or if you want to calculate the &lt;em&gt;Almanac&lt;/em&gt; for a location that is not the one you are currently at, you can enter it manually by typing the &lt;em&gt;name of your city&lt;/em&gt; or place into the "&lt;em&gt;Manual Geolocation&lt;/em&gt;" field and wait for the &lt;em&gt;auto-complete list&lt;/em&gt; to show you all the matches. When you click one of the options in the list, the fields for &lt;em&gt;UTC-Offset&lt;/em&gt; (time difference from Universal Time), &lt;em&gt;Latitude&lt;/em&gt; and &lt;em&gt;Longitude&lt;/em&gt; are automatically filled in.&lt;/p&gt;
&lt;p&gt;Alternatively you may of course provide the coordinates and offset yourself &lt;em&gt;manually&lt;/em&gt;. These latter fields are &lt;em&gt;crucial&lt;/em&gt; for the &lt;em&gt;Almanac&lt;/em&gt; to function, so if they are empty, &lt;em&gt;it won't work&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The other important information needed is the &lt;em&gt;time-range&lt;/em&gt; to be displayed. The &lt;em&gt;Time and Date&lt;/em&gt; field can be used to adjust the desired starting point of the Almanac. It is set to &lt;em&gt;right now&lt;/em&gt; by default. The number of days for which the &lt;em&gt;Almanac&lt;/em&gt; will calculate the hours can be set in the &lt;em&gt;Generate Days&lt;/em&gt; field. It is set to one week by default but can take any number of days. The &lt;em&gt;Almanac&lt;/em&gt; takes around one second to calculate all information for one day, so if you want to generate 30 or more days, prepare to be &lt;em&gt;patient&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Almanac&lt;/em&gt; shows you all the hours from the beginning of the day set up in the &lt;em&gt;Time and Date&lt;/em&gt; field. If you want to only see hours that lie in the future, tick the &lt;em&gt;Hide Past&lt;/em&gt; checkbox. By default the &lt;em&gt;Almanac&lt;/em&gt; uses the &lt;em&gt;Tropical Zodiac&lt;/em&gt; for Astrological calculations. If you - like myself - prefer to use the &lt;em&gt;Sidereal Zodiac&lt;/em&gt;, please make sure you tick the &lt;em&gt;Sidereal&lt;/em&gt; checkbox. Since September 2022 the &lt;em&gt;Almanac&lt;/em&gt; only shows operations and tags in the filters (see section &lt;em&gt;Filtering&lt;/em&gt; below) that are relevant to the chosen timeframe. If you would like to see all possible filters including the ones outside of the chosen timeframe, untick this checkbox.&lt;/p&gt;
&lt;p&gt;The bottom part of the &lt;em&gt;Settings&lt;/em&gt; are a list of all &lt;em&gt;Plug-in Modules&lt;/em&gt; currently implemented in the &lt;em&gt;Sublunar Almanac&lt;/em&gt;. Each module calculates and displays different information based on astrological phenomena and lists of auspicious times transmitted through magical texts and these modules are the &lt;em&gt;power behind the Almanac&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;By default, all modules related to astrological phenomena and planetary timing are &lt;em&gt;activated&lt;/em&gt; and all modules related to magical texts are &lt;em&gt;deactivated&lt;/em&gt;, so if you want to see for example, what the &lt;em&gt;Hygromanteia&lt;/em&gt; or &lt;em&gt;PGM&lt;/em&gt; have to say about certain times the moon is in certain Zodiac signs, make sure to activate these modules by &lt;em&gt;ticking their checkbox&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;When all settings are made, click the blue &lt;em&gt;Generate&lt;/em&gt; button and watch the magic unfold. The &lt;em&gt;Settings&lt;/em&gt; window will close and a &lt;em&gt;blue line and circle&lt;/em&gt; on the top of the screen will indicate the &lt;em&gt;status&lt;/em&gt; of the &lt;em&gt;background calculations&lt;/em&gt;. When it is done, the roster of Planetary Hours will appear according to your settings.&lt;/p&gt;
&lt;h4 id="hour-information"&gt;Hour Information&lt;/h4&gt;
&lt;p&gt;When you &lt;em&gt;click&lt;/em&gt; any of the Planetary Hour boxes you can see all calculated information about this hour depending on the modules previously selected in the Settings:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Navbar" src="/assets/images/slc_info.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;If you want to save this selected hour to your &lt;em&gt;Google Calendar&lt;/em&gt; or any other calendar that supports the &lt;em&gt;iCal&lt;/em&gt; format, such as Apple or Microsoft Calendar, click one of the buttons on the bottom of the information window.&lt;/p&gt;
&lt;h4 id="filtering"&gt;Filtering&lt;/h4&gt;
&lt;p&gt;The main power of &lt;em&gt;Sublunar Almanac&lt;/em&gt; is the &lt;em&gt;filtering&lt;/em&gt;. Notice the small menus that appeared in the &lt;em&gt;top right of the navigation bar&lt;/em&gt; after you clicked Generate? These are filters provided by the modules to find an auspicious hour for whatever operation you want to execute.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Navbar" src="/assets/images/slc_filtermenu.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;When you click on one of them, its &lt;em&gt;filter options&lt;/em&gt; will be displayed:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Navbar" src="/assets/images/slc_filter.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Here you can see two columns with all the &lt;em&gt;filter criteria&lt;/em&gt; you can apply to the hours in the roster. The &lt;em&gt;left column&lt;/em&gt; is a list of &lt;em&gt;tags&lt;/em&gt; related to all the criteria listed in the right column. If you click on one of the tags, only the criteria related to this tag are listed. When you &lt;em&gt;click a filter criterium in the right column&lt;/em&gt; it will &lt;em&gt;immediately be applied&lt;/em&gt; to the grid of Planetary Hours in the background. The filter criteria are &lt;em&gt;mutually inclusive&lt;/em&gt; ("OR" logic), that means that when you select more than one of them, &lt;em&gt;all of the selected ones&lt;/em&gt; are applied ("show hours matching criterium A OR B OR C").&lt;/p&gt;
&lt;p&gt;In contrast, the filter sections themselves are &lt;em&gt;mutually exclusive&lt;/em&gt; ("AND" logic). So if you select criteria from filter A and criteria from filter B, the calendar will just display dates that have an &lt;em&gt;overlap&lt;/em&gt; of the criteria of A and B ("show hours matching criterium A OR B from filter A AND criterium C from filter D"). This has been done to make it possible to find Planetary Hours that have &lt;em&gt;overlapping auspiciousness&lt;/em&gt; criteria (for example to "find an hour of Mercury on the day of Jupiter when Mercury is exalted") - in Rune Soup terms also known as "&lt;em&gt;Fruit Machine&lt;/em&gt;" moments.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Beware:&lt;/em&gt; If you choose &lt;em&gt;too many criteria&lt;/em&gt; that do not match any of the displayed Planetary Hours, the roster will &lt;em&gt;become empty&lt;/em&gt;. To reset all the filters at the same time and display all Planetary Hours, click the &lt;em&gt;Reset&lt;/em&gt; button in the navigation bar.&lt;/p&gt;
&lt;h4 id="offline-functionality"&gt;Offline Functionality&lt;/h4&gt;
&lt;p&gt;In a &lt;em&gt;limited way&lt;/em&gt; it is possible to use the &lt;em&gt;Sublunar Almanac&lt;/em&gt; &lt;em&gt;offline&lt;/em&gt;. This is practical when you know that you will not have internet or when you want to calculate a &lt;em&gt;larger range of days&lt;/em&gt; for a place and you don't want to &lt;em&gt;wait for the lengthy calculation&lt;/em&gt; everytime you use it. When you have generated a roster it is possible to save the data by going back into the &lt;em&gt;Settings&lt;/em&gt; and clicking on the newly appeared &lt;em&gt;download button&lt;/em&gt; on the bottom left. Now simply leave the &lt;em&gt;Sublunar Almanac&lt;/em&gt; open in you browser before you go offline or &lt;em&gt;save it locally&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Navbar" src="/assets/images/slc_download.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Next time you want to &lt;em&gt;regenerate the roster&lt;/em&gt;, simply open &lt;em&gt;Settings&lt;/em&gt; and instead of providing location and time information as described in the &lt;em&gt;Settings&lt;/em&gt; section above, click the &lt;em&gt;Select File&lt;/em&gt; button on the bottom left and select the file you downloaded in the step explained in the previous paragraph. Now you can still select whether to &lt;em&gt;Hide Past&lt;/em&gt; hours or use the &lt;em&gt;Sidereal&lt;/em&gt; zodiac and which modules to use, but all &lt;em&gt;other fields are ignored&lt;/em&gt;. Hit &lt;em&gt;Generate&lt;/em&gt; and the roster is immediately generated without any necessary calculations.&lt;/p&gt;
&lt;h4 id="license"&gt;License&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Sublunar Almanac&lt;/em&gt; is free to use and also published as open source under &lt;em&gt;MIT License&lt;/em&gt;! If you find it useful and it helps you improve your enchantments, please be so kind and &lt;a href="https://ko-fi.com/U7U4NQ0Q"&gt;Buy Me a Coffee!&lt;/a&gt;.&lt;/p&gt;
&lt;!-- #### Desktop App

Since January 2019 there is also a Desktop App that has all the features of the online-tool and in addition:

* When requesting the App, users can provide a place name or coordinates and receive 365 days of pre-calculated planetary hours that can be instantly loaded without the need of calculations. If this option is activated the App downloads the preset files upon the first activation. A *Load Preset* button will appear in the menu bar that can be clicked any time to load it into the grid. (*Caveats:* Due to sheer amount of *Planetary Hours* loaded into the grid with this method, the App might become unresponsive when filtering and then de-selecting applied filters. A workaround is to simple reload the presets and start over with the filtering process.)

* When the App is used *offline*, the automatic location detection and the city-search function *do not work anymore* and are *replaced* by a dropdown-menu with all the *last locations you calculated planetary hours for* when you were online. Optionally you can always *provide the coordinates* for the location you want to calculated the hours for and use the *Save Place* button to also save it to the list of known locations.

If you are interested in getting the App, please [check this article](/2019-01-fiat-applicatio.html). --&gt;

&lt;h4 id="notes-and-caveats"&gt;Notes and Caveats&lt;/h4&gt;
&lt;p&gt;Most importantly: I take &lt;em&gt;no reliability or warranty on the accuracy&lt;/em&gt; of any of the information provided by &lt;em&gt;Sublunar Almanac&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I am &lt;em&gt;not a professional&lt;/em&gt; JavaScript programmer, but I taught myself how to code to get stuff done. &lt;em&gt;Please forgive me&lt;/em&gt; if my code looks shit or has bugs.&lt;/p&gt;
&lt;p&gt;Of course &lt;em&gt;astrological phenomena&lt;/em&gt; are in &lt;em&gt;constant change&lt;/em&gt;, from minute to minute. The &lt;em&gt;Sublunar Almanac&lt;/em&gt; calculates all data for the &lt;em&gt;start time&lt;/em&gt; of each Planetary Hour, so if your magical operation strictly depends on the moon being in a certain range of degrees of the Zodiac or needs to happen only on a certain Lunar day, please double-check with other sources. Usually it is &lt;em&gt;magically sufficient&lt;/em&gt; to &lt;em&gt;start a magical operation in a certain hour&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The difference between &lt;em&gt;tropical&lt;/em&gt; and &lt;em&gt;sidereal Zodiac&lt;/em&gt; I use is 24° 07' 02"&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;technical reasons&lt;/em&gt; the only dates where all phenomena can be fairly &lt;em&gt;accurately&lt;/em&gt; calculated are between &lt;em&gt;1900&lt;/em&gt; and &lt;em&gt;2100&lt;/em&gt; CT, Lunar Days only between &lt;em&gt;1970&lt;/em&gt; and &lt;em&gt;2100&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Lunar Day 1&lt;/em&gt; starts on the &lt;em&gt;exact moment of New Moon&lt;/em&gt;, all consecutive Lunar Days start at local &lt;em&gt;moonrise&lt;/em&gt;-times.&lt;/p&gt;
&lt;p&gt;For astrological &lt;em&gt;aspects&lt;/em&gt; I use orbs according to &lt;em&gt;Hellenistic sources&lt;/em&gt;. All planets have an orb-size of 3 degrees, the luminaries 3.2 degrees for all aspects except conjunctions where the moon has 13 degrees and the sun 15. For direction and speed calculations I interpret all speeds between -0.01 and 0.01 degrees as &lt;em&gt;stations&lt;/em&gt; for the inner planets and between -0.001 and 0.001 degrees for the outer planets, everything below that is &lt;em&gt;retrograde&lt;/em&gt;, everything above &lt;em&gt;direct&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="contribute"&gt;Contribute&lt;/h3&gt;
&lt;p&gt;If you would like to contribute to the development, there are many different ways to do so:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Research:&lt;/em&gt; if you have access to an interesting grimoiric text or astrological system that has useful magical timing information that could be added to &lt;em&gt;Sublunar Almanac&lt;/em&gt; as a module, find and extract the information and send it to me! &lt;em&gt;info (ät) sublunar (dot) space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Invent:&lt;/em&gt; if you have more ideas how to make the project better, please let me know! &lt;em&gt;info (ät) sublunar (dot) space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Report:&lt;/em&gt; if you are an astrologist or other cyclic-time-nerd, double check the information calculated by &lt;em&gt;Sublunar Almanac&lt;/em&gt; and report &lt;em&gt;errors&lt;/em&gt; you stumble upon! &lt;em&gt;info (ät) sublunar (dot) space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Code:&lt;/em&gt; if you want to code your own module to plug into &lt;em&gt;Sublunar Almanac&lt;/em&gt; head over to the &lt;a href="#develop"&gt;module dev&lt;/a&gt; section or if you want to improve the overall code, &lt;a href="https://github.com/sublunarspace/sublunar.almanac"&gt;check our GitHub&lt;/a&gt;. If you happen to have experience in javascript phone app development and know WebAssembly JS please contact me immediately! &lt;em&gt;info (ät) sublunar (dot) space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Donate:&lt;/em&gt; support me with a bit of Mercurial cash to keep me motivated: &lt;a href="https://ko-fi.com/U7U4NQ0Q"&gt;Buy Me a Coffee!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a id="develop"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="module-development"&gt;Module Development&lt;/h4&gt;
&lt;h5 id="module-structure"&gt;Module Structure&lt;/h5&gt;
&lt;p&gt;The plug-in modules are simple JavaScript objects with a fixed architecture that neatly integrate into the Sublunar Almanac. The structure of each module is the same:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::javascript
var module_x = {

  definitions: {
    name: "Module Name",
    actions: [
      [0],
      [{
        "id": "1",
        "action": "Action description",
        "tags": "tag1 tag2",
        "hide": "info"
      }]
    ]
  },
  property: function(m) {
    return m;
  },
  calculate: function(definitions, property) {
    return definitions.actions[property];
  }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see it is a simple JavaScript object with variables.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;var module_&amp;lt;x&amp;gt;&lt;/em&gt; where &amp;lt;x&amp;gt; is a unique module identifier&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.name&lt;/em&gt; is a string with the descriptive name of the module to be displayed on the page&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.actions&lt;/em&gt; is an array of arrays of objects. Each object is a descriptor of an operation or phenomenon the module can display or filter according to information it gets from &lt;em&gt;Sublunar Almanac&lt;/em&gt;. The &lt;em&gt;id&lt;/em&gt; should be a unique number inside the module, &lt;em&gt;action&lt;/em&gt; is a descriptive string of the operation or phenomenon, &lt;em&gt;tags&lt;/em&gt; a space delimited list of tags associated with the operation or phenomenon. Optionally you can define &lt;em&gt;hide&lt;/em&gt; either with &lt;em&gt;info&lt;/em&gt; which will keep this phenomenon or operation hidden from the information window that appears when clicking on the planetary hour but visible in the filter lists, or &lt;em&gt;filter&lt;/em&gt; which hides it from the filter lists but displays it in the information window.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.property&lt;/em&gt; is a function that receives a &lt;a href="#ephemeris"&gt;JSON ephemeris object&lt;/a&gt; from &lt;em&gt;Sublunar Almanac&lt;/em&gt; for each planetary hour calculated. In the function you can modify or filter anything from this object and return it to the next function:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.calculate&lt;/em&gt; is the main function that calculates and relates the &lt;em&gt;property&lt;/em&gt; object received from the previous function with any data of the whole &lt;em&gt;definitions&lt;/em&gt; object itself (mainly for &lt;em&gt;actions&lt;/em&gt;). It should return an single dimension array of objects defined in the &lt;em&gt;actions&lt;/em&gt; part of the module.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Optional variables:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.core&lt;/em&gt; with boolean &lt;em&gt;true/false&lt;/em&gt; defines it as a core module that is enabled by default in the Settings&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.group&lt;/em&gt; defines the module as being part of a group of modules&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.group.id&lt;/em&gt; unique identifier of the group. All modules belonging to the group should share the same id.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.group.text&lt;/em&gt; string of the group name how it appears throughout the &lt;em&gt;Sublunar Almanac&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;definitions.group.info&lt;/em&gt; with string &lt;em&gt;true&lt;/em&gt; sums up all submodules informations under the headline of the &lt;em&gt;group.text&lt;/em&gt; in the information window&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id="helper-functions"&gt;Helper Functions&lt;/h5&gt;
&lt;p&gt;Here are some  functions that can be called from within the module to calculate certain things. The function involving the zodiac respect the setting for &lt;em&gt;tropical&lt;/em&gt; or &lt;em&gt;sidereal&lt;/em&gt; in the &lt;em&gt;Settings&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;SL.Astro.Nomy.moonPhase(object)&lt;/em&gt; function that takes an &lt;em&gt;object&lt;/em&gt; argument with properties &lt;em&gt;angle&lt;/em&gt; and &lt;em&gt;day&lt;/em&gt; as provided by the &lt;a href="#ephemeris"&gt;JSON ephemeris object&lt;/a&gt; and returns the phase of the moon (1 - 8)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SL.Astro.Logy.zodToDeg(string)&lt;/em&gt; function that takes a string argument in the form "12 Aries 24" or similar and calculates a decimal degree (tropical ecliptic longitude)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SL.Astro.Logy.degToZod(float, sidereal)&lt;/em&gt; function that takes a float argument (tropical ecliptic longitude) and turns it into a string like "12 Aries 24" (degrees, sign, minutes)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SL.Astro.Logy.getZodiac(float)&lt;/em&gt; function that takes a float argument (tropical ecliptic longitude) and returns an integer indicating the zodiac sign of the degrees (1 to 12)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id="ephemeris"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5 id="json-ephemeris-object"&gt;JSON Ephemeris Object&lt;/h5&gt;
&lt;p&gt;All loaded modules are called each time a planetary hour is calculated and the &lt;em&gt;property&lt;/em&gt; function receives a &lt;em&gt;JSON ephemeris object&lt;/em&gt; with the following data as a base of all the module's calculations and returned information:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::javascript
{
"ts": 1544161663,
"lunar": {
  "day": 1,
  "angle": 176.388282,
  "phase": 0.000993
},
"planetary": {
  "day": {
    "no": 5,
    "start": 1544161663,
    "end": 1544205306
  },
  "night": {
    "start": 1544205307,
    "end": 1544248088
    },
  "hour": {
    "no": 0,
    "start": 1544161663,
    "end": 1544165299,
    "length": {
      "day": 3637,
      "night": 3565 }
    }
  },
  "ephemeris": {
    "sun": {
      "deg": 255.057706,
      "speed": 1.015755
    },
    "moon": {
      "deg": 254.313237,
      "speed": 12.599819
    },
    "mercury": {
      "deg": 237.281215,
      "speed": 0.060434
    },
    "venus": {
      "deg": 212.702776,
      "speed": 0.646929
    },
    "mars": {
      "deg": 343.510950,
      "speed": 0.651342
    },
    "jupiter": {
      "deg": 246.386171,
      "speed": 0.222509
    },
    "saturn": {
      "deg": 278.507393,
      "speed": 0.111683
    },
    "asc": {
      "deg": 258.847077
    },
    "mc": {
      "deg": 166.819098
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ts&lt;/em&gt; is the unix epoch timestamp of the calculated hour&lt;/p&gt;
&lt;p&gt;&lt;em&gt;lunar.day&lt;/em&gt; is the current lunar day (0 to 29)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;lunar.angle&lt;/em&gt; is the phase angle of the moon to the sun (0.0 to 180.0)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;lunar.phase&lt;/em&gt; is the percentage of illumination (0.0 to 1.0)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.day.no&lt;/em&gt; is the current day of the week from Sunday to Saturday (0 to 6)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.day.start&lt;/em&gt; is the start of the day (sunrise) in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.day.end&lt;/em&gt; is the end of the day (sunset) in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.night.start&lt;/em&gt; is the start of the night (second after sunset) in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.night.end&lt;/em&gt; is the end of the night (second before sunrise) in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.hour.no&lt;/em&gt; is the number of the planetary hour (0 to 23)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.hour.start&lt;/em&gt; is the start of the hour in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.hour.end&lt;/em&gt; is the end of the hour in unix epoch format&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.hour.length.day&lt;/em&gt; is the number of seconds a planetary daytime hour on the current day has&lt;/p&gt;
&lt;p&gt;&lt;em&gt;planetary.hour.length.night&lt;/em&gt; is the number of seconds a planetary nighttime hour on the current day has&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ephemeris.&amp;lt;planet&amp;gt;.deg&lt;/em&gt; tropical ecliptic longitude position of the planet in decimal degrees (0.0 to 360.0)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ephemeris.&amp;lt;planet&amp;gt;.speed&lt;/em&gt; tropical ecliptic speed of the planet in decimal degrees per day (0.0 to 13.0)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ephemeris.asc.deg&lt;/em&gt; tropical ecliptic longitude position of the ascendant in decimal degrees (0.0 to 360.0)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ephemeris.mc.deg&lt;/em&gt; tropical ecliptic longitude position of the midheaven in decimal degrees (0.0 to 360.0)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id="example"&gt;Example&lt;/h5&gt;
&lt;p&gt;How all this works together you will hopefully understand better looking at this example module that provides filters and information about the sign of the moon for the planetary hour:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::javascript
var module_moon = {

  definitions: {
    core: true,
    name: "Moon Sign",
    group: {
      id: "astrology",
      text: "Astrology",
      info: "true"
    },
    actions: [
      [0],
      [{
        "id": "1",
        "action": "Moon in Aries",
        "tags": "moon aries",
        "hide": "info"
      }], [{
        "id": "2",
        "action": "Moon in Taurus (Exalted)",
        "tags": "moon taurus exalted"
      }], [{
        "id": "3",
        "action": "Moon in Gemini",
        "tags": "moon gemini",
        "hide": "info"
      }], [{
        "id": "4",
        "action": "Moon in Cancer (Domicile)",
        "tags": "cancer moon domicile"
      }], [{
        "id": "5",
        "action": "Moon in Leo",
        "tags": "moon leo",
        "hide": "info"
      }], [{
        "id": "6",
        "action": "Moon in Virgo",
        "tags": "moon virgo",
        "hide": "info"
      }], [{
        "id": "7",
        "action": "Moon in Libra",
        "tags": "moon libra",
        "hide": "info"
      }], [{
        "id": "8",
        "action": "Moon in Scorpio (Fall)",
        "tags": "moon scorpio fall"
      }], [{
        "id": "9",
        "action": "Moon in Sagittarius",
        "tags": "moon sagittarius",
        "hide": "info"
      }], [{
        "id": "10",
        "action": "Moon in Capricorn (Detriment)",
        "tags": "moon capricorn detriment"
      }], [{
        "id": "11",
        "action": "Moon in Aquarius",
        "tags": "moon aquarius",
        "hide": "info"
      }], [{
        "id": "12",
        "action": "Moon in Pisces",
        "tags": "moon pisces",
        "hide": "info"
      }]
    ]
  },
  property: function(m) {
    return SL.Astro.Logy.getZodiac(m.ephemeris.moon.deg);
  },
  calculate: function(definitions, property) {
    return definitions.actions[property.sign];
  }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; you can see that this module has the id "moon" and the name "Moon Sign", it is a core module and enabled by default in the Settings, it belongs to a whole group of modules called "Astrology". The &lt;em&gt;actions&lt;/em&gt; are sorted by Zodiac sign and only the ones that show the moon in a sign where she is in domicile/exalted/detriment/fall should be displayed in the info window, all others are hidden, yet still visible in the filter window. The &lt;em&gt;property&lt;/em&gt; function takes the &lt;em&gt;ephemeris.moon.deg&lt;/em&gt; degree and passes it to a public function &lt;em&gt;SL.Astro.Logy.getZodiac&lt;/em&gt; (described below) and returns the result. The &lt;em&gt;calculate&lt;/em&gt; function takes the result object, takes the &lt;em&gt;sign&lt;/em&gt; property ( 1 to 12 in the Zodiac ) and returns the appropriate object array from &lt;em&gt;definitions.actions&lt;/em&gt; back to the &lt;em&gt;Almanac&lt;/em&gt;.&lt;/p&gt;</content><category term="Research"/><category term="tech"/><category term="astrology"/><category term="timing"/></entry></feed>