Halakhah Yomit · Techie Talmid · Standard
Shulchan Arukh, Orach Chayim 106:2-107:2
This is going to be epic! We're about to dive deep into the Shulchan Arukh, not just reading it, but modeling it. Think of it like reverse-engineering a complex algorithm. We'll take the halachic logic and map it out, comparing different versions like comparing software implementations. Get ready for some serious systems-thinking fun!
Problem Statement: The Amidah Obligation - Core Logic and Exceptions
Our primary "bug report" revolves around the core obligation to recite the Amidah prayer. The fundamental question is: Who is required to pray the Amidah, and under what conditions can someone be exempt? This isn't a simple IF THEN ELSE statement; it's a nested conditional structure with multiple branching possibilities and even some recursive logic (when dealing with doubt).
The Shulchan Arukh, Orach Chayim 106:2-107:2, lays out the initial parameters for this obligation. The core rule seems to be a direct dependency: if you're obligated for Shema (the recitation of the Shema), you're obligated for Amidah. Conversely, if you're exempt from Shema, you're exempt from Amidah. This establishes a baseline dependency: Obligated(Amidah) = Obligated(Shema).
However, this is where the complexity kicks in, as this initial dependency acts more like a default setting than a hard-coded rule. We quickly encounter exceptions and overrides.
- Exception 1 (Funeral Procession): Even if
Obligated(Shema)is TRUE, one can beExempt(Amidah)if accompanying a funeral and not essential. This is aBUT NOTclause that takes precedence. - Exception 2 (Women and Slaves): These individuals are
Exempt(Shema)but paradoxicallyObligated(Amidah). This breaks the initialObligated(Amidah) = Obligated(Shema)dependency entirely. The reason provided is that Amidah is a positive commandment not limited by time (מצוה שהזמן גרמא), while Shema is. This introduces a new, independent condition for obligation:PositiveMitzvahNotTimeBound. - Exception 3 (Children for Education): While not directly an exemption from Amidah for the child, the obligation to educate them is mentioned, implying a developmental stage where Amidah becomes relevant and thus, an obligation to ensure they fulfill it. This is more of a meta-rule about responsibility.
- Exception 4 (Torah Scholars): Those whose profession is Torah study have a different interrupt protocol. They must interrupt for Shema but not for Amidah. This suggests a prioritization system where uninterrupted Torah study can override the Amidah obligation for this specific user group. This is a crucial
PRIORITYoverride.
The Mishnah Berurah (106:4) highlights the debate on whether Amidah is a Torah or Rabbinic commandment, and whether it's time-bound. This debate influences how the obligation for women is understood – if it's a positive, non-time-bound commandment, then women, though generally exempt from time-bound positive commandments, are still obligated. This adds a layer of dependency on the foundational classification of the Amidah itself.
Furthermore, the subsequent sections (106:3-4 and 107:1-2) introduce concepts of doubt and voluntary prayer. These aren't directly about initial exemption but about re-performing or adding Amidah, which also involves complex conditional logic and specific rules for innovation.
In essence, our "bug report" is to model the intricate decision tree that determines Amidah obligation, including its exceptions, overrides, and the nuances of doubt and voluntary prayer. The system needs to accurately represent how these different conditions interact to produce the correct halachic output.
Full Experience in the App
Listen. Chat. Go deeper.
Audio playback, interactive chevruta, Hebrew tools, and every daily learning track — only in Derekh Learning.
Text Snapshot
Here are the key lines from the Shulchan Arukh, Orach Chayim 106:2-107:2, with anchors for our analysis.
106:2
- "All those who are exempt from the Recitation of the Shema are exempt from [the Amidah] prayer and all who are obligated in the Recitation of the Shema are obligated in [the Amidah] prayer,"
- "except for those who are accompanying the deceased (i.e. a funeral procession) that are not needed for the [funeral] bier; for even though they are obligated in the Recitation of the Shema, they are exempt from [the Amidah] prayer."
- "Women and slaves, even though they are exempt from the Recitation of the Shema, are obligated in [the Amidah] prayer, because it is a positive mitzvah that is not limited by time."
- "And children that have reached [the age] for education, we are obligated to educate them."
- "One for whom Torah [study] is one's profession, for example, Rabbi Shimon bar Yochai and his companions, interrupts [Torah study] for the Recitation of the Shema, but not for [the Amidah] prayer. But we do interrupt [studies], whether for the Recitation of the Shema or for [the Amidah] prayer."
- "Gloss: And if one is teaching others, one does not interrupt, as was explained above in [Orach Chayim 89:6]. Nevertheless, one should interrupt and recite the first verse of the Recitation of the Shema (Beit Yosef - Siman 70). And if the time [of the Recitation of the Shema or prayer] is not passing and one still has time left to pray or to recite the Recitation of the Shema, one does not interrupt at all [but finishes studying first]. (Beit Yosef in the name of the Ran)"
106:3
- "One for whom Torah [study] is one's profession, for example, Rabbi Shimon bar Yochai and his companions, interrupts [Torah study] for the Recitation of the Shema, but not for [the Amidah] prayer." (This is a repeat for emphasis, showing the specific context of scholars.)
- "But we do interrupt [studies], whether for the Recitation of the Shema or for [the Amidah] prayer."
106:4
- "If one is in doubt if one prayed [the Amidah], one goes back and prays [the Amidah again], and one does not need to innovate anything new [in the prayer]."
- "But if it clear to one that one prayed, one does not go back and pray [again] without an innovation [i.e. something new added to his prayer]."
- "And by means of [using] an innovation [in one's prayer], one may return and pray as a voluntary [Amidah] as many times as one wants, except for the Musaf prayer [i.e. Amidah], for we do not pray it as a voluntary [Amidah]."
- "And on Shabbat and Yom Tov, one may not pray a voluntary prayer at all."
- "And if one began to pray [the Amidah], under the belief that one did not pray [already], and then [in the middle of one's prayer] remembered that one already prayed [it], one [immediately] stops, even in the middle of a blessing, even if one is able to innovate a new thing into it."
106:5
- "This "innovation" that we mentioned [above means] that one "innovates" something in each blessing of the middle ones [i.e. the middle thirteen blessings of the Amidah] that relates to that [particular] blessing. And if one innovated [something] in even just one [of the middle blessings], that is sufficient in order to indicate that it is a voluntary [prayer] and not an obligatory one."
- "Gloss: And there are those who say that it's not called "an innovation" unless something was added into it that one did not need beforehand. [Tur in the name of the Rosh]"
107:1
- "A congregation never prays a voluntary prayer."
107:2
- "One who wants to pray a voluntary prayer needs to know oneself to be quick and careful, and estimate in one's opinion that one will be able to concentrate in one's prayer from beginning to end. But if one is not able to concentrate well, we would consider it [like] "Why do I need all your sacrifices?" (Isaiah 1:11), and [say] would that one could concentrate on the 3 fixed prayers of a day [before trying to do something extra]!"
Flow Model: Amidah Obligation Decision Tree
Let's visualize the logic for determining Amidah obligation as a decision tree. This is where we start building our computational model.
Root Node: Determine Amidah Obligation
- Check 1: Is the user a Torah Scholar (profession)?
- YES:
- Interrupt for Shema? YES
- Interrupt for Amidah? NO (Continue with Torah study, effectively exempt from immediate Amidah)
- Branch End: Scholar's specific interrupt protocol.
- NO:
- Check 2: Is the user accompanying a funeral procession and non-essential?
- YES:
Obligation(Amidah) = FALSE- Branch End: Funeral exemption.
- NO:
- Check 3: Is the user obligated for Shema?
- YES:
Obligation(Amidah) = TRUE- Branch End: Default obligation via Shema.
- NO:
- Check 4: Is the user a Woman or Slave?
- YES:
Obligation(Amidah) = TRUE(Reason: Positive Mitzvah, not time-bound)- Branch End: Women/Slaves obligation.
- NO:
- Check 5: Is the user a Child of educational age?
- YES:
Obligation(Amidah) = TRUE(Implied, through obligation to educate)- Branch End: Child obligation.
- NO:
- Implicitly: All other individuals are obligated for Amidah.
Obligation(Amidah) = TRUE- Branch End: General obligation.
- YES:
- Check 5: Is the user a Child of educational age?
- YES:
- Check 4: Is the user a Woman or Slave?
- YES:
- Check 3: Is the user obligated for Shema?
- YES:
- Check 2: Is the user accompanying a funeral procession and non-essential?
- YES:
- Check 1: Is the user a Torah Scholar (profession)?
Notes on the Flow Model:
- This model primarily addresses the initial obligation to pray. The subsequent sections on doubt and voluntary prayer are separate but related logical modules.
- The "Torah Scholar" branch is a bit of a de-prioritization rather than a complete exemption. The scholar might pray later, but the immediate requirement to interrupt is bypassed.
- The "Child" branch is inferred. The text states "we are obligated to educate them," which implies they will become obligated. For the purpose of this model, we're considering the stage where this obligation is active.
- The "Women and Slaves" branch is a critical divergence from the Shema-based rule, introducing a new criterion for obligation.
Now, let's look at how different Rishonim (early commentators) and Acharonim (later commentators) might have implemented this logic, like different compiler versions handling the same source code.
Two Implementations: Rishon vs. Acharon as Algorithm A vs. Algorithm B
We can analyze the Rishonim (like Rambam, Ramban, Rosh, Tur) and Acharonim (like Beit Yosef, Ba'er Hetev, Magen Avraham, Mishnah Berurah) as representing different algorithmic approaches to implementing the Shulchan Arukh's directives.
Algorithm A: The Rishonim's Foundation (Focus on Core Principles)
The Rishonim laid the groundwork for understanding Amidah obligation. Their implementations often focused on the fundamental nature of the commandment.
Core Logic (Rishonim's Perspective):
The Magen Avraham (commenting on 106:2, citing Rambam) and Ba'er Hetev (on 106:1, citing Rambam) highlight the debate about Amidah's status: Torah vs. Rabbinic.
- Rambam's View: Amidah is a positive Torah commandment (
מצוה מהתורה), written as "and to serve God with all your heart" (ולעבדו בכל לבבכם). Biblically, one prayer a day is sufficient in any formulation. - Ramban's View: Amidah is Rabbinic (
מדרבנן). The Anshei Keneset HaGedolah established the Shemoneh Esrei (18 blessings) structure for fixed times.
This fundamental difference in classification (Torah vs. Rabbinic) significantly impacts how exceptions are handled, especially for women.
Implementation Details (Algorithm A - Rishon-centric):
Shema Dependency Module:
function isObligatedShema(user): ReturnsTRUEorFALSEbased on standard Shema rules (e.g., gender, age, mental state).function isExemptAmidahViaShema(user):IF NOT isObligatedShema(user):RETURN TRUEELSE:RETURN FALSE
Time-Bound Mitzvah Module:
function isTimeBoundMitzvah(mitzvah): ReturnsTRUEif the mitzvah is time-bound,FALSEotherwise.- Note: The status of Amidah itself is key here. If Rambam is followed, Amidah as a general concept might not be time-bound, but the fixed Shemoneh Esrei is.
Special Case: Funeral Procession Module:
function isFuneralExempt(user):IF user.isAccompanyingFuneral AND NOT user.isEssentialForBier:RETURN TRUEELSE:RETURN FALSE
Special Case: Torah Scholar Module:
function isTorahScholar(user): Checks if user's profession is Torah study.function scholarInterruptsAmidah():RETURN FALSE(for the immediate obligation).
Core Obligation Determination Function (
DetermineAmidahObligation_A(user)):IF isTorahScholar(user):RETURN "Scholar_Protocol"// This means they don't interrupt now, but the obligation isn't fully removed.
IF isFuneralExempt(user):RETURN FALSE
IF isObligatedShema(user):RETURN TRUE
ELSE:// User is exempt from ShemaIF user.gender == "Female" OR user.status == "Slave":// Check the fundamental nature of AmidahIF isTimeBoundMitzvah("Amidah") == FALSE: // Based on Rambam's view or a broader interpretationRETURN TRUE// Obligated because it's a positive, non-time-bound mitzvah
ELSE:// If Amidah is considered time-bound (like Ramban's view on fixed Shemoneh Esrei)RETURN FALSE// Exempt as per general rule for women/slaves
ELSE:// Exempt from Shema, not woman/slave, not scholar, not funeral.RETURN TRUE// Default obligation
Rishonim's Nuance: The Rishonim debated the exact classification of Amidah. The Magen Avraham and Ba'er Hetev show that the Rambam considered it a Torah commandment, while Ramban and most poskim considered it Rabbinic. This debate is crucial. If Amidah is Rabbinic and time-bound (like the fixed Shemoneh Esrei), then women, who are generally exempt from time-bound Rabbinic positive commandments, should theoretically be exempt from Amidah. However, the Shulchan Arukh (106:2) states they are obligated. The Rishonim's explanations for this (like the Turei Zahav's mention of שלא הזמן גרמא despite it being דרבנן) are attempts to reconcile this. They might see the obligation for women as rooted in the "plea for mercy" aspect, which transcends strict time-bound definitions.
Algorithm B: The Acharonim's Refinement (Focus on Practical Halakha and Aggregation)
The Acharonim took the Rishonim's debates and codified them into the practical Shulchan Arukh. Their "implementation" is the text itself, with their commentaries (like Mishnah Berurah, Magen Avraham, Ba'er Hetev) acting as further layers of logic, often resolving ambiguities and providing the definitive practical ruling.
Core Logic (Acharonim's Perspective):
The Acharonim largely accept the Shulchan Arukh's explicit rulings and use their commentaries to explain and sometimes expand upon them. The key is that the Shulchan Arukh's text is the definitive algorithm they are working with, and their commentaries are like patches or feature additions.
Implementation Details (Algorithm B - Acharon-centric):
The Shulchan Arukh itself is the primary implementation. The Acharonim provide the "documentation" and "edge case handling."
DetermineAmidahObligation_B(user)function (as per Shulchan Arukh 106:2):// Rule 1: Shema DependencyisObligatedShema = GetShemaObligation(user)isObligatedAmidah = isObligatedShema// Rule 2: Funeral Exception (Overrides Rule 1 if TRUE)isFuneralExempt = CheckFuneralStatus(user)IF isFuneralExempt:isObligatedAmidah = FALSE
// Rule 3: Women & Slaves (Overrides Rule 1 if TRUE)IF user.gender == "Female" OR user.status == "Slave":// Core Reason: Mitzvah She'ein Zman Grama (Positive, Non-Time-Bound Mitzvah)// This reason is applied regardless of Shema obligation.isObligatedAmidah = TRUE
// Rule 4: Children for Education (Implied Obligation)IF user.age >= AGE_FOR_EDUCATION AND user.isBeingEducated:isObligatedAmidah = TRUE// Obligation to ensure they pray.
// Rule 5: Torah Scholars (Specific Interrupt Protocol)IF isTorahScholar(user):// They interrupt for Shema, but NOT for Amidah.// This is a *prioritization* override, not a permanent exemption.// The function here might return "Scholar_Interrupt_Protocol" to indicate this.RETURN "Scholar_Interrupt_Protocol"
RETURN isObligatedAmidah
Acharonim's Refinement:
The Mishnah Berurah (106:4) is a prime example of Algorithm B in action. It synthesizes the Rishonim's views and the Shulchan Arukh's ruling on women's obligation. It explains that even if Amidah is Rabbinic and time-bound, women are obligated because it's a plea for mercy (בקשת רחמים). This is a crucial interpretive layer. The Mishnah Berurah also clarifies the Shema vs. Amidah obligation for women: while exempt from Shema (which is a Torah positive time-bound mitzvah), they are obligated in Amidah (which is Rabbinic, but its essence as a plea overrides the time-bound exemption).
The Mishnah Berurah on 106:5 and the glosses provide further sub-routines for the "innovation" required for voluntary prayer, detailing what constitutes a valid addition.
Comparison Table:
| Feature | Algorithm A (Rishonim's Foundation) | Algorithm B (Acharonim's Refinement - Shulchan Arukh) |
|---|---|---|
| Primary Focus | Underlying principles, textual basis, and debates on mitzvah classification. | Practical application of halakha, synthesis of opinions, and clear rulings. |
| Handling of Women's Obligation | Depends heavily on the debate: Torah vs. Rabbinic, Time-bound vs. Non-time-bound. Might require complex conditional logic based on specific Rishon. | Explicitly states obligation, with commentaries explaining why (plea for mercy, etc.) despite general rules. |
| Structure | More conceptual, outlining the reasons for different interpretations. | More procedural, laying out the steps and rules as codified. |
| Commentaries' Role | The source material itself is often the commentary. | Commentaries (M.B., M.A.) add layers of explanation, clarification, and practical rulings. |
| Output | Understanding of why halakha is as it is. | Clear, actionable halakhic directives. |
In essence, Algorithm A represents the foundational code, while Algorithm B is the compiled, documented, and debugged executable we work with daily. The Acharonim (Algorithm B) provide the definitive API for Amidah obligation.
Edge Cases: Inputs That Break Naïve Logic
Let's consider some inputs that would cause a simplified, non-nuanced logic system to fail. These are the "null pointer exceptions" or "infinite loops" of halakha!
Edge Case 1: The Pregnant Woman Studying Torah
- Input Scenario: A woman who is a Torah scholar (professionally studying) is accompanying a funeral procession. She is also pregnant.
- Naïve Logic Failure:
- A simple system might first check: "Is she a Torah scholar?" -> YES. "Therefore, scholar protocol applies, she does not interrupt Amidah."
- Or it might check: "Is she accompanying a funeral?" -> YES. "Therefore, exempt from Amidah."
- Or it might check: "Is she a woman?" -> YES. "Therefore, obligated in Amidah."
- The conflict arises because multiple overriding conditions are met, and a simple sequential
IF-THENstructure won't capture the hierarchy of exceptions.
- Expected Output & Reasoning: The woman is exempt from Amidah.
- Reasoning: The "accompanying the deceased" exemption (106:2) is a direct exemption from the Amidah prayer itself. While women are generally obligated (106:2), this specific circumstance overrides that general obligation. The Torah scholar aspect relates to interrupting study, not necessarily a permanent exemption from the prayer itself if another exemption applies. Pregnancy itself doesn't create a new exemption here, but the funeral procession does.
- System Logic: The
isFuneralExempt(user)function has a higher priority than theuser.gender == "Female"condition in this specific context because it's a direct exemption from the Amidah itself, not just a rule about how one relates to it.
Edge Case 2: The Slave Who Doubts if He Prayed, Mid-Funeral
- Input Scenario: A slave (who is obligated in Amidah per 106:2) is accompanying a funeral procession (which should exempt him per 106:2). He starts praying Amidah, believing he has not yet prayed. Mid-prayer, he remembers he did pray.
- Naïve Logic Failure:
- The system might first apply the exemption: "Slave + Funeral = Exempt." So, if he prayed, he shouldn't have.
- Then, it encounters the doubt clause: "If one is in doubt if one prayed, one goes back and prays."
- Then, it encounters the "remembered mid-prayer" clause: "if one began to pray... and then remembered... one immediately stops."
- The conflict: Is he exempt because he was at the funeral, or does the fact he started praying (even mistakenly) and then remembered trigger a different rule? And what about the slave status potentially overriding the funeral exemption?
- Expected Output & Reasoning: He stops praying immediately and is not required to pray again.
- Reasoning:
- Initial Obligation: The slave is generally obligated in Amidah (106:2).
- Funeral Exemption: However, he is accompanying a funeral, which exempts him (106:2). This exemption should, in theory, mean he shouldn't be praying at all.
- The Act of Praying & Doubt: The fact that he began to pray, even under a mistaken premise, and then remembered he already prayed (or shouldn't have prayed because he was exempt) triggers the rule in 106:4: "if one began to pray [the Amidah], under the belief that one did not pray [already], and then [in the middle of one's prayer] remembered that one already prayed [it], one [immediately] stops, even in the middle of a blessing."
- The "Stopping" Rule's Precedence: This rule about stopping mid-prayer when remembering is a very specific procedural rule. It implies that once the act of prayer has commenced (even erroneously), and a memory resurfaces, the immediate action is to cease. The underlying reason for the original prayer (mistaken obligation vs. actual obligation) becomes secondary to the procedural halt.
- No Need to Re-Pray: Since he stopped because he remembered he already prayed (or, in this case, that he shouldn't have been praying due to the funeral exemption, which is a form of "already fulfilled the requirement by being exempt"), he does not need to pray again. The doubt clause (106:4: "If one is in doubt if one prayed, one goes back and prays") is for when one finishes praying and then has doubt. Here, he remembered during the prayer.
- System Logic: The
rememberedDuringPrayer(user, prayer)function overrides the general obligation/exemption status when triggered. The output isSTOP_PRAYERandNEXT_STATE = NoFurtherPrayerRequired.
- Reasoning:
These edge cases demonstrate that the system must handle not just direct conditions but also the order of operations, the nature of exceptions (direct exemption vs. interrupt protocol), and the procedural rules triggered by specific user actions (like remembering mid-prayer).
Refactor: Minimal Change for Clarity - The "Prioritization Layer"
Our current flow model is a bit of a flat decision tree. To make it more robust and easier to understand, especially as we add more complex rules, we can introduce a "Prioritization Layer" or a "Rule Hierarchy" concept. This is like adding a metadata tag to each rule indicating its precedence.
The Minimal Change:
Instead of a simple nested IF-ELSE structure, we can represent the rules as a list of (Condition, Action, Priority) tuples. The system then iterates through this list, applying the first rule whose Condition is met.
Current Implicit Hierarchy:
- Torah Scholar interrupt protocol.
- Funeral exemption.
- Women/Slave obligation (based on Mitzvah She'ein Zman Grama).
- General Shema-based obligation.
- Child education.
Refactored Approach (Conceptual):
We can define a Rule object with properties: condition, action, priority, appliesTo.
# Conceptual representation, not actual code
rules = [
Rule(condition=is_torah_scholar, action="scholar_protocol", priority=1, appliesTo="Amidah"),
Rule(condition=is_funeral_exempt, action="exempt_amidah", priority=2, appliesTo="Amidah"),
Rule(condition=is_woman_or_slave, action="obligated_amidah_non_time_bound", priority=3, appliesTo="Amidah"),
Rule(condition=is_obligated_shema, action="obligated_amidah_via_shema", priority=4, appliesTo="Amidah"),
Rule(condition=is_child_of_education_age, action="obligated_amidah_via_education", priority=5, appliesTo="Amidah"),
# ... rules for doubt, voluntary prayer, etc.
]
def determine_amidah_obligation(user):
for rule in sorted(rules, key=lambda r: r.priority):
if rule.condition(user):
return rule.action
return "default_obligation" # If no specific rule applies
Why this is a Minimal but Powerful Change:
- Clarity of Precedence: It makes the order of operations explicit. We can instantly see that the "Torah Scholar" rule (priority 1) will always be checked before the "Funeral exemption" (priority 2), and so on.
- Extensibility: Adding new rules or modifying priorities becomes much cleaner. If a new exemption is discovered, we just add a new
Ruleobject with an appropriate priority. - Debugging: If a user gets the wrong output, we can trace which rule was applied and why, by looking at the priority order.
- Encapsulation: Each rule is a self-contained unit, making the entire system more modular.
This "Prioritization Layer" refactor moves us from a potentially spaghetti-like nested IF structure to a more organized, rule-based system. It's like moving from a linear script to a sophisticated event-driven architecture, where events (conditions) trigger actions based on their defined importance.
Takeaway: The Amidah Obligation as a Dynamic System
Our journey through Shulchan Arukh 106:2-107:2 has revealed that the obligation to pray the Amidah is not a static binary state. It's a dynamic system with:
- Core Logic: A baseline dependency on Shema obligation.
- Overriding Exceptions: Specific scenarios (funeral, women/slaves) that fundamentally alter the baseline.
- Conditional Obligations: The nature of Amidah itself (positive, non-time-bound) becomes a key differentiator.
- Prioritization Protocols: Torah scholars have a distinct interrupt mechanism.
- Procedural Rules: Handling doubt and voluntary prayer introduces sub-systems with their own logic, including the critical "stop mid-prayer" rule.
By modeling this as a system, we can appreciate the intricate logic. The Rishonim provided the foundational algorithms, debating the core functions and data types (Torah vs. Rabbinic, Time-bound vs. Non-time-bound). The Acharonim, particularly the codifiers of the Shulchan Arukh and its commentators, refined this into a robust, executable implementation – Algorithm B.
The "Prioritization Layer" refactor shows how we can make this system even more elegant and maintainable. Each rule, with its priority, acts like a micro-service within our larger halachic application. This approach helps us understand that halakha isn't just a set of static laws, but a sophisticated, interconnected system designed to guide us, with layers of nuance and well-defined operational procedures. It's a testament to the power of systematic thinking applied to sacred texts.
This has been a fantastic deep dive! We've debugged the Amidah obligation, compared implementations, stress-tested with edge cases, and even refactored for clarity. Truly a geshmak in learning!
derekhlearning.com