diff options
| author | aethrvmn <me@aethrvmn.gr> | 2025-08-30 13:18:29 +0000 |
|---|---|---|
| committer | aethrvmn <me@aethrvmn.gr> | 2025-08-30 13:18:29 +0000 |
| commit | 29a570918721fd5d73bb140a9fb3bfa3e5647b9f (patch) | |
| tree | cfa54b3b7c1515ac6ae41d56f9b5e15ada4092b1 /content/theses | |
| parent | added non-content (diff) | |
added content
Diffstat (limited to '')
37 files changed, 1761 insertions, 0 deletions
diff --git a/content/theses/metaphysical/_index.md b/content/theses/metaphysical/_index.md new file mode 100644 index 0000000..83aae99 --- /dev/null +++ b/content/theses/metaphysical/_index.md @@ -0,0 +1,5 @@ +--- +title: metaphysical +weight: 50 +bookCollapseSection: true +--- diff --git a/content/theses/metaphysical/hyperlogical/_index.md b/content/theses/metaphysical/hyperlogical/_index.md new file mode 100644 index 0000000..160f58f --- /dev/null +++ b/content/theses/metaphysical/hyperlogical/_index.md @@ -0,0 +1,5 @@ +--- +title: hyperlogical +weight: 10 +bookCollapseSection: true +--- diff --git a/content/theses/metaphysical/hyperlogical/axioms.md b/content/theses/metaphysical/hyperlogical/axioms.md new file mode 100644 index 0000000..f99d24c --- /dev/null +++ b/content/theses/metaphysical/hyperlogical/axioms.md @@ -0,0 +1,69 @@ +--- +title: axioms +weight: 1 +--- + +## the nature of logic + +the words "logic" and "knowledge" are often connected in the minds of humans. in the sciences, logic is used religiously, in an attempt to obtain knowledge, in the same way that it is used in religions. + +in truth, logic is unable to lead to complete, general knowledge inside of a system, which fully describes the truth. + +every logical system, by definition, must exist within some constraints, to prevent it from collapsing onto itself, and these constraints must be considered true and fixed, without the need of proof, since otherwise the initial system should have to begin under new, different, unalterable truths. + +such truths, which can define a logical system on their own, are called *axioms*. + +the need for axioms is simultaneously the strength and weakness of logic. on the one hand, through well defined axioms, one can fully comprehend the system under study, while on the other, axioms are a poison in the minds of humans, since humans will inevitably use them and will define them in systems where logic is unable to work. + +one of these systems is reality. + +it is undeniable that we now know more about the world we live in than our ancestors, but this knowledge is superficial. + +the proof for that statement is simple. if someone asks an authoritative figure in physics a simple question such as "what is a magnet? how do magnets work?" they will receive many plausible answers, none of which will truly satisfy the responder, even if they satisfy the questioner. the responder knows that the provided answers are nothing but approximations of the truth, each varying in complexity, with some being closer to reality than others, but none of them being the actual truth of the matter. + +at the same time there are a lot of zealously religious persons, that neither know the axiomatic system nor the knowledge base of the system, that stand for scientific truth, without understanding that in essence, they make a conscious choice to **believe** in its truth. + +these people have, therefore, as an axiomatic system for their personal truth the words of scientists, not knowing that with this choice, they are similar to any other religious group that exists in our time. + +to paraphrase a quote + +> are you not a hypocrite? +> +> do you not trust the chemicals in your brain to tell you that they are chemicals? +> +> all knowledge ultimately comes from that which is unprovable. +> +> will you fight? or will you perish like a dog? + +given then that one can never know the truth *a priori*, and all axiomatic systems are unable to describe the entirety of reality, what can one do? + +the only way that exists is faith, which is the principal decision one makes before even choosing an axiomatic system, and which occurs due to the fact that, before you can study the system, you need to belive that it is well defined and founded, and also that to some extent it is capable of representing the truth. + +## the failure of logic + +to conclude the discussion on logic, i would like to examine in depth the propagation of knowledge, in order to present the greatest result; the fact that most appeals to logic are themselves a logical fallacy. + +logical fallacies are, like all named things, characterizations; and they grant a person the ability to understand if a proposition is logically consistent in the broader system of an axiomatic system. + +the fallacy that is most worth discussing here is the one committed when appealing to an authority, which should not and cannot stand as a logical argument. this is because every authoritative figure, being human, has the capacity to make mistakes, or to not express themselves in a perfect manner, or to even act maliciously. at the same time, every individual appealing to said authority might have misunderstood the content of the argument, or act maliciously for personal benefit. + +besides, such techniques have been used countless times throughout history, in order to convince and manipulate individuals to surrender their liberties, their properties and themselves to others. + +this is the main argument used by the supporters of logic; in favour of it, and against other religions. + +nevertheless, logic itself not only appeals to authority, but this fallacy is necessary for it's continued existence and propagation. + +the evolution and spread of logical ideas is based on continuity. every new generation receives scientific knowledge, folklore, theology, and using these as a foundation is able to expand the collective understanding of the world. through this action, humanity does not need to start from zero, but rather they only have to rely on the authoritative guidance of the people before themselves to advance. + +it is this very act however that, according to logic itself as born by this very process, is fallacious. + +even worse, the very act of propagating knowledge, as well as any form of communication, must appeal to an authority, for why else would a person communicate unless they felt like they had something to say. + +under this realization, logic is incapable of logically leading an individual towards the truth, except for possibly a single path. + +this path demands for each and every individual to have a non-finite time, so that they may explore truth on their own, without any prior knowledge, using only their own internalized logic and deriving the truth themselves, as they understand it, using a series of logical arguments. knowledge earned in this manner asks of the individual to verify the claims made along the way themselves, which seemingly leads, finally, the individual to the truth. + +i say 'possibly' a single path, and 'seemingly' leads to the truth, because even in this scenario appealing to authority is unavoidable; for does a person not have to trust themselves that the knowledge they have is valid? do they not have to rely on themselves as an authoritative figure to explore past the beginning of their reason? + +alas, this is the greatest and most subtle flaw of logic; that even in the abscence of others, you need to have faith, at minimum to yourself. + diff --git a/content/theses/metaphysical/hyperlogical/ethics.md b/content/theses/metaphysical/hyperlogical/ethics.md new file mode 100644 index 0000000..28d00d4 --- /dev/null +++ b/content/theses/metaphysical/hyperlogical/ethics.md @@ -0,0 +1,24 @@ +--- +title: ethical +weights: 3 +--- + +having defined free will, i can now discuss about the ethical. + +before i do so, i first want to explain in depth why free will is a necessity for ethics to exist. + +assuming a system with either only determinism, only random outcomes, or a combination of both, there is no adequate mechanism of choice, for there to be a capacity to commit an action. there is no possible way to define a person as anything more than a process that acts as an input/output method, much like a rock, or a drop of water. these objects, bereft of agency as they are, are unable to make a decision, and so do not deserve to be morally labelled. for what does it mean for a stone to be immoral or unethical? should we accuse water of falling too harshly when rain turns to hail? no, for there to be an ethical consideration, the subject must uniquelly be able to make a choice, and to act based of *its own volition*. for ethics to exist, free will must exist. + +there have been many and there will be many more attemps to define ethics and morality in an objective sense, however most fail due to their flawed attempts to define good and evil in an objective manner, which requires an objective arbiter who decide which acts are good and which acts are evil, and hand out reward and punishment respectively. + +the above necessity forms the basis of many modern religions. catholics, protestants, muslims and jews have a clear seperation of a heaven and a hell, where people are sorted into based on merit (some catholics also admit into their faith the notion of a purgatory. protestants don't form a cohesive, centralised group, and are therefore inconsistent. these are discussions for another time.). tibetan buddhism seperates reality into seperate levels, with the human level being the 'ideal', neutral point, and reincarnation moving the individual up or down the levels based on the merit of the last life, with the capacity to remove oneself from the cycle and join the buddhas. hinduism teaches a similar idea, that one reincarnates as a being of lower or higher 'standing' depending on their behaviour in the past life, without necessarily making a distinction of different tiers of existence, but rather of quality of being, again with the capacity of breaking the cycle of reincarnation and liberating the self (liberating implies that the individual is trapped in "earthly shakles" (the body) which is also a position taken by the neoplatonists. this is also a discussion for another time.). + +all of this to say that throughout history, the prevalent mode of defining an ethic was by defining 'good' as something that brought one closer to 'the divine' and 'evil' something that had the opposite effect. this obviously is deeply flawed. not only do you need to ignore the underlying circular reasoning of "good is defined as not being evil and evil is defined as not being good", but you also need to define what and why the divine considers it to be so, which varies amongst cultures and locations. an example of this is that various mesopotamian civilisations, most notably the phoenicians, considered it moral and good to sacrifice infants to their deities, most prominently baal, which the romans of the same time period considered to be a barbarous atrocity. another example of the dynamic and therefore subjective nature of this type of ethics is the fact that the arbitrary concepts of good and evil in the current era, with the various ideas and practices that are currently tolerated by the majority of the population, vary wildly from the same concepts of good and evil from a few decades ago. + +this does not imply that ethics are destined to be subjective, or that morality cannot exist, but rather it necessitates the foundation of a new concept of ethics. + +a friend of mine asked me to think of this as a person placing their hand in of an open flame. irregardless of any subjective pleasure or displeasure one might derive from the event, there is an objective process that happens, the hand burning, and the natural response to this which is to pull the hand from the flame. exactly because of the existance of a free will and a capacity to choose, one might choose to maintain their hand in the flame, or remove it from it. therefore, one can define as a good thing to <u>*choose*</u> to remove their hand from the process. while it may or may not be subjectively good for the person, there is an objective process, the burning of the hand, that damages the individual, and the subsequent *choice* to stop or continue or stop this process. this is the objective basis for ethics. + +since the above holds only for the individual, we must extend this to interpersonal relationships. such a task is easy; knowingly putting another person's hand in the flame, or leading them to do so, counts as an unethical action. of importance is to note that the action is unethical, not the person. this is so because a person has the capacity to act in both an ethically good and an ethically bad manner. at the same time, a person might regret their past actions and seek forgiveness; this cannot be seen as anything but atonement, and therefore since a person has the ability to regret, there can not be a universal, permanent ethical alignment of the individual, at least up to and until the point of death. + +because of the effective societal pressure in interhuman interactions, there is an additional claim concerning objectively ethical actions. any attempt to nonconsensually interact with a person, violating their capacity to voluntarily engage, can be labeled as a malicious act; even if the person acts unknowingly, they have deprived the other indeividual of their free will and have therefore commited a bad act. diff --git a/content/theses/metaphysical/hyperlogical/free-will.md b/content/theses/metaphysical/hyperlogical/free-will.md new file mode 100644 index 0000000..9e31b47 --- /dev/null +++ b/content/theses/metaphysical/hyperlogical/free-will.md @@ -0,0 +1,36 @@ +--- +title: free will +weight: 2 +--- + +## the existence of free will + +in order to define and then converse on ideas relating to free will, one must first convince themselves on its existence. truthfully, one can simply make a definition, as well as talk about the emergent system much like any other metaphysical structure, but there is merit in being able to argue for its existence. + +on this matter, there are many different arguments, however i will focus on the three that i find the strongest; this does not mean that one can prove existence, but these seem to strongly suggest and support that free will is indeed part of reality. + +the first argument has to do with the simplicity of the system, and involves creating a system in which free will is absent, which makes said system much more complex and obtuse. this, because one must explain why and how the constructs (since we don't talk about living things if free will is absent, but mere constructs) came to be, as one might observe them. as a very good friend mentioned, without free will persons are but functions, receiving an input and producing an output. however, "I" (a concept that does not exist without free will) can both observe, and change the "output" before it is ever expressed, which is easier explained with free will than without. + +the second argument is concerned with aesthetics, and the relation between the nature of beauty, and that of truth. in due time these will be expanded upon, but for now one may use the idea of "beauty is truth" as is. + +the second argument thus is as follows; it is much more beautiful for there to be free will, than for there to not be. + +obviously such a statement is extremely subjective, but such a statement is true for the totality of knowledge. unfortunately the nature of communication makes it impossible to describe beauty and sentiment, so i choose not to expand on this argument. + +finally, we can simply make an admission, without any extra argumentation. besides, it is obvious that there is no need for a person to justify or rationalize every aspect of their faith, nor are they obligated to answer to anybody except for themselves. it is therefore possible, and maybe even proper, for someone to define the existence of free will axiomatically, ignoring any other argument for or against it. + + +## defining free will + +if we accept the idea of free will existing, we should be able to define it, in order to be able to self reference and call upon to make use of this idea. this also helps in clarifying the meaning, which in everyday speech is muddled, much like most of language, due to the nature of communication (which is a discussion for a later time.). + +alongside free will, there are two more modes of behaviour in nature, determinism and pure randomness. discussing these first is necessary to properly define free will, since these are directly observable in the outside world; free will is only directly observable in the inner state of the self, with the admission that others behave similarly. + +the first term we will explore is determinism, the idea that things in nature behave in a predefined, preordained way. this mode of action is generally linked with non sentient or better yet non living things, such as rocks, metals, everyday objects that we make use of etc. by claiming that they move deterministically, we claim that there is, theoretically if not literally, a way by which we can obtain every single bit of information about the past and the future of the object under study, subject to an adequate amount of information about the current state. here one can imply the existence of a perfect measurement device, that can give accurate measurements up to any level of significance one might care about. this does not guarantee absolute and complete knowledge of a system, but rather guarantees that the object in question behaves predictably, under a known or unknown set of laws, physical in nature. this means that a deterministic object cannot operate on its own, as it is fully under the influence and flow of the external world. + +true randomness is the exact opposite. true randomness implies that under any circumstances, there does not exist a mechanism or set of predefined laws that we can use to guarantee that the outcome will be aligned with any prediction one might make. in this way, true randomness can only be partially predicted with the use of mechanisms that predict expected, or average behaviours, without the possibility to definitively correctly guess a single outcome. as a truly random behaviour cannot be dictated by external factors, since it would be just an extremely complex deterministic system, true randomness is not dictated by any factors. + +both of the above mechanisms deprive rather than provide a mechanism that allows for an individual to be influenced by their own inner state. since deterministic behaviour has a set output for a given input, and random behaviour is nonsensical by definition, there needs to be a mechanism by which the person can, by observing and acting on themselves, change and manipulate a behaviour or outcome. + +this mechanism is free will. + diff --git a/content/theses/metaphysical/interpersonal/_index.md b/content/theses/metaphysical/interpersonal/_index.md new file mode 100644 index 0000000..2df53ec --- /dev/null +++ b/content/theses/metaphysical/interpersonal/_index.md @@ -0,0 +1,5 @@ +--- +title: interpersonal +weight: 20 +bookCollapseSection: true +--- diff --git a/content/theses/metaphysical/interpersonal/abilities.md b/content/theses/metaphysical/interpersonal/abilities.md new file mode 100644 index 0000000..fbb8d48 --- /dev/null +++ b/content/theses/metaphysical/interpersonal/abilities.md @@ -0,0 +1,20 @@ +--- +title: the abilities of humans +weight: 100 +--- + +## free body +If one is to imagine an individual, possessing free will, alone, one can think of how said individual might operate, and what abilities the individual might have. + +It is obvious that if this individual is alone, then they have a few abilities, or capacities; they have the capacity to exist (i.e. to be alive), they have the capacity to move, and they have the capacity to use their environment to their advantage. + +These, one might claim to be "rights" or "liberties", granted by a higher authority such as a deity, or nature itself, or maybe derived from logic, but they are merely the consequences of existence, presupposing, as always, the existence of free will. Insofar as a person exists, they have these capacities and might choose to use them, along with their skills, acquired or otherwise, to improve their life. + +## effective potentials +The moment that another human, or any other being exists, there is a effective, implicit interaction between the two which limits this freedom. Suddenly there is a question of "am I allowed to go there?", or "If I approach this other entity, how will it react to my action?". All of these hold, both in the frame of cooperation, either in sharing a common space, commonly available food, etc, or in the frame of antagonization, perhaps for the same resources. This simple effect acts as a restrictive force is society, and in this way one can see that even the smallest collection of humans can never be comprised of truly free individuals, nor can this society itself be truly free. + +Once more than two individuals coexist, there are more interactions, which introduce further restrictions on the capacities of the individuals to act on their own volition, and at some point there is a shift of focus from the actions of the individual on others, to the actions of others on the individual. + +Truly, the complexity of large societies does not allow each person to consider what is of the others, in order to restrict himself, but it pushes the person to consider what is their own, so they may restrict the others. This way, the metaphysical entity that is society, gains the ability to define the liberties of the individual, and set a mode of operations for the members of said society which diverges from the notion of "What is not forbidden is permitted" and converges to the notion of "What is not permitted is forbidden". Under this scope, the larger the society, the more imposing and authoritative it becomes, not out of any amlice, but out of necessity. + + diff --git a/content/theses/metaphysical/interpersonal/self-made-hell.md b/content/theses/metaphysical/interpersonal/self-made-hell.md new file mode 100644 index 0000000..67faa4a --- /dev/null +++ b/content/theses/metaphysical/interpersonal/self-made-hell.md @@ -0,0 +1,37 @@ +--- +title: self-made hell +weight: 20 +--- + +A couple of friends and I know a couple of other people, with whom they used to hang out, that loved to complain about their lives. + +They themselves were perfect. They did no wrong, they told no lie, they did their work as they should, they loved correctly; the only problem was other people, who used and abused them to their detriment, and who wouldn't understand the inconvinience or annoyance, or difficulty that they caused to our acquaintances' lives. + +Every so often, they would drop by, meet up with us and complain about how unbearable their life was, because of the other people. At some point one of them told us how they accidentally mistreated one of their coworkers and how now their coworker mistreated them back; I asked if they apologised, and their response was somethin akin to "No, and I don't plan to, because she has been annoying to me from the beginning." + +Nevermind the fact that it's not a competition of who mistreated who first, this anger that arose, and the refusal to apologise, as well as the ensuing rant, reminded me of an anecdote that exists in Orthodoxy. + +> One day, an old man showed up to a monastery. He approached a monk and started crying. +> "I cannot be saved. What I have done is unforgivable. I am eternally damned for what I have done." +> The monk asked what the sin was and tried to explain to him that nothing is unforgivable, and that everything can be forgiven. +> "It doesn't matter what I did, it's unforgivable, there is no way for me to be saved." +> This went on for a couple of days; the man would show up, cry about his unforgivable sin, and leave. +> One night the monk prayed for guidance on what to do, and an angel appeared before him. +> "This old man is Satan. He will come to you again tomorrow. Tell him that he has to ask for forgiveness." +> As the angel foretold, the next day the old man showed up once again at the monastery crying about his misfortune. +> "Have you tried asking God for forgiveness?", the monk asked. +> "ASK FOR FORGIVENESS? WHY SHOULD I ASK FOR FORGIVENESS? HE SHOULD APOLOGISE INSTEAD!" the old man shouted and left. + +There are two layers to this story, as there are also two layers in understanding what our friend, as well as other people that behave in the same way, go through. + +The first and simplest layer is egoism. The person refuses to apologise out of pride; must like the devil refuses to apologise for his hubris, so do these people refuse to apologise until apologised to first. + +To their understanding, they are not at wrong. The other person has clearly mistreated them, and their "tantrum" is a result of built up oppression, so it is justified and moral, and hence they refuse to apologise. At least that's their self-justification for acting as they did. + +The second layer is a lack of self-realisation. To explain what I mean, let's go back to the friend who was complaining about life. After asking them if they apologised and the aforementioned refusal, in order to cope with the idea that they are not in the wrong, they started explaining all the ways that the other person had mistreated them. + +What became obvious to me however, was that it was a self-imposed mistreatment. The person was rambling on about how they presented themselves as a person to be relied upon, only to complain about how the other person was relying upon them. They didn't set or show or communicate any boundaries, yet they were complaining that nobody respected them. Not only that, but their refusal to communicate any boundaries reinforced the other person's behaviour. Assuming that the other person didn't want to take advantage of them, they wouldn't know that they were, and this lack of negative reaction built an implied dependence. + +In a sense, just like the devil, they were in a hell of their own making. They deserve to be there, not because they are evil (nobody is evil, not even the devil), but because they refuse to acknowledge their contribution to their situation. They created the hell they are in, and rather than make any attempt to escape it, they yell about how much it burns. + +Most people will be this person unwillingly at least once in their lives. I have been this person, some of my friends have been this person; everybody can be saved from hell as long as they want to and try to. It takes effort, and faith, but it's always a choice. diff --git a/content/theses/metaphysical/religious/_index.md b/content/theses/metaphysical/religious/_index.md new file mode 100644 index 0000000..29b0da1 --- /dev/null +++ b/content/theses/metaphysical/religious/_index.md @@ -0,0 +1,5 @@ +--- +title: religious +weight: 30 +bookCollapseSection: true +--- diff --git a/content/theses/metaphysical/religious/demonology.md b/content/theses/metaphysical/religious/demonology.md new file mode 100644 index 0000000..7ded6cd --- /dev/null +++ b/content/theses/metaphysical/religious/demonology.md @@ -0,0 +1,36 @@ +--- +title: demonology +weight: 150 +--- + +Satan and the rest of the demons are truly the most tragic beings in existence. + +The reason I say this is because they are the most powerful deceivers to ever exist, deceiving themselves and being in an eternal state where, even though they *feel* they made the wrong choice, they are so prideful, so invested in their belief, that to acknowledge the truth is impossible. + +Their choice is that of self-deification. + +To explain that we need to go back. + +In the original Scriptures, Satan appears as one of the Archangels, called Lucifer, the Bringer of Light, the Dawn, until his rebellion against God. + +Most cultures display this act of rebellion as an act of attempted liberation. "God imposes His will on the world, but Lucifer refused to submit. He was therefore cast away by God and punished by Him to eternal damnation." + +The truth however is different; Lucifer, Satan, did not rebel against "God and his order", but rather against his own nature, as a being *created* by God. His rebellion was an attempt to become like God, to become uncreated (*aktistos*), and to be a God himself. + +This is impossible. It is impossible for a created thing (*ktisto*) to become uncreated (*aktisto*). There is no way to trascend the boundary --- something finite cannot become infinite, something caused cannot become the Uncaused Cause, and this ontological limitation is the cause of the eternal damnation. + +For Satan was not "arrested", nor was he "locked away in hell as a prisoner". He is a prisoner of his own self, tormented by his own delusion of grandeur. He refuses to acknowledge the ontological distinction, and is therefore eternally damned by himself. Where God is, he cannot be, because the truth is too much to bear. God is infinite, Satan is finite. + +In this sense it is his ego that holds him a prisoner in his own hell, which is his own head. In truth it is extremely easy to "escape". The only necessity is to acknowledge his own true nature; a being *created* by God. His pride and ego however, ensure that he is always a prisoner. + +In this self-delusion of self-deification, we can see that Satan is not evil in the sense of him wanting to cause damage. He is evil because in his delusion, he is trying to convince other he is right; he believes that through worship and power he might finally achieve self-deification and reach the status of God; in his own head he *might just become uncreated*. + +Hell therefore is not a place, nor a prison where "evil people go", it is a state of the spirit, a lack of connection with the ontological source, which is God. + +This is also why Satan, or any of his followers (ie creatures with their own egos and pride, convinced that they can achieve self-deification), retreat in the light of Truth; it is why when they whisper in your ear intrusive thoughts you can easily get rid of them by laughing at them, or by shooing them away like flies. If you treat them more than what they are, for example as powerful entities, you grant them power and influence over you. + +The other causes of demons running away, prayer and forgiveness, are also in the same vein. Prayer works for the simple fact that you call upon the cause of their self-hatred and self-imposed hell for help. Forgiveness is their worst situation. Their ego and pride would never let them admit to themselves that they are wrong, as if they are wrong they must correct themselves, which is antethical to their entire existence. Forgiveness therefore is poison to them. To show them love and understanding is to drive them away, which is sad, because in true forgiveness they could be saved. + +All they have to do is apologise. + + diff --git a/content/theses/metaphysical/religious/desirelessness.md b/content/theses/metaphysical/religious/desirelessness.md new file mode 100644 index 0000000..381ac08 --- /dev/null +++ b/content/theses/metaphysical/religious/desirelessness.md @@ -0,0 +1,18 @@ +--- +title: desirelessness +weight: 200 +draft: true +--- + +There are many religious groups and subgroups[^1] that teach that the ultimate state of existence is desirelessness. They promote the idea that the physical reality is temporary and ephemeral, and further underline the idea of *escape*; that our metaphysical aspects, such as our soul is inherently superior to our "flesh prison" (our body), and that therefore we need to focus our attempts on liberation. + +On this, they attempt to reach a logical conclusion; to have a physical presence means to be a prisoner of physical reality and therefore to suffer. In this view, the end goal of religion is to reach a point of spiritual realisation, such that you *reject* your physical presence; you ascend to a purely spiritual plain of existence. + +This rejection of the physical self materialises as a drive to reject the physical in general. The physical body *desires*, and to act on your desires means to indulge in your physical experience, which reinforces it's existence and validates it. The only way therefore to reject the physical is to abstain from desires and to reach a state of desirelessness. + +On first inspection this appears to makes sense + + + + +[^1]: A religious group is for example Sampradaya; a subgroup is Buddhism, which although is an umbrella term for different sects (Mahayana, Therevada, etc) is traditionally seen to be a subgroup of the Sampradaya group, which also includes Hinduism (Mahabharat), as well as Jain and Sikhism. Another example, in the West, is the subgroup of Catholicism, composed of many different liturgical systems and traditions, being a member of the Christianity group, which also includes Orthodoxy. diff --git a/content/theses/metaphysical/religious/dualism.md b/content/theses/metaphysical/religious/dualism.md new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/content/theses/metaphysical/religious/dualism.md diff --git a/content/theses/metaphysical/religious/judaism.md b/content/theses/metaphysical/religious/judaism.md new file mode 100644 index 0000000..734dcd4 --- /dev/null +++ b/content/theses/metaphysical/religious/judaism.md @@ -0,0 +1,55 @@ +--- +title: judaism +weight: 300 +bookHidden: true +--- + +{{% hint info %}} +This page does not presuppose any assumption about the existance of Christ. +It is not a "Christianized" view on the subject of the Judaic religion, it tries to be academic. +{{% /hint %}} + +The Judaic faith calls upon and rests upon some very specific points in order to claim it's validity. + +1. That Abraham is the patriarch of all of the Jewish people, +2. That God made a covenant with Abraham, promising that his descendants would become a great nation, +3. That though Abraham's son Isaac and his lineage, down to Jacob/Israel, and his twelve sons, the tribes of Israel came into existence, and +4. That the covenant God made with Moses grants the children of Israel claim over the lands that became known as Judea. + +From these, as well as the details of the covenants that God made with His people, the ancient kingdoms of Israel to the north and of Judea to the south were formed. + +In order to go into detail about the history and ontological conclusion of the Judaic faith, we must mention that in most of the covenants, the precondition for the covenant itself was obidience and faith to God and His rules, with each new covenant within the totality of the Old Testament being an update to the previous rules[^1]. +In most cases, when evil befell on the Jews, it was because they diverged from the commandments as a society; they stopped obeying God and the laws He had given them, and so God, seeing as they didn't want to maintain their relationship with Him, withdrew. + +This is what ultimately happened to the Kingdom of Israel, the northern kingdom. The people of the Kingdom of Israel adopted the idols and gods of their neighbours, and in the process ended their covenant with God. They abandoned Him, and so when the Assyrians came He respected their choice and left them alone. As a result the ten tribes that comprised the kingdom of Israel were exiled, spread out, and eventually they stopped existing. As the tribes forgot God, so too did He forget them, and as a result they ceased. + +Let us now look at the destruction of the Second Temple, and the subsequent exile of the Jews across the Roman empire. + +## the ontological end of Judaism +In the covenant between God and Moses, it was dictated that the *only* place of worship, where the Levites (men of the tribe of Levi), who God ordained as priests, could practice their religious tasks, such as the sacrifices, was the Temple. This means that in every sense, be that physical or metaphysical, the Temple *is* the ontological center of the faith. God's very presence on earth, the *Shekinah* dwelt in the Temple, and only in the Temple. + +Without the Temple, there is no Judaism, as there is no possible means with which to fulfil the conditions outlined in Mosaic Law. In an ontological sense, the Judaic faith *needs* the Temple to exist, because the Temple is the *only* place where religious ritual can take place, as ordained by God Himself. The existence of the Temple is a *necessity* for the ontological existance of the Judaic religion, as it was mandated that it would be. + +This means that the destruction of the Second Temple by the Romans ended not only the Judaic religion in the physical sense of exiling the Jews across Europe, but it also ended the Judaic religion in a metaphysical and ontological sense. The Temple fell and the Judaic religion with it. There is no more Israel, no more Judea, no more the Judaic religion. + +## religious mandate +After the end of the Judaic faith in a religious sense, Rabbinic Judaism, where the Pharisees and scribes gained religious authority, became the norm. Since the Levites could not fulfil, *in every sense of the word*, their duties, the focus shifted into interpreting the pre-existing law, the Torah, however there lies an issue. + +The Levites were granted their authority by God Himself, on Mount Sinai; they were ordained by Him as His priests. + +The rabbis could not claim any such authority, as they are rabbis purely because of their mastery of the Torah, a learned skill, which means that any person, be they Jew or non-Jew, can claim the same expertise, and can even interpret the Torah more meaningfully or accurately that a rabbi. Since there is no religious authority or divine mandate, it is impossible to categorically decide which interpretation is objectively correct, and so it is impossible for a rabbi to claim any sort of religious importance. Their role is purely academic, and their authority is human. + +## the dissolution of the tribes of Judea +In the Biblical era, and until the destruction of the Second Temple, the Judaic tribes kept track of their members via records in the Temple, with the membership of each tribe passing in a patrilinear fashion. This meant that the sone of a member of the tribe of Benjamin would be of the tribe of Benjamin. + +With the destruction of the Temple, along with its records, it was only though oral tradition that the tribal lineage could be kept track of, as the tribal identity was passed from father to son. + +After the destruction, there was a shift in Judaic practice however, and the Jewish society shifted from a patriliniear to a matrilinear system. This meant that a baby would be of Jewish descent if the mother was Jewish, regardless of the father. This in turn led to the end of the last tribes of Israel since, if membership to a tribe is patrilinear, as was practised under Mosaic Law, the shift to a matrilinear system severed any connection, biological or metaphysical, to the original twelve tribes of Israel. + +All twelve tribes have ontologically ceased to exist, and so there are no more children of Jacob/Israel left, and so there is nobody to claim a continuation to the covenants of old. + +τετέλεσθαι + +[^1]: This does not imply any change in God. As the conditions under which the children of Israel found themselves at changed, so did their needs, both socially, and culturaly. For example the Levitikon talks about the life of the Jews during their exile in the desert; Deuteronomy is more about their settled life in Judea. + + diff --git a/content/theses/metaphysical/religious/legalism.md b/content/theses/metaphysical/religious/legalism.md new file mode 100644 index 0000000..c58d605 --- /dev/null +++ b/content/theses/metaphysical/religious/legalism.md @@ -0,0 +1,7 @@ +--- +title: legalism +weight: 50 +draft: true +--- + +Okay, so this is going to be a discussion in this last introduction. Last whatever. Into how I perceive theological issues. Such as God, the role of God will seem evil and all of those things. It's, you know, surface level, but like people argue about these things this topics all the time. So it's like something that I would like to have an input on. Maybe help clarify some things because I believe that the answers I found these questions are very good. And oh, sorry. And they do answer like for me, they feel the gaps. Because I have had some experience like going through different religions. I try different belief systems, I've written different books, holy books. And yeah.\n\nOkay, so first of all, this is not going to be a discussion about which God is a correct one, or which religion is a correct one. I don't care about these things. I have my answers. I'm not here to tell people, hey, your answers are correct or wrong or whatever. So, obviously, I am biased by being an Orthodox Christian, but it doesn't really matter as much. I will go into, like, hey, this religious group argues this thing to present an opinion, and then I will talk about, like, I will counter the argument. Like, for example, Protestants and Catholics and many Muslims and Jews, and there are big religious groups, many religious groups argue that, like, God is a judge figure, which I want to discuss, so I need to call, I don't want to be, like, a many religious groups who say this or that. I would like to be able to say this group or that group. Well.\n\nOkay, so the first topic I would like to talk about is the division between having three wheel as given by God versus the idea that God is a judge figure that does you all the time and that this cast and that essentially keeps track record of everything you have done and then once you die it gives present to you with what you have done so if this is true which I don't feel like it is, it contradicts the idea of three wheel in a major way because the idea of three wheel is that you can do what you want and you have authority over your life, you are the person that is in charge of your options and your opinions and your choices and having a judge walk over you and tell you, this is a good thing, this is a bad thing, it's really not in line with this idea. Having a judge over see you is more in line with you are inherently evil mode of thinking rather than you have the decision whether you want to do good or to do bad, whatever definition is, which I have given a definition, but you know, so yeah. To make a reference to the Bible, Jesus does say at a moment at a point that he alone has the authority. The Father has passed the authority to the Son to be the soul judge and that he will never use that ability. He has the ability to judge. He can if he wanted, but he does not want to judge because he does not want to enforce his authority. And his belief system is important because doing so would be contradictory to giving us the ability to choose. If he was going to enforce morality and perfection, then he might as well not have given free will in the first place. So it does not make any sense for a judge's deity to imbue creation with free will, the capacity to choose. Why would you choose? Why would you give them the option to choose when you're going to tell them if it's correct or not? Yes. You It would make a lot more sense with this in mind. It would make a lot more sense that the actual judge of the person is the person themselves. People, I notice myself feeling bad when I do something that I feel is not good for me. And there are other times where I strive to make me a decision because I don't know if it's good or not, but when I do make the decision, I feel good. And so there is this idea that when you pass to the next life, you have your judge for your actions, but the judge is yourself. You judge yourself and you nitpick every little thing that you have done throughout your entire life. And therefore, you decide your fate, which is a lot more cohesive with the idea of free will exist in us, the mode of with which humans and everything operates in general. There is an allegory, I don't know if that's an allegory, I'm metaphor, that a friend of mine has presented me with when I was going through a different philosophical aspects and questions of religion in general. He told me that in some of the fathers of the church in Orthodoxy have given examples of what it is like to be in heaven or hell to go to the bad place or the good place, essentially in any religion. And the way that he presented is the one that I'd like the most out of the ones that he has told me about is this idea that when you die, you go into a field, everybody, good or bad, or whatever goes to a field. And in front of you, the son is not the son, but it's the entirety of God, essentially, he's in the full glory of God. And so you come to that when you see that, you obviously you're overwhelmed by sentiment because it's like the, if you, the options are essentially, how do I feel when I see God in front of me? Do I feel the lose? Do I feel malicious? Do I feel hateful? If I have negative perceptions of this thing of the truth with a capital T in front of me, obviously, this, this light, this blinding light is going to burn me and it's going to hurt and it's going to torment my soul forever because I cannot stand to see God, uh, above me in the entire glory of God, essentially, whilst if you, if you accept your position, if you are humble and if you, you know that this is the, the truth essentially, except this as a truth, uh, then you are so happy, you're overwhelmed with happiness and all of the, the good feelings is the, the light is not burning you, but rather it's like, it's a, a warm spring day and you lie in the field and the sun hits you and warms you up and this, the difference between something burning you were something having a warmth that is the difference between having a help in, in, in normal looks. And it also makes sense to a huge extent why and how, like, in Orthodoxy, because in Catholicism you have the Purgatory, essentially, for light scenes, or you have the first circle of hell for people that are known, that were not religious, that didn't know, but it just so good. This implies that everybody, by default, goes to hell and therefore to some extent every human is evil, and also it implies that, like, God is the one deciding, oh, you know, their scenes weren't that bad, so let's keep them in Purgatory to clean up a bit and then they can go on to be in heaven. Which doesn't make sense, and the results are called, I remember, reading, where it was, like, if I don't believe in God, will I go to heaven or hell? Oh, you actually go to heaven because you would not have known that you were being evil, and so the other person responds and why would you tell me that? And because that implies that the knowledge of God forces you to behave in a way, if there is no enforcement of that, in reality, it's all a strict feeling, because whether you believe in God or not, you're always ending up in the same place, and therefore it is up to you to perceive the thing that you're perceiving. It's up to you to choose how you feel and how you handle yourself in front of this thing in front of you. diff --git a/content/theses/misc/4life.md b/content/theses/misc/4life.md new file mode 100644 index 0000000..65b30f1 --- /dev/null +++ b/content/theses/misc/4life.md @@ -0,0 +1,24 @@ +--- +title: νοε - 4LIFE +weight: 1 +--- + +«Πρώτα απ'όλα αγαπάω πολύ αυτό που κάνω, και αυτό για το οποίο θα σας μιλήσω είναι κάτι που τ'αγαπάω πολύ. Είναι κάτι που το κάνω τα τελευταία 17 χρόνια και έτσι κάθε φορά που μου δίνεται η δυνατότητα να μιλάω για αυτό που αγαπάω χαίρομαι ιδιαίτερα. + +Οι ευτυχισμένοι άνθρωποι ονειρεύονται. Κάνουνε όνειρα για το μέλλον. Βλέπουν τον εαυτό τους στο μέλλον, τον φαντάζονται σε μια εικόνα μελλοντικά, και όταν βλέπουν αυτή την εικόνα τους εκεί, χαίρονται, γεμίζουν χαρά, παθιάζονται. Τους αρέσει αυτό που βλέπουν. + +Όχι μόνο ονειρεύονται μεγάλα όνειρα, αλλά τα όνειρα που κάνουν αλλάζουν τον κόσμο. Τα όνειρά τους έχουν μέσα και μια αλλαγή, θέλουν να αλλάξουν τον κόσμο με τον δικό τους τρόπο, θέλουν να αλλάξουν τον τρόπο, τα θέματα που αυτούς τους αγγίζουν. + +Όταν βάζουν αυτά τα όνειρα, τα όνειρα αυτά στέλνονται με στόχους. Έχουνε στόχους που τους βάζουνε στο εδώ και στο τώρα. Στόχους καθημερινούς, στόχους που ξεκινάνε στην καθημερινή τους ζωή. Για να πιάσουν το όνειρο πρέπει πρώτα να καταφέρουν να πιάσουν τους στόχους τους. + +Όχι μόνο βάζουνε δικούς τους στόχους, αλλά η επίτευξη των στόχων τους είναι εύκολη υπόθεση, θα τα καταφέρουν (...) + +Όσοι λένε ότι η μουσική είναι μόνο χαρά δεν ξέρουν τι λενε, τι τους γίνεται. Το σημαντικότερο δηλαδή δεν είναι να κάνεις αυτό που αγαπάς, αλλά να αγαπάς αυτό που κάνεις. + +«Και άλλη δουλειά, και άλλο καλοκαίρι χωρίς να κάνω διακοπές. Πρέπει όμως να το τελειώσω. Πρέπει να το τελειώσω.» + +Όχι μόνο είναι δύσκολο να φτάσουν τους στόχους τους, αλλά δεν τα παρατάνε. Όταν προσπαθούνε κάτι μαθαίνουνε να πέφτουν, μαθαίνουν να δοκιμάζουνε. Να παίρνουνε τα ρίσκα τους, έχουνε προκλήσεις. Μαθαίνουν να δοκιμάζονται, να πέφτουν και να σηκώνονται. + +Όταν έχουνε κάνει την ζωή τους και έχουν αρχίσει να προχωράνε στην ζωή τους, εκτιμούν τις επιλογές που έχουνε κάνει. Δεν μετανιώνουν, χαίρονται για τις επιλογές που έκαναν. Χαίρονται και είναι τίγκα άξιων εστί. Ότι αυτά που καταφέραν τα καταφέραν με την αξία τους, και οι επιλογές που εκάναν ήταν οι σωστές επιλογές. Ήταν οι σωστές επιλογές για τους σωστούς λόγους. + +Είχαν δίκιο ξέρετε. Διότι, υπάρχουνε στην ζωή σε ένα συγκεκριμένο χρονικό διάστημα, άγνωστο, αλλά ένα συγκεκριμένο χρονικό διάστημα. Σε αυτό τον χρόνο, κάνουν σημαντικά ή ασήμαντα πράγματα. Τα ασήμαντα πράγματα απλά μας κλέβουν τον χρόνο μας, μας τρώνε τον χρόνο μας. Γεμίζουν τον χρόνο μας. Τα σημαντικά πράγματα είναι αυτά που κάνουν την ζωή μας μοναδική, ιδιαίτερη, γεμάτη νόημα. Τα σημαντικά πράγματα, είναι τα σημαντικά πράγματα αυτά που μας κάνουν να είμαστε ευτυχισμένοι. Και ξέρετε; Αν θα κάνουμε τα σημαντικά ή τα ασήμαντα πράγματα στην ζωή μας, είναι στο χέρι μας.Η επιλογή είναι δική μας. Σας ευχαριστώ πολύ.» diff --git a/content/theses/misc/_index.md b/content/theses/misc/_index.md new file mode 100644 index 0000000..2aadb37 --- /dev/null +++ b/content/theses/misc/_index.md @@ -0,0 +1,5 @@ +--- +title: misc +weight: 9999 +bookCollapseSection: true +--- diff --git a/content/theses/misc/cogito-ergo-sum.md b/content/theses/misc/cogito-ergo-sum.md new file mode 100755 index 0000000..e3cb024 --- /dev/null +++ b/content/theses/misc/cogito-ergo-sum.md @@ -0,0 +1,31 @@ +--- +title: "cogito ergo sum" +weight: 20 +--- + +*'cogito, ergo sum'* is a latin phrase used as a philosophical proposition, which became a fundamental axiomatic truth within the boundaries of western philosophy, and has been used to assert the reality of one's own mind. + +in this text, we try to review this statement using formal propsitional logic. + +the phrase *'cogito, ergo sum'* (*'je pense, donc je suis'* in the original French) can be trivially reduced to a logical sentence + +{{< katex display=true >}} + p \Rightarrow q +{{< /katex >}} + +It is easy then to see that +{{< katex display=true >}} + (p\Rightarrow q)\iff (\neg q\Rightarrow\neg p) +{{< /katex >}} + +where +{{< katex display=false >}} + \neg q\Rightarrow \neg p +{{< /katex >}} +is trivially true (otherwise *'to be'* would not be necessary for thought). + +Therefore +{{< katex display=false >}} +p\Rightarrow q +{{< /katex >}} +is true. diff --git a/content/theses/research/_index.md b/content/theses/research/_index.md new file mode 100644 index 0000000..7e23064 --- /dev/null +++ b/content/theses/research/_index.md @@ -0,0 +1,5 @@ +--- +title: research +weight: 10 +bookCollapseSection: true +--- diff --git a/content/theses/research/arc-agi/_index.md b/content/theses/research/arc-agi/_index.md new file mode 100644 index 0000000..89585e6 --- /dev/null +++ b/content/theses/research/arc-agi/_index.md @@ -0,0 +1,5 @@ +--- +title: arc-agi +weight: 20 +bookCollapseSection: true +--- diff --git a/content/theses/research/arc-agi/approach.md b/content/theses/research/arc-agi/approach.md new file mode 100644 index 0000000..3745b68 --- /dev/null +++ b/content/theses/research/arc-agi/approach.md @@ -0,0 +1,43 @@ +--- +title: approach +weight: 20 +--- +My idea is to use my [`alectors`](https://docs.apotheke.earth/alectors) library to parse the JSON as tokens, as standard LLM approaches do, but because it is a pure RL library, it is a *markov decision process* not a *markov chain*. + +## observation space +The state space is obviously the JSON object, with a prompt like +```python +prompt = f""" +You have to find the pattern. You are given some clues. +Given {obj['train'][0]['input']} you get {obj['train'][0]['output']}. +Given {obj['train'][1]['input']} you get {obj['train'][1]['output']}. +Now based on {obj['test'][0]['input']}, what is the output? +""" +``` +(this is obviously a simplified prompt for berevity.) +{{% hint warning %}} +In theory, since we know that the max number of grid squares is `30x30`, could we not make a wrapper and use a CNN, or even flatten the input and outputs, and use simple traditional RL methods? +{{% /hint %}} + +## action space +The maximum number of grid squares is 30, and each square can have an integer from 0 to 9, inclusive. This means that in total there are `30x30x10=9000` possible actions, which is a huge action space[^1]. We can just use it as is, and hope for the best (which will massively increase the memory needs of the network), or we can come up with a clever workaround. + +Since we are not zero-shotting, and we will have multiple steps before a final output, we can simply add more steps rather than add more possible actions. A basic approach is to split it into two distinct steps, 'pick grid square' and 'pick integer for chosen grid square'. Then, the agent would choose an action from each of the possible squares in a flat array, and then pick a color. In order to force the agent to pick a color we could have two distinct ways; the first one would be to repeat the colors across the entirety of the action space, or we could heavily negatively reward the agent for picking an action outside of the integer value during 'integer picking for grid square'. + +The above seems like a bad solution; the action space would still be too big (~900 at worst) and the fact that we can have at most 10 integers per grid square means that during integer picking, the agent might have trouble exploring the action space effectively. Also, due to the curse of dimentionality, one should aim to lower the action space as much as possible. + +It would then make sense for a three-ministep step. We would have a 30d action space, with three disctict steps. One would be to pick the row, then the column, and finally the integer for the row/column. +```python +for ministep in ['row', 'column', 'color']: + prompt_with_ministep = prompt+ministep + action = agent.choose_action(prompt_with_ministep) + # ... +``` +(again, this is an oversimplification) + + + + + + +[^1]: smaller than the vocab size that LLMs use(~3e5), but it is too big to cheaply do anything. diff --git a/content/theses/research/arc-agi/introduction.md b/content/theses/research/arc-agi/introduction.md new file mode 100644 index 0000000..ea7e06e --- /dev/null +++ b/content/theses/research/arc-agi/introduction.md @@ -0,0 +1,78 @@ +--- +title: introduction +weight: 10 +--- + +[ARC-AGI-2](https://arcprize.org) is a competition regarding pattern recognition for machine learning algorithms. + +The base idea is to see if current state-of-the-art models are capable of understanding and implementing advanced patters. This benchmark-competition is unique in that it is easy for humans to score extremely high, while it is very difficult for current models to perform at any acceptable rate. + +## data +The dataset comprises of squares divided into sub-squares, with a visual queue in order to determine the colors, or the new position, or any different style of visual reasoning. + +> +>The example shown on the arc-agi website. +>The colors correspond to the number of holes. + +This information is served as JSON, so the agents need to be able to parse JSON to 'visualise' the patterns, either by tokenizing and breaking down the data, or by parsing the JSON using a hard-coded method. + +A typical JSON data object looks like +```json +{ + "train": [ + { + "input": [ + [7, 9], + [4, 3] + ], + "output": [ + [7, 9, 7, 9, 7, 9], + [4, 3, 4, 3, 4, 3], + [9, 7, 9, 7, 9, 7], + [3, 4, 3, 4, 3, 4], + [7, 9, 7, 9, 7, 9], + [4, 3, 4, 3, 4, 3] + ] + }, + { + "input": [ + [8, 6], + [6, 4] + ], + "output": [ + [8, 6, 8, 6, 8, 6], + [6, 4, 6, 4, 6, 4], + [6, 8, 6, 8, 6, 8], + [4, 6, 4, 6, 4, 6], + [8, 6, 8, 6, 8, 6], + [6, 4, 6, 4, 6, 4] + ] + } + ], + "test": [ + { + "input": [ + [3, 2], + [7, 8] + ], + "output": [ + [3, 2, 3, 2, 3, 2], + [7, 8, 7, 8, 7, 8], + [2, 3, 2, 3, 2, 3], + [8, 7, 8, 7, 8, 7], + [3, 2, 3, 2, 3, 2], + [7, 8, 7, 8, 7, 8] + ] + } + ] +} +``` +on this example, the pattern is to generate alternating pairs of the input + +## current approaches +Most approaches rely on LLMs; the best scores are achived by the state-of-the-art reasoning models such as [OpenAI's o3](https://openai.com/index/introducing-o3-and-o4-mini/), with a ***3%*** performance rating. +These try to zero-shot the problem, i.e. they see the problem, might reason (depending on the model) and then suggest a solution immediately for the entire puzzle. + +It is my belief that this approach is flawed. LLMs are markov chains, and are frozen at inference. Hence they are not able to adjust their trajectories in the embedded vector space, nor is there any actual decision making. + +Even "reasoning" models, which have had their trajectories finetuned via rl, that are able to self-prompt to cover more of the embedded space as they autoregress, are unable to reason. diff --git a/content/theses/research/monitoring.md b/content/theses/research/monitoring.md new file mode 100644 index 0000000..9d7e2c9 --- /dev/null +++ b/content/theses/research/monitoring.md @@ -0,0 +1,237 @@ +--- +title: monitoring +weight: 10 +--- + +The easiest way to set up logging for ai experiments is to use `mlflow`, which is a ready made `python` package. + +## installation +To get started we can add `mlflow` to our project, using reasonable package managers like `poetry` or `uv` + +```sh +$ poetry add mlflow +``` + +and then inside our environment we can run +```sh +$ mlflow server --host 127.0.0.1 +``` + +This sets up a web server on `localhost:5000`, which is only accessible via the computer (for local monitoring). +If you want to make this accessible to other computers (say locally via LAN, or via the internet) use `--host 0.0.0.0`. Just make sure that [you open the proper port in the firewall (by default port 5000)](/self-sufficiency/networking) + +{{% hint info %}} +for example, to serve publicly on port 8889, we run +```sh +$ mlflow server --host 127.0.0.1 --port 8889 +``` +{{% /hint %}} + +## docker-compose +In order to use docker and easily handle/manage updates we can create a `docker-compose.yaml` +```yaml +services: + mlflow: + image: ghcr.io/mlflow/mlflow + container_name: mlflow + ports: + - '5000:5000' + environment: + MLFLOW_TRACKING_URI: http://0.0.0.0:5000 + volumes: + - ./mlflow:/mlflow/mlruns + restart: always + command: ["mlflow", "server", "--host", "0.0.0.0", "--port", "5000"] +``` +This pulls the latest image of `mlflow` from github and sets it to always run so we can access the service from anywhere on port `5000`. +{{% hint info %}} +if we want to serve it on port 8889, we need to set `ports: '8889:5000'` +{{% /hint %}} + +## demo + +To get a ready-made demo, we will do a basic MNIST setup + +```python +import mlflow + +import torch as T +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim + +from torch.utils.data import DataLoader + +from torchvision import datasets +from torchvision.transforms import ToTensor + +train_data = datasets.MNIST( + root='data', + train=True, + transform=ToTensor(), + download=True + ) + +test_data = datasets.MNIST( + root='data', + train=False, + transform=ToTensor(), + download=True + ) + +loaders = { + 'train': DataLoader( + train_data, + batch_size=params['batch_size'], + shuffle=True, + num_workers=1 + ), + + 'test': DataLoader( + test_data, + batch_size=params['batch_size'], + shuffle=True, + num_workers=1 + ) +} +``` +and set up an `ImageClassifier` +```python +class ImageClassifier(nn.Module): + + def __init__(self): + super(ImageClassifier, self).__init__() + + self.conv1 = nn.Conv2d(1, 10, kernel_size=5) + self.conv2 = nn.Conv2d(10, 20, kernel_size=5) + self.conv2_drop = nn.Dropout2d() + self.fc1 = nn.Linear(320, 50) + self.fc2 = nn.Linear(50, 10) + + def forward(self, x): + x = self.conv1(x) + x = F.max_pool2d(x, 2) + x = F.relu(x) + x = self.conv2(x) + x = self.conv2_drop(x) + x = F.max_pool2d(x, 2) + x = F.relu(x) + x = x.view(-1, 320) + x = self.fc1(x) + x = F.relu(x) + x = F.dropout(x, training=self.training) + x = self.fc2(x) + return F.softmax(x) + +model = ImageClassifier().to(device) +optimizer = optim.Adam(model.parameters(), lr=params['learning_rate']) +loss_func = nn.CrossEntropyLoss() +``` + +### train/test functions +Using the [official documentation](https://mlflow.org/docs/latest/tracking/), we can build a tracking experiment + +We will need two functions, `train` and `test`: +```python +def train(epoch): + """ + Train the model on a single pass of the dataloader, and send the metrics to mlflow + """ + model.train() + for batch_idx, (data, target) in enumerate(loaders['train']): + + data, target = data.to(device), target.to(device) + optimizer.zero_grad() + output = model(data) + + loss = loss_func(output, target) + loss.backward() + accuracy = batch_idx/len(loaders['train'].dataset) + + optimizer.step() + + if batch_idx % 20 == 0: + print( + f"Train Epoch: {epoch}, [{ + batch_idx*len(data) + }/{ + len(loaders['train'].dataset) + } ({ + 100*batch_idx/len(loaders['train'].dataset):.0f + }%)]), Loss: {loss}" + ) + + loss, current = loss.item(), batch_idx + step = batch_idx // 20 * (epoch + 1) + mlflow.log_metric("loss", f"{loss:2f}", step=step) + mlflow.log_metric("accuracy", f"{accuracy:2f}", step=step) + +def test(): + """ + Evaluate the model, and log results with mlflow + """ + model.eval() + + loss = 0 + correct = 0 + + with T.no_grad(): + for data, target in loaders['test']: + data, target = data.to(device), target.to(device) + output = model(data) + loss += loss_func(output, target).item() + pred = output.argmax(dim=1,keepdim=True) + correct += pred.eq(target.view_as(pred)).sum().item() + + loss /=len(loaders['test'].dataset) + accuracy = correct/len(loaders['test'].dataset) + + print( + f"\nTest set: Average Loss: {loss:.4f}, Accuracy: {correct}/{ + len(loaders['test'].dataset) + } ({ + 100*correct/len(loaders['test'].dataset):.0f + })\n" + ) + + mlflow.log_metric("eval_loss", f"{loss:2f}", step=epoch) + mlflow.log_metric("eval_accuracy", f"{accuracy:2f}", step=epoch) +``` + +### parameter logging + +In order to log the hyperparameters so we can reference them during finetuning, we first need to inform the script where our `mlflow` instance is at, and to do this we set +```python +mlflow.set_tracking_uri(uri="http://localhost:5000") + +mlflow.set_experiment("MNIST mlflow demo") +``` +{{% hint info %}} +`set_tracking_uri` points to the `url` we run `mlflow` at. This means that is we run it on `127.0.0.1`, we use `localhost` or `127.0.0.1`. If we set it up as `0.0.0.0`, and the experiment is run outside of the mlflow server (ie another computer), we use the IP that points to that computer; either the LAN IP provided by the router (if we are using a LAN), or the public IP of the server. + +`set_experiment` is the name of the experiment inside the mlflow instance, and is used for experiment grouping and comparisons. +{{% /hint %}} + +Now we can define the hyperparameters and log them + +```python +params = { + "batch_size": batch, + "learning_rate": lr, + "num_epochs": epochs +} +mlflow.log_params(params) +``` + +### the loop +We are now ready to let the experiment run. + +The main training loop needs to run inside the `mlflow` [***context***](https://realpython.com/python-with-statement/) + +```python +with mlflow.start_run(): + for epoch in range(params['num_epochs']): + train(epoch) + test() +``` +and wait. diff --git a/content/theses/self-sufficiency/_index.md b/content/theses/self-sufficiency/_index.md new file mode 100644 index 0000000..4090af6 --- /dev/null +++ b/content/theses/self-sufficiency/_index.md @@ -0,0 +1,5 @@ +--- +title: self-sufficiency +weight: 30 +bookCollapseSection: true +--- diff --git a/content/theses/self-sufficiency/books.md b/content/theses/self-sufficiency/books.md new file mode 100644 index 0000000..2bf583c --- /dev/null +++ b/content/theses/self-sufficiency/books.md @@ -0,0 +1,95 @@ +--- +title: books +weight: 30 +--- +Owning books (not reading them) is growing as a hobby in the digital age. I, as many others, still keep a collection of books that I occasionally read, mostly physical, but also digital. + +Unfortunately, some books are not easily accessible physically where I am, or I might want to read parts of a book to see if it is worth investing in buying an actual physical copy. + +For these reasons, among others, it is nice to have a nice, accessible web library to store your own books, and have access to them over the internet. For this reason, this guide shows you how to set up `calibre-web` as a self-hosted ebook library. + +## specs +When idling, `calibre-web` takes 132M of RAM on my system. + +## installation + +Create a `calibre` folder and a `default.nix` file inside it, at the place where you have the rest of your nixos configuration +```sh +$ mkdir calibre && touch calibre/default.nix +``` +(or use the file explorer of your choice) + +### nix declaration + +Open `calibre/default.nix` in any text editor, and copy the following +```nix + +{ config, pkgs, ... }: +{ + services = { + calibre-web = { + enable = true; + + listen = { + ip = "127.0.0.1"; + port = 3020; + }; + + options = { + calibreLibrary = "/var/lib/calibre-web/library"; + enableBookUploading = true; + }; + }; + + nginx = { + virtualHosts."library.<YOUR-DOMAIN>" = { + enableACME = true; + forceSSL = true; + + locations."/" = { + proxyPass = "http://127.0.0.1:3020"; + proxyWebsockets = true; + }; + }; + }; + }; + + systemd.services.calibre-web = { + preStart = '' + if [ ! -f "/var/lib/calibre-web/library/metadata.db" ]; then + mkdir -p "/var/lib/calibre-web/library" + ${pkgs.calibre}/bin/calibredb add --empty \ + --with-library "/var/lib/calibre-web/library" + fi + ''; + }; +} +``` + +Then to enable it, just include it in the server config file: +```nix + imports = [ + # ... other services + ./calibre + # ... other services + ]; +``` +and you're done. + +Let's break the config file down. + +### explanation +1) We declare the `calibre-web` service as enabled +2) We configure the port to 3020, and make it so it won't reach out to the web outside of the reverse proxy +3) We set the library directory (where `calibre-web` will store your books), and enable uploading books via the web interface +4) We set up the reverse proxy to allow you access through the web +5) We set up a systemd service that runs when the `calibre-web` service runs, to verify that the location you set as a library is indeed a `calibre` database folder. If not, it initialised a `.db` file. + +### further setup +Once the service is up and running, go to `localhost:3020`, or `library.<YOUR-DOMAIN>`, or whatever domain you set it to. + +You should see a login screen. The default `username` is `admin` and the default `password` is `admin123`. +{{% hint danger %}} +If you serve this over the open internet ***CHANGE THE DEFAULT USERNAME AND PASSWORD IMMEDIATELY AFTER LOGGING IN***. +Otherwise *everyone* will have access to your library and data. +{{% /hint %}} diff --git a/content/theses/self-sufficiency/domain.md b/content/theses/self-sufficiency/domain.md new file mode 100644 index 0000000..6ae10c9 --- /dev/null +++ b/content/theses/self-sufficiency/domain.md @@ -0,0 +1,31 @@ +--- +title: renting a domain +weight: 2 +--- + +Everything that has to do with being self-sufficient in the modern world implies internet access[^1]. + +The most important thing one has to do if they are to expose their things into the internet is a domain name. + +A domain name is a human readable address that points to a server. For example, if a server has a public address of `74.125.142.100`, then you could link that address to your domain, so that people who use your domain in a browser could get to the server you own or rent. + +{{% hint info %}} +Intuitively most people know what a domain name is, but don't know that you can get one. +A common example to illustrate how domain names work is using `Google`. +`Google` uses a server with address `74.125.142.100`, and the domain name linked to that address is `google.com`. +Putting `74.125.142.100` takes you `Google`, just as `google.com` +{{% /hint %}} + +There are many domain name providers, like [`GoDaddy`](https://www.godaddy.com), [`PorkBun`](https://porkbun.com), or others. A good rule of thumb is to check multiple providers; typically providers from the country of origin are cheaper (for example, in Greece, a good option is [`Papaki`](https://papaki.gr)). + +{{% hint info %}} +In most cases the domain provider can help you stay anonymous by blocking `whois` (an authentication system for domains), and presenting themselves as the domain owner. +It is adviced for anonymity, to enable the service +{{% /hint %}} + +The process is extremely simple. You make an account, and look up a domain name you want, and rent it. + +{{% hint warning %}} +It might be difficult to find a good domain name. Most domain names that are legible are already rented. There is a way to make money off of domains called 'domain flipping', where you rent domains for cheap and then auction them, so people might grab 'good' domains for this purpose. +{{% /hint %}} +[^1]: If the goal is to drop the internet completely, then this page is useless. If everything is to be run *exclusively locally*, skip to the next page. If you want nothing to do with technology, close your browser and go outside. Otherwise check other pages on the site apart from `self-sufficiency`. This section of the site is about technological autonomy. diff --git a/content/theses/self-sufficiency/email.md b/content/theses/self-sufficiency/email.md new file mode 100644 index 0000000..edff450 --- /dev/null +++ b/content/theses/self-sufficiency/email.md @@ -0,0 +1,53 @@ +--- +title: email ownership +weight: 3 +--- + +Email is not safe. It never was and it never will be. This doesn't mean we have to give up. + +The important thing is not security (there are other ways to communicate securely, like [`Signal`](https://signal.org), [`Session`](https://getsession.org), and [`SimpleX`](https://simplex.chat) (even more alternatively, use [`XMPP`](https://xmpp.org), or [`matrix`](https://matrix.org))), but rather ownership. Most people use Google/Microsoft/Apple, which is the primary evil we are running away from. +{{% hint info %}} +Regarding why [check this video out](https://www.youtube.com/watch?v=iH626CXyNtE). +{{% /hint %}} + +Now that we understand that the main goal is claiming our data back from Big Tech, there are many small email providers that one can use; otherwise one can host their own email server. + +I have heard that running your own email server is a hassle, and that you need to do some extra things in order to actually host and secure it. Because of this, I use a third-party provider. + +The email provider I use is [`Fastmail`](https://fastmail.com), but in all earnest it doesn't really matter. I chose them because I have more than one domain, and fastmail supports importing as many domains as you own, and also allows you to create as many aliases as you want. +(For context, Proton allows 1 custom domain in their base plan, and infinite aliases, and Tuta offers three custom domains, but 15 aliases. Fastmail offers unlimited custom domains and unlimited aliases.) + +{{% hint danger %}} +The ***only*** reason I am comfortable using `Fastmail` is because I am ***not*** the citizen of a country in the +[Five/Six/Nine/Fourteen Eyes](https://en.wikipedia.org/wiki/Five_Eyes)--- international spying organizations that exchange information about their own citizens and/or citizens of hostile nations. +If you are a citizen of: +- the USA +- the UK +- New Zealand +- Australia +- Canada +- Denmark +- France +- the Netherlands +- Norway +- Belgium +- Germany +- Italy +- Spain +- Sweden + +If you are a citizen of one of the above countries, you are kindly encouraged to use `Proton` exclusively, assuming you care about privacy. +Do ***not*** use either `Fastmail` or `Tuta`. +{{% /hint %}} + +[`Proton`](https://proton.me) and [`Tuta`](https://tuta.com) try to be closer to a whole Cloud account (with services like Drive, Docs, etc), but in all earnest I just want an email, since I self-host my own cloud. + +The only caveat with all this is that you *do* have to pay for your email. In essence you give money for the convinience of not having to maintain your own server, as well as to not have to worry about your email getting flagged as spam by major providers. Plus, you pay so you dont become the product. +{{% hint info %}} +I might self-host an email server once I have the ability to control which ports I have open (so when I move out from my current house). If I do, I will update this. +{{% /hint %}} + +If you want to self-host an email server [check this out](https://github.com/LukeSmithxyz/emailwiz). In general check out [LandChad.net](https://landchad.net/#setup-an-email-server). Note that this guide assumes Debian/Ubuntu. +{{% hint warning %}} +The above guide by the LandChads doesn't work with [NixOS](https://nixos.org). If you choose to follow that guide, you might end up needing a dedicated server for emails. +{{% /hint %}} diff --git a/content/theses/self-sufficiency/gemini.md b/content/theses/self-sufficiency/gemini.md new file mode 100644 index 0000000..f43045d --- /dev/null +++ b/content/theses/self-sufficiency/gemini.md @@ -0,0 +1,138 @@ +--- +title: gemini:// +weight: 6 +--- + +Here I explain how to set up a `gemini://` server, which is known as a `capsule`. + +If you don't know what `gemini://` is, essentially it is a text-only `https://` alternative. + +It allows you to browse text only feeds, and is a welcome escape from ads and javascript and bloat. + +{{% hint info %}} +Gemini in general does not support anything except for pure text. There is no CSS, no JavaScript, nothing, except for text and sometimes images (but not in-line, you have to click them). +It is considered an alternative to the web, seen as "better/superior" because it forces minimalism, however it is a bad comparison. +The issue with modern web is the invasiveness, not the CSS or JS (although JS sucks); in this regard, I prefer my site being static and served over the web where I can use CSS, than gemini, where in the name of "minimalism" I have to give up expressive liberty. +Be that as it may, it's nice to have options, plus the minimalism might appeal to some, or might enable a "rehab" sentiment. +{{% /hint %}} + +## setup +The nixos configuration is a bit more difficult because of how simple `gemini` servers are. This simplicity means that we need to set up our own user, open the port (since `nginx` is a ***web*** server, it can't work with `gemini://`), and set up autosync so we don't need to sync files manually with git. + +### specs +There are many servers to host; the `gemini://` protocol is extremely simple, and so servers can take ~200-500 lines of code, and are *extremely* lightweight. + +This guide sets up `agate` since it's a service in `nixos`. + +We start by making a folder `gemini` and `gemini/default.nix` +```sh +$ mkdir gemini && touch gemini/default.nix +``` +(or use the file explorer of your choice) + +### nix declaration +Open `gemini/default.nix` in any text editor, and copy the following + +```nix +{ config, pkgs, lib, ... }: +{ + services.agate = { + enable = true; + + hostnames = [ "<YOUR-DOMAIN>" ]; + addresses = [ "0.0.0.0:1965" ]; + language = "en"; + contentDir = "/srv/gemini"; + }; + + networking.firewall.allowedTCPPorts = [ 1965 ]; + + users = { + groups.agate = { }; + users = { + agate = { + isSystemUser = true; + description = "gemini user"; + group = "agate"; + home = "/srv/gemini"; + createHome = true; + shell = "${pkgs.git}/bin/git-shell"; + }; + }; + }; + + systemd = { + # set service + services."gemini" = { + description = "Update Gemini site from repo"; + + script = '' + if [ -d /srv/gemini/.git ]; then + ${pkgs.git}/bin/git -C /srv/gemini pull + else + ${pkgs.git}/bin/git clone https://<YOUR-GEMINI-REPOSITORY> /srv/gemini + fi + ''; + + serviceConfig = { + Type = "oneshot"; + User = "agate"; + }; + }; + + timers."gemini" = { + description = "Hourly Gemini-site update"; + wantedBy = [ "timers.target" ]; + + timerConfig = { + OnCalendar = "hourly"; + Persistent = true; + }; + }; + }; +} +``` +Then to enable it, just include it in the server config file: +```nix + imports = [ + # ... other services + ./gemini + # ... other services + ]; +``` +and you're done. +{{% hint warning %}} +Make sure to replace `<YOUR-GEMINI-REPO>` with your actual gemini repo above +{{% /hint %}} + +Let's break the config file down. + +### explanation +1) We declare the `agate` service as enabled. +2) We define the hostname for the `gemini://` network, set the address(es) to serve from, and declare the language we will be writing in. Finally we declare the content directory +3) We open port 1965 to the internet +4) We declare a group `agate` +5) We declare a user `agate`, in group `agate`, with the home folder being at `srv/gemini`, having access only to the git shell, for security. +6) We declare a `systemd` service, `gemini`, that checks if `/srv/gemini` is a git repo; if it isn't it `git clone` at a specified repository, if it is, it runs `git pull`. This service is set to run once (not continuously), and to be run by user `agate` +7) We declare a timer that runs the `gemini` service we just declared, once per hour. This automates the setup + + +### adding content +In order to add content to your new capsule, simply go to the `content/` folder and start writing. + +By default `gemini://` serves the `index.gmi` at `<YOUR-DOMAIN>/`, so make that file first. + +{{% hint info %}} +`.gmi` is the markup flavour that gemini reads/serves. +It is a stripped down version of markdown (`.md` files). +[You can find out more about it here](https://geminiprotocol.net/docs/gemtext.gmi) +{{% /hint %}} + +Since servers simply serve `.gmi` files, you don't need to do any update/reload or anything. It happens automatically. + +Personally, I use `git` to keep files synced (as in, the content folder is a git repo). + +## client +In order to browse `gemini://` you need a dedicated client. + +Use [`Lagrange`](https://gmi.skyjake.fi/lagrange/). diff --git a/content/theses/self-sufficiency/git-forge.md b/content/theses/self-sufficiency/git-forge.md new file mode 100644 index 0000000..644c893 --- /dev/null +++ b/content/theses/self-sufficiency/git-forge.md @@ -0,0 +1,170 @@ +--- +title: git-forge +weight: 10 +--- +For all of the work one might do regarding self-sufficiency (or other personal projects), be that modifications to code, documents, images, or literally any modifiable process on a computer system, it is wise to use a version control system to keep track. + +Version contol systems, like `git`, or `fossil`, allow for the set-up of trackers and managers that are able to present a history of changes, as they are logged. + +This means that after a modification is made, it can be "commited" to the version control system, and stored. Effectively, you commit to the change. + +Although it is relatively simple to set up a `git` server for self-hosting (via [`cgit`](https://git.zx2c4.com/cgit/about/) perhaps), on its own it lacks an intuitive, easy to use way to interact with, apart from a command line interface. For this reason I personally use a [`Forgejo`](https://forgejo.org) instance, which is the same software running in [`Codeberg`](https://codeberg.org) + +## specs +`Forgejo` is extremely lightweight, and on it barely registers any resource usage. As a nix service, it consumes around 139M of RAM on my system. + +## installation + +Create a `forgejo` folder and a `default.nix` file inside it, at the place where you have the rest of your nixos configuration +```sh +$ mkdir forgejo && touch forgejo/default.nix +``` +(or use the file explorer of your choice) + +### nix declaration + +Open `forgejo/default.nix` in any text editor, and copy the following + +```nix +{ + services = { + forgejo = { + enable = true; + + dump.enable = true; + + useWizard = true; + + settings = { + DEFAULT = { + APP_NAME = "<A-COOL-INSTANCE-NAME>"; # Like "yourname's Forge" + RUN_MODE = "prod"; + APP_SLOGAN = "<SOMETHING-COOL>"; # Try "Fuck Microsoft" + RUN_USER = "forgejo"; + }; + + server = { + HTTP_ADDR = "127.0.0.1"; + HTTP_PORT = 3040; + DOMAIN = "forge.<YOUR-DOMAIN>"; + }; + + service = { + DISABLE_REGISTRATION = false; + DEFAULT_KEEP_EMAIL_PRIVATE = true; + }; + + lfs = { + enable = true; + }; + }; + }; + + nginx = { + virtualHosts."code.<YOUR-DOMAIN>" = { + enableACME = true; + forceSSL = true; + + locations."/" = { + proxyPass = "http://127.0.0.1:${config.services.forgejo.settings.server.HTTP_PORT}"; + proxyWebsockets = true; + }; + }; + }; + }; +} +``` + +Then to enable it, just include it in the server config file: +```nix + imports = [ + # ... other services + ./forgejo + # ... other services + ]; +``` +and you're done. + +Let's break the config file down. + +### explanation + +1) First of all we declare the `forgejo` service as enabled. +2) `dump.enable` enables backups, to be performed daily at 04:31 (4:31AM), and stored at `/var/lib/forgejo/dump` +3) `useWizard` enables the `Initial Configuration` page on first launch. It allows for some non-nixo-style configuration, just in case. +4) The `settings` define the configuration of forgejo itself: + 1) `DEFAULT` are the base options, such as the name, slogan, and type (production or development) of the instance + 2) `server` are server configuration options, which are options that will be written in the `app.ini` (the forgejo config file at run-time), under the [service] tag. You can find all of them [here](https://forgejo.org/docs/latest/admin/config-cheat-sheet/#server-server) + - We set the DOMAIN to be `forge.<YOUR-DOMAIN>` so that it apperas on `git clone` commands, + - We set the HTTP_PORT to `3010` because it's a non-standard port (the default of `3000` might clash with other services) + - We set the HTTP_ADDR to `127.0.0.1` so that the service is not accessible to anyone outside of the machine, *except* via reverse proxy through [`nginx`](/notes/self-sufficiency/web-server) + 3) `service` deals with some of the more middleware things; here we have it set to allow registrations, so that we might make our own admin account. After that is done, it should be + `DISABLE_REGISTRATION = false;` + 4) We enable git LFS (Large File Storage) just in case. + +5) Finally, we declare an [`nginx`](/notes/self-sufficiency/web-server) virtual host to set up a reverse proxy to point `forge.<YOUR-DOMAIN>` to HTTP_PORT 3040, so that you can access `forgejo` via the web. +{{% hint warning %}} +If you change the `HTTP_PORT`, remember to change it also in the `nginx` block. +{{% /hint %}} +{{% hint info %}} +In general the `settings` block works as follows: +Each of `name = {}` that starts a block within settings declares the equivalent `[name]` block in the non-default `app.ini`. Then, in that, it adds the items you define in the config. +For example, assume we have this: + +```nixos +{ + services = { + forgejo ={ + settings = { + server = { + HTTP_PORT = 3000; + }; + }; + }; + }; +} +``` +this then translates inside of the `app.ini` file to +```ini +[server] +HTTP_PORT = 3000 +``` +once the setup is set up. +{{% /hint %}} + +{{% hint info %}} +More information can be found at the [wiki](https://wiki.nixos.org/wiki/forgejo), but it can be opaque. +More options can be found [here](https://mynixos.com/nixpkgs/options/services.forgejo). +For example, if you plan to use this instance with more that ~4-5 people, it might be good to change the backend database from SQLite3 to PostgreSQL. +I leave the process of doing that as an exercise to the reader (Hint: It's a single line inside of `services.forgejo.database`). +{{% /hint %}} + +Make sure to update the parts inside of `<>`. +It should now appear in `localhost:3010`. If you are hosting this in a public server (like a VPS), it can be found in `http://forge.<YOUR-DOMAIN>`. + +### further setup +Once the service is up and running, go to `localhost:3010`, or `forge.<YOUR-DOMAIN>`, or whatever domain you set it to. + +You will see a setup page `Initial Configuration`. + +You must set up an administrator account. This can either be a completely seperate account to your own, or it could be your own account. + +You can also set up an email server using the [SMTP address of the email provider](/notes/self-sufficiency/email), as well as check out other small configuration stuff you can do. Configuring things like this however beats the purpose of using `NixOS`. You can always copy `app.ini` and translate it into `NixOS` later anyway though. + +{{% hint danger %}} +If you do translate `app.ini` ---> `nix`, make sure to not include any secrets (JWT/INTERNAL_TOKEN/etc). +{{% /hint %}} + +{{% hint danger %}} +If you don't want to have registration open for everyone, remember to set +`DISABLE_REGISTRATION = false;` +{{% /hint %}} + +## backups +### code backups +In general it is a good idea to have your code in multiple repositories. This allows you to not worry about your server going down, your code getting deleted, etc. + +I use [`codeberg`](https://codeberg.org) as a backup mirror for my personal work, and [`github`](https://github.com) for my work at [αpothēke](https://apotheke.earth). Although I don't like github, it is the best place for others to discover and contribute. + +### service backups +Because we have `service.forgejo.dump.enabled = true;`, we can simply copy `/var/lib/forgejo/dump` to another computer. If you want to keep any updates and configurtions after running, and made outside of nix, you can simply make a copy of the entire `/var/lib/forgejo` folder at regular intervals. diff --git a/content/theses/self-sufficiency/licenses.md b/content/theses/self-sufficiency/licenses.md new file mode 100644 index 0000000..487816e --- /dev/null +++ b/content/theses/self-sufficiency/licenses.md @@ -0,0 +1,64 @@ +--- +title: licensing +weight: 1 +--- + +It is well understood that free and open source software (*libre* software) stands for freedom as in "free speech", not as in "free beer". More specifically, free software is defined as any software that guarantees these four freedoms + +- The freedom to use the program for any purpose. +- The freedom to study how the program works, and change it to make it do what you wish. +- The freedom to redistribute and make copies so you can help your neighbor. +- The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits. + +These four freedoms guarantee that the *user* can make a fully informed choice; given they, or someone else, has knowledge of programming, they may study the code, and obtain full knowledge of how the software works. + +This, however, means that the code itself must be accessible, which comes with the implicit consequence that somebody well versed in programming might get the code, and use the software as they may, *without* paying. In this sense a consequence of free (*libre*)[^1] software (or rights-preserving software) is also *gratis* software (or zero-cost software). + +For the above reason, *libre* software has been massively adopted by programming communities; not only does it liberate the user by ensuring that they may make a choice based on full information, it also provides extra securities; rather than needing to place trust on the developer(s), you can trust the product itself. Security bugs and issues are found more easily, because more people are looking over the code, and the project is, in theory, constantly being audited; the project may organically grow because people take a natural interest in it, and become a communal effort rather than a personal one. + +It also is seen as a collectivising movement. Since the implication is that *libre* software has to provide access to the full source code for the four freedoms to be upheld, the implication of the capacity of others to use said code *without providing any financial compensation* means that businesses are typically disincentivised from using or creating *libre* software. Governments and other bad faith actors also typically prefer to make or use proprietary software, since making and using *libre* software would leave their misdeeds exposed. + +For this reason a more "lenient" software movement rose to prominence, that of *open source* software, which is also called *permissive*, because it permits the developer more freedoms, at the expense of the freedoms of the user[^2]. Open source software, although it does provide the user some freedoms, mostly cares for the developer experience, and the end-user is secondary[^3]. + +This in turn allowed corporations to see open-source software in a more friendly light, and reinforced the idea that there is an ideological and political distinction between *open-source* vs *libre* software; open-source is typically seen as corporate-friendly and capitalistic, whilst *libre* software is considered the collectivist/communist/anarchist option. If we look at this from a classical liberal viewpoint however, we might see a different story, and realise that *libre* software is the foundation of a free market of software. + +## legal plunder and lawful defence +In 1850, French economist Frederic Bastiat[^4] wrote a book called The Law[^5], in which he tries to argue that the rule of the Law is to guarantee and preserve the rights of the majority. In his argument, he says that since the government is comprised of people, then the government itself has no more rights than those that people individually have; the rights to life, to liberty, and to property.[^6] + +> *"Life, liberty, and property do not exist because men have made laws. On the contrary, it was the fact that life, liberty, and property existed beforehand that caused men to make laws in the first place. What, then, is law? As I have said elsewhere, it is the collective organization of the individual right to lawful defense."* + +In this regard, the role of government is exclusively to protect these very rights; anything that the government does that goes beyond the simple task of protecting the rights of the people is a degeneration of the law. + +> *"The law has placed the collective force at the disposal of the unscrupulous who wish, without risk, to exploit the person, liberty, and property of others. It has converted plunder into a right, in order to protect plunder. And it has converted lawful defense into a crime, in order to punish lawful defense."* + +We see in the above quote the root of the matter; lawful defence, insofar as it is defence that does not remove from the rights of others, is being subverted, in favour of plunder, so that others may exploit the individual, as well as the property of the individual, and in doing so reduce the capacities of the individual to exercise their liberty. In this sense, legal plunder, as Bastiat calls it, is nothing more than the erosion of the rights of the individual for the benefit of another, and because the law ends up perverted by the very people who seek to erode the liberties of others, lawful defence is seen as a detriment, and oftentimes opposing plunder is made illegal. + +## copyleft +It is on this that *libre* software takes a stand, where the open-source movement doesn't; *libre* software acts as an extension of good law; it protects and reinforces the rights of the user. Meanwhile *non-libre* software aims to plunder the user; it deducts from the user's rights. + +The way the rights are preserved is through a type of license called *copyleft*, called so because it forces not only the developer to provide the entirety of the project in a way that respects user freedom, but also any other developer who might build upon it and make their own modifications and distributions of the software. In essence it forces, in a viral way, all derived software to be as respectful of the user's rights as the original version. It promotes user freedom at the detriment of the developer. + +> *"[...] +>5. Conveying Modified Source Versions. +>You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: +>[...] +>c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +>[...]"* + +## example of non-copyleft abuse +In order to see why *copyleft* is so important to the preservance of user freedom, and how *libre* software acts as an extension of the righteous purpose of the law, as per classical liberalism, and why *open-source* and proprietary software permits legal plunder, I need to quote a very strong historical example. + +> MINIX is an operating system first released in 1987 by Andrew S. Tanenbaum, as an open-source clone of the Unix operating system, specifically targeted at low-power devices. Because it was licensed with an open-source license without a *copyleft* provision, a company, namely Intel, copied the code (ie *forked* in the proper terminology) and developed their own derivative operating system. Due to the lack of any *copyleft* clause that would force Intel to respect user freedom, by allowing the users to study and/or modify their derivative work, nobody, apart from the engineers that maintain it, know exactly what it does and how it works. The issue arises from the fact that this custom version of the MINIX operating system is run on the *Intel ME*, which is a small chip that exists in *every* Intel CPU for the past twenty years, and this operating system has *full* access to everything that happens inside of a computer that includes it. This includes the capability to control the computer; even if the computer is turned off, as long as it is connected to a power source (e.g. an outlet or a battery), it may even turn the computer on *without* user knowledge or consent. This control over the user system, alongside the inability of the user to study the MINIX operating system running inside of Intel ME, is enough of a reason to call it *malware* or *spyware*. It is a piece of code that is running without the user being able to give explicit and informed consent, and most of the time without even the user's knowledge. It is legal plunder.[^7] + +It is exactly this form of plunder that *copyleft* in *libre* software prevents, and in doing so creates a unique and interesting dynamic. + +## the free market of software +Exactly because it allows the user the maximal freedom, i.e. the ability to make fully informed consensual decisions concerning the software they wish to use, it forms the foundation of a free market of software; the voluntary exchange of goods and services. In classical liberalism, the term *market* is not restricted to use only in the exchange of goods for currency, but also includes any voluntary exchange of ideas and services, in a non-interventionist, fully decentralized manner. Besides, the concept of a free market does not axiomatically carry a preferred method of transaction; monetary exchanges, cryptocurrencies, barter, donations, everything is appropriate, with the only prerequisite being that an exchange is conducted on a voluntary premise for all participants, which necessitates transparency and full knowledge of the good or service provided; a free market of software *requires copyleft* in order to exist, and *copyleft* cannot function outside of a free market. + +[^1]: *free* software is an extemely poor choice of wording in my opinion, because it confuses the notion of freedom, with the notion of zero monetary costs. The distinction is why *libre* software has historically been used to denote free software as in freedom, and why *freeware* has been associated with zero-monetary cost. +[^2]: Because of this, I tend to call "permissive" licenses "restrictive". They restrict the user's freedoms. +[^3]: The difference is mainly ethical/moral, however there is open-source software that is *not* libre. +[^4]: 1801-1850 +[^5]: You can find a free copy [here](https://cdn.mises.org/thelaw.pdf) +[^6]: I am slowly compiling my own notes on the subject matter; you can find part of my viewpoint [here](https://notes.aethrvmn.gr/metaphysical/interpersonal/abilities) +[^7]: This specific example is the most egregious one *that we know of*, and has given rise to the term [*cuck license*](https://lukesmith.xyz/articles/why-i-use-the-gpl-and-not-cuck-licenses/) for non *copyleft*, open-source licenses. diff --git a/content/theses/self-sufficiency/media.md b/content/theses/self-sufficiency/media.md new file mode 100644 index 0000000..a55fa00 --- /dev/null +++ b/content/theses/self-sufficiency/media.md @@ -0,0 +1,105 @@ +--- +title: media +weight: 20 +--- + +Movies, shows, and music tend to fall under the broad category of "media". This means that there exist solutions to self-host an entire suite for all "media", so there is no need to pay seperate subscriptions to services such as Netflix and/or Spotify. + +{{% hint info %}} +Self-hosted means BYOM (Bring Your Own Media). +This will not buy you movies/tv shows/music. +On a discussion on the subject, [read this article](https://wiki.futo.org/index.php/Introduction_to_a_Self_Managed_Life:_a_13_hour_%26_28_minute_presentation_by_FUTO_software#%E2%80%9CPiracy%E2%80%9D) +I am not taking any ethical stance on piracy; I am taking an ethical stance on ownership. +{{% /hint %}} + +We will be using Jellyfin, which is a free and open-source software for serving media libraries, effectively replacing Netflix (albeit with a clankier UI) and spotify, with dedicated third-party clients. + +## specs +Whilst serving videos, the server needs to parse the bits; the higher the resolution, the higher the useage. + +When idling, jellyfin takes 273M of RAM on my system. + +## installation + +Create a `jellyfin` folder and a `default.nix` file inside it, at the place where you have the rest of your nixos configuration +```sh +$ mkdir jellyfin && touch jellyfin/default.nix +``` +(or use the file explorer of your choice) + +### nix declaration + +Open `jellyfin/default.nix` in any text editor, and copy the following + +```nix +{ config, pkgs, lib, ...}: +{ + environment.systemPackages = with pkgs; [ + jellyfin + jellyfin-web + jellyfin-ffmpeg + logrotate + ]; + + services = { + jellyfin = { + enable = true; + }; + + logrotate.enable = true; + + nginx = { + virtualHosts."media.<YOUR-DOMAIN" = { + enableACME = true; + forceSSL = true; + + locations."/" = { + proxyPass = "http://127.0.0.1:8096"; + proxyWebsockets = true; + }; + }; + }; + }; +} +``` + +Then to enable it, just include it in the server config file: +```nix + imports = [ + # ... other services + ./jellyfin + # ... other services + ]; +``` +and you're done. + +Let's break the config file down. + +### explanation +1) First, we declare the packages that we will use. We install them as systemPackages, because jellyfin is packaged in a weird manner. +2) Then, we declare the `jellyfin` service as enabled. +3) We enable logrotate, which helps clean logs and keeps them in a manageable size (otherwise jellyfin tends to fill the logs and bloat the system). +4) We set up nginx to set up a reverse proxy at `media.<YOUR-DOMAIN>`, so that jellyfin is only acessible via the reverse proxy. + +{{% hint info %}} +The nix service of Jellyfin doesn't allow us to customize the port, so the default one (`8096`) has to be used. +{{% /hint %}} + +{{% hint info %}} +More information can be found at the [wiki](https://wiki.nixos.org/wiki/jellyfin), but it can be opaque. Specifically it has info concerning mounting external drives (from a NAS potentially), which is not covered here. +More options can be found [here](https://mynixos.com/nixpkgs/options/services.jellyfin). +{{% /hint %}} +### further setup +Once the service is up and running, go to `localhost:8096`, or `media.<YOUR-DOMAIN>`, or whatever domain you set it to. + +You must set up an administrator account. This can either be a completely seperate account to your own, or it could be your own account. + +You must also point and set up the different libraries (and types of libraries) you want to host, like Movies/TV Shows/Music, etc. You can have multiple of each type. I have three for Music, two for TV Shows, and one for Movies, because I share this instance with other family members. + +{{% hint info %}} +Playlists are public in each library. You might want to make a Music library per user. +{{% /hint %}} + + +## service backups +Jellyfin simply serves media files, and fetches and displays metadata from within the media folders you provide. Just keep a backup of those folders. To keep a copy of the exact jellyfin setup and configuration you may do on top of the nix service, just keep a copy of `/var/lib/jellyfin`. diff --git a/content/theses/self-sufficiency/nixos-intro.md b/content/theses/self-sufficiency/nixos-intro.md new file mode 100644 index 0000000..0a5c056 --- /dev/null +++ b/content/theses/self-sufficiency/nixos-intro.md @@ -0,0 +1,31 @@ +--- +title: intro to nixos +weight: 4 +--- + +There are many other places to showcase how to pursue technological autonomy and self sufficiency in the current era, but usually their guides try to be independent from each other, meaning that if you want to run multiple services, it still requires manual configuration, and therefore there is a notion of "less" or "more" advanced setups, on top of following the guide line by line. + +In order to close this gap, and offer guides that work "as is" either in a vacuum, or as part of a larger setup, I have written this section, and propose the use of [NixOS](https://nixos.org) as the base OS for setting up everything. + +{{% hint info %}} +If you don't want to use [NixOS](https://nixos.org), there are two excellent resources: + +- [LandChad](https://landchad.net) (started by [Luke Smith](https://lukesmith.xyz) and added to by other people) +- [FUTO Wiki](https://wiki.futo.org) (written by [Louis Rossmann](https://rossman) for FUTO; Louis is also the founder of the fulu foundation, and of the [Consumer Action Taskforce (CAT)](https://consumerrights.wiki)) + +Everyone involved in either is smarter than me and a great inspiration. +{{% /hint %}} + +The benefits of [NixOS](https://nixos.org) cannot be understated: +- The fact that it all packages/services/programs are isolated, and therefore solving dependency issues means that none of the services you run has any possibility of clashing with any other. +- The declerative configuration of the entire OS means that once you have set up a complete solution, you can simply use [git](https://git-scm.com) to maintain the configuration of your system. This means that should you want to migrate your system (except your actual data), you simply grab your configuration files, and have a ready made clone of your previous system, within ***minutes***. + +For the above you need only to tolerate the following: +- Because each process is isolated, each package/service/program needs it's own copy, making the system a bit more demanding in terms of storage. This is not a significant issue however; Linux in general is extremely lightweight, and this adds a couple of GiBs at most. Once installed, NixOS is as fast as moth other distros. +- Due to it's unique configuration setup and novel language, there is a steeper learning curve in order to implement a "clean" system configuration, this however comes as a byproduct of a clean configuration being possible in the first place, which is not a thing in other operating systems. +- The documentation ***sucks***. I cannot overstate how annoying it is to find official information on most issues. Thankfully searching online yields good enough results most of the time. You can use [the official forums](https://discourse.nixos.org). You can also use any LLM, since they appear to be capable of parsing the code/misc documentation, and be able to handle the boilerplate language parts well enough. + +Especially at the early stages of using [NixOS](https://nixos.org), there needs to be a certain amount of trust to others holding your hand and telling you what to do. This is the case for the rest of this guide; In the following sections I will give verbatim nix configuration files, which abstract implementing by hand the services shown. I will not however show you how to use NixOS, as this is not the point of this guide. +{{%hint warning %}} +- To learn more about [NixOS](https://nixos.org), see [this online guide](https://nixos-and-flakes.thiscute.world/preface). It might look daunting, but if you are familiar with programing, it's quite simple. If you are unfamiliar with programming, it's still of value, although it might make more sense to just "trust me on this" and follow the rest of this guide, as it tries to hold your hand in terms of configuration. +{{% /hint %}} diff --git a/content/theses/self-sufficiency/photos.md b/content/theses/self-sufficiency/photos.md new file mode 100644 index 0000000..ca3dfe6 --- /dev/null +++ b/content/theses/self-sufficiency/photos.md @@ -0,0 +1,122 @@ +--- +title: photos +weight: 15 +--- + +One main purpose for using cloud services is keeping photos and videos, and other such media backed up in a server that is searchable, and that allows you to create albums to share with friends. + +For this purpose, in order to replace Google Photos/iCloud Photos, and to retain our ownership of said photos (both those services have restrictive ToS which gives them rights over *your* photos), we will use [`immich`](https://immich.app), which is a self-hosted free and open-source software photo and video management solution, with many features like duplicate detection and contextual search using machine learning, running locally. + +{{% hint danger %}} +As of writing this, immich is still in early/active development. There may be breaking changes between versions, so be wary and ***always keep a backup***, like an old drive, and store a copy of your photos there, just in case. +{{% /hint %}} + +## specs +The machine learning models run locally, which might make it more difficult to run on small or old hardware, but you can disable it. + +When the machine learning stack is not running, immich takes 285M of RAM on my system. + +## installation + +Create a `immich` folder and a `default.nix` file inside it, at the place where you have the rest of your nixos configuration +```sh +$ mkdir immich && touch immich/default.nix +``` +(or use the file explorer of your choice) + +### nix declaration + +Open `immich/default.nix` in any text editor, and copy the following + +```nix +{ config, lib, ... }: +{ + services = { + # Immich setup + immich = { + enable = true; + + host = "127.0.0.1"; + port = 3010; + machine-learning.enable = true; + }; + + nginx = { + virtualHosts."photos.<YOUR-DOMAIN>" = { + enableACME = true; + forceSSL = true; + + locations."/" = { + proxyPass = "http://127.0.0.1:3010"; + proxyWebsockets = true; + }; + }; + }; + }; + + hardware.graphics.enable = lib.mkForce true; + + users.users.immich = { + extraGroups = [ "video" "render" ]; + }; +} +``` +Then to enable it, just include it in the server config file: + +```nix + imports = [ + # ... other services + ./immich + # ... other services + ]; +``` +and you're done. Download the app for your phone, and connect through `https://photos.<YOUR-DOMAIN>` + +Let's break the config file down. + +### explanation +1) First of all we declare the `immich` service as enabled. +2) We define the host and port, so that the service only speaks to the outside world via a reverse proxy (via `nginx`) +3) We explcitly enable machine learning functionality, like face and object detection. +4) We set up nginx to serve a reverse proxy at `photos.<YOUR-DOMAIN>` pointing at the immich service. +5) We explicitly force the use of graphics drivers +6) Finally, we declare some information for the user that will run the `immich` service, `immich`. (we add `immich` to the `video` and `render` groups.) + +{{% hint info %}} +To disable any machine-learning functionality, simply set `machine-learning.enable = false;` +{{% /hint %}} + +{{% hint info %}} +More information can be found at the [wiki](https://wiki.nixos.org/wiki/immich), but it can be opaque. +More options can be found [here](https://mynixos.com/nixpkgs/options/services.immich). +{{% /hint %}} + +{{% hint info %}} +If you want to declare more settings and/or environment variables for `immich`, you can declare them: +```nix +services = { + immich = { + settings = { + # ... + }; + environment = { + # ... + }; + }; +}; +``` +- `services.immich.settings`, declares [settings found here](https://immich.app/docs/install/config-file/) and expects JSON syntax +You can find these settings and change them from the admin panel in your running instance of `immich` + +- `services.immich.environment`, declares [envarionment variables found here](https://immich.app/docs/install/environment-variables), and expects +`ENV_VAR_NAME = ENV_VAR_VALUE;` +Only for env vars tagged `server`, `api`, or `microservices`. +{{% /hint %}} +### further setup +Once the service is up and running, go to `localhost:3010`, or `photos.<YOUR-DOMAIN>`, or whatever domain you set it to. + +You must set up an administrator account. This can either be a completely seperate account to your own, or it could be your own account. + +## service backups +By default, all media will be stored somewhere in `/var/lib/immich`. Automatic database backups are being kept inside `/var/lib/immich/backups` as `###.sql.gz` files, so you can store these alongside your media. +If you want you can simply make a copy of the entire `/var/lib/immich` folder at regular intervals. diff --git a/content/theses/self-sufficiency/web-server.md b/content/theses/self-sufficiency/web-server.md new file mode 100644 index 0000000..9ce5cfa --- /dev/null +++ b/content/theses/self-sufficiency/web-server.md @@ -0,0 +1,97 @@ +--- +title: web-server +weight: 7 +--- +In order to host anything online nowdays, everybody needs a couple of things. The first is a [domain](/notes/self-sufficiency/domain.md), and the second is a web server to handle the different domains/subdomains and the HTTP(S) requests, and deal with the SSL certificates. + +Here we will use [`nginx`](https://nginx.org); [`caddy`](https://caddyserver.com) is also an option (so is `apache`, etc) that automates SSL, but before moving to `NixOS` I was using `nginx`, so I am more familiar with the syntax + +We will put the following at the root of our own `modules/server/` folder, since it is the aggregation point for all the following services. + +## nix decleration + +Make a default.nix at `<PATH-TO-NIX-CONFIG>/modules/server` +```sh +$ touch <PATH-TO-NIX-CONFIG>/modules/server/default.nix +``` +(or use the file explorer of your choice) + +### configuration + +Open `default.nix` in any text editor, and copy the following + +```nix +{ + imports = [ + # ... all the services will go here + ]; + + services = { + nginx = { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + }; + + sshguard.enable = true; + + openssh = { + enable = true; + settings = { + PermitRootLogin = false; + PasswordAuthentication = false; + AllowTcpForwarding = false; + X11Forwarding = false; + }; + }; + + }; + + networking = { + firewall.allowedTCPPorts = [ 80 443 ]; + }; + + security.acme = { + acceptTerms = true; + defaults.email = "<YOUR-EMAIL>"; + } +} +``` +and you're done. + +Let's break the config file down. + +### explanation +1) We declare `nginx` as enabled, and set it to use the recommended options. +2) We enable `sshguard`, which protects hosts from brute-force attacks, among other things. +3) We enable `openssh`, so that we can access the server via SSH, but configure it so that nobody can use a password to log in, and root login is disabled. +4) We open ports `80 (HTTP)` and `443(HTTPS)` to the internet. +5) We set up the `acme` service which fetches SSL certificates from LetsEncrypt. Certificates require to accept the terms and an email for communication, so we accept the terms and provide an email. + +{{% hint warning %}} +Before you enable the openssh config as is, make sure you have an `authorizedKey` on your user, otherwise you can be locked out of your machine. +To set an SSH authorized key add this tou your `user` config +```nix +users = { + users = { + <YOUR-USER> = { + # ... + openssh.authorizedKeys.keys = [ + <YOUR-KEY-1> + <YOUR-KEY-2> + # ... + ] + # ... + } + } +} +``` +{{% /hint %}} + +{{% hint info %}} +By default nixos sets a daily interval to renew the Let'sEncrypt SSL certificates, so we don't need to worry. +{{% /hint %}} + +Now we can start adding services. diff --git a/content/theses/worldbuilding/_index.md b/content/theses/worldbuilding/_index.md new file mode 100644 index 0000000..c115776 --- /dev/null +++ b/content/theses/worldbuilding/_index.md @@ -0,0 +1,5 @@ +--- +title: world-building +weight: 900 +bookCollapseSection: true +--- diff --git a/content/theses/worldbuilding/cosmogony.md b/content/theses/worldbuilding/cosmogony.md new file mode 100644 index 0000000..adf9d7a --- /dev/null +++ b/content/theses/worldbuilding/cosmogony.md @@ -0,0 +1,26 @@ +--- +title: cosmogony +weight: 20 +--- +## lore +{{% hint warning %}} +This is written from the viewpoint of someone inside the in-game universe +{{% /hint %}} + +In the beginning there was the ['unbuilt'](/world-building/religion#God), and that gave birth to, and created, the 'built'; the world. + +Inside the 'built', the 'unbuilt' created the galaxies and stars, which started an [eternal dance](/world-building/religion#eternal-dance), creating great spirals in the skies, filling the empty sky with their light. + +This eternal dance gave birth to [new entities](/world-building/religon#lesser-entities) who also joined the dance, until we reach down to [Oros and Eros](/world-building/religion#Oros-and-Eros). + +They, through their dance of light and color, created the Earth and the Ocean. + +This is how the world was created. + +## editor's notes + +{{% hint warning %}} +The following is written from outside the game lore +{{% /hint %}} + +The Earth and the Ocean are metaphysical entities representing the physical, material world. Earth is the literal *material* planet, and the Ocean is the water. Combined they create life. They, as entities do exist in-game, as the metaphysical entites, however they are not deities. The only one true deity is the 'unbuilt', however the ancient tribes and peoples worshipped them as such. diff --git a/content/theses/worldbuilding/languages.md b/content/theses/worldbuilding/languages.md new file mode 100644 index 0000000..6aeb4a6 --- /dev/null +++ b/content/theses/worldbuilding/languages.md @@ -0,0 +1,59 @@ +--- +title: languages +weight: 10 +--- + +The world has two languages. + +One is obviously the "universal English", i.e. the everyday language can always be translated into English, so all NPCs and dialogues use this language. + +The other one is the "ancient" language, which is ***unknown*** to the player in-universe as well as outside of the game. [Tunic](https://en.wikipedia.org/wiki/Tunic_(video_game)) used their own custom alphabet for the entire UI, but it was simply a novel alphabet for english. This language (unnamed) is going to be a distinct language in general; this means unique alphabet, grammar, and vocabulary. + +## ancient language +### writing system +The writing system is going to be inspired by two distinct alphabets (maybe three). These are +- The [Shavian alphabet (𐑖𐑱𐑝𐑾𐑯)](https://en.wikipedia.org/wiki/Shavian_alphabet) +- The [Korean alphabet (한글)](https://en.wikipedia.org/wiki/Hangul) + +{{% hint info %}} +**Note about Korean** + +An interesting part about the korean alphabet is the writing structure; rather than write linearly (each letter after the other), they use syllable blocks composed of letters, and then those are written linearly. +The example in [Wikipedia](https://en.wikipedia.org/wiki/Hangul) for example shows that 'Seoul' is not written as + +ㅅㅓㅇㅜㄹ + +but as + +서울 +{{% /hint %}} + +The final alphabet is then composed and used to transliterate the ***Greek*** alphabet[^1] + +[^1]: Note: I have not made a font to display the characters, but at the same time, I don't think I would include them anyway, so I will just use "redacted" instead. + +|α|β|γ|δ|ε|ζ| +|-|-|-|-|-|-| +|redacted|redacted|redacted|redacted|redacted|redacted| + +|η|θ|ι|κ|λ|μ| +|-|-|-|-|-|-| +|redacted|redacted|redacted|redacted|redacted|redacted| + +|ν|ξ|ο|π|ρ|σ| +|-|-|-|-|-|-| +|redacted|redacted|redacted|redacted|redacted|redacted| + +|τ|υ|φ|χ|ψ|ω| +|-|-|-|-|-|-| +|redacted|redacted|redacted|redacted|redacted|redacted| + +The script is then written using the syllabic setup of Korean + +{{% hint warning %}} +There will be no definitive way to figure out the language, until/unless a specific artifact is found, which will be the "Rosetta Stone", allowing the transcription. +{{% /hint %}} + + + + diff --git a/content/theses/worldbuilding/meta.md b/content/theses/worldbuilding/meta.md new file mode 100644 index 0000000..e077dee --- /dev/null +++ b/content/theses/worldbuilding/meta.md @@ -0,0 +1,10 @@ +--- +title: meta +weight: 1 +--- + +The world is aesthetically and technologically around the beginning of the 10th century, with a late Roman/Byzantine aesthetic. + +The playable character (protagonist) has just finished studying archeomancy[^1], and are preparing to venture out into the world. + +[^1]: An archeomancer is an archeologist who has some base spells in order to make their work easier. Mostly defensive, but some offensive spells. |
