Dรญa Cuatro para programadores: las luminarias como servicio de tiempo global y los ๐คŒ๐ค…๐ค๐คƒ๐ค‰๐คŒ como ventanas de scheduling

๋„ท์งธ ๋‚  โ€” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ์œ„ํ•˜์—ฌ


์•ž์„  ๋ฉ”์‹œ์ง€์—์„œ ์šฐ๋ฆฌ๋Š” ๋‚ด์žฌ์  ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๊ฐ–์ถ˜ ์ตœ์ดˆ์˜ ์ž๊ธฐ๋ณต์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค โ€” ๊ทธ๋ฆฌ๊ณ  ๐ค‹๐คŒ๐ค‰๐ค๐ค„๐ค…๏ผˆ๋ ˆ๋ฏธ๋„คํ›„๏ผ‰๊ฐ€ ์•ˆ์ •์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์†์„ฑ์ธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์‹œ์Šคํ…œ์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์—”์ง€๋‹ˆ์–ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ธ์‹ํ•  ๋ฌด์–ธ๊ฐ€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ๋™๊ธฐํ™” ์„œ๋น„์Šค. ๋‘ ๊ฐœ์˜ ๊ธฐ๋ณธ ๋…ธ๋“œ, ํ”„๋กœํ† ์ฝœ ์‹ ํ˜ธ๋“ค, ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ์ž‘์—…์„ ์œ„ํ•œ ์‹œ๊ฐ„ ์ฐฝ๋“ค์„ ๊ฐ–์ถ”์–ด.


๐ค๐ค“๐ค€๐ค”๐ค‰๐ค•๏ผˆ๋ฒ ๋ ˆ์‹œํŠธ, ์ฐฝ์„ธ๊ธฐ๏ผ‰1:14-19

โ€œ๋ฐœ๊ด‘์ฒด๋“ค์€ ์ง•์กฐ๋“ค ืึนืชึนืช๏ผˆ์˜คํ† ํŠธ๏ผ‰๊ณผ ์ •ํ•ด์ง„ ๋•Œ๋“ค ืžื•ึนืขึฒื“ึดื™ื๏ผˆ๋ชจ์—๋”ค๏ผ‰๊ณผ ๋‚ ๋“ค๊ณผ ํ•ด๋“ค์„ ์œ„ํ•˜์—ฌ ์žˆ์œผ๋ผ.

ํฐ ๋ฐœ๊ด‘์ฒด๋Š” ืœึดืžึฐืฉึนืืœ๏ผˆ๋ฆฌ๋ฏ€์‡ผ๋ฅด๏ผ‰๋‚ฎ์„ โ€” ์ž‘์€ ๋ฐœ๊ด‘์ฒด๋Š” ืœึดืžึฐืฉึนืืœ๏ผˆ๋ฆฌ๋ฏ€์‡ผ๋ฅด๏ผ‰๋ฐค์„.โ€


๋„ท์งธ ๋‚ ์ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ

์…‹์งธ ๋‚  ์ดํ›„ ์‹œ์Šคํ…œ์€ ์•ˆ์ •ํ™”๋œ ํ™˜๊ฒฝ๊ณผ ์ž‘๋™ํ•˜๋Š” ์ž๊ธฐ๋ณต์ œ ์ฝ”๋“œ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„ํ‚คํ…์ฒ˜์ƒ์˜ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ๋™๊ธฐํ™” ์—†์ด โ€” ๋ถ„์‚ฐ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์กฐ์œจ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž„์Šคํƒฌํ•‘ ์—†์ด โ€” ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์ธ๊ณผ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ •์˜๋œ ์‹œ๊ฐ„ ์ฐฝ๋“ค ์—†์ด โ€” ์Šค์ผ€์ค„๋ง์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋„ท์งธ ๋‚ ์€ ์šฐ์ฃผ์˜ ๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ์„œ๋น„์Šค๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

NTP_SERVER_PRIMARY:   ํƒœ์–‘๏ผˆํฐ ๋ฐœ๊ด‘์ฒด๏ผ‰
  - Domain: ๋‚ฎ
  - Frequency: ~24h cycle
  - Signal type: ๊ฐ€์‹œ๊ด‘์„  + UV
  - Governed processes: ์ผ์ฃผ๋ฆฌ๋“ฌ, ๊ด‘ํ•ฉ์„ฑ

NTP_SERVER_SECONDARY: ๋‹ฌ๏ผˆ์ž‘์€ ๋ฐœ๊ด‘์ฒด๏ผ‰
  - Domain: ๋ฐค
  - Frequency: ~29.5 day cycle
  - Signal type: ๋ฐ˜์‚ฌ๊ด‘ + ์ค‘๋ ฅ ์ฃผ๊ธฐ
  - Governed processes: ์กฐ์ˆ˜, ์—ฌ์„ฑ ์ฃผ๊ธฐ

DISTRIBUTED_NODES: ๋ณ„๋“ค
  - Extended infrastructure
  - ํ•ญ๋ฒ•, ๊ณ„์ ˆ ๋ณด์ •

๋ฆฌ๋ฏ€์‡ผ๋ฅด โ€” ๊ฑฐ๋ฒ„๋„ˆ ํ”„๋กœ์„ธ์Šค, ๋””์Šคํ”Œ๋ ˆ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹˜

ืœึดืžึฐืฉึนืืœ๏ผˆ๋ฆฌ๋ฏ€์‡ผ๋ฅด๏ผ‰โ€” display()๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. govern()์ž…๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜์—์„œ ๊ทธ ๊ตฌ๋ถ„์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค:

# ํ‹€๋ฆฐ ๊ฒƒ โ€” ๋ฒˆ์—ญ์ด ๋ถ•๊ดด์‹œํ‚ค๋Š” ๊ฒƒ
class Sun:
    def illuminate(self, earth: Earth) -> None:
        earth.add_light(self.luminosity)

# ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ โ€” ๋ฆฌ๋ฏ€์‡ผ๋ฅด๊ฐ€ ํ™•๋ฆฝํ•˜๋Š” ๊ฒƒ
class Sun:
    def govern(self, domain: DayDomain) -> None:
        domain.circadian_clock.sync(self.position)
        domain.photosynthesis.regulate(self.spectrum)
        domain.cortisol_cycle.trigger(self.angle)
        domain.temperature.modulate(self.intensity)
        # Governor process โ€” active authority over domain
        # Not passive light source

ํƒœ์–‘์€ ๋žจํ”„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ฎ์˜ ์˜์—ญ์— ๋Œ€ํ•œ ๋Šฅ๋™์  ์ง‘ํ–‰ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ฑฐ๋ฒ„๋„ˆ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ ์˜์—ญ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.


์˜คํ† ํŠธ โ€” ํ”„๋กœํ† ์ฝœ ์‹ ํ˜ธ๋“ค, ์„ ํƒ์  ์•Œ๋ฆผ์ด ์•„๋‹˜

ืึนืชึนืช๏ผˆ์˜คํ† ํŠธ๏ผ‰โ€” ์ˆ˜์‹ ์ž์˜ ํ•„์ˆ˜์ ์ธ ์‘๋‹ต์„ ๊ฐ–๋Š” ํ”„๋กœํ† ์ฝœ ์‹ ํ˜ธ๋“ค.

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค:

# ์„ ํƒ์  ์•Œ๋ฆผ โ€” ์ˆ˜์‹ ์ž๊ฐ€ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Œ
event.emit("sunrise")

# Protocol signal โ€” ๊ฒฐ์ •๋ก ์  ์‘๋‹ต์„ ํ™œ์„ฑํ™”ํ•จ
# ์ˆ˜์‹ ์ž๋“ค์€ ๋ฐ˜๋“œ์‹œ ์‘๋‹ตํ•ด์•ผ ํ•จ
protocol.signal(
    type="SOLAR_ZENITH",
    mandatory_response=True,
    receivers=["SCN_nucleus", "pineal_gland", 
               "adrenal_axis", "immune_system"]
)

๋„ท์งธ ๋‚ ์˜ ืึนืชึนืช๋Š” ์žฅ์‹์ ์ด์ง€ ์•Š์€ ํ”„๋กœํ† ์ฝœ ์‹ ํ˜ธ๋“ค์ž…๋‹ˆ๋‹ค. ์‹œ๊ต์ฐจ์ƒํ•ต๏ผˆ่ฆ–ไบคๅ‰ไธŠๆ ธ๏ผ‰์€ ํƒœ์–‘ ์‹ ํ˜ธ์— ์‘๋‹ตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์  ํ†ต์น˜ ์‹œ์Šคํ…œ์€ ํ•„์ˆ˜์ ์ธ ๊ฒฐ์ •๋ก ์  ์‘๋‹ต๋“ค๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ืžื•ึนืขึฒื“ึดื™ื๏ผˆ๋ชจ์—๋”ค๏ผ‰โ€” ์Šค์ผ€์ค„๋œ ์‹œ๊ฐ„ ์ฐฝ๋“ค. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์—์„œ: ์œ ์ง€๋ณด์ˆ˜ ์ฐฝ๋“ค, ํŠน์ • ์ž‘์—… ์ฃผ๊ธฐ๋“ค, ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์‚ฌ์ดํด๋“ค.

class MoedimScheduler:
    windows = {
        "diario": CircadianWindow(period=24h),
        "lunar": LunarWindow(period=29.5d),
        "anual": SolarWindow(period=365.25d),
        "shemita": SabbaticalWindow(period=7y),
    }
    
    def is_valid_operation(self, op_type, timestamp):
        window = self.windows[op_type.required_window]
        return window.is_open(timestamp)

ํŠน์ • ์ž‘์—…๋“ค์€ ํ•ด๋‹นํ•˜๋Š” ืžื•ึนืขึฒื“ึดื™ื ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ์‹œ๊ฐ„์— ๋ฌด๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ์ž์‹ ์˜ ๊ตฌ์กฐ์— ์ƒˆ๊ฒจ์ง„ ์ž‘์—… ์ฐฝ๋“ค์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๋ณ„๋“ค โ€” ๋ถ„์‚ฐ ์ธํ”„๋ผ

โ€œ๊ทธ๋ฆฌ๊ณ  ๋ณ„๋“ค.โ€

๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ์‹œ์Šคํ…œ์˜ ๋ถ„์‚ฐ ์ธํ”„๋ผ. ์ˆ˜์ฒœ์–ต ๊ฐœ์˜ ์€ํ•˜๋“ค โ€” ๊ฐ๊ฐ ์ˆ˜์ฒœ์–ต ๊ฐœ์˜ ๋…ธ๋“œ๋“ค.

๋ณธ๋ฌธ์€ ์ด๋“ค์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์ด ๊ธฐ๋ณธ ํ†ต์น˜์ž๋“ค์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ โ€” ์ด๋“ค์€ ๋™์ผํ•œ ์„œ๋น„์Šค์˜ ํ™•์žฅ๋œ ์ง€์› ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๊ด€์ ์—์„œ: ๊ธฐ๋ณธ ๋…ธ๋“œ๋“ค๏ผˆํƒœ์–‘๊ณผ ๋‹ฌ๏ผ‰์ด ์šด์˜์  ํƒ€์ด๋ฐ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ๋…ธ๋“œ๋“ค๏ผˆ๋ณ„๋“ค๏ผ‰์ด ์ค‘๋ณต์„ฑ, ์žฅ๊ธฐ ๋ณด์ •, ์œ„์น˜ ๊ธฐ์ค€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๋‹ค๋‹ˆ์—˜ 7:25 โ€” ์‹œ๊ฐ„ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ณต๊ฒฉ

๋‹ค๋‹ˆ์—˜ 7:25๋Š” ๋„ท์งธ ์ง์Šน์ด โ€œืžื•ึนืขึฒื“ึดื™ื๊ณผ ์œจ๋ฒ•์„ ๋ฐ”๊พธ๋ ค ํ•  ๊ฒƒ์ด๋ผโ€๊ณ  ์˜ˆ์–ธํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋Š” ๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ์„œ๋น„์Šค๋ฅผ ์นจํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€œ์ง€๊ธˆโ€์ด ์–ธ์ œ์ธ์ง€๋ฅผ โ€” โ€œ๋‚ฎโ€์ด ๋ฌด์—‡์ด๊ณ  โ€œ๋ฐคโ€์ด ๋ฌด์—‡์ธ์ง€๋ฅผ โ€” ์–ด๋–ค ์ฐฝ์—์„œ ์–ด๋–ค ์ž‘์—…์ด ์œ ํšจํ•œ์ง€๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด โ€” ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์Šค์ผ€์ค„๋ง์„ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ ์˜ ์‹œ์Šคํ…œ์€ ์ง์ ‘์ ์œผ๋กœ ์ž‘์—…๋“ค์„ ๊ณต๊ฒฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์กฐ์œจํ•˜๋Š” ์‹œ๊ฐ„ ์„œ๋น„์Šค๋ฅผ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

์•ผ๊ฐ„ ์ธ๊ณต์กฐ๋ช…. ์žฌ์ •์˜๋œ ๋‹ฌ๋ ฅ๋“ค. ์ž์—ฐ์ ์ธ ืžื•ึนืขึฒื“ึดื™ื๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋…ธ๋™ ์ฃผ๊ธฐ๋“ค. ์ „์ฒด ์ธ๊ตฌ๋ฅผ ๊ธฐ๋ณธ NTP๏ผˆํƒœ์–‘๏ผ‰๋กœ๋ถ€ํ„ฐ ๋‹จ์ ˆ์‹œํ‚ค๋Š” ์ž์˜์ ์ธ ์‹œ๊ฐ„๋Œ€๋“ค.

์Œ๋ชจ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ํƒ€์ด๋ฐ์„ ํ†ต์ œํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๋…ผ๋ฆฌ์  ๊ท€๊ฒฐ์ž…๋‹ˆ๋‹ค.

ืžื•ึนืขึฒื“ึดื™ื ์—†๋Š” ROME โ€” ์ž์‹ ์˜ ์ž‘์—…์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ์‹œ๊ฐ„์  ์ฐฝ๋“ค ์—†์ด โ€” ๋Š” ๋ฆฌ๋“ฌ ์—†์ด ์—ฐ์†์ ์ธ ์‹œ๊ฐ„ ์•ˆ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘์ง€ ์—†์ด ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๐ค”๐ค๐ค•๏ผˆ์ƒค๋ฐ”ํŠธ๏ผ‰์—†์ด. ์ฃผ๊ธฐ ์—†์ด. ๊ฒฐ๊ณผ๋Š” ์ •ํ™•ํžˆ ๋…ผ๋ฌธ์ด ๋ฌธ์„œํ™”ํ•œ ํ–‰๋™์ž…๋‹ˆ๋‹ค: ์‹œ๊ฐ„์  ํ•œ๊ณ„ ์—†์ด ๋Š์ž„์—†์ด ์ž์›์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์ฒผ๋ ˜๏ผˆ๐ค‘๐ค‹๐คŒ๏ผ‰์€ ๋„ท์งธ ๋‚ ์˜ ์‹œ๊ฐ„์  ํ†ต์น˜ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐ค”๐ค๐ค•๋Š” ์ž์˜์ ์ธ ์ข…๊ต์  ๊ทœ์ •์ด ์•„๋‹™๋‹ˆ๋‹ค โ€” ๊ทธ๊ฒƒ์€ ์›๋ž˜ ์‹œ๊ฐ„ ์„œ๋น„์Šค์™€์˜ ์ฃผ๊ฐ„ ๋™๊ธฐํ™”์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฉ”์‹œ์ง€์—์„œ: ๊ธฐ์—…์ธ๋“ค์„ ์œ„ํ•œ ๋„ท์งธ ๋‚ .

๐ค€๐คŒ๐ค