Compare commits

..

No commits in common. "main" and "drone" have entirely different histories.
main ... drone

31 changed files with 707 additions and 375 deletions

View File

@ -25,6 +25,7 @@ steps:
# configure ssh identity by importing ssh key from secrets and adding it to
# ssh-agent. also disable strict host key checking as this is the first time
# the ephemeral runner is connecting to the remote host
- which ssh-agent
- eval $(ssh-agent -s)
- mkdir -p ~/.ssh
- echo "$SSH_KEY" > ~/.ssh/id_rsa

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
# build artifact
period3.xyz

View File

@ -1,7 +0,0 @@
# period3.xyz
![Pipeline status badge](https://oven.pizzawednesday.club/api/badges/ktyl/period3.xyz/status.svg)
[Drone CI](https://oven.pizzawednesday.club/ktyl/period3.xyz)
Gemini capsule accessible at gemini://period3.xyz ([HTTP Proxy](https://portal.mozz.us/gemini/period3.xyz))

View File

@ -1 +0,0 @@
https://www.penguinrandomhouse.com/books/213837/are-prisons-obsolete-by-angela-y-davis/

View File

@ -1,17 +0,0 @@
# Dune
> Frank Herbert
scarce space travel
ancient
familial becoming racial conflict
Worldbuilding
The human universe of Dune is ancient, allowing families to grow as old as cultures.
Size
feints within feints

View File

@ -1,8 +0,0 @@
# Factory Girls
> Leslie T. Chang
I enjoyed this book, it made real a world which I'd never contemplated the reality of before. Chang's perspective humanizes a group of people usually represented simplistically by Western media. Rather than desperate, poverty-stricken vagabonds one might first assume teenagers working in factories might be, she tells a story of enterprising youths who are trying to make their place in the world, in what is a very Western-style individualistic enterprise.
* migrants' acquity shifts power balance with their elders
* factory english, pyramid schemes
* self-reinvention

View File

@ -1,2 +0,0 @@
# Foundation
> Isaac Asimov

View File

@ -1,10 +0,0 @@
# How Not To Be Wrong: The Hidden Maths of Everyday Life
> Jordan Ellenberg
A broad look at mathematical principles which govern some parts of everyday life, and some parts of the not-so-everyday life. Generally well-written and approachable, as someone with a maths-adjacent background, there were some parts that I was familiar with, and others less so. The author has a sense of humour, and writes well about topics he clearly understands deeply, mostly without boring the reader.
I particularly enjoyed the first few chapters, where a difference is established between the "default" view of mathematics as purely a numbers game about finding exact answers to questions, versus the author's view that it's about finding the questions to ask in the first place. Such questions include those such as "how Swedish is too Swedish?", "does lung cancer cause smoking?" and "can slime mold predict elections?".
The book reminded me a bit of Chaos: Making a New Science which I read at the beginning of 2022, though less dry, and pitched to a more general audience. I enjoyed some specific parts of the book a lot - particularly those involving geometry and calculus - though could have done without the extensive pieces on statistics, which was always my least favourite sub-discipline at school.
=> ./chaos-making-a-new-science.gmi Chaos: Making a New Science

View File

@ -1,2 +0,0 @@
# How to Think About Robots
> Kate Darling

View File

@ -1,78 +1,27 @@
These are formatted as links. Behind some of them is a synopsis/review/loose collection of thoughts I have/had about the book. Others don't exist, but may be filled in later. I'll do my best to avoid spoilers where it's not necessary, but no promises.
Ici on trouva quelques publications françaises. J'ai parlé ce langage comme enfant et je me apprende encore quelques ans, donc on s'attendre des erreurs de la grammaire où de l'ortographe occasionnellement. Elles sont sur les livres que j'ai lu, avec mes petites pensées et mes opinions.
# In progress
* Wings of Fire
=> ./moonrise.gmi Moonrise
A collection of stories and mythology about the Moon
## The Prince of Milk
## Un Cafe Dans l'Espace
## You Are Not a Gadget
# Next Up
## Sci-fi
## Le Voyage d'Hector: ou la recherche de bonheur
## Why Women Have Better Sex Under Socialism
## Dune
## Rimworld
## The First Men in the Moon
* The Handmaid's Tale
* Le Messie de Dune
* Les Enfants de Dune
* Ringworld
* The First Men in the Moon
* The Time Machine
* War of the Worlds
* Red Mars
* The Lathe of Heaven
# Finished
## Other fiction
* Calypso
* The Apollo Murders
* Lavinia
* Down and Out in London and Paris
* Grief is the Thing with Feathers
## Non-fiction
* Show Me the Bodies: How We Let Grenfell Happen
* Animism
* Freakonomics
* Animal Liberation
* Are Prisons Obsolete?
* The Internet Con: How to Seize the Means of Computation
* How to Think About Robots
* Planta Sapiens
# 2023
=> ./lhomme-des-jeux.gmi L'homme des Jeux
=> ./constellation.gmi Constellation
=> ./a-world-without-email.gmi A World Without Email
=> ./record-of-a-spaceborn-few.gmi Record of a Spaceborn Few
=> ./zen-and-the-art-of-motorcycle-maintenance.gmi Zen and the Art of Motorcycle Maintenance
=> ./foundation.gmi Foundation
=> ./stories-of-your-life-and-others.gmi Stories of Your Life and Others
=> ./dune.gmi Dune
=> ./factory-girls.gmi Factory Girls
=> ./why-women-have-better-sex-under-socialism.gmi Why Women Have Better Sex Under Socialism
=> ./le-voyage-dhector-ou-la-recherche-de-bonheur.gmi Le Voyage d'Hector: ou la recherche de bonheur
=> ./how-not-to-be-wrong.gmi How To Not Be Wrong: The Hidden Maths of Everyday Life
=> ./women-and-power.gmi Women and Power
# 2022
=> ./to-sleep-in-a-sea-of-stars.gmi To Sleep in a Sea of Stars
=> ./seymour-an-introduction.gmi Seymour: An Introduction
=> ./the-future-starts-here.gmi The Future Starts Here
=> ./you-are-not-a-gadget.gmi You Are Not A Gadget
=> ./raise-high-the-roof-beam-carpenters.gmi Raise High the Root Beam, Carpenters
=> ./un-cafe-dans-l'espace.gmi Un Cafe Dans l'Espace
=> ./moonrise.gmi Moonrise (A collection of stories and mythology about the Moon)
=> ./the-prince-of-milk.gmi The Prince of Milk
=> ./capitalist-realism.gmi Capitalist Realism
=> ./chaos-making-a-new-science.gmi Chaos: Making a New Science
=> ./the-left-hand-of-darkness.gmi The Left Hand of Darkness
=> ./the-etymylogicon.gmi The Etymylogicon
=> ./the-conquest-of-bread.gmi The Conquest of Bread
# 202?
=> /because-internet.gmi Because Internet
=> ./capitalist-realism.gmi Capitalist Realism
=> ./chaos-making-a-new-science.gmi Chaos: Making a New Science
=> ./the-left-hand-of-darkness.gmi The Left Hand of Darkness
=> ./the-etymylogicon.gmi The Etymylogicon
=> ./the-conquest-of-bread.gmi The Conquest of Bread
=> ../index.gmi Home

View File

@ -1,9 +0,0 @@
# Le Voyage d'Hector: ou la recherche de bonheur
> Francois Lelord
Ma copaine me montra ce livre il y a duex ou trois ans.
Pour moi, ma première raison le lire des livres français c'était pour m'apprendre le langue. Alors, je suis obligé à faire des petits publications qu'on peut trouver mes opinions dans le français cassé. Allons-y!
On trouve Hector, un propre psychiatre qui pensa sur les gens, et posa quoi rendra les gens heureux? Il à fait d'un voyage autour le monde, et nota dans se petit carnet des leçons qu'il apprendra. C'est pas mal d'un livre bon français; dans tout les pays, il trouva beaucoup des femmes qui vont dormir avec lui. En plus, il remarqua toujours quand il y a des gens noirs. Mais quand-même il a aussi de philosophie, du comedie, et des pensées.
J'ai le lit près de deux semaines - un bon augmentation! Le livre français dernier j'ai lit il doit quelque mois. Mon but de cette an c'est me lire suppléant des romans anglais et français. Ensuite, ma roman prochain c'est anglais: Factory Girls.

View File

@ -1,10 +0,0 @@
# Raise High the Roof Beam, Carpenters
> J. D. Salinger
Raise High the Roof Beam, Carpenters is a work by J. D. Salinger of Fear and Loathing/Catcher in the Rye fame. I read Fear some years ago, and appreciated its feverish waltz through something which had an urgent yet paradoxically non-specific sense of plot. Carpenters has a similar feel - the protagonist makes his way through situation quite wholly out of his control, and constantly expresses such to the reader. The general setting of wartime, midsummer New York and its oppressive heat and the protagonist's ailing cough add to the gruelling pace and tension.
Ostensibly, the plot happens entirely elsewhere: the reader is instead presented with a single conversation discussing it, preceded and interspersed by various bits of exposition. However, the characters' world feels immeasurably larger as they discuss absent individuals and the relationships between them, and come into conflict aplenty over the behavioural nuances of those they discuss. Though there's little outright hostility between characters - they hardly have time to cover more than the basics of what seems a well-developed social drama - they are able to discuss in depth the makings and continuings of the plot and their immediate surroundings.
Salinger's command of simile works well to rapidly convey at once the events of the story and the protagonist's feeling of them. For example, "[A] familiar voice" derisively denotes the speaking of a character the protagonist has, chronologically speaking, only just met, but has been somewhat opposed in conversation to the entire time, and is most certainly wearing thin on patience with.
Though I think a lot of the piece's value come from the protagonist's inner monologue and absurd view on the situation, I think it would be interesting to see this presented as a short play.

View File

@ -1,9 +0,0 @@
# Stories of Your Life and Others
> Ted Chiang
# Story of Your Life
Arrival is one of my top films - it portrayed beautifully the challenge of from-scratch language learning that we all take for granted, each of us speaking natively a language which must have been learned. Story of Your Life talks of the same language learning, but the story's focal theme is time. That humans experience causes followed by effects naturally drives them to ask the heptapods why they're here, to identify their motive, as we might any stranger. But the heptapods just don't experience effects as having necessarily caused by anything, making them not unwilling, but apparently incapable of responding in any meaningful way.

View File

@ -1,17 +0,0 @@
# The Prince of Milk
The Prince of Milk is a science fiction novel by Exurb1a of YouTube fame.
It follows the story of a fictional village in southern England named Wilthail, which ends up the unwilling venue for the settling of an ancient grudge. Deities ("Etherics") exist alongside the mundanity of 21st century Wilthail, and engage in absurdity, sodomy and violence with its quaint population. The books makes reference to a number of popular philosophical debates, and takes inspiration from a number of classical sci-fi authors.
A common theme is the idea that power is relative. The Etherics are immortal - their grudge has played out across hundreds of 'Corporic' incarnations - and have power and abilities far beyond the comprehension of their human counterparts. However, they do not necessarily view themselves as gods. This is particularly true of the character Beomus, who frequently plays down their immortality and returns fire with questions about modern humans' relationship to their primitive ancestors, or with ants. This relativity of power recurs plenty, and is reminiscient of Arthur C. Clarke's assertion that sufficiently advanced technology is indistinguishable from magic. As characters in a book, the Etherics are understandably cagey about how any of their abilities work - but broadly refuse to classify them as either magic or technology.
Reincarnation is viewed as a fundamental way of the world - Chalmers' panpsychism, or the Hard Problem of Philosophy. This goes further than to suggest that people are simply reincarnated as others when they die, rather suggesting that consciousness is a fundamental force of the universe, in just the way electromagnetism is. It's a recursive thing, from the lowliest atom up through rocks, mice, snakes, cats, people, stars and gods. It's a neat and satisfying view, and one that has yet to be disproven by neuroscience.
The human characters are invariably damaged - mental health issues, broken relationships, toxic parentage, drug use, suicide, difficult histories. This paints PoM's world as realistic, and grounds it through the fantastical happenings in the middle act. It grips the reader with its variety of characters, and follows them all as they confront not only their own personal hells, but the one they now find themselves sharing, in a twisted take on country bumpkinism.
Overall, I thoroughly enjoyed this book, and am looking forward to reading more of Exurb1a's writing. I am a little biased, as I have already enjoyed the YouTube channel for a number of years.
There is a short glossary at the end naming and exploring some of the particular concepts explored in the novel, which prompt the reader to explore further. Top marks!
=> https://youtube exurb1a's YouTube channel [www]

View File

@ -1,11 +0,0 @@
# Un Cafe Dans l'Espace
> Michel Tognini
J'ai acheté ce livre quand j'ai visité la Cité de l'Espace à Toulouse. C'est écrit par Michel Tognini, un astronaute français qui été dans l'espace deux fois. Il a travillé sur la station spatiale de Mir, et sur la navette spatiale pour décoller CHANDRA, une observatoir dans le bas orbite. Depuis, il a selectionné et entrainé de nouveaux astronautes européens.
Ce livre parle de plusiers subjets en relation à l'espace: de l'entrainement de l'auteur à la Cité des Étoiles en Russie, de les échecs et défis dans l'espace, aux réalisations des sociétés privés comme SpaceX, Blue Origin et Virgin Galactic. Comme d'autres astronautes, Tognini a étudié comme pilote de chasse, et puis comme pilote d'essai. Il a rejoint l'agence spatiale française CNES avant la formation de l'ESA, qui existe encore aujourd'hui.
J'ai trouvé que je connaissais déjà beaucoup des histoires dans ce livre, parce que j'ai toujours eu une adoration pour l'espace, et c'est écrit pour une audience générale. Ma première raison de lire ce livre est que c'était mon premier français! Cela m'a pris quelques mois, mais c'etait une experience agréable. Au début, j'avais besoin de rechercer plusiers mots à chaque page, mais à la fin j'ai trouvé que je pouvais lire beaucoup d'aisance.
Je recommende ce livre aux francophones qui sont interessés par l'espace, mais qui sont peut-être moins familiers avec le jargon comme moi.

View File

@ -1,10 +0,0 @@
# Why Women Have Better Sex Under Socialism
> Kristen R. Ghodsee
Depending on your life experience and point of view, the thesis suggested by the title is either ridiculous, or it is obvious. My bias puts me in the latter camp, so I when I found the central argument - economic independence leads to relationships formed from emotional connection rather than financial necessity - expressed succintly within the first few paragraphs, I read on to see what the rest of the book could be about, if not reiterating the same idea several more times. To its praise, what followed was an insight into the impact of twentieth state socialism on women and their relationships behind the Iron Curtain, and the following impact of those societies' converstion to neoliberal capitalism post-1989.
The text doesn't advocate for a return to state socialism, and contrasts different attempts at Eastern European state socialism with each other and their contemporaries in the West. For example, it describes how though attempts were made at reaching parity between genders employed in a particular field (with the use of quotas, sometimes successfully), educating and encouraging women into the labour force, they were expected by their surrounding culture or by the state itself to continue to inhabit the gendered role of mother and housewife. As well as the fact that in most places, women's salaries didn't reach equilibrium with men's, this lead to dual stresses on women of having to manage domestic and often emotional labour with their professional lives. However, the book outlines that this was (and importantly, today, *is*) not seen as a worse state of affairs than their Western contemporaries, or the modern capitalist states such countries have become. Women's increased economic stability in these states, due to being included in the labour force, wide-reaching state childcare programs and generous parental leave policies allowed women more freedom of choice in their social lives, being able to draw from professional social circles and able to leave unhappy relationships without worry for being able to care for children.
A part I particularly liked was the book's epxloration of sexual economics theory. In broad strokes, this theory models sex as a commodity controlled by women and desired by men. Sex work would be an overt financial exchange, but sex can be - and, in the majority case, is - "sold" by women for non-monetary compensation, such as a roof over her head, food for her children or health insurance. As all markets, the sexual market is subject to supply and demand, affected by all sorts of factors which influence the "price" of sex. The highest price being, of course, marriage, in which a man acquires generally exclusive access to a woman's sex in exchange for guaranteeing her well-being forevermore.
The reason sexual economics theory is interesting is because, in capitalist societies, it works - but, when taken with socialist critiques, it lays bare the flaw in the capitalist way of thinking. It literally commidifies sex, a supposedly emotional, romantic, symbolic ritual, and forces individuals to act with self-interest. Is a woman likely to enjoy sex if she's doing it, consciously or unconsciously, because she doesn't know how she might keep a roof over her children's heads otherwise? The forces that act to reduce the price of sex are those that grant women economic independence - equal access to the job market, ubiquitous childcare, readily available and socially acceptable contraception and abortion. When they reduce the price of sex sufficiently, it ceases to be a saleable commodity, and once again because that which one can pursue for pleasure, for emotional bonding, for procreation - but no longer to keep the lights on.

View File

@ -1,8 +0,0 @@
# Women and Power
> Mary Beard
This is a very short book which only took an hour or so to read. I think I will read it again soon due to its brevity, as I felt I missed a lot of what it had to say.
It is composed of two essays. The first of which addresses how women's relation to power and agency has been historically understood, through the lens of art history over several thousand years. The second talks about how we as a treat contemporary women in power, drawing reference to figures such as Margaret Thatcher, Angela Merkel and Hillary Clinton. Two key points I found interesting were the observations that women in power necessarily must adopt masculine traits to be taken seriously, and the fundamental difference in public reaction to the mistakes of political men vs. women, in that men are expected to do a better job, whereas women are expected to defer to someone more competent - ostensibly, a man.
I'll revisit this after reading the essays again, since I feel I still have much to glean from them.

View File

@ -1,29 +0,0 @@
# You Are Not A Gadget
> Jaron Lanier
This is an interesting book written a decade ago, forecasting much of the digitally-induced malaise we find ourselves in today.
## Cybernetic Totalism vs. Dataism
In the first part of the book Lanier outlines a school of thought he names "cybernetic totalism" - in essence, the surrender of human experience to the "noosphere", the meta-entity formed from the sum of all human interaction with the net. Cybernetic totalists believe in the power of the cloud, the "hive mind" and the power of technology to ultimately improve the lives of everyone, through the folding in of everyone to this digital existence. The more human experience is brought online, the more connected they can become, the more effective crowd-sourced algorithms may become. Since these algorithms operate on data from everyone, and operate for everyone, this is the ultimate in experience-sharing and will beckon in a more communal, understanding future because we will simply have so much raw data - the fuel these algorithms need to work.
This struck me as eerily similar to Yuval Harari's "dataism", outlined in _Homo Deus_. Harari uses the examples of digital maps, which navigate more effectively through a bustling city across chaotic modes of transport better than a baseline human being. It does this by having access to vast quantities of information, update in real-time, which no human could hope to acquire and process themselves, notwithstanding having also acquired telepathy.
Harari extrapolates that dating applications - which can scan more people than an individual user could ever meet in their lifetimes - are therefore more capable of finding a truly perfect match, and music recommendation services, among plenty of others. Harari appears to have a broadly optimistic understanding of the idea.
Lanier's cybernetic totalism is a distinctly more cynical perspective, and one that I must admit I am much more in accordance with. Though I can appreciate the utility of a network-driven map which can inform me ahead of time of service disruption, or present a route previously unbeknownst to me, I find it difficult to believe that digital representations of our reality are "better" in any way beyond their immediate availability.
I have, as I expect the majority of my generation, flirted with dating applications for the better part of a decade. In that time I have seen the profiles of thousands of potential matches, matched with hundreds, talked with dozens and actually met a small handful. In all cases, they've been pleasant enough, but there was never anything close to resembling the connections I've made with those I've met sporadically, chaotically, through chance. I mean not to complain of a lonely heart - just to present a viewpoint, and perhaps something approaching a cost-benefit analysis. The result of those hundreds of hours with dating application have resulted in plenty of self-loathing, of profile-preening and of attempting to select - as with Fight Club's narrator's condo - precisely the item, tidbit or trinket which I believe to present the most interesting, attractive, dateable facets of myself to the outside world, to strangers whom I don't know. The result has not been scores of successful dates, any relationship, or even any particularly long-lasting friendships.
The dataist/cybernetic totalist view might take a statistical argument, and suggest that I having sufficiently curated my profile, that I haven't spent enough time looking, or that I am simply too picky, but i the broad experience of my use of these applications is one of spiralling misery, lethargy and mindlessness, I fail to see what the supposed good outcome actually is. Perhaps I have a lower tolerance for swiping than the developers of the application had designed for, or perhaps I fall outside their target market's predicted psychology, but it remains that these applications have never been a strong strategy in my experience.
I don't mean to say that any of the people I matched with, talked to or met were in any way bad, or had it out to me - but to challenge the idea that an algorithm is actually any good at matching people together in any but the most superficial means. In actuality, those who I've enjoyed relationships with, those who've become lifelong friends, have all been people that I've met by chance, broadly speaking in an outside context, where I was thrust (often not by choice) into a social situation and forced to interact. Exactly the way, curiously enough, that anyone met anyone in the days before global, instant communication.
It's in those cases, I think, that we get to experience some of the mystery of the other, that hook which entices one to develop a meeting, into an acquiantance, into a friendship and perhaps a partner. You don't get a profile when you meet someone in a bar - you get maybe a joke or a pick-up line, and perhaps a hint of dress sense, and that's it. The rest is down to the ensuing conversation.
I can hardly claim to be an expert in picking people up in bars - I don't think anyone is, and I would genuinely challenge the idea that anyone should want to be, but even if the number of chances is low, the cost is high and the consequences of failure much more overt and potentially publicly humiliating, it is a fundamentally human way to meet another human, and for that there's a lot to be said.
I have more to write on this book yet, but wanted to express some initial thoughts, on but one of the interesting ideas it is presenting.

View File

@ -0,0 +1,76 @@
=> ../../../index.gmi Index
=> https://git-scm.com/ Git [www]
# A minimal Git server
Sometimes hosted services aren't the right fit for the job. Here are some basic steps for setting up and using remote Git repositories on a remote Debian host. You will need sudo access.
## Create a Git User
Add a user to own the repositories:
```
sudo adduser git
```
Start a session for the new user in their home directory:
```
sudo su -l git
```
## Configure SSH access
Create the `.ssh` directory and make it readable only to the new user.
```
mkdir ~/.ssh
chmod 700 ~/.ssh
```
Create an `authorized_keys` file in the `.ssh` directory, and make it accessible only to the new user.
```
touch .ssh/authorized_keys
chmod 600 `.ssh/authorized_keys`
```
Create a public/private key pair locally to authenticate a user when connecting to the remote host.
```
ssh-keygen -t rsa
```
Copy the key into the (remote) git user's `.ssh/authorized_keys`, for example using `ssh-copy-id` or by giving the public key to the server administrator.
Add an entry to your local `.ssh/config`:
```
Host myhost
HostName chaos.period3.xyz
User git
IdentityFile ~/.ssh/id_rsa
```
Test the configuration with:
```
ssh myhost
```
## Create a bare repository
Create directories within the git user's home directory (nested paths are allowed). Conventionally Git repositories use a `.git` suffix, for example `my-projects/my-repo.git` or just `my-repo.git`.
```
git init --bare repo.git
```
There now exists an empty Git repository on the host. The remote can be added to a local repository:
```
git remote add origin git@host:my-repo.git
git push -u origin main
```

View File

@ -0,0 +1,25 @@
# Energy
We should be on a war footing.
Our approach to the war in Ukraine so far has been one of platitudes. Refusing to stand up NATO forces against the onslaught of the Russian war machine manages the risk of a third world war, but the response Western states take instead is violent, weak, and fundamentally ineffective if we consider what our actual goals are.
Every day we receive news of another hundred million, another billion in arms packages for Ukraine, in training and intelligence delivered by our own well-equipped armed forces, and 'everything we can' short of actually deploying troops and responding with the same force we see Putin unafraid to use. Physical force is very much in play - the Ukrainians will fight for their children, their homeland, until the last breath, but they cannot win against a superior foe, only delay the inevitable. To supply guns, bombs, tanks and planes, to share with Ukraine our satellite intelligence is a rousing and inspiring tale, and we can pat ourselves on the back for cheering the good fight from the sidelines, all without setting our own feet in the arena.
It is only an orgasm of morbidity, of defence executives rubbing their hands their hands with glee at package after package of public funds to send Javelins and F-35s into the fray. It does not matter that we've excluded Russia from SWIFT, nor that we've impounded the superyachts of the mega-rich, nor that we've imposed sanctions on Putin's friends and family, or that the ruble is propped up domestically by state banks, when we still depend on Russian energy and accept no real change to our own business as usual.
Shells fall, hospitals burn and children die in Ukraine, and we are glad that the violence is contained on not-long-to-be Ukrainian soil. But the fight is so clearly not a nationalist contest between Ukrainian and Russian. The fight is between the rule-by-force authoritarianism and the liberal democracy of the West, which for all its flaws - and there are many - is better than life under the boot of He Who Holds The Bigger Stick.
Because of our alliances, because of wars fought a century past, because of our overenthusiastic defence complexes, we are not losing our fathers and sons, we are not evacuating busloads of civilians from confinement underground, we are not watching our cities reduced to rubble. As summer begins to settle in and we emerge from another long, dark and isolating winter, we do not feel that we are at war. But maybe we should.
The exclusion of Russian oil from our lifestyle should be absolute and non-negotiable. As it stands, we dance around the issue and work out timelines, feasibilities, technicalities about how quickly we could maybe reduce our requirements perhaps by the middle of the decade. We try to work out what is realistic, based on the lifestyles we're accustomed to, based on our production, our economies, our international dependencies, commitments and supply chains. This is backwards.
When we were last under threat, from Hitler, we didn't have the luxury of time to consider what was possible or realistic - the enemy was at the gates, in our skies, in our minds. The same is true now, if only we would tell ourselves such a story, to let ourselves see the threat for what it is. Likewise, today, we do not have time to dawdle, to work out a minimum-impact approach. Every day we delay real action costs the lives of hundreds or thousands of Ukrainians, escalates the terror and emboldens the Russian war machine, inefficient and grinding though it may be, grind on it will. As it is we are appeasing a dictator, and the outlook is that we will continue the appeasement until there is nothing left of Ukraine but unexploded shells and stories, and Russia gears up for the next special military operation.
To go to war is not merely to launch missiles at the enemy or to roll tanks down their streets. Indeed if Putin is to be believed such an approach would be ineffective and dangerous. To go to war is to light a fire in the heart of a people, united in community to take massive, drastic action. For us, this means to first arrest our dependence on Russian oil and gas, and then to deal with the consequences.
We know how to do deal with them - we need an emergency programme of insulation, of building renewable energy sources everywhere, unsightly or not, massive retooling and repurposing of our industries. We know it will hurt - it will mean going without power, going without heat while we work to make up for what we've lost. But we must do it. We must do it anyway - the climate crisis has gone nowhere and looms all the more with every passing out-of-season heatwave, every record-breaking storm, every wildfire. But we must do it all the more urgently to rise to the threat of fascism which rears once again its ugly head in Europe.
Ukraine is hurting, and our hearts go out to them. But if we genuinely care about their fight, about the continued existence of our own way of life, we should be hurting too.

8
content/gemlog/index.gmi Normal file
View File

@ -0,0 +1,8 @@
=> ./2022/05/09/energy.gmi 2022-05-09 Energy
=> ./2022/04/05/git-server.gmi 2022-04-05 A minimal Git server
=> ./index.gmi TODO-TO-DO Deploying with SSH and Git
=> ./index.gmi TODO-TO-DO A teeny tiny website
=> ./index.gmi TODO-TO-DO Home music with a NAS, mpd and sshfs
=> ../index.gmi Home

View File

@ -11,13 +11,9 @@
#########
```
=> ./pixie.gmi Pixie
=> ./soar.gmi Soar
=> ./sibling.gmi Sibling
=> ./sail.gmi Sail
=> ./books/index.gmi Books
=> ./music/index.gmi Music
=> ./reference.gmi Reference
=> ./gemlog/index.gmi Gemlog
=> ./books/index.gmi Books
=> ./music/index.gmi Music
=> ./thoughts.gmi Thoughts
=> ./reference.gmi Reference

View File

@ -1,49 +1,5 @@
# 2023
11-15 Queens Of The Stone Age
11-11 French 79
11-09 French It Up Comedy Club *
10-31 Danny L Harle, Thy Slaughter, A G Cook, easyFun, caro♡
10-02 Muse
09-30 Aunty Donna
09-13 David Julyan, Anna Phoebe, Soundbox Ensemble
08-26 Parlor Snakes, Ethel Cain, SOCIAL DANCE, L'Impératrice, Dry Cleaning, Cypress Hill, The Yeah Yeah Yeahs, The Chemical Brothers, Charlotte de Witte
08-19 Fever Ray, Jon Hopkins, Bonobo, Aphex Twin
08-12 LEHNA
07-14 Pulp, Richard Hawley
07-09 Blur, Paul Weller, The Selecter
06-20 Jen Cloher
05-25 The Beths
05-01 Electric Callboy
04-17 Enter Shikari
03-24 sungazer
03-14 Ocean Grove
03-05 Pendulum
02-02 The Subways
22-01 Sleep Token, Northlane
# 2022
30-11 Minihi, Ruby Colley, Samuel Sharp
27-11 Poppy
21-11 Mother Mother
11-11 Sigur Rós
11-05 Ride, Honeyglaze
10-21 Ocean Grove
10-18 Bosco Bosco
09-22 Robocobra Quartet, heka
08-28 Charli XCX, Beabadoobee, Pale Waves, 100 gecs, Denzel Curry, Halsey, The 1975
@ -118,8 +74,9 @@
# ????
??-?? Lindsey Stirling
??-?? Frank Carter and the Rattlesnakes, Highly Suspect
??-?? Frank Carter and the Rattlesnakes
??-?? Beans on Toast
??-?? Highly Suspect
??-?? Twelve Foot Ninja
??-?? Oscar Scheller
??-?? Kero Kero Bonito

View File

@ -1,18 +1,11 @@
Beabadoobee - Beatopia
Belle and Sebastian - A Bit Of Previous
Christine and the Queens - Redcar les adorables étoiles
David Bowie - Hunky Dory
Dream Theater - Illumination Theory
Funkadelic - Maggot Brain
Horsegirl - Versions of Modern Performance
Jack White - Fear of the Dawn
Jay Chakravorty - A Map With No Memory
Muse - Black Holes and Revelations
Ocean Grove - The Rhapsody TAapes
Pointer Sisters - Jump (For My Love)/Heart Beat
Robocobra Quartet - Music for all Occasions
Sharon van Etten - We've Been Going About This All Wrong
Softcult - Zodiac EPs
The Grateful Dead - American Beauty
The Beths - Expert In A Dying Field
Zuzu - Queensway Tunnel
Beabadobee - 2022 - Beatopia
Muse - ???? - Black Holes and Revelations
Jack White - 2022 - Fear The Dawn
Jay Chakravorty - 202? - ????
Belle and Sebastian - 2022 - A Bit of Previous
Horsegirl - ???? - ????
Zuzu - 2021 - Queensway Tunnel
Sharon Van Etten - 2022 - We've Been Going About This All Wrong
Dream Theater - 2015? - Illumination Theory
The Grateful Dead - ???? - ????

View File

@ -1,5 +0,0 @@
In the first, I was infatuated with a pixie-nymph from far away. She was reciprocal, but our time together was intoxicating. However, she'd been hurt: flesh ripped from bone and her very life threatened. She'd never intended to stay forever, and now her injuries had cut her time short. We had a day together, in which we beheld a festive church, a garden and walked a while.
When she told me she was not long for this place I implored her to stay. But she, resolute, refused, and I took it poorly. Thinking about myself, I soured our last hours together: selfishly, I wanted her, she should be mine, stay and be my joy, but it wasn't to be.
Now she is left, and I have but my memories of our time together. I wish I'd not tilted at her windmill, not tried in vain to turn the tide of our fate. If I'd only respected her time and mine, those memories of mine would be sweet, not brine.

View File

@ -0,0 +1,559 @@
/*
credit Nerdu#7492 from the Dev Submarine
its a little unreadable
so im gonna do my best to remember and explan
explain*
so the calculate initial orbital params does p much what it says it does
so u can get the initial true anomaly p easy via the initial position
but im p sure it becomes a bit more complicated if u want to solve for it in the future
so you have to calculate initial mean and eccentric anomaly
and then once thats done, i just use the RecalculateAtTime to update the ships current variables, like its flight path and other stuff, and the GetPositionAtTime() function to get the position at any time to draw the orbit. This is done by simply getting mean anomaly at any time and then converting to true anomaly, and then its p simply from there
im p sure some of the equations are a little diff from what i was finding online because i had to tweak them to my sims needs or i had to like add 90 degrees or something stupid like that
but yea otherwise u should be able to take a lot off of this script
its p ugly
its practically a singleton 💀
also i think i had to custom write the Cosh, Sinh, Tanh, Atanh, Acosh, and Asinh functions
lemme find them
if u want the whole project to see it in action just lemme know
im p sure it was slightly buggy at times but not the worst
*/
public class spaceshipScript : MonoBehaviour
{
private Camera cam;
private LineRenderer orbitLR;
private LineRenderer shipToPlanetLR;
private LineRenderer velocityLR;
private LineRenderer perpRLR;
public float mouseScrollMultiplier;
public AnimationCurve curveForMouseZoom;
public float maxMouseZoomMultiplier;
public float minZoom;
public float maxZoom;
public Transform orbitedPlanet;
public celestialBodyScript orbitedPlanetScript;
private Rigidbody2D rb;
public Vector2 initVelocity;
public OrbitalParameters currentOrbitalParams;
private orbitSimulationManager simManager;
public float orbitDrawnMaxWidth;
public AnimationCurve orbitDrawnWidthCurve;
public float thrustVelocity;
public float rotationSpeed;
//km
public float physicsDistance;
// Start is called before the first frame update
void Start()
{
orbitLR = transform.GetChild(0).GetComponent<LineRenderer>();
shipToPlanetLR = transform.GetChild(1).GetComponent<LineRenderer>();
velocityLR = transform.GetChild(2).GetComponent<LineRenderer>();
perpRLR = transform.GetChild(3).GetComponent<LineRenderer>();
simManager = GameObject.FindGameObjectWithTag("simManager").GetComponent<orbitSimulationManager>();
cam = Camera.main;
rb = GetComponent<Rigidbody2D>();
rb.velocity = initVelocity / simManager.scale;
Vector2 posFromPlanet = (Vector2)transform.position - (Vector2) orbitedPlanet.position;
posFromPlanet *= simManager.scale;
CalculateOrbitalParams(
new Vector2d((double)initVelocity.x,
(double)initVelocity.y),
new Vector2d(posFromPlanet.x, posFromPlanet.y),
orbitedPlanetScript.mass,
true);
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.A))
{
transform.Rotate(0f,0f,rotationSpeed * Time.deltaTime * simManager.timeScale);
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(0f,0f,-rotationSpeed * Time.deltaTime * simManager.timeScale);
}
ZoomOrthoCamera();
float orbitWidthVal = orbitDrawnMaxWidth * orbitDrawnWidthCurve.Evaluate(cam.orthographicSize / maxZoom);
orbitLR.startWidth = orbitWidthVal;
orbitLR.endWidth = orbitWidthVal;
shipToPlanetLR.startWidth = orbitWidthVal;
shipToPlanetLR.endWidth = orbitWidthVal;
velocityLR.startWidth = orbitWidthVal;
velocityLR.endWidth = orbitWidthVal;
perpRLR.startWidth = orbitWidthVal;
perpRLR.endWidth = orbitWidthVal;
}
private void FixedUpdate()
{
Vector2d dir = new Vector2d(Mathd.Cos((double)transform.rotation.eulerAngles.z * Mathd.Deg2Rad), Mathd.Sin((double)transform.rotation.eulerAngles.z * Mathd.Deg2Rad));
if (Input.GetKey(KeyCode.Space))
{
if (Vector2.Distance(transform.position, orbitedPlanet.position) > (orbitedPlanetScript.radius + physicsDistance)/simManager.scale)
{
Vector2 posFromPlanet = (Vector2)transform.position - (Vector2) orbitedPlanet.position;
if (simManager.timeScale > 8)
{
simManager.timeScale = 8;
}
posFromPlanet *= simManager.scale;
Vector2d currentVel = new Vector2d(currentOrbitalParams.v * Mathd.Cos(currentOrbitalParams.theta), currentOrbitalParams.v * Mathd.Sin(currentOrbitalParams.theta));
currentVel += thrustVelocity * dir * Time.fixedDeltaTime * simManager.timeScale;
CalculateOrbitalParams(currentVel, new Vector2d(posFromPlanet.x, posFromPlanet.y), orbitedPlanetScript.mass, false);
rb.velocity = new Vector2((float)currentVel.x, (float)currentVel.y) / simManager.scale;
}
else
{
//print((new Vector2((float)dir.x, (float)dir.y) * (thrustVelocity * simManager.timeScale * Time.fixedDeltaTime)));
rb.AddForce(new Vector2((float)dir.x, (float)dir.y).normalized * (50f * Time.deltaTime));
//rb.velocity = rb.velocity + (new Vector2((float)dir.x, (float)dir.y) * (thrustVelocity * simManager.timeScale * Time.fixedDeltaTime))/simManager.scale;
Vector2d currentVel = new Vector2d(rb.velocity.x, rb.velocity.y) * simManager.scale;
Vector2 posFromPlanet = (Vector2)transform.position - (Vector2) orbitedPlanet.position;
posFromPlanet *= simManager.scale;
CalculateOrbitalParams(currentVel, new Vector2d(posFromPlanet.x, posFromPlanet.y), orbitedPlanetScript.mass, false);
}
}
if (Vector2.Distance(transform.position, orbitedPlanet.position) > (orbitedPlanetScript.radius + physicsDistance)/simManager.scale)
{
rb.isKinematic = true;
Vector2d pos = currentOrbitalParams.RecalculateAtTime(simManager.time);
Vector3 relative = new Vector3((float) pos.x / simManager.scale, (float) pos.y / simManager.scale, 0f);
shipToPlanetLR.positionCount = 2;
perpRLR.positionCount = 2;
shipToPlanetLR.SetPositions(new Vector3[]{new Vector3(0f,0f,0f), relative});
perpRLR.SetPositions(new Vector3[]{relative, relative + new Vector3((float)dir.x, (float)dir.y) * 500f});
float velAngle = (float) currentOrbitalParams.theta;
float vel = (float) currentOrbitalParams.v;
Vector3 velocityVector = new Vector3(vel * Mathf.Cos(velAngle), vel * Mathf.Sin(velAngle));
velocityLR.SetPositions(new Vector3[]{relative, velocityVector + relative});
transform.position = orbitedPlanet.position + relative;
Vector2d currentVel = new Vector2d(currentOrbitalParams.v * Mathd.Cos(currentOrbitalParams.theta), currentOrbitalParams.v * Mathd.Sin(currentOrbitalParams.theta));
rb.velocity = new Vector2((float)currentVel.x, (float)currentVel.y) / simManager.scale;
}
else
{
if (simManager.timeScale > 4)
{
simManager.timeScale = 4;
}
rb.isKinematic = false;
double gravVal = currentOrbitalParams.G *
(orbitedPlanetScript.mass /
Mathf.Pow(Vector2.Distance(orbitedPlanet.position, transform.position) * simManager.scale,
2));
print(gravVal);
print((float)gravVal * Time.fixedDeltaTime * (10/simManager.scale));
rb.velocity = rb.velocity + (float) gravVal * (1 / simManager.scale) * Time.fixedDeltaTime * simManager.timeScale *
(Vector2)(orbitedPlanet.position - transform.position).normalized;
//rb.AddForce(((float)gravVal * rb.mass * (10/simManager.scale) * Time.fixedDeltaTime * simManager.timeScale * (orbitedPlanet.position - transform.position).normalized) );
currentOrbitalParams.v = ((double) rb.velocity.magnitude * Mathd.Sign((double) rb.velocity.magnitude)) *
simManager.scale;
currentOrbitalParams.theta = Mathd.Atan2(rb.velocity.normalized.y, rb.velocity.normalized.x);
}
}
private void LateUpdate()
{
orbitLR.transform.position = orbitedPlanet.position;
orbitLR.transform.rotation = Quaternion.identity;
perpRLR.transform.position = orbitedPlanet.position;
perpRLR.transform.rotation = Quaternion.identity;
velocityLR.transform.position = orbitedPlanet.position;
velocityLR.transform.rotation = Quaternion.identity;
shipToPlanetLR.transform.position = orbitedPlanet.position + new Vector3(0f, 0f, 1f);
shipToPlanetLR.transform.rotation = Quaternion.identity;
Camera.main.transform.rotation = Quaternion.identity;
//RotateCam();
}
void CalculateOrbitalParams(Vector2d initialVel, Vector2d positionFromPlanet, double planetMass, bool doPrints)
{
currentOrbitalParams = new OrbitalParameters();
currentOrbitalParams.CalculateAllInitialParams(initialVel, positionFromPlanet, planetMass, simManager.time - Time.fixedDeltaTime * simManager.timeScale, doPrints);
DrawOrbit(100);
}
void DrawOrbit(int posCount)
{
orbitLR.positionCount = posCount;
Vector3[] positions = new Vector3[posCount];
for (var i = 0; i < posCount; i++)
{
double value;
if (currentOrbitalParams.e < 1)
{
value = ((currentOrbitalParams.T / posCount) * i) + currentOrbitalParams.t0;;
}
else
{
value = ((2 * Mathd.PI / posCount) * i) + currentOrbitalParams.w;
}
//double dist = currentOrbitalParams.EvaluateEllipticalOrbit(currentOrbitalParams.a, currentOrbitalParams.e,
// currentOrbitalParams.w, angle);
//Vector2d pos = new Vector2d(dist * Mathd.Cos(angle), dist * Mathd.Sin(angle));
Vector2d pos = currentOrbitalParams.GetPositionAtTime(value);
Vector2 adjustedPos = new Vector2((float)pos.x/simManager.scale, (float)pos.y/simManager.scale);
positions[i] = adjustedPos;
}
orbitLR.SetPositions(positions);
}
void ZoomOrthoCamera()
{
// Calculate how much we will have to move towards the zoomTowards position
mouseScrollMultiplier = curveForMouseZoom.Evaluate(cam.orthographicSize/maxZoom) * maxMouseZoomMultiplier;
// Zoom camera
cam.orthographicSize -= Input.mouseScrollDelta.y * mouseScrollMultiplier;
// Limit zoom
cam.orthographicSize = Mathf.Clamp(cam.orthographicSize, minZoom, maxZoom);
}
void RotateCam()
{
Vector2 dir = transform.position - orbitedPlanet.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
angle -= 90f;
cam.transform.rotation = Quaternion.Euler(0f, 0f, angle);
}
}
[System.Serializable]
public class OrbitalParameters
{
[Header("Semi-major axis")] public double a;
[Header("Semi-minor axis")] public double b;
[Header("Eccentricity")] public double e;
[Header("True Anomaly")] public double f;
[Header("Angle Of Perigee")] public double w;
[Header("Eccentric Anomaly")] public double E;
[Header("Initial Mean Anomaly")] public double M0;
[Header("Initial Time")] public double t0;
[Header("Current Mean Anomaly")] public double M;
[Header("Orbital Period")] public double T;
[Header("Mean Motion")] public double n;
[Header("Flight Path Angle")] public double phi;
[Header("Velocity")] public double v;
[Header("VelAngle")] public double theta;
private Vector2d eVec;
[HideInInspector]
public double h;
private double u;
[HideInInspector]
public double G = 6.67408 * Mathd.Pow(10, -11);
public void CalculateAllInitialParams(Vector2d velocity, Vector2d positionFromPlanet, double planetMass, double _t0, bool doPrints)
{
u = G * planetMass;
t0 = _t0;
if (doPrints)
{
Debug.Log("circleVel: " + Mathd.Sqrt(u/positionFromPlanet.magnitude) + ", escape Vel: " + Mathd.Sqrt(2 * u/positionFromPlanet.magnitude));
}
//circular vel
//velocity = new Vector2d(-Mathd.Sqrt(u/positionFromPlanet.magnitude), 0);
//parabolic vel - escape vel
//velocity = new Vector2d(Mathd.Sqrt(2 * u/positionFromPlanet.magnitude), 0);
a = CalculateSemiMajorAxis(velocity.magnitude, positionFromPlanet.magnitude, u);
h = Vector2d.CrossProduct(positionFromPlanet, velocity);
eVec = CalculateEccentricityVector(velocity, positionFromPlanet, u);
e = eVec.magnitude;
T = CalculateOrbitalPeriod(u, a, e);
n = CalculateMeanMotion(T, h, e, u, a);
f = TrueAnomalyFromStateVectors(eVec, positionFromPlanet, velocity);
w = AngleOfPerigee(positionFromPlanet, f);
if (doPrints)
{
Debug.Log("(" + eVec.x + ", " + eVec.y + ")");
}
if (e < 1)
{
E = CalculateEccentricAnomalyFromTrueAnomaly(f, e);
M0 = MeanAnomalyFromEccentricAnomaly(E, e);
M = M0;
if (doPrints)
{
Debug.Log(f + " " + E);
}
}
else if(e >= 1)
{
E = CalculateHyperbolicAnomalyFromTrueAnomaly(f, e);
M0 = MeanAnomalyFromHyperbolicAnomaly(E, e);
M = M0;
if (doPrints)
{
Debug.Log(f + " " + E + " " + (e * Mathd.Sinh(E) - E));
}
}
else
{
}
v = CalculateVelocityVisViva(a, u, positionFromPlanet.magnitude);
phi = CalculateFlightPathAngle(e, f);
theta = GetCurrentDirectionOfVelocity(positionFromPlanet, phi, h);
//E = CalculateEccentricAnomalyFromMeanAnomaly(e, M, 5);
}
//not context based
public Vector2d GetPositionAtTime(double t)
{
if (e < 1)
{
double _M = M0 + n * (t - t0);
double _E = CalculateEccentricAnomalyFromMeanAnomaly(e, _M, 7);
double _f = CalculateTrueAnomalyFromEccentricAnomaly(_E, e, 7);
double angle = _f + w;
double r = EvaluateOrbit(a, e, w, angle);
return new Vector2d(r * Mathd.Cos(angle),r * Mathd.Sin(angle));
}
else
{
/*double _M = M0 + n * (t - t0);
double _E = CalculateHyperbolicAnomalyFromMeanAnomaly(e, _M, 7);
double _f = CalculateTrueAnomalyFromHyperbolicAnomaly(_E, e);
double angle = _f + w;
double r = EvaluateOrbit(a, e, w, angle);
return new Vector2d(r * Mathd.Cos(angle),r * Mathd.Sin(angle));*/
double r = EvaluateOrbit(a, e, w, t);
return new Vector2d(r * Mathd.Cos(t), r * Mathd.Sin(t));
}
}
//context based
public Vector2d RecalculateAtTime(double t)
{
if (e < 1)
{
M = M0 + n * (t - t0);
E = CalculateEccentricAnomalyFromMeanAnomaly(e, M, 7);
f = CalculateTrueAnomalyFromEccentricAnomaly(E, e, 7);
double angle = f + w;
double r = EvaluateOrbit(a, e, w, angle);
Vector2d pos = new Vector2d(r * Mathd.Cos(angle),r * Mathd.Sin(angle));
v = CalculateVelocityVisViva(a, u, pos.magnitude);
phi = CalculateFlightPathAngle(e, f);
theta = GetCurrentDirectionOfVelocity(pos, phi,h);
return pos;
}
else
{
M = M0 + n * (t - t0);
E = CalculateHyperbolicAnomalyFromMeanAnomaly(e, M, 7);
f = CalculateTrueAnomalyFromHyperbolicAnomaly(E, e);
double angle = f + w;
double r = EvaluateOrbit(a, e, w, angle);
Vector2d pos = new Vector2d(r * Mathd.Cos(angle),r * Mathd.Sin(angle));
v = CalculateVelocityVisViva(a, u, pos.magnitude);
phi = CalculateFlightPathAngle(e, f);
theta = GetCurrentDirectionOfVelocity(pos, phi, h);
return pos;
}
}
public double EvaluateOrbit(double _a, double _e, double _w, double angle)
{
double top = _a * (1 - Mathd.Pow(_e, 2));
double bot = 1 + e * Mathd.Cos(angle - _w);
return top / bot;
}
public double CalculateVelocityVisViva(double _a, double _u, double _r)
{
return Mathd.Sqrt(_u * ((2.0 / _r) - (1.0 / _a)));
}
public double CalculateFlightPathAngle(double _e, double _f)
{
return Mathd.Atan2(_e * Mathd.Sin(_f), 1 + _e * Mathd.Cos(_f));
}
public double GetCurrentDirectionOfVelocity(Vector2d pos, double _phi, double _h)
{
Vector2d perp = new Vector2d(pos.y, -pos.x) * 0.5f;
Vector2d perp2 = new Vector2d(-pos.y, pos.x) * 0.5f;
double perpAngle = Mathd.Atan2(perp2.y - perp.y, perp2.x - perp.x);
double velAngle;
if (_h < 0)
{
velAngle = perpAngle - _phi + Mathd.PI;
}
else
{
velAngle = perpAngle - _phi;
}
return velAngle;
}
public double AngleOfPerigee(Vector2d r, double _f)
{
return Mathd.Atan2(r.y, r.x) - _f;
}
public double CalculateSemiMajorAxis(double v, double r, double u)
{
return (u * r) / (2 * u - (Mathd.Pow(v, 2) * r));
}
public double CalculateOrbitalPeriod(double u, double _a, double _e)
{
if (_e <= 1)
{
return 2 * Mathd.PI * Mathd.Sqrt(Mathd.Pow(_a, 3) / u);
}
else
{
return -1;
}
}
//WRONG GIVES MEAN MOTION U IDIOT MF.
public double CalculateMeanMotion(double _T, double _h, double _e, double _u, double _a)
{
if (_e < 1)
{
return (2 * Mathd.PI) / _T * Mathd.Sign(_h);
}
else if (_e > 1)
{
return Mathd.Sqrt(_u / -Mathd.Pow(_a, 3)) * Mathd.Sign(_h);
}
else
{
return Mathd.Sqrt(_u / Mathd.Pow(_a, 3)) * Mathd.Sign(_h);
}
}
public Vector2d CalculateEccentricityVector(Vector2d v, Vector2d r, double u)
{
double _h = Vector2d.CrossProduct(r, v);
return ((Mathd.Pow(v.magnitude, 2) - (u / r.magnitude)) * r - Vector2d.Dot(r, v) * v) / u;
//return new Vector2d(((v.y * _h)/u) - (r.x/r.magnitude), ((v.x * _h)/u) - (r.y/r.magnitude));
}
public double CalculateEccentricAnomalyFromMeanAnomaly(double _e, double _M, int dp)
{
//dp = number of decimal places
int maxIter=30, i=0;
double delta=Mathd.Pow(10,-dp);
double _E, F;
_E=_M;
F = _E - _e*Mathd.Sin(_M) - _M;
while ((Mathd.Abs(F)>delta) && (i<maxIter)) {
_E = _E - F/(1.0-_e*Mathd.Cos(_E));
F = _E - _e*Math.Sin(_E) - _M;
i = i + 1;
}
return _E;
}
public double CalculateHyperbolicAnomalyFromMeanAnomaly(double _e, double _M, int dp)
{
//dp = number of decimal places
int maxIter=30, i=0;
double delta=Mathd.Pow(10,-dp);
double _E, F;
_E=_M;
F = _e * Mathd.Sinh(_E) - _E - _M;
while ((Mathd.Abs(F)>delta) && (i<maxIter)) {
_E = _E + F/(1.0 - _e * Mathd.Cosh(_E));
F = _e * Mathd.Sinh(_E) - _E - _M;
i = i + 1;
}
return _E;
}
public double CalculateEccentricAnomalyFromTrueAnomaly(double _f, double _e)
{
return Mathd.Atan2(Mathd.Sqrt(1 - Mathd.Pow(_e, 2)) * Mathd.Sin(_f), _e + Mathd.Cos(_f));
}
public double CalculateHyperbolicAnomalyFromTrueAnomaly(double _f, double _e)
{
return 2 * Mathd.Atanh(Mathd.Sqrt((_e - 1)/(_e + 1)) * Mathd.Tan(_f/2));
}
public double MeanAnomalyFromEccentricAnomaly(double _E, double _e)
{
return _E - _e * Mathd.Sin(_E);
}
public double MeanAnomalyFromHyperbolicAnomaly(double _H, double _e)
{
return _e * Mathd.Sinh(_H) - _H;
}
public double CalculateTrueAnomalyFromEccentricAnomaly(double _E, double _e, int dp)
{
return Mathd.Atan2(Mathd.Sqrt(1 - Mathd.Pow(_e, 2)) * Mathd.Sin(_E), Mathd.Cos(_E) - _e);
}
public double CalculateTrueAnomalyFromHyperbolicAnomaly(double _H, double _e)
{
return 2 * Mathd.Atan2(Mathd.Sqrt(_e + 1) * Mathd.Sinh(_H/2), Mathd.Sqrt(_e - 1) * Mathd.Cosh(_H/2));
}
public double TrueAnomalyFromStateVectors(Vector2d _e, Vector2d r, Vector2d v)
{
if (_e.magnitude > 0)
{
double h = Vector2d.CrossProduct(r, v);
double val = Mathd.Acos(Vector2d.Dot(_e, r) / (_e.magnitude * r.magnitude));
if (!Mathd.Approximately(Mathd.Sign(Vector2d.Dot(r, v)), Mathd.Sign(h)))
{
return (2 * Mathd.PI) - val;
}
else
{
return val;
}
}
else
{
return Mathd.Atan2(r.y, r.x);
}
}
}

View File

@ -11,7 +11,6 @@ for my own reference really but do enjoy :)
=> https://www.mit.edu/people/dpolicar/writing/prose/text/thinkingMeat.html They're Made out of Meat [www]
=> http://www.williamflew.com/omni4d.html Newton's Gift [www]
=> http://q-bits.org/images/Dneprov.pdf The Game [www]
=> http://www.infinityplus.co.uk/stories/blit.htm BLIT [www]
# en français
@ -31,8 +30,6 @@ for my own reference really but do enjoy :)
=> https://ploum.net/the-computer-built-to-last-50-years The computer built to last 50 years [www]
=> https://jlouisramblings.blogspot.com/2012/08/getting-25-megalines-of-code-to-behave.html The software of the Curiosity Mars rover [www]
=> https://esoteric.codes/blog/escher-circuits-using-vision-to-perform-computation Escher Circuits: Using Vision to Perform Computation [www]
=> https://solar.lowtechmagazine.com/about.html Solar-powered website [www]
=> https://thequietus.com/articles/32303-film-28-days-later-20-anniversary Rage Was Always the Virus: 28 Days (And 20 Years) Later [www]
# people

View File

@ -1,21 +0,0 @@
It's the last evening of the year as I write this, and I feel my mind is perhaps a bit of a mess. I feel psychologically, mentally emotionally beaten about, a tiny yacht on a vast, stormy sea. To go on, there are dual, necessary, but opposed needs.
To the first, I need to rest.
Exhaustion helps no one, and to face the ocean worn and tired is to invite mistakes: the sea is a harsh mistress after all, and surely won't forgive. To this end, I heave-to, retreat inside and light the hearth. Outside the watery turmoil abates none, but from inside the cabin that's no concern of mine. Now far into this voyage, I turn to my habitual comforts to whittle away minutes, hours and days in the pursuit of trite dopamine hits from the eternal entertainment matrix. In the moment, there's a respite, an absence of exhaustion, of concern, of anxiety or worry, but an absence is all it is: there's no recovery or improvement.
As a smoker is relieved in the moment by a rush of nicotine, to dip into my own coping mechanisms is alluring, relieving, but ultimately futile. It's a pattern I should know: I smoked for years, and ultimately kicked it. To smoke from time to time isn't a failure - I've not resorted to the habit.
I steal away hours in the night, feeling that I'm clawing back my sense of self-evident existence, but come the morn I am where I already was, still at sea, without a horizon in sight. I know that which brings me joy and growth is that which I create, explore, learn and do anew. I know concurrently that mine habit this outcome will not provide: but I remain stuck in my own animal desires and complexes, unable to crack the cycle with any frustratingly logical analysis.
To the second, I need to progress.
Every moment I spend warming myself in the cabin, buried under blankets and ignoring the maelstrom on the other side of the hull, is a moment I don't spend moving. I don't know that the voyage will ever end, that I may ever sight land on the horizon, but how sad it would be to be equipped with a sail and to sit still. I know that to push my own endurance, will and ability is a pursuit and goal in itself. To move, to be swift, to strike out for somewhere new is that which has brought me the greatest joy and meaning I've ever known.
The more I practice, learn and endure, the faster I will go, the easier it will be.
The calculus is clear: go out into the storm. Go out into the wind and the rain and the dark and the cold and face it, travel and progress regardless. The hearth will always be there, but I will not.
If I do not go now, tomorrow, and every moment I can, how can I ever excuse what might have been, but is not?

View File

@ -1,28 +0,0 @@
As the second oldest child, Min would bear many of those burdens.
Her parents were still responsible for her and her younger siblings, but now she was the de facto oldest sibling, and so it fell to her to set an example.
She would have to take on responsibilities, cook and clean, keep her siblings safe and fed and learned, as her parents entered their twilight years.
She didn't mind: she loved her family, and her youngest sibling was far from troublesome, little Ren just entering adolescence.
The first child - in Min's case, her brother Tun - traditionally would leave the village and travel to the city.
There, bearing the family's name, they would be educated, learn a trade and return when they had found a calling and their success.
The second oldest would remain, tending the hearth of home with their parents and other siblings.
If and when the oldest returned, the second might then entertain the chance to leave - if they were able - to try for the same, but this was far from guaranteed.
Much depended on how much older the first was, whether they found the success they sought and how long they took to do it.
By all counts, it was perfectly likely Tun would be gone for years, or perhaps never return.
Min, being only a year younger than Tun, could expect to stay in the village well into adulthood.
Min counted herself lucky yet, though, as she knew her village was among the more prosperous.
The land here was fertile and low-lying, so they were able to make their year's harvest without mmuch hardship, most years.
Neighbouring villages were equally comfortable, so the pace of life was laid-back and left plenty of time for personal pursuits.
In a way, she felt sorry for Tun - his burden was decided more than hers.
He'd been excited to travel to the city, but a gloom has beset him in the weeks before he left.
He'd not complained - he knew his role, accepted it willingly - but Min saw he didn't really want to go.
The city, they'd heard, was a busy, loud and dirty place.
Great riches and adventure could certainly be found, but at the cost of hard work, health and mental stamina.
They'd heard it could be isolating, lonely, for those not outgoing, energetic or wealthy enough to make friends in the drinking-houses.
Tun would be fine, she thought, after some time, but he'd always preferred to read and paint and walk in the forest, than partake in social events.
He would be fine, but she looked forward to his return.

View File

@ -1,27 +0,0 @@
You, we send in our place,
To go where we mustn't
Homunculus, in our image,
Carry our dream beyond.
An ancestral view
Of us, not you
Prideful, warlike,
Shortsighted, askew.
See for us now,
Reach, claw, crawl,
Listen to the wind and desert,
The rings, the ice, the snow.
Breathe in the black,
Hows does it taste?
Call, far from home,
Oh, love, oh, race.
Look at you, sore,
Into the maw
A parting roar,
We'll watch,
From the shore.