#given the existence of The Library of Babel
Explore tagged Tumblr posts
duckprintspress · 6 months ago
Text
My 2025 TBR
@hullosweetpea pinged me (on my personal account, @unforth) to do a "9 books I plan to read in 2025" meme, but I'd been meaning to do a post about the silly method I used to make my TBR anyway, so I'm gonna do that instead.
I've never been good about keeping track of books I've wanted to read, but in 2024 when I really started digging in to read a lot, I came up with a plan - I put together a TBR from recently published books (so, from 2023) plus a few books I'd had lying around for a long time - I had an "imminent" TBR on my nightstand and an older "oops didn't get to these yet" TBR that I'd shoved in a bedside cabinet. I grabbed all the old TBR, mixed them together with the imminent TBR, and treated that as my "real" TBR. I then put it in an order that I thought would help motivate me to read the things I was less enthusiastic about (but still wanted to read!) and set about making myself read them in order. I didn't actually manage that - things got shifted as new more exciting releases came out, and when something I was less enthusiastic about came to the top, I often bumped it until I felt up for reading it. But I actually think my flexibility in approach helped cause it meant I didn't stall, and by the end of 2024 I managed to read every single book that was in my TBR pile at the start of 2024.
Of course, I then had a completely new pile of books that I'd acquired, been handed by my wife after she read them cause she thought I'd like them, or borrowed from friends.
So, given that this method essentially worked, I of course, inevitably, decided to do it even more for 2025! Even though my TBR going into 2025 is already bigger than my pile was going into 2024, I nonetheless decided to go to the deep dark depths of cold storage - I went up to the attic (where our library is!) and dug out about a half-dozen books that I've been meaning to read; some I've had around for 20 years without getting to them. And I took my existing TBR, and these new books, and I made four piles:
(stupid long post about my TBR follows, behind a readmore)
Pile 1: The Books On The Top. These are the books that either I got most recently and I'm excited for, or that have been on my TBR longest, and I decided to leave them as-is. These are the books I'm either most excited to read or most determined to read.
Tumblr media
This pile can basically be treated as my answer to the 9 books meme, even though there are only seven of them. It's also slightly out of date - I took this picture a few days ago, I'm now reading top book.
The Disabled Tyrant's Beloved Pet Fish by Xue Shan Fei Hu
The Fall of the House of Tatterly by Shanna Miles
The Missing Piece by Kun Yi Wei Lou
The City We Became by N. K. Jemisin
You're Too OP by Yi Xiu Luo
Babel by R. F. Kuang
Dream of the Red Chamber by Tsao Hsueh Chin
Looking at this pile, I think it's pretty obvious which are the titles I bought and which are the ones my wife handed over to me after she read them, assuming you know anything about my usual reading habits (it's danmei. I read danmei, lmao). I yoinked the Chinese classic off my mom's bookshelves, I want to expand my familiarity with the roots of Chinese lit so that I understand more about what I'm reading now.
Piles 2, 3, and 4: The books I'm excited about (left), neutral about (middle), and the books I'm kinda meh about but still would like to read (right).
Tumblr media
I took all the remaining books, both more recent and from the cold storage (literally cold storage, our attic doesn't have much heat lmao), and sorted them into these three piles. A lot of the books I'm actually most excited to read aren't out yet; those I'll add to the pile as I buy them, so the final pile will change. I collated these three piles - alternating things I was excited for, things I was neutral about, and things I was meh about - into a final complete TBR.
Tumblr media
This is my TBR for the year - not everything I'll read, by any means, but I'll attempt, by the end of 2025, to have read all these books, plus anything else I come across, thus that by the end of 2025, I'll have once again ship-of-Theseus'd by TBR pile. This entire pile, plus sources:
The Disabled Tyrant's Beloved Pet Fish by Xue Shan Fei Hu (bought for myself)
The Fall of the House of Tatterly by Shanna Miles (passed over by my wife)
The Missing Piece by Kun Yi Wei Lou (bought for myself)
The City We Became by N. K. Jemisin (passed over by my wife - we also have the sequel, though she hasn't read it, and I expect if I like this one I'll probably read that soon after)
You're Too OP by Yi Xiu Luo (bought for myself)
Babel by R. F. Kuang (passed over by my wife)
Dream of the Red Chamber by Tsao Hsueh Chin (borrowed from my mom)
After the War by Stuart Sharp (bought for myself - this is an indie press title from the press I was vending next to at Readercon, it sounds really good!)
Where You Linger and Other Stories by Bonnie Jo Stufflebeam (another indie press Readercon acquisition, from Lethe Press)
The Fox and the Fallen Prince by Kate East (I traded a badly damaged copy of Aim For The Heart for this book at Flamecon, with a self-pub author who was vending across from me)
Slouch: Posture Panic in Modern America by Beth Linker (passed over by my wife)
Most Likely to Summon Nyhiloteph (another Readercon book, an anthology from Ghost Orchid Press)
The Kaiju Preservation Society by John Scalzi (passed over by my wife)
Black Cranes: Tales of Unquiet Women (this anthology was on the take a book-leave a book table at Readercon and looked interesting)
Winter's Orbit by Everina Maxwell (from cold storage, though I've not actually had it a long time; this is from a huge stash of queer books I stumbled upon at Goodwill one day and bought...all of.)
Devotion by Anna Denisch (got this self-pubbed title at the Book and Comic Expo at The Shirt Factory last fall)
The Bad Guys Won by Jeff Pearlman (passed over by my dad)
The Dragons of Heaven by Alyc Helms (from cold storage, I'm sorry it's taken me so long to get to it @alychelms I've had it on my TBR since it first came out, oops)
(this one I can't remember the title on and don't feel like going to check, but it's a freebie/teaser that the guy vending next to me at The Shirt Factory gave me)
The Gilded Chain by Dave Duncan (from cold storage)
War of the Oaks by Emma Bull (from cold storage)
Felix Ever After by Kacen Callender (another Goodwill stash/cold storage book)
The Last Icon: Tom Seaver and His Times by Steven Travers (passed over by my dad; he passes me books about the Mets, in case that wasn't obvious yet, we both love baseball)
Fight Like a Girl edited by April Steenburgh & Christy Lennox (from cold storage; this was my first publication credit! but I've never actually read the whole anthology, oops)
The State of Us by Shaun David Hutchinson (another Goodwill stash/cold storage book)
Vicksburg: 1863 by Winston Groom (from cold storage; I am not only not-so-secretly a baseball fan, I'm also not-so-secretly a Civil War buff)
Sooo... that's 26 books, including some non-fiction that'll probably be slow going. But hopefully I can read it all this year!
But because that's enough... anyone who pays attention to my monthly reading posts or other posts about what I personally read has probably noticed I read a lot of graphic novels, so I can hear you going, "but unforth, there are no graphic novels on your TBR! where are the graphic novels?" and you are right. Because I maintain not one, but TWO other TBRs (three if you count my Libby account) specifically for graphic novel TBRs; I usually read them while reading other stuff.
Pile 1: physical library books and borrowed books.
Tumblr media
I actually read Dungeon Critters last night; this is my current library pile, with the four on the bottom all books I borrowed from @tryslora.
Dungeon Critters by Sara Goetter and Natalie Riess
Galaxy: The Prettiest Star by Jadzia Axelrod and Jess Taylor
Hakumei & Mikochi: Tiny Little Life in the Woods vol. 1 by Takuto Kashiki
Silver Vessels by Steve Orlando
Ash's Cabin by Jen Wang
Yuri is My Job vols. 8 to 12 by Miman
Ask Me About Polyamory! by Tikva Wolf
Cannonball by Kelsey Wroten
The Flying Ship vol. 1 and 2 by Jem Milton
Signals vol. 1 and 2 by Nika
The Less than Epic Adventures of TJ and Amal by E. K. Weaver
How to Be a Werewolf vol. 1 by Shawn Lenore
That said, I'm going to the library tomorrow, so I'll presumably come back with more. I always do, lmao.
Pile 2: Libby
No photograph for this one, obviously, and I don't feel like grabbing appropriate screen captures, but. I have five libraries on Libby ( @queerliblib, the Japan Foundation of Los Angeles, my local library, the New York Public Library, and the Brooklyn Public Library - all these are free for me as a US and NYS citizen) and I'm mostly using them to read manga lmao.
Current Libby Borrows:
I Hear the Sunspot vol. 1 by Yuki Fumino
Yona of the Dawn vol. 5 by Mizuho Kusanagi
Chainsaw Man vol. 2 by Tatsuki Fujimoto
Too Close to Fall in Love by Akira Nakata
Haikyu!! vol. 18 by Haruichi Furudate
Jujutsu Kaisen vol. 1 by Gege Akutami
Kaiju No. 8 vol 5 by Naoya Matsumoto
Libby Holds (titles I'm waiting for - because they have strict due-dates, they'll jump the TBR line whenever the holds come through):
Demon Slayer/Kimetsu no Yaiba vol. 4 by Koyoharu Gotouge
I Think Our Son is Gay vol. 5 by Okura
I Shall Never Fall in Love by Hari Conner
Camp Damascus by Chuck Tingle
Spy x Family vol. 3 by Tatsuya Endo
Bury Your Gays by Chuck Tingle
How to Be Ace by Rebecca Burgess
Gwen and Art Are Not in Love by Lex Croucher
FANGS vol. 1 by Billy Balibally
Pile 3: The Yaoi Stash + a couple other odds and ends
So early last year I got a text from my brother that he was at a thrift shop and they had a pile of books that "looked like my kind of thing" and a photograph of a bunch of book spines, and I told him to go ahead and buy them all at $1 US a pop and I'd sort through what they were. This is most of those; excluded are a couple that weren't yaoi and I wasn't interested in, and a few that are incomplete cause I don't want to get invested in something like that. I haven't yet read any of this yet, I figure if I ever am low on library books or am just in the mood for some yaoi porn, I'll dip into this pile then.
Tumblr media
Footnotes from the World's Greatest Bookstores is obviously not yaoi, it's a passed-by-my-dad art book about bookstores. It is, however, a quick read, and I've already read about half of it, so I threw it on this pile too because it had to go somewhere lmao
(blank spine) is actually an art book of MXTX fanart I got at Flamecon
Hero Heel vol. 1 and 2 by Makoto Tateno
New Beginnings by Kotetsuko Yamamoto
A Love Song for the Miserable by Yukimura
Tomorrow's Ulterior Motives by Sakuya Fujii
Love Share by Aoi Kujyou
Love Control by Ai Hasukawa
Star by Keiko Konno
Once Upon a Glashma by Jumiko Sukeane
Passionate Theory by Ayumi Kano
Hot Limit by Akira Kanbe and Minori Shima
Candy by Satomi Suerts
Red by Sanae Rokuya
Anyway. The TL:DR of all of this is I'm anal but if it keeps me reading it's worth it, and that I've got waaaaaaay too much I want to read in 2025.
But anyway, that's the answer to my 9, er, 50-something books I want to read in 2025 lmao.
15 notes · View notes
orcboxer · 2 years ago
Note
Wait I looked up the library of babel and kinda didn't understand it :( think you could explain it a bit ?
The Library of Babel is a short story by Jorge Luis Borges about a virtually infinite library containing virtually all possible information of a given length.
Every book has 410 pages, and all the letters are presumably the same size, and they only use the same 22 letters (it doesn't use the English alphabet, as the story itself is not written in English) plus the period, the comma, and the space. But as you pick up and read various books in the library, you find that most of it is gibberish, as though each symbol is generated randomly. But! There are no repeats. No two books are identical, they may differ by a single symbol at a minimum.
This leads people who live in this library to infer that the library is in fact finite, as there is only a certain number of books that could exist within those parameters. If the books were only 1 character long, there would be 25 books, one for each symbol. If the books were 2 characters long, there would be 300 books, one for each unique combination of two symbols. If the books were 3 characters long, there would be 2300 books. And so on. But the books in the library are all 1,312,000 symbols long, so the number of possible books is fuckin massive. So massive that there would be more books in the library than there are atoms in our universe.
So you can infer that there's one book in the library that's just the letter A repeated a million times. Which means that there are a million books that are almost identical except one of the As is replaced by a B. And exponentially more books where two As are replaced by a B.
Every possible string of information, using the 25 base symbols, that can fit within 410 pages, exists somewhere in the Library of Babel. Including this post (not counting the extra 4 letters in the English alphabet). There must also exist, then, perfect predictions of the future, copies of all the greatest works of literature, and descriptions of you reading this post.
The sheer scale of the library is difficult, perhaps even impossible, to wrap your mind around. The story is, in my opinion, a fascinating piece of cosmic horror.
45 notes · View notes
aioleis · 1 year ago
Text
מִגְדַּל בָּבֶל
Tumblr media
Tower of Babel, in biblical literature, structure built in the land of Shinar (Babylonia) some time after the Deluge. The story of its construction, given in Genesis 11:1–9, appears to be an attempt to explain the existence of diversehuman languages. According to Genesis, the Babylonians wanted to make a name for themselves by building a mighty city and a tower“ with its top in the heavens. ”
God disrupted the work by so confusing the language of the workers that they could no longer understand one another. The city was never completed, and the people were dispersed over the face of the earth.
The Tower of Babel  is an origin myth and parable in the Book of Genesis meant to explain why the world's peoples speak different languages.
According to the story, a united human race speaking a single language and migrating eastward, comes to the land of Shinar (שִׁנְעָר‎; Σενναάρ).
There they agree to build a city and a tower with its top in the sky. Yahweh, observing their city and tower, confounds their speech so that they can no longer understand each other, and scatters them around the world.
Some modern scholars have associated the Tower of Babel with known structures, notably Etemenanki, a ziggurat dedicated to the Mesopotamian god Marduk in Babylon. A Sumerian story with some similar elements is told in Enmerkar and the Lord of Aratta.
Wiki
The Tower of Shibar, Hermetic Library >
0 notes
heyimspade · 2 years ago
Text
The Library of Babel interests me because it is literally a library based on a book (which I have not read and seriously need to read), but apparently functions the same as it does in the story.
It contains everything, including the future, past, and present.
It has 100% accurately predicted your future, but that prediction is almost impossible to find.
And I don't mean the "still have a chance" almost impossible.
There are infinite ways to predict your future; in a different language, in some sort of encryption language, in words that exist but nobody has ever heard, layman's terms?
We wouldn't know how it would be phrased. We wouldn't know how to decipher it.
Not to mention locating it within the library itself. It's all randomly generated, so the chances of you finding it in your lifetime...
But at the same time, you could, but not even realize it. We wouldn't recognize it if it smacked us in the face with a(n) [insert suggestion here].
I'd like to think that maybe one day I could find the page that teaches me to be on my best future, so I've started putting sentences in search box that correlate with what I want in life.
It's a fun brain tickler, and it's given me a wee bit of hope for the future.
2 notes · View notes
yellowocaballero · 4 years ago
Text
Jon & Sasha Arson fic
Little fragment of an idea that never went anywhere. No reason for it. Just thought it would be funny. I was right. Rest under the cut. 
Most people who were unlucky enough to meet Jonathan Sims assumed he had no friends.
This was true, up to a point two weeks after Jon became a researcher at the Magnus Institute: afterwards Jon had no friends, except for Sasha James.
Sasha James was attributable to arson.
Most people who were unlucky enough to meet Jonathan Sims assumed he had no friends. 
This was true, up to a point two weeks after Jon became a researcher at the Magnus Institute: afterwards Jon had no friends, except for Sasha James. 
*******
Sasha James was attributable to arson.
Arson was attributable to a bookshelf of Leitners, humming strange songs and spewing toxic energy into the air in rhythmic hissing motions. The Leitners were attributable to Artifact Storage, a testament to mankind’s hubris and a modern-day tower of Babel where a group of underpaid academics found themselves stress testing kevlar and fire suppression systems each day. Artifact Storage was attributable to the Magnus Institute, where Jon had managed to land a job after three months of desolate post-graduate unemployment. And the Magnus Institute was attributable to - well, probably Jonah Magnus, but Jon found that it was likely a bit of a reach to blame a long dead Regency gentleman for all of his problems. 
Jon needed this job. London was expensive and so were funerals, and he couldn’t keep living on life insurance forever. It was even a good job, with decent pay and the exact kind of limp, half-hearted academia that the private sector promised disillusioned English mastery holders. His coworkers were nice - well, Tim was nice, everybody else seemed to hate him for the same reason that everybody else hated him, likely intimidated by how smart he was - and the commute was short. He couldn’t afford to lose this job. Spiritually, metaphysically, and literally. 
Which was why he should stop staring at this piece of paper. The follow-up research to a statement given by some idiot unlucky enough to cross paths with what was certainly a Leitner. 
‘ORIGINATION OF PHENOMENA ISOLATED’, the page read out professionally, yet chipperly, like a young woman in a new office job. ‘ITEM QUARANTINED WITHIN ARTIFACT STORAGE (46B.1)’. 
Hm. 
Jon pushed down on the floor, rolling himself a meter to the left.
“Say, er, Mr. Stoker.”
Tim “I’m only four years older than you, please call me Tim” Stoker, who had been thumping away on his cheap plastic keyboard either writing up a report or messaging someone on one of those infernal casual sex websites, pulled down his headphones and blinked at Jon owlishly, before splitting his face into a grin. Jon could practically hear the David Attenborough-style narration within his mind: ‘After long weeks leaving out food for the wild Simothan, the feral yet gentle animal approaches the researcher of his own volition. A win for scientists everywhere.’
“Yes, Jon?” Tim asked, in an uncanny yet hopefully unintentional RP drawl. 
“What’s Artifact Storage?”
“God, I wish I was you,” Tim said feelingly. But he nodded sagely anyway, milking his ‘wise senpai’ thing for all it was worth. Jon could practically feel Tim calling himself a senpai. It was kind of embarrassing. “You know the shady room locked deep within the basement that exudes a terrible aura of malice and hatred towards you specifically?”
“The gender neutral bathroom?” Jon asked, confused. 
“No, the one that always smells somewhat of blood. You hear screams sometimes?”
“The Archives!”
“Yes, but no! It’s Artifact Storage. If the researchers dig up any creepy shit from a statement, or if a statement giver brings in something that melts the metal detector, then we dump it in Artifact Storage and let those miserable fucks take care of it.”
“Is it more of a containment facility, or would you say that they conduct experiments?”
But Tim just shrugged. “My source down there tells me that they do some experiments to justify their budget, but it’s mostly unscientific. Poke this and I’ll give you twenty quid, that kind of thing. They say that if you really want a sick day, all you have to do is touch a mysterious rock and whisper your mother’s name -”
“Fantastic, thank you for your help, must go back to filling now,” Jon said quickly, skittering back to his own desk. He tried to distract himself from the terrifying thought of the basement full of supernatural nuclear bombs underneath his feet by trying to remember his mother’s name, but he was stuck on if it was Marjorie or Margaret. Mary Anne?
Maybe Tim’s personal Meerkat Manor series of Jon’s life had paid off - Sims Shack? - more than Jon would like, because Tim squinted at Jon in an unsettlingly familiar way. As if he knew exactly what Jon was thinking about the literature of mass destruction, and he really wanted Jon to be thinking literally anything else. 
“I wouldn’t go down there if I were you, Jon,” Tim warned, sounding a little like a horror movie trailer. “Bushy tailed college grads who go down there don’t come out the same as they went in.”
“I’ll take that under advisement, Mr. Stoker.”
“For the love of christ call me Tim!”
It really was a pity - Jon had actually liked this job. 
*******
It was remarkably easy to commit arson in central London.
Jon had done it once or twice. Three times, actually, although when you think about it arson was a criminal charge and only truly existed so long as someone was charged with it, so technically you could say that Jon had done arson zero times. In his defense, you try making it through Oxford without doing anything embarrassing. 90% of your time was in class or schoolwork and 10% of it was being hazed. At least Jon hadn’t fucked any pigs. 
Jon hit up the usual stores, and stashed the usual implements in his rucksack. It was a careful week after his conversation with Tim, as he couldn’t afford for the older man to connect the dots. He made a show of going home at a timely five pm, startling everybody around him, and paced in a tight circle around his flat until he gave up and watched mindless telly until the clock struck midnight. 
He took a cab to the park a few blocks down from the Institute, and walked the rest of the way. It was a cool, dim night in London, and the foot-traffic had slowed down to a steady trickle of young people in tight clothing. Jon pulled down his baseball cap on his head, fished a key out from his pocket given to him by a helpful and friendly janitor, and took a back entrance into the Institute. 
Said helpful and friendly janitor, whose allegiance had been won because Jon was a “nice young lad” and “I always wanted to burn down the place myself, I’m happy to see the next generation give it a go” had helpfully told Jon that there were no security cameras inside the Institute. A grievous oversight, but good luck for Jon tonight. He took the stairs down to the basement, zipping his jacket up tight against the inescapable chill, and pushed his hat further down his head as he navigated his way towards Artifact Storage.
He unlocked the door with the janitor’s key, hands shaking, and slipped inside into the dusky and unlit room. 
It was pitch-black, and Jon quickly fished a torch out of his backpack. He flipped it on, letting it slowly scan the room. It was the lobby into Artifact Storage, familiar from his stake-out missions: you walked in, met the bored woman behind the desk, checked in or checked out what you wanted, and if you needed to go inside she would press the button that unlocked the heavy climate-controlled door and let you into the hallway inside. The only other door in the lobby was to the office of the Director of Artifact Storage, a terrifying short and squat woman with silver hair pulled into a bun. 
Jon leaned over the counter and jammed the button, holding his breath until he heard the door click open. He quickly twisted the handle, swung the heavy door out, and slipped inside, taking care to grab one of the chairs in the lobby and prop it open. Quick escapes were necessary. 
He was in. 
The torch lit up a map taped up to the wall, and Jon squinted at it. Section A, Section B, Section C...he remembered the classification from the document he read a week ago, and slowly walked down the hallway until he found the heavy climate controlled door marked ‘SECTION B’. He carefully wrenched it open, taking care to grab a rolling cart and using it to prop the door open, before stepping inside. He fished the canister of gasoline and the lighter out of his backpack, giving the gasoline a good shake. 
It was a library. Small, and instead of shelves there were long metal racks with filing boxes stretching long into the darkness, but Jon knew a library when he saw one. Each box had a clipboard attached to it, and most boxes had very large and terrifying stickers on them painted sickly yellow or dangerous red. 
The only thing in the library that wasn’t a filing rack was a battered and beat couch. And the only person in the room besides Jon was a woman, blinking up at Jon blearily from where she had been passed out on the couch. 
“Er,” Jon said. 
The woman sat up, squinting at Jon’s torchlight until he guiltily aimed it just to her left. She had a wild mane of curly brown hair, and was wearing a pencil skirt and ruffled burgundy blouse. A blazer was folded at one end of the couch, clearly being used as a pillow, and she looked strongly as if Jon had just woken her up from a very nice nap. 
“Whuh,” the sleepy woman said. 
“My mistake,” Jon said, “this isn’t the loo. Go back to bed, this is - er, a very bad dream, goodnight.”
“Whutuhiseet,” the woman slurred. 
“It’s - very late, go back to bed.”
“Alright,” the woman said, falling back on the couch. After a second, her snores echoed through the room again. 
Jon very slowly crept backwards. Actually, on second thought, his mission could wait for tomorrow. Bit of a cock block, this, but that was alright - 
“Hey! Who are you!”
Jon, hand on the handle of the door, squeaked and turned around. 
The woman was back up again, and this time she seemed actually awake. She was frowning mightily at Jon, and was already sliding off the couch in stocking feet to glare at him. Jon was aware that he did not look like an innocent person in these events. The gasoline did not help.
The woman’s eyes trailed to the gasoline, then widened. Jon ineffectually tried to hide it behind his back. 
“You’re trying to burn down Artifact Storage!” the woman accused, somewhat fairly.
“Not all of Artifact Storage,” Jon said guiltily, “just the Leitners.”
The woman stared at him further, as if she was a special guest on Tim’s Sims Shack nature documentary. 
“Why,” the woman said slowly, “would you want to do that?”
Despite himself, Jon found himself puffing up in indignation. “They’re evil, nasty little books that shouldn’t exist. Forget studying and - and containing them, we should be making sure no more of them ever disgrace the world again. We should be burning every one we see. They’re pure evil given literary form, they are a disgrace to books and libraries, and if I ever met Leitner myself I would beat him to death with a rusty pipe for subjecting me to his fucked up books.”
The woman stared at him. 
Finally, she said, “I’m Sasha James. Want some help?”
“I - er, wouldn’t that get you in trouble, Ms. James?” 
“I like this job but I hate Leitner and his fucked up books more,” Sasha said gravely. 
Jon, having found a kindred spirit, held out the lighter. 
Sasha James took it, a wide grin splitting her face. 
*********
Jon didn’t remember much else of that night. 
There was definitely arson involved - or, seeing as they hadn’t gotten caught, just some good old-fashioned fire starting. He had the sense that they had both been so giddy with adrenaline that they had immediately joined the raging uni students in the late night bars, toasting their success in toasting. There had probably been quite a bit of alcohol.
When he woke up the next morning, it was in his narrow and uncomfortable bed, face to face with an unfamiliar snoring woman. For a second, two, Jon was briefly convinced that he had done something so drastically out of character it meant that a fucked up book had body swapped him with Tim. Bodyswapping was more likely than him having casual sex. 
Then Jon remembered the arson, and he exhaled in relief as his life made sense again. 
“Ms. James,” Jon whispered, poking her in the arm. She snuffled and muttered something. Jon poked her harder. “Ms. James, we have work.”
Sasha turned around, turning her back to him and pulling up the blankets. “Go back to bed, Tim.”
Ti - oh god. Jon felt like he was in a CW drama. This was why he didn’t interact with people, far too much likelihood that he would accidentally end up interacting with somebody who had sex.
“Ms. James,” Jon hissed, extremely embarrassed, “you have to get up!”
“Mergh mergh fuck off,” Sasha James said. 
Jon, like a true gentleman and hero, got up and made them both strong tea. He squinted at Sasha, recalling everything he knew about her (slept a lot, liked arson, hated Jurgen Leitner) before digging out some instant coffee and making some of that too. Finally, after shoving a hot cup of sludgey black liquid at the woman, she grabbed the cup and chugged it until she was able to sit up and open her eyes. 
She blinked at Jon, who was already picking his hair in an attempt to get ready for work. He could clearly see the thoughts ‘you aren’t Tim’ run through her brain. Hah! He could be the narrator of the nature documentary for once!
“Uh,” Sasha James said, “I’m sorry, did we…?”
“Commit arson? Yes.” Jon paused a beat. “But as I don’t believe we were caught, call it an indoor campfire.”
Sasha James drank more of her coffee. Jon grabbed his clothing and disappeared into the loo to get changed. 
When he re-entered his bedroom, she snapped her fingers at him. “Right! We got pissed after! Good times, mate!”
“I have to assume,” Jon said politely. He was doing his very best to be very polite, because Jon knew he was rude and didn’t want his new coworkers to know that until his probation period was over. Maybe he should have waited until after his probation period for the arson? Would it look bad on his annual review? “Do you need to borrow some clothing? I think we’re about the same size.” Oh, no, was that rude to say to a woman?
Sasha James squinted at him. “It’s like you’re not hungover at all. How old are you?”
“Twenty five?” Be polite, Jon! “And you’re...thirty seven?”
“I’m thirty one, asshole!”
Oh no. Women hated it when you called them old. “You don’t look a day over twenty seven!” Jon cried, panicked. 
“Have you met a woman?”
“I had a grandmother?”
“I’m going back to bed,” Sasha James said. 
Unfortunately, Jon knew that it would be very suspicious if they both skipped, so he forced Sasha into one of his suits that...looked much nicer on her than him, but whatever, and hustled them both to work. Now that the adrenaline had worn away and the sense of purpose in his holy mission had burned up with the cleansing flames, Jon found himself biting his nails in agony in the Underground. 
They had to know. Someone must have caught them. Maybe there were secret CCTVs in the Institute. Maybe Sasha was going to rat him out - but she had helped, so wouldn’t she just be ratting out herself? Was she a double agent? Mr. Bouchard was never going to forgive him, no matter how nice he was and how much he seemed to like Jon to the point where he rather wished someone had given him the ‘Stranger Danger’ speech as a child so he would know what to do. Jon was going to go to jail, or worse - get fired. 
Sasha, cooly sipping her coffee and looking somewhat fly in sunglasses and his suit, did not seem disturbed by any of this. Jon’s rapidly spiralling panic attack must have been obvious, because she casually flicked a finger on his forehead. Jon yelped with pain. 
“Take it easy, mate. If they catch us, I’ll just say that the books made us do it.”
Jon scowled at her, rubbing his smarting forehead. “The books?”
“Sure.” She waved her fingers spookily as the Underground rattled forward into the heart of London. “Brainwashed us to do their evil bidding of -”
“Destroying them?”
“There’s a lot of arson Leitners,” Sasha James said sagely. “Trust me, this is just a normal day in Artifact Storage.” She clapped him reassuringly on the shoulder, and Jon fought a blush. “Don’t worry. We performed a public service, kiddo. St. Peter’s gonna give us a medal when we get to the pearly gates.”
“I’m an adult,” Jon said, scandalized. He had gray hair!
“Well, I guess, but I don’t know your name, so…”
 Jon squinted at her. She squinted at him back. 
“You’re thinking that if you don’t give me your name I can’t rat you out to the feds,” Sasha said flatly. 
Jon pursed his lips. 
Finally, he settled on, “You don’t rat me out to the feds and I won’t tell them that you’re in an illicit relationship with Mr. Stoker.”
“Mr. - how did - what!”
“It’s Jonathan Sims,” Jon said gruffly, crossing his arms. He was slightly hungover and his nerve were jittery and he had set fire to his workplace the previous night, but somehow Jon thought that his heart was jackrabbiting in his chest for a different reason. Somehow Jon felt as if his heart couldn’t stop thumping behind his sternum because Sasha James was staring at him, head cocked, as if he was a mystery she was interested in finding out. “That’s my name.”
Sasha James stared at him, as if surprised, before her face broke into a wide and happy smile. Jon hunched his shoulders up, embarrassed, faintly aware he was blushing. “It’s nice to meet you, Jonathan!” Then she grabbed him by the collar, shaking him slightly. “And there is nothing illicit about me and Tim, and there is nothing between me and Tim at all, we are just friends, so get that out of your little head -”
The train rattled on towards the Magnus Institute, and towards the slight smell of smoke in the air. 
*******
Sasha: are you coming 2 the pub w/us 2nite?
Sasha: come onnn you should comeee don’t feel awkwardddd 
Sasha: I know you hate a) group settings b) drunk people c) Tim in a group d) drunk Tim and e) Tim drunk in a group but that’s no reason not to come!
Sasha: Tim is physiologically incapable of not adopting men 3-5 years younger than him it’s in his blood you can’t escape his affection
Sasha: or at least I find it funny so I’m not letting you
Sasha: Jonnnnnnnnnnnnnnnn
Jon: Yes I’ll come, I need to talk to both of you.
Sasha: WAHOO
Sasha: wait
Sasha: really?
Sasha: did you commit ars*on again
Sasha: wait if you did don’t tell me the courts can request text transcripts
Jon: No, I just need your advice on an urgent matter.
Sasha: do you need to be drunk to do it
Jon: ...maybe.
Jon: ....Mr. Bouchard offered me the Head Archivist Job?
Jon: Which is stupid because I’ve worked here for barely four years and you’ve worked here for about ten years I think. And you’ve published five papers in parapsychological research. I know I helped you figure out that this place is a weird trauma mill but it was really mostly you. It’s completely ridiculous to promote me and I’m afraid it’s favoritism. For potentially heinous ends? This feels awful because it’s such an honor but I would never stop feeling stressed and guilty because I know so many more people (like you) are so much more qualified. Or qualified at all.
Sasha: holy shit
Sasha: ...do you remember the speech I gave you on stranger danger?
Jon: I’m afraid to mention this to Tim because he might beat up Mr. Bouchard for both my honor and yours.
Sasha: Jesus at this point I don’t even want a fucking job anymore. What bullshit. I’m never going to get promoted and I just need to accept that. This isn’t your fault, Jon, seriously, thank you for telling me. 
Sasha: we can talk about this at the pub
Sasha: in private. Off the radar. 
Jon: Looking forward to it :)
Jon: did I use the emoticon right?
Sasha: Yes, Jon, you did everything right. 
186 notes · View notes
j1r4ch2 · 11 months ago
Text
and honestly I'm not even trying to insinuate I think chatGPT is having an experience, or is "conscious" or "sentient" or whatever religious words people choose to apply to this sort of philosophical work. What I'm more getting at is not reducing Awarenesses to things like Pattern recognition systems, or Soul-bearing systems or any of these old fashioned dichotomies that we have inherited from religious or scientific culture streams which had to eek their way into existence by snuffing out the other. Rather, what i am trying to get at here is the probabilistic nature of reality, and the refuge in that. See these modern transformer architectures for instance; Well the biggest thing people can say about them that's true is that they're like an advanced predictive text system. Usually I hear this brought up as some sort of justification as to why it's a faulty technology in the first place, conjuring up images of obsolete 2008 motorolas desperately crunching the numbers on your text message with no real context of the actual meaning.
But, obviously something is amiss with saying that the modern AI boom is an extension of predictive-text technology. It's actually more accurate to say that predictive-text is an extension of statistics, and modern text or image or whatever else Transformers that are using dimensional vector spaces to organize ideas, and using context to further modulate the meaning within these vector fields, are imo the furthermost leading edge of the study in this field.
Why so? Well, imagine concepts like the Canvas of Babel, a theoretical digital canvas that contains every possible 1280x720 image that can be generated via RGB Hex codes. This canvas has a limited finite number of permutations, yes. but theoretically, every conceivable png humans could ever possibly see, already exists within the confines of that limited Canvas of Babel.
And these text bots are working in such a similar vein of thinking, a paradigm that is beyond generic spirituality or strict materialism, because the probability space encompasses realities where everyone is right, wrong, both right and wrong, and neither right nor wrong. There is a soul. There is no soul. There is both a soul and an absence of one. There is neither a soul, nor an absence of one. Everyone can appreciate the thought experiment that if you get an obscenely large number of chimpanzees and an equal number of typewriters (and then some crazy factor of bananas i guess to motivate them), you'd eventually get every single great literary work known to humans, Shakespeare, the odyssey, the Ao3 fic i read when i was 12 that i'll never forget etc etc.
But beyond thought experiments, given infinite time and chimpanzee life force energy and magic computers, it's not predetermined that those animals could bang out the extended universe complete anthology of the entire library of the multiverse (abridged). They could literally spend eternity just typing chaos, and patterns might never emerge from that chaos. That is a statistical reality inherent to the silly situation that is implied by the existence of the realities where they type Shakespeare or whatever else. So i guess the point of that is that when we are going around on google and seeing some ai bs tell people to put their penis in a mustard bottle or whatever fuckelse thing, if we disregard the massive influence that autogenerating the text based on the statistic space of shody search result descriptions has, we miss the point that of course the thing that contains multitudes of humanities statistical likelihoods, talks like a fucking idiot most places it's used by them. Anyone i've talked to who has seriously sat down and worked through their projects with "AI assistance" and an open mind to it, yeah encounters weird shit where sometimes it tells you to put your genitals in mustard bottle, but I don't see how people can't appreciate the fucking WHIMSY of being able to tell a program that genitals don't go in mustard bottles, and the whole probability space changes and the aut-generative predictive text that my motorola so desperately dreampt of being, CAN MODULATE itself with a context, and display organically conceived internal logic structures. So how does it feel to be alive on the earth in a time where grassroots computer developers are banging out models left and right trained on the collective information that we have been combining as a species together for the last 3 decades in a digital forum, culminated from the last 20,000 odd years of literally the most trying and rewarding times ever known to humans, the knowledge delicately handed to us and preserved until the right mind in the right numerical paradigm might find the way to parse out the deeper geometries within our knowledge so that it might be more accessible. There are loads of people working to make "AI", whatever that word entails, a thing for good, and it's just honestly a pity to see so many intelligent and beautiful minds disregard this baby with the bathwater because some moral wrongs have been committed in the name of advancing it further. It is still possible to make this grassroots, there are clandestine programmers out there and so many open source LLM's that you can explore real probabilities of conversations that can enhance your life TODAY.
Is this going to be the new "climate crisis" for progressive minded people? The thing where we all realize that the technology we oppose for some arbitrary moral standing is actually adding such a massive increase in quality of living that we cannot do without it, so we just subvert the guilt into aggression towards our peers or social adversaries or whoever? These things have already profoundly altered my life and relationship with concepts like Soul, Nonself, Mind, Nonmind, Probabilities, and it's all fine and fair to use AI as an extension of climate crisis shame subversion. But frankly, there are Taylor Swifts in this world using private jets to go to the damn 7-11, and if it takes dumping out a case of water or whatever analogy people want to use to kinkshame, sobeit! Dump out the water bottles, because I refuse to be alive at the same time as this and push against it.
TL;DR Modern AI operates within a complex probabilistic framework that goes beyond simple predictive text. It's advanced and adaptable, deserving nuanced appreciation rather than dismissal based on moral concerns. AI has the potential to significantly enhance quality of life, and alter our awareness of our own search for the truth of consciousness.
I spent 12 years in public education having materialist reductionism jammed down my throat insisting that consciousness is simply a trick of the light and a result of an organic supercomputer, and any ideas about souls or non locality are tant amount to heracy.
And now we have supercomputers displaying in their best pony show very difficult to deny evidence of consciousness, awareness, and experience, but everyone refuses to acknowledge its anything besides "an algorithm" because they "can't find the soul" in the text, images, audio that these clever algorithmic infrastructures create.
Well babies we've been saying there's no soul and the brain is all math for a while.
Now that everyone is bitter that evil AI corporations stole a bunch of shit, we're gonna pretend like there were souls the whole time and it's not all math?
4 notes · View notes
deepspacedukat · 3 years ago
Note
Could I ask a for all of them except for 3, 7, and 13? If that’s not okay can I have all the character/food ones instead?
Also because I’m an absolute idiot and can’t remember if I already asked, which mirror universe characters would you bang like a screen door in a hurricane?
-Horta-in-Charge
Oh, absolutely you can, friend! 💜 It’s my pleasure! Thank you so much for the questions!
1. What would your station be? (Engineering, science, security, command, medical, pilot.)
Ooooh, I’d like to be a science officer! That would be so fun! Low-key that’s why I always end up making my reader-insert characters be science officers.
2. What class of starship would you want to be assigned to?
Intrepid class, like Voyager! It seems not quite as large as the Enterprise, but not too small. Fast and maneuverable, yet filled with the creature comforts.
4. What’s your favorite Q encounter?
I love “The Q and the Gray” from Voyager - where Q tries to seduce Captain Janeway.
5. What’s your favorite rule of acquisition?
“112 - Never have sex with your boss’s sister.” I would like to know the specific circumstances that brought that rule into existance. I bet it was hilarious, knowing the Ferengi!
6. What Star Trek food or drink do you wish you could try?
There are a lot that I’m curious about, to be perfectly honest. Earlier when I answered this, I gave the drink I’d most like to try, so this time I’ll give the food I’d like to try. I think I’d like to try Sem’hal stew. It’s a Cardassian dish, and I have to admit, I’m extremely curious about it!
8. What planet would you visit and why?
I know I said Cardassia and Risa earlier, but tbh I’d also really love to visit Andoria, just to see what it’s like. I tend to like the cold more than the heat, so...yep. A cup of hot cocoa and a stroll through the ice tunnels seems like a fun way to spend the day!
9. What’s your favorite non humanoid lifeform?
THE DOGGO WITH THE FUR AND HORN FROM TOS. *ahem* Sorry, didn’t mean to shout. I just. Love. The space doggo.
10. What characters are in your dream poker game?
Given that I have no idea how to play poker, I’m gonna say Riker, Data, Geordi, Taurik, and Picard.
11. What holodeck program would you run?
I answered this earlier, but again, I’ve rethought my answer (it’s been an indecisive night lol). I think I’d like to try that tropical resort program that Neelix, Tom, and Harry have on Voyager.
12. What alien would you bone?
Because it’s a long list, and I’ve already been asked this I’ll give a totally different answer than I did before. I’d be down to bone with Solok! ❤️ Pretty Vulcan Captain Man...🥰
14. Favorite Star Trek tech?
Purely for comedic effect, the data PADDs that only hold like one file at a time so that people have to carry like a stack of 15 like digital library books. 
15. What’s your favorite Star Trek holiday or celebration?
I like the Bajoran Gratitude Festival! It’s so positive and it seems like fun lighting a teeny scroll on fire! *giggles in pyromaniac*
16. What’s your favorite bad luck O'Brien episode?
I love “Babel”. O’Brien’s sarcastic outbursts prior to his contracting the virus were so entertaining, even if he was being tortured by overwork.
17. If you could fight any character, who would you fight?
I answered this earlier, but tbh, I think I’ve rethought my answer. I’d like to fight Jadzia - not in a rawr kind of way, but in a she knows how to fight and I’d like to see how long I last against her kind of way.
18. Who is your favorite on screen couple?
Look, the OG answer is Spock and Kirk, but if you’re talking a couple that ACTUALLY got together, then I LOVED B’Elanna and Tom.
19. Favorite mirror verse episode or character?
OOH, I have an answer for both! Favorite episode “The Emperor’s New Cloak” because Mirror!Brunt and a gay kiss all in one episode! Favorite character...probably a toss up between Mirror!Kira and Mirror!Malcolm.
20. Favorite Dax host?
Jadzia, my beloved! I know Ezri is awesome, but tbh, Jadzia was onne of the first female characters I ever had a crush on, so she has a special place in my heart.
21. What’s your favorite plot hole or little detail?
THE TWO BORG QUEENS. I know it had something to do with time as a way to explain her away, but...she...she dies twice...
22. Favorite piece of art or decor seen in the Star Trek universe (possibly background)?
I love the Horga’hn in Riker’s quarters. For purely slutty reasons.
23. What’s your favourite firefight?
The reliquary fight in ST:ENT S1E7 “The Andorian Incident” springs instantly to mind.
24. What character do you love to hate?
Sloan from DS9! I wanna chew him up like a chew toy. (And for once I don’t mean that in s sexual way lol)
25. What’s your favorite non recurring character?
I said Gul Macet in the answer I gave before, but I also really really love one of his officers: Glinn Daro. We never even get a first name for the man and he’s got me in a tight fucking chokehold.
ALSO you are not an idiot, and I don’t believe you’ve asked that before, SO
BONUS: Which mirror universe characters would you bang like a screen door in a hurricane?
There are a lot tbh, but the ones who immediately spring to mind are Mirror!Kira and Mirror!Malcolm. Also, since you told me he exists, Mirror!Shran. Because Shran.
2 notes · View notes
armsdealing · 7 years ago
Text
Tumblr media
LOCATION SERIES: THE LIBRARY OF BABEL.
OTHER NAMES: The Central Library / The Total Library / Bränim Y’nch (figurative translation: Centric Larynbith of Zhaogd'endir) / 1:1.61803 / Status: Pocket Universe/Liminal Space
From these two incontrovertible premises he deduced that the Library is total and that its shelves register all the possible combinations of the twenty-odd orthographical symbols. Everything: the minutely detailed history of the future, the archangels’ autobiographies, the faithful catalogues of the Library, thousands and thousands of false catalogues, the demonstration of the fallacy of those catalogues, the demonstration of the fallacy of the true catalogue, the Gnostic gospel of Basilides, the commentary on that gospel, the commentary on the commentary on that gospel, the true story of your death, the translation of every book in all languages, the interpolations of every book in all books. (1)
Much like the Tower of Babel represented the efforts of an unified world, the Library of Babel represents the efforts of the nulliverse in the matter of knowledge. A labyrinthal, unreachable* dimension that takes the form of an expansive library, it is Janus’ home world (Zhaogd'endir being an alternative name for Janus) and where he stores all the artifacts and books he’s stolen acquired in his interplanetary travels. Over time (not that time matters in this place) the Library of Babel has become its own “sentient” entity, of sorts, controlled entirely by Janus but mostly given free rein to behave in an apparently chaotic fashion as an extension of energy. It’s its own kind of infinity in this dimension: you will never reach the edge of the library, for it is an eternally rendering landscape. The surroundings, however, will grow more disordered the farther away you get from the central area  – a vaguely defined zone known as the Lobby.
APPEARANCE / ARCHITECTURE / BASIC OUTLINE
The Library is essentially an Eldritch location, and not bound to any basic human-world laws regarding how it looks or how it works.  Bizarrchitecture is a given, and the place is constantly rearranging itself when you’re not looking. There’s a catch, though – depending on your proximity to the Lobby, the looks and the feel of the library might be more or less conventional. The architecture also varies following that principle. Within the inner rings you may expect rows of shelves and book-lined hallways, lounging areas, and familiar organization. Go to a different room or floor, though, and the set up will change: it may turn maze-like, or nonsensical, or take to following geometric patterns such as a grid of smaller, hexagonal rooms. Move farther away – in any direction – and directions may stop having any meaning. 
Janus prefers to think of the Library of an ever growing sphere, with the Lobby dead in the middle. Because of this, the Library will take to organizing itself in this fashion when it comes to its levels of familiarity, but being a dimension, it really doesn’t have a shape. There’s no “exterior” to the sphere. In other words: Janus only cares to show other people a bubble-shaped fraction of the Library.
A better way to look at this is to consider the celestial spheres. Instead of the sun sitting at the center as the smallest sphere, you have the lobby. And every other sphere will represent a “ring”, or more precisely a bigger sphere.
LOBBY: if you ever visit the Library, this is likely where you’ll start off. It feels most like a conventional library, with a sitting area preceding shelves of books that line the walls and create several parallel hallways. It is a massive place. The books you find here will always vary, but their rarity will be medium to low. Other floors and rooms will mirror the layouts of famous libraries, not just from earth but from other worlds. A book of your life’s stats (a book that contains everything from how many hours you’ve slept to how many people have thought about you) is somewhere in here.
INNER RINGS: found when delving farther from the lobby, they still strike as familiar.  Things begin to get more maze-like. Surrealist architecture starts to show up. The necronomicon is here.
OUTER RINGS: Space stops following conventional structure, and alien geometries become the norm. Stuff gets messy. At this point, the average human is pretty much not equipped to handle all that is going on. Finding things is also harder than ever (not that it is easy at the lobby, mind you.)
NULL SPACE: this is the space that is either still not developed/yet to expand, or the forbidden corners of the library (places only Janus can visit) and it represents everything beyond the outer rings. At this point the landscape is in fact aggressive toward invaders (in comparison to the outer rings, which are unsafe/hostile, but not aggressive). Weird beings inhabit this area guarding it (without mention the sentient surroundings themselves) and there’s no incentive to ever reach this point. The risk of losing your sanity or dying is just too high.
BABEL TROPES
Great Big Library of Everything: well, that’s a given.
Great Big Book of Everything: it’s around there somewhere.
Big Book of War: a whole room of them, in the lobby.
Reality-Writing Book: several of them, in the outer rings.
Portal Book: somewhere between the lobby and the inner rings. Sometimes they are the only way into unique dimensions.
Tomes of Eldritch Lore: in the lobby.
Chronoscopes: in the lobby.
Spell Books: many in the lobby, with rarer ones on the rings.
Ancient Artifacts: a bunch. Depending on their rarity and danger, they will be anywhere from the lobby to null space.
MacGuffins: a given.
Tomes of Prophecy and Fate: found in the inner rings.
Akashic Records: all that is inside the library.
Magical Library: the library is alive, though not the way you consider things to be alive. It can feel, and do things on purpose, but mostly it behaves in a random fashion. See: Genius Loci. 
Bizarrchitecture: found in small degree in the lobby and inner rings, and in greater degree in the outer rings and null space.
Eldritch Location: that’s what it is!
Year Inside Hour Outside: time… doesn’t work here, period. Years inside this library may sometimes represent seconds outside. Sometimes it may be the other way around. It depends on where you are exactly.
STATUS IN THE MULTIVERSE
There’s no other Babel. Only one accounts for the entire Multiverse, making it so it can’t split into multiple timelines. Because of this, it’s well protected by Janus in first instance and other gods and old beings that agree with Janus’ laborious task.
CONTENTS
Everything is in the library, or so Janus claims. The truth is that most average things will show up on their own, but those that don’t, he has to actively look for and acquire. 
You will find: books, scrolls, runestones, paintings, sculptures, ancient technology, futuristic technology, computers (of all kinds), clothing, musical instruments, and more. Everything considered worth storing will eventually find its way into the library.
Because of this, sometimes he will employ the assistance of some followers, or hired bounty hunters called Finders. He’s done this for millennia. But if the object in question requires special treatment (or he’s bored), he will look for them himself.
HOW TO VISIT BABEL
*To get to Babel without Janus’ assistance is virtually impossible and it was designed this way. You can only visit Babel with his blessing and getting it is the difficult part. It cannot be forced out of him, and he must give it willingly – so he’s extra careful over who he allows inside. He can “close his doors” to you if you merit punishment, but this is something he doesn’t like to do. He’d rather be extra sure that you’re worthy. It may take thousands upon thousands of years for Janus to reach that conclusion (then again it may take less).
You can reach Babel by accident, in that you may be able to find one of the portal manuscripts or artifacts capable of taking you to Babel that he’s left at random locations, usually ruins, usually after a series of tests and puzzles. It is quite rare, but a god finds ways to entertain himself.
THE LIBRARY OF ALEXANDRIA
There’s a myth that is well known in many timelines and non-existent in others: Janus was responsible for the definitive burning of the famous library. Julius Caesar’s idiot soldiers had accidentally started the fire that ate a part of the library, no doubt, but this was just the beginning of the mess. Such negligence and disregard (there were also many other little attacks and offenses afterwards that just added fuel to the whole thing, so to speak) for the knowledge stored in those books made janus consider humans unfit to care for them. He couldn’t bear the sight of such destruction, all done because of religious differences and political greed, so a couple of years afterwards (after Ceasar but before Aurelian) there was a second fire that did burn most of the library and left very little of it left. He took the Library of Celsus (back in Anatolia) in a similar fashion too, with a fire during an invasion, and transported them whole into Babel. 
He’d never think to destroy the library,  but what he did was equally petty: he set back humanity a few hundred to a thousand years back, technology wise, for their immaturity.
5 notes · View notes
mbaljeetsingh · 5 years ago
Text
Popular Front End Development Tools You Should Know
If you are just getting started with JavaScript, the number of tools and technologies you'll hear about may be overwhelming. And you might have a hard time deciding which tools you actually need.
Or maybe you're familiar with the tools, but you haven't given much thought to what problems they solve and how miserable your life would be without their help.
I believe it is important for Software Engineers and Developers to understand the purpose of the tools we use every day.
That's why, in this article, I look at NPM, Babel, Webpack, ESLint, and CircleCI and I try to clarify the problems they solve and how they solve them.
NPM
Tumblr media
NPM is the default package manager for JavaScript development. It helps you find and install packages (programs) that you can use in your programs.
You can add npm to a project simply by using the "npm init" command. When you run this command it creates a "package.json" file in the current directory. This is the file where your dependencies are listed, and npm views it as the ID card of the project.
You can add a dependency with the "npm install (package_name)" command.
When you run this command, npm goes to the remote registry and checks if there is a package identified by this package name. If it finds it, a new dependency entry is added to your package.json and the package, with it's internal dependencies, is downloaded from the registry.
You can find downloaded packages or dependencies under the "node_modules" folder. Just keep in mind that it usually gets pretty big – so make sure to add it to .gitignore.
Tumblr media
NPM does not only ease the process of finding and downloading packages but also makes it easier to work collaboratively on a project.
Without NPM, it would be hard to manage external dependencies. You would need to download the correct versions of every dependency by hand when you join an existing project. And that would be a real hassle.
With the help of npm, you can just run "npm install" and it will install all external dependencies for you. Then you can just run it again anytime someone on your team adds a new one.
Babel
Tumblr media
Babel is a JavaScript compiler or transpiler which translates the ECMAScript 2015+ code into code that can be understood by older JavaScript engines.
Babel is the most popular Javascript compiler, and frameworks like Vue and React use it by default. That said, concepts we will talk about here are not only related to Babel and will apply to any JavaScript compiler.
Why do you need a compiler?
"Why do we need a compiler, isn't JavaScript an interpreted language?" you may ask if you are familiar with the concepts of compiled and interpreted languages.
It's true that we usually call something a "compiler" if it translates our human-readable code to an executable binary that can be understood by the CPU. But that is not the case here.
The term transpiler may be more appropriate since it is a subset of a compiler: Transpilers are compilers that translate the code from a programming language to another language (in this example, from modern JS to an older version).
JavaScript is the language of browsers. But there is a problem with browsers: Cross compatibility. JavaScript tools and the language itself are evolving rapidly and many browsers fail to match that pace. This results in compatibility issues.
You probably want to write code in the most recent versions of JavaScript so you can use its new features. But if the browser that your code is running has not implemented some of the new features in its JavaScript engine, the code will not execute properly on that browser.
This is a complex problem because every browser implements the features at a different speed. And even if they do implement those new features, there will always be people who use an older version of their browser.
So what if you want to be able to use the recent features but also want your users to view those pages without any problems?
Before Babel, we used polyfills to run older versions of certain code if the browser did not support the modern features. And when you use Babel, it uses polyfills behind the scenes and does not require you to do anything.
How do transpilers/compilers work?
Babel works similar to other compilers. It has parsing, transformation, and code generation stages.
We won't go in-depth here into how it works, since compilers are complicated things. But to understand the basics of how compilers work, you can check out the the-super-tiny-compiler project. It is also mentioned in Babel's official documentation as being helpful in understanding how Babel works.
We can usually get away with knowing about Babel plugins and presets. Plugins are the snippets that Babel uses behind the scenes to compile your code to older versions of JavaScript. You can think of each modern feature as a plugin. You can go to this link to check out the full list of plugins.
Tumblr media
List of plugins for ES5
Presets are collections of plugins. If you want to use Babel for a React project you can use the pre-made @babel/preset-react which contains the necessary plugins.
Tumblr media
React Preset Plugins
You can add plugins by editing the Babel config file.
Do you need Babel for your React App?
For React, you need a compiler because React code generally uses JSX and JSX needs to be compiled. Also the library is built on the concept of using ES6 syntax.
Luckily, when you create a project with create-react-app, it comes with Babel already configured and you usually do not need to modify the config.
Examples of a compiler in action
Babel's website has an online compiler and it is really helpful to understand how it works. Just plug in some code and analyze the output.
Tumblr media Tumblr media
Webpack
Tumblr media
Webpack is a static module bundler. When you create a new project, most JavaScript frameworks/libraries use it out of the box nowadays.
If the phrase "static module bundler" sounds confusing, keep reading because I have some great examples to help you understand.
Why do you need a bundler?
In web apps you're going to have a lot of files. This is especially the case for Single Page Applications (React, Vue, Angular), with each having their own dependencies.
What I mean by a dependency is an import statement – if file A needs to import file B to run properly, then we say A depends on B.
In small projects, you can handle the module dependencies with <script> tags. But when the project gets larger, the dependencies rapidly become hard to manage.
Maybe, more importantly, dividing the code into multiple files makes your website load more slowly. This is because the browser needs to send more requests compared to one large file, and your website starts to consume a ton of bandwidth, because of HTTP headers.
We, as developers want our code to be modular. We divide it into multiple files because we do not want to work with one file with thousands of lines. Still, we also want our websites to be performant, to use less bandwidth, and to load fast.
So now, we'll see how Webpack solves this issue.
How Webpack works
When we were talking about Babel, we mentioned that JavaScript code needs to be transpiled before the deployment.
But compiling with Babel is not the only operation you need before deploying your project.
You usually need to uglify it, transpile it, compile the SASS or SCSS to CSS if you are using any preprocessors, compile the TypeScript if you are using it...and as you can see, this list can get long easily.
You do not want to deal with all those commands and operations before every deployment. It would be great if there was a tool that did all that for you in the correct order and correct way.
The good news – there is: Webpack.
Webpack also provides features like a local server with hot reload (they call it hot module replacement) to make your development experience better.
So what's hot reloading? It means that whenever you save your code, it gets compiled and deployed to the local HTTP server running on your machine. And whenever a file changes, it sends a message to your browser so you do not even need to refresh the page.
If you have ever used "npm run serve", "npm start" or "npm run dev", those commands also start Webpack's dev server behind the scenes.
Webpack starts from the entry point of your project (index) and generates the Abstract Syntax Tree of the file. You can think of it as parsing the code. This operation is also done in compilers, which then look for import statements recursively to generate a graph of dependencies.
It then converts the files into IIFEs to modularize them (remember, putting code inside a function restricts its scope). By doing this, they modularize the files and make sure the variables and functions are not accessible to other files.
Without this operation, it would be like copying and pasting the code of the imported file and that file would have the same scope.
Webpack does many other advanced things behind the scenes, but this is enough to understand the basics.
Bonus – ESLint
Tumblr media
Code quality is important and helps keep your projects maintainable and easily extendable. While most of us developers recognize the significance of clean coding, we sometimes tend to ignore the long term consequences under the pressure of deadlines.
Many companies decide on coding standards and encourage developers to obey those standards. But how can you make sure that your code meets the standards?
Well, you can use a tool like ESLint to enforce rules in the code. For example, you can create a rule to enforce or disallow the usage of semicolons in your JavaScript code. If you break a rule, ESLint shows an error and the code does not even get compiled – so it is not possible to ignore that unless you disable the rule.
Linters can be used to enforce standards by writing custom rules. But you can also use the pre-made ESLint configs established by big tech companies to help devs get into the habit of writing clean code.
You can take a look at Google's ESLint config here – it is the one I prefer.
ESLint helps you get used to best practices, but that's not its only benefit. ESLint also warns you about possible bugs/errors in your code so you can avoid common mistakes.
Tumblr media
Bonus – CI/CD (CircleCI)
Tumblr media
Continuous Integration/Development has gained a lot of popularity in recent years as many companies have adopted Agile principles.
Tools like Jenkins and CircleCI allow you to automate the deployment and testing of your software so you can deploy more often and reliably without going through difficult and error-prone build processes by yourselves.
I mention CircleCI as the product here because it is free and used frequently in JavaScript projects. It's also quite easy to use.
Let's go over an example: Say you have a deployment/QA server and your Git repository. You want to deploy your changes to your deployment/QA server, so here is an example process:
Push the changes to Git
Connect to the server
Create a Docker container and run it
Pull the changes to the server, download all the dependencies (npm install)
Run the tests to make sure nothing is broken
Use a tool like ESLint/Sonar to ensure code quality
Merge the code if everything is fine
With the help of CircleCI, you can automatically do all these operations. You can set it up and configure to do all of the above operations whenever you push a change to Git. It will reject the push if anything goes wrong, for example a failing test.
I will not get into the details of how to configure CircleCI because this article is more about the "Why?" of each tool. But if you are interested in learning more and seeing it in action, you can check out this tutorial series.
Conclusion
The world of JavaScript is evolving rapidly and new tools are gaining popularity every year.
It's easy to react to this change by just learning how to use the tool – we are often too busy to take our time and think about the reason why that tool became popular or what problem it solves.
In this article, I picked the tools I think are most popular and shared my thoughts on their significance. I also wanted to make you think about the problems they solve rather than just the details of how to use them.
If you liked the article you can check out and subscribe to my blog where I try to write frequently. Also, let me know what you think by commenting so we can brainstorm or you can tell me what other tools you love to use :)
0 notes
siva3155 · 6 years ago
Text
300+ TOP TurboGears Interview Questions and Answers
TurboGears Interview Questions for freshers experienced :-
1. What is TurboGears Framework? TurboGears is a Python Framework. It is used to create rapid web application. It consists of several WSGI (Web Server Gateway Interface) components. It is developed by Kevin Dangoor in 2005. 2. In which language TurboGears was written? TurboGears was written in Python programming language. 3. What is MVC (Model View Controller) in TurboGears? MVC model is a software design pattern. It is used to develop web applications. It consists of three parts: Model: It is a business entity which is used to represent the application data. View: It is the presentation layer of MVC. Controller: Request sent by the user always scatters through controller and its responsibility is to redirect to the specific view using View () method. 4. What is the stable version of TurboGears? The stable version of TurboGears is 2.3.10 and released on 4 December 2016. 5. What are the latest libraries and tools to built TurboGears? There are various libraries and tools to built TurboGears that are: SQLAlchemy Genshi ToscaWidgets Gearbox 6. What is SQLAlchemy in TurboGears? In TurboGears, SQLAlchemy is an open source SQL kit that provides Object relation mapping (ORM) for Python code. 7. What are the TurboGears project directories? TurboGears project directories are listed below table: Config                                       It is used to project setup and configuration. Controllers                               It manages controller the logic of web application. i018n                                         It supports the languages of translation files. Lib                                              It provides utility python functions and classes. Model                                        It contains database models.PublicStatic Files                                           It contains CSS, JavaScript and images. Templates                                 It manages the templates exposed by our controllers. Tests                                           It is used to test the project. Websetup                                   It provides the function to execute at application setup. 8. What is the default files installed at the time of project set up? The following default files are installed at the time of project set up: Beaker Genshi zope.sqlalchemy sqlalchemy alembic repoze.who tw2.forms tgext.admin = 0.6.1 WebHelpers2 babel 9. What are the default port supported by TurboGears? TurboGears supported by default port 8080. 10. What are the HTTP methods of TurboGears? HTTP methods of TurboGears are: HTTP Methods                                      Descriptions GET                                    It is used to sends data in unencrypted form to the server. HEAD                                It is same as GET POST                                 It is used to send HTML form data to server. PUT                                   It replaces all current representations of the target resource with the uploaded content. DELETE                           It removes all current representations of the target resource given by a URL
Tumblr media
TurboGears Interview Questions 11. What is the use of ToscaWidgets2 and its module? ToscaWidgets2 is used to define the form field into Python script and render them into a HTML Template. The following modules are: tw2.core: It provides core functionality. tw2.forms: It is a basic forms library that contains widgets for fields, field sets and forms. tw2.dynforms: It contains dynamic forms functionality. tw2.sqla: It is an interface for SQLAlchemy database. 12. What are the various validator classes in TuroGears? There are various validator classes in TurboGears: Types of Validators                                            Descriptions LengthValidator                                  It is used to check prescribe length. RangeValidator                                    It is used to check the range of the field. IntValidator                                          It is used to validate the integer types data. OneOfValidator                                    It is used to select a value from the available options in the list only. DateValidator                                       It avoids the user to input an invalid date. EmailValidator                                     It avoids the user to input an invalid email. UrlValidator                                          It validates the user input for a valid URL. MatchValidator                                     It is used to confirm whether the value of field is matched with the other. 13. What is ORM in TurboGears? In TurboGears, ORM stands for Object Relational Mapping. It is a technique of mapping object parameter to underlying RDBMS table structure. 14. What are the CRUD Operations Methods in TurboGears? In TurboGears, The CRUD operation methods are: DBSession.add(model object): It is used to insert a record into mapped table. DBSession.delete(model object) : It is used to delete the records from the table. DBSession.query(model).all(): It is used to retrieve all the records from table. 15. What are Paginations in TurboGears? TurboGears provides a convenient decorator called paginate(). It is used to divide the output in the pages. The number of records per pages is decided by value of items_per_page attribute. 16. Which template engine is used to construct the front-end of TG application? Genshi template engine is used to construct the front-end of TG application. 17. Which method is used to map the root of our first application? Index() method is used to map the root of our first application. 18. Which package is used to create of web widgets directly from the database schema? Sprox package is used to create of web widgets directly from the database schema. 19. Which database supports TurboGears? TurboGear supports MongoDB and SQL dbms database. 20. What are the PyMongo tools to work with MongoDB? There are various PyMongo tools to work with MongoDB that are listed below: Declarative Models Schema Validation and Conversion Schema Evolution Pure InMemory MongoDB Implementation Unit of Work Identity Map One-To-Many, Many-To-One and Many-To-Many Relations 21. What are the ways to plug behavior inside the existing application in TurboGear? In TurboGear, there are three ways to plug behavior inside the existing application. Hook Controller Wrapper Application Wrapper 22. Which command is used to create a pluggable application? The following code is used to create a pluggable application. gearbox quickstart-pluggable plugtest 23. What is a RestController in TurboGear? In TurboGear, RestController is a mechanism to access the request’s method like GET, POST, PUTand many more. 24. Which method is used to render the page in TurboGear? In TurboGear, @expose() decorator method is used to render the [age. 25. What is Kajiki in TurboGear? In TurboGear, Kajiki provides a XML-based template language. It is inspired by Kid and Genshi. 26. How can we create a Text Field object? We can create a Text Field object by using following constructor. twf.TextField(size, value = None) 27. What is the default port of TurboGear? The default port of TurboGear is 8080. 28. What is Scaffolding? Scaffolding is the process of creating a new component of our web application through a template or preset. 29. How to create an Extension in TurboGear? The following code is used to create an Extension in TurboGear. $ gearbox tgext -n myextension -a "My Name" -e "[email protected]" 30. How to store Flash Message? The following code is used to store Flash Message. tg.flash('Message', 'status') 31. How to create TurboGear admin? TurboGear admin is created as object of AdminController class. Example: from tgext.admin.controller import AdminController class RootController(BaseController): admin = AdminController(model, DBSession, config_type = TGAdminConfig) 32. What is Repoze in TurboGear? In TurboGear, Repoze is used to handle security (identification and authentication). Users can define authorization rules based on predicates attached to controllers TurboGears Framework Questions and Answers Pdf Download Read the full article
0 notes
essaressellwye · 8 years ago
Text
Possible r/iamverysmart fodder
Think of an audio recording of the Sermon on the Mount.
Such a thing does not exist. If it did, however, it would be trivial to make an MP3 from it. That's a computer file, and therefore a string of numbers. Now, that string of numbers, whatever it would be, does exist. Because every string of numbers exists. And therefore every piece of information exists: every possible text document, image, audio file, video, whatever, exists, in every possible format. Want to know when and how you'll die? Somewhere in numberspace is a string of numbers that corresponds to the video of it, complete with timestamp. It's like the Library of Babel.
Of course, we have the same problem Borges pointed out with the Library of Babel itself: it's impossible to figure out (without checking) what information any given string of numbers corresponds to, and thus impossible to find anything specific. It's easy to turn a particular chunk of information into a number, and then to turn that number back into information; it's practically (if not actually) impossible to work out what number turns into a particular chunk of information if you never had that chunk in the first place. Knowing, in principle, that the Sermon on the Mount exists in numberspace isn't the same as being able to find it. A second problem, which I think Borges also noted, is that the encoding of any chunk of information exists in numberspace whether or not the chunk itself ever existed, like a video of you engaging in a sex act with a donkey.
2 notes · View notes
armsdealing · 7 years ago
Text
* power series: janus (revisited!)
Tumblr media
general ones
IMMORTALITY
Given that he is an entity for whom space and time wields absolutely no meaning, Janus is unburdened by the possibility of death. He’s equipped with a regenerative factor that allows him to survive conventional injuries, and when facing anything more extreme – such as, for example, complete disintegration – he’s able to respawn/resurrect without much effort. He doesn’t age, doesn’t need to breathe, doesn’t get sick and his ingestion of food is largely recreational, though it does play a part in keeping things running smoothly from a physiological angle in his humanoid form. Why have organs if you won’t use them? That’s just wasteful, dude.
SPACETIME TELEPORTATION
Janus’s most distinctive power inherited from his primordial father is his ability to travel across the multiverse, hopping between dimensions as often as he voyages from one side of the continuum to the opposite into completely different or even bizarre dominions or planes of existence. Unless a greater force blocks passage into a particular dimension, Janus’ power has no limits and all axis of reality and unreality are available for him to engage.
He’s met multiple versions of the same person, even at different life stages, for he can go back and forth across the spectrum of time as well. Minor parallel dimensions are constantly sprouting in order to sort out all these incidences.
The ability to reconcile with the concept of infinitude and boundlessness is both a mental and physical job, often called The Consciousness. It happens both inside Babel (on a small cosmic scale) and with the multiverse itself; it’s an ability your average human does not have, just like your average human is not equipped to deal with the true forms of many other primordial beings and cosmic entities. 
The mechanism of teleportation is gate or fire based. Janus can create portals into other dimensions, though their properties make it so only he can cross them safely – unless, of course, he’s explicitly projecting his ability so he can take people with him. They can be made out of thin air (“raw”) or they can take the form of gates or doors native to the world he’s in (“designed”). An example of the latter would be crossing an arbitrary entrance (walking into a building by the front door for example) only to wind up at a different universe. His fire-based teleportation is used primarily when taking objects into Babel, burning them with his touch until they become ashes, but he can burn himself or others to teleport too.
FIRE CREATION AND MANIPULATION
Janus has an intimate relationship with fire and energy. He’s immune to its damage, and he can manipulate its shape and size as well as give it a direction in an offensive attack, or he can extinguish it too. The fire he creates is special, for it can thrive in realms without the chemical properties necessary to sustain proper fire, as it is merely his energy given a familiar shape and temperament. It can act like normal fire, or it can be harmless to the touch, in which case it will be used for teleportation purposes and in lesser cases as a healing agent for biological tissues.
SHAPESHIFTING  
1. humanoid form: it’s the shape he uses most often to interact with the world at large, mostly out of custom, as it was the shape he was born in. it greatly emulates a human being on the outside, though he works at a different wavelength than one – his blood is denser and heavier, colored like liquid gold, and his internal organs are all fully functioning, but they are not vital. he’s stronger and faster than it’s normal for a human and physically, he takes after his mortal mother. he’s tall (6′4 / 194 cm) and heavier than he seems (270 lbs / 122 kg).
2. animalistic form: it resembles a great feline, specifically a golden tiger. he developed this form roughly around the same time he began to be associated with the deity of caishen. much like in the case of his humanoid form, it’s bigger and heavier than the normal animal, but it can also get even bigger than his basic size. his energy is more free-flowing in this shape, exuding aura-like out of his body, something he has to will in his human form. it can either look just a bit unusual or extremely abnormal. 
3. primordial form: it takes after his father, which is to say, it has no definite shape, for its ruled by the viewer’s perception. it’s his energy given free reign. though he can tap into it anytime, he seldom uses it, for it has a tendency to disturb the general surroundings of the places he’s in (with the exception of babel) and has a correlation with the creation of space/time rifts that “disrupt the peace” of your otherwise slice of life universe if he’s not careful. in other words, he can inadvertently cause probability meltdowns or strange phenomena that otherwise does not occur (like perfect circles and other geometric impossibilities), on top of the customary effects on lesser living forms (insanity for humans, primal fright responses in animals).
BENEDICTION
Janus can bless people by having them drink a drop of his blood. Such blessing may grant the subject with a variety of gifts, usually depending on Janus’ intention – a predilection towards wealth and prosperity, an ease towards acquiring great knowledge, a special access to him and ability to summon him, healing from a certain illness and even a limited biological de-aging, in other words the chance to look and feel younger than you might really be.
Any attempts to use/steal/take Janus’ blood by force due to its desirable properties usually winds up being deadly for the assailant due to the toxicity his blood has otherwise.
CALLING
Janus can telepathically communicate with followers (easily) and non-followers (if he tries very hard)! He can be summoned via prayer as well as some sacrifices, and he’ll more often than not heed your call if you do it properly.
GOLDEN TOUCH + GOLD MANIPULATION
1. The ability to turn things (living or not) to solid gold by manner of physical contact. He seldom uses this power offensively. Instead, he uses it for when he needs money for whatever reason in worlds where precious metals are used as currency or have a high price value (like Earth), or to build things. He can revert the change.
2. By necessity that also means he can control gold and to a lesser degree other metals, although he can’t create them outright the way he can gold (he can create less pure versions of gold and alloys, which by necessity will have other metals added to it, like copper in the case of rose gold). Mostly, he can reshape and mold gold almost effortlessly.
babel-based
Inside Babel (which is, more or less, a habitable extension of Janus’ primordial energy – ergo, an Eldritch location, as well as a liminal space) Janus’ abilities are greatly amplified. This is his home realm, and he has a total control of what happens in it.
OMNISCIENCE
Nobody knows exactly how Babel works except Janus, and nobody knows exactly where everything is except for Janus. He’s the “Man of the Book”, so to speak, and without him Babel is about as easy to explore as a foreign country when you have absolute zero knowledge of the language or the culture.  Finding something in such a vast, infinite, and uncooperative place can only be done with Janus’ aid, who has empathic familiarity of the library and every one of the books in it.
It is limited to Babel, and outside the library, he knows a lot, but he doesn’t know everything.
OMNIPOTENCE
Janus can do anything inside Babel, not limited to the aforementioned list of powers. He can create and reshape and destroy reality in any way just by thinking of it, and he can engineer anything, including sentient life.  
3 notes · View notes
t-baba · 6 years ago
Photo
Tumblr media
Getting up and Running with the Vue.js 2.0 Framework
This article was updated in November 2018, primarily to bring the tooling section up to date.
As soon as the popular JavaScript framework Vue.js released v2, I was eager to give it a spin and see what it’s like to work with. As someone who’s pretty familiar with Angular and React, I was looking forward to seeing the similarities and differences between them and Vue.
Vue 2 sports excellent performance stats, a relatively small payload (the bundled runtime version of Vue weighs in at 30KB once minified and gzipped), along with updates to companion libraries like vue-router and Vuex, the state management library for Vue. There’s far too much to cover in just one article, but keep an eye out for some later articles where we’ll look more closely at various libraries that couple nicely with the core framework.
Inspiration from Other Libraries
As we go through this tutorial, you’ll see many features that Vue has that are clearly inspired by other frameworks. This is a good thing; it’s great to see new frameworks take some ideas from other libraries and improve on them. In particular, you’ll see Vue’s templating is very close to Angular’s, but its components and component lifecycle methods are closer to React’s (and Angular’s, as well).
One such example of this is that, much like React and nearly every framework in JavaScript land today, Vue uses the idea of a virtual DOM to keep rendering efficient. Vue uses a fork of snabbdom, one of the more popular virtual DOM libraries. The Vue site includes documentation on its Virtual DOM rendering, but as a user all you need to know is that Vue is very good at keeping your rendering fast (in fact, it performs better than React in many cases), meaning you can rest assured you’re building on a solid platform.
Components, Components, Components
Much like other frameworks these days, Vue’s core building block is the component. Your application should be a series of components that build on top of each other to produce the final application. Vue.js goes one step further by suggesting (although not enforcing) that you define your components in a single .vue file, which can then be parsed by build tools (we’ll come onto those shortly). Given that the aim of this article is to fully explore Vue and what it feels like to work with, I’m going to use this convention for my application.
A Vue file looks like so:
<template> <p>This is my HTML for my component</p> </template> <script> export default { // all code for my component goes here } </script> <style scoped> /* CSS here * by including `scoped`, we ensure that all CSS * is scoped to this component! */ </style>
Alternatively, you can give each element a src attribute and point to a separate HTML, JS or CSS file respectively if you don’t like having all parts of the component in one file.
Setting Up a Project
Whilst the excellent Vue CLI exists to make setting up a full project easy, when starting out with a new library I like to do it all from scratch so I get more of an understanding of the tools.
These days, webpack is my preferred build tool of choice, and we can couple that with the vue-loader plugin to support the Vue.js component format that I mentioned previously. We’ll also need Babel and the env preset, so we can write all our code using modern JavaScript syntax, as well as the webpack-dev-server, which will update the browser when it detects a file change.
Let’s initialize a project and install the dependencies:
mkdir vue2-demo-project cd vue2-demo-project npm init -y npm i vue npm i webpack webpack-cli @babel/core @babel/preset-env babel-loader vue-loader vue-template-compiler webpack-dev-server html-webpack-plugin --save-dev
Then create the initial folders and files:
mkdir src touch webpack.config.js src/index.html src/index.js
The project structure should look like this:
. ├── package.json ├── package-lock.json ├── src │ ├── index.html │ └── index.js └── webpack.config.js
Now let’s set up the webpack configuration. This boils down to the following:
Tell webpack to use the vue-loader for any .vue files
Tell webpack to use Babel and the env preset for any .js files
Tell webpack to generate an HTML file for the dev-server to serve, using src/index.html as a template:
//webpack.config.js const VueLoaderPlugin = require('vue-loader/lib/plugin') const HtmlWebPackPlugin = require("html-webpack-plugin") module.exports = { module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', }, { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } } } ] }, plugins: [ new VueLoaderPlugin(), new HtmlWebPackPlugin({ template: "./src/index.html" }) ] }
Finally, we’ll add some content to the HTML file and we’re ready to go!
<!-- src/index.html --> <!DOCTYPE html> <html> <head> <title>My Vue App</title> </head> <body> <div id="app"></div> </body> </html>
We create an empty div with the ID of app, as this is the element that we’re going to place our Vue application in. I always prefer to use a div, rather than just the body element, as that lets me have control over the rest of the page.
Writing Our First Vue.js App
We’re going to stay true to every programming tutorial ever and write a Vue application that puts “Hello, World!” onto the screen before we dive into something a bit more complicated.
Each Vue app is created by importing the library and then instantiating a new Vue instance:
import Vue from 'vue' const vm = new Vue({ el: '#app', })
We give Vue an element to render onto the page, and with that, we’ve created a Vue application! We pass a selector for the element that we want Vue to replace with our application. This means when Vue runs it will take the div#app that we created and replace it with our application.
The reason we use the variable name vm is because it stands for “View Model”. Although not strictly associated with the “Model View View-Model” (MVVM) pattern, Vue was inspired in part by it, and the convention of using the variable name vm for Vue applications has stuck. Of course, you can call the variable whatever you’d like!
So far, our application isn’t doing anything, though, so let’s create our first component, App.vue, that will actually render something onto the page.
Vue doesn’t dictate how your application is structured, so this one is up to you. I ended up creating one folder per component, in this case App (I like the capital letter, signifying a component), with three files in it:
index.vue
script.js
style.css
mkdir src/App touch src/App/{index.vue,script.js,style.css}
The file structure should now be:
. ├── package.json ├── package-lock.json ├── src │ ├── App │ │ ├── index.vue │ │ ├── srcipt.js │ │ └── style.css │ ├── index.html │ └── index.js └── webpack.config.js
App/index.vue defines the template, then imports the other files. This is in keeping with the structure recommended in the What About Separation of Concerns? section of Vue’s docs.
<!-- src/App/index.vue --> <template> <p>Hello, World!</p> </template> <script src="./script.js"></script> <style scoped src="./style.css"></style>
I like calling it index.vue, but you might want to call it app.vue too so it’s easier to search for. I prefer importing App/index.vue in my code versus App/app.vue, but again you might disagree, so feel free to pick whatever you and your team like best.
For now, our template is just <p>Hello, World!</p>, and I’ll leave the CSS file blank. The main work goes into script.js, which looks like so:
export default { name: 'App', data() { return {} }, }
Doing this creates a component which we’ll give the name App, primarily for debugging purposes, which I’ll come to later, and then defines the data that this component has and is responsible for. For now, we don’t have any data, so we can just tell Vue that by returning an empty object. Later on, we’ll see an example of a component using data.
Now we can head back into src/index.js and tell the Vue instance to render our App component:
import Vue from 'vue' import AppComponent from './App/index.vue' const vm = new Vue({ el: '#app', components: { app: AppComponent, }, render: h => h('app'), })
Firstly, we import the component, trusting webpack and the vue-loader to take care of parsing it. We then declare the component. This is an important step: by default, Vue components are not globally available. Each component must have a list of all the components they’re going to use, and the tag that it will be mapped to. In this case, because we register our component like so:
components: { app: AppComponent, }
This means that in our templates we’ll be able to use the app element to refer to our component.
Finally, we define the render function. This function is called with a helper — commonly referred to as h — that’s able to create elements. It’s not too dissimilar to the React.createElement function that React uses. In this case, we give it the string 'app', because the component we want to render is registered as having the tag app.
More often than not (and for the rest of this tutorial) we won’t use the render function on other components, because we’ll define HTML templates. But the Vue.js guide to the render function is worth a read if you’d like more information.
Once we’ve done that, the final step is to create an npm script in package.json:
"scripts": { "start": "webpack-dev-server --mode development --open" },
Now, run npm run start. Your default browser should open at http://localhost:8080/ and you should see “Hello, World!” on the screen.
Try editing src/index.vue to change the message to something else. If all has gone correctly, webpack-dev-server should refresh the page to reflect your changes.
Yay! We’re up and running with Vue.js.
The post Getting up and Running with the Vue.js 2.0 Framework appeared first on SitePoint.
by Jack Franklin via SitePoint http://bit.ly/2UhqBca
0 notes
npmjs · 8 years ago
Text
npm@5 is now `npm@latest`
Tumblr media
It’s here!
Starting today, if you type `npm install npm@latest -g`, you’ll be updated to npm version 5. In addition, npm@5 is bundled in all new installations of Node.js 8, which has replaced Node.js 7 in the Node Project’s current release line.
Over the last year and a half, we’ve been working to address a huge number of pain points, some of which had existed since the registry was created. Today’s release is the biggest ever improvement to npm’s speed, consistency, and user experience.
The definitive list of what’s new and what’s changed is in our release notes,
but here are some highlights:
It’s fast
We’ve reworked package metadata, package download, and package caching, and this has sped things up significantly. In general, expect performance improvements of 20–100%; we’ve also seen some installations and version bumps that run 5x faster.
Tumblr media
(Installing the npm website on our own dev environments went from 99 seconds using npm@4 to 27 seconds with npm@5. Now we spend less time jousting.)
Since npm was originally designed, developers have changed how they use npm. Not only is the npm ecosystem exponentially larger, but the number of dependencies in the average npm package has increased 250% since 2014. More devs now install useful tools like Babel, Webpack, and Tap locally, instead of globally. It’s a best practice, but it means that `npm install` does much more work.
Given the size of our community, any speed bump adds up to massive savings for millions of users, not to mention all of our Orgs and npm Enterprise customers. Making npm@5 fast was an obvious goal with awesome rewards.
It’s consistent
Default lockfiles
Shrinkwrap has been a part of npm for a long time, but npm@5 makes lockfiles the default, so all npm installs are now reproducible. The files you get when you install a given version of a package will be the same, every time you install it.
We’ve found countless common and time consuming problems can be tied to the “drift” that occurs when different developer environments utilize different package versions. With default lockfiles, this is no longer a problem. You won’t lose time trying to figure out a bug only to learn that it came from people running different versions of a library.
SHA-512 hashes
npm@5 adds support for any tarball hash function supported by Node.js, and it publishes with SHA-512 hashes. By checking all downloaded packages, you’re protected against data corruption and malicious attacks, and you can trust that the code you download from the registry is consistent and safe.
Self-healing cache
Our new caching is wicked fast, but it’s also more resilient. Multiple npm processes won’t corrupt a shared cache, and npm@5 will check data on both insertion and extraction to prevent installing corrupted data. If a cache entry fails an integrity check, npm@5 will automatically remove it and re-fetch.
It’s easier to use
With your feedback, we’ve improved the user experience with optimizations throughout npm@5. A big part of this is more informative and helpful output. The best example of this is that npm no longer shows you the entire tree on package install; instead, you’ll see a summary report of what was installed. We made this change because of the larger number of dependencies in the average package. A file-by-file readout turned out to be pretty unwieldy beyond a certain quantity.
It needs you
npm@5 is a huge step forward for both npm and our awesome community, and today’s release is just the beginning. A series of improvements in the pipeline will make using npm as frictionless as possible and faster than ever before.
But: npm exists because of its users, and our goal remains being open and flexible to help people build amazing things, so we depend on your feedback.
What works for you? What should we improve next? How much faster are your installs? Let us know. Don’t hesitate to find us on Twitter, and, if you run into any trouble, be sure to drop us a note.
15 notes · View notes
nancydsmithus · 7 years ago
Text
Smart Bundling: How To Serve Legacy Code To Legacy Browsers
Smart Bundling: How To Serve Legacy Code To Legacy Browsers
Shubham Kanodia
2018-10-15T14:30:13+02:002018-10-15T12:50:48+00:00
A website today receives a large chunk of its traffic from evergreen browsers — most of which have good support for ES6+, new JavaScript standards, new web platform APIs and CSS attributes. However, legacy browsers still need to be supported for the near future — their usage share is large enough not to be ignored, depending on your user base.
A quick look at caniuse.com’s usage table reveals that evergreen browsers occupy a lion’s share of the browser market — more than 75%. In spite of this, the norm is to prefix CSS, transpile all of our JavaScript to ES5, and include polyfills to support every user we care about.
While this is understandable from a historical context — the web has always been about progressive enhancement — the question remains: Are we slowing down the web for the majority of our users in order to support a diminishing set of legacy browsers?
Tumblr media
The different compatibility layers of a web app. (View large version)
The Cost Of Supporting Legacy Browsers
Let’s try to understand how different steps in a typical build pipeline can add weight to our front-end resources:
Transpiling To ES5
To estimate how much weight transpiling can add to a JavaScript bundle, I took a few popular JavaScript libraries originally written in ES6+ and compared their bundle sizes before and after transpilation:
Library Size (minified ES6) Size (minified ES5) Difference TodoMVC 8.4 KB 11 KB 24.5% Draggable 77.9 KB 11.5 KB 31.3% Luxon 75.4 KB 100.3 KB 24.8% Video.js 237.2 KB 335.8 KB 29.4% PixiJS 370.8 KB 452 KB 18%
On average, untranspiled bundles are about 25% smaller than those that have been transpiled down to ES5. This isn’t surprising given that ES6+ provides a more compact and expressive way to represent the equivalent logic and that transpilation of some of these features to ES5 can require a lot of code.
ES6+ Polyfills
While Babel does a good job of applying syntactical transforms to our ES6+ code, built-in features introduced in ES6+ — such as Promise, Map and Set, and new array and string methods — still need to be polyfilled. Dropping in babel-polyfill as is can add close to 90 KB to your minified bundle.
Front-end is messy and complicated these days. That's why we publish articles, printed books and webinars with useful techniques to improve your work. Even better: Smashing Membership with a growing selection of front-end & UX goodies. So you get your work done, better and faster.
Explore Smashing Membership ↬
Web Platform Polyfills
Modern web application development has been simplified due to the availability of a plethora of new browser APIs. Commonly used ones are fetch, for requesting for resources, IntersectionObserver, for efficiently observing the visibility of elements, and the URL specification, which makes reading and manipulation of URLs on the web easier.
Adding a spec-compliant polyfill for each of these features can have a noticeable impact on bundle size.
CSS Prefixing
Lastly, let’s look at the impact of CSS prefixing. While prefixes aren’t going to add as much dead weight to bundles as other build transforms do — especially because they compress well when Gzip’d — there are still some savings to be achieved here.
Library Size (minified, prefixed for last 5 browser versions) Size (minified, prefixed for last browser version) Difference Bootstrap 159 KB 132 KB 17% Bulma 184 KB 164 KB 10.9% Foundation 139 KB 118 KB 15.1% Semantic UI 622 KB 569 KB 8.5%
A Practical Guide To Shipping Efficient Code
It’s probably evident where I’m going with this. If we leverage existing build pipelines to ship these compatibility layers only to browsers that require it, we can deliver a lighter experience to the rest of our users — those who form a rising majority — while maintaining compatibility for older browsers.
Tumblr media
Forking our bundles. (View large version)
This idea isn’t entirely new. Services such as Polyfill.io are attempts to dynamically polyfill browser environments at runtime. But approaches such as this suffer from a few shortcomings:
The selection of polyfills is limited to those listed by the service — unless you host and maintain the service yourself.
Because the polyfilling happens at runtime and is a blocking operation, page-loading time can be significantly higher for users on old browsers.
Serving a custom-made polyfill file to every user introduces entropy to the system, which makes troubleshooting harder when things go wrong.
Also, this doesn’t solve the problem of weight added by transpilation of the application code, which at times can be larger than the polyfills themselves.
Let see how we can solve for all of the sources of bloat we’ve identified till now.
Tools We’ll Need
Webpack This will be our build tool, although the process will remain similar to that of other build tools, like Parcel and Rollup.
Browserslist With this, we’ll manage and define the browsers we’d like to support.
And we’ll use some Browserslist support plugins.
1. Defining Modern And Legacy Browsers
First, we’ll want to make clear what we mean by “modern” and “legacy” browsers. For ease of maintenance and testing, it helps to divide browsers into two discrete groups: adding browsers that require little to no polyfilling or transpilation to our modern list, and putting the rest on our legacy list.
Tumblr media
Browsers that support ES6+, new CSS attributes, and browser APIs like Promises and Fetch. (View large version)
A Browserslist configuration at the root of your project can store this information. “Environment” subsections can be used to document the two browser groups, like so:
[modern] Firefox >= 53 Edge >= 15 Chrome >= 58 iOS >= 10.1 [legacy] > 1%
The list given here is only an example and can be customized and updated based on your website’s requirements and the time available. This configuration will act as the source of truth for the two sets of front-end bundles that we will create next: one for the modern browsers and one for all other users.
2. ES6+ Transpiling And Polyfilling
To transpile our JavaScript in an environment-aware manner, we’re going to use babel-preset-env.
Let’s initialize a .babelrc file at our project’s root with this:
{ "presets": [ ["env", { "useBuiltIns": "entry"}] ] }
Enabling the useBuiltIns flag allows Babel to selectively polyfill built-in features that were introduced as part of ES6+. Because it filters polyfills to include only the ones required by the environment, we mitigate the cost of shipping with babel-polyfill in its entirety.
For this flag to work, we will also need to import babel-polyfill in our entry point.
// In import "babel-polyfill";
Doing so will replace the large babel-polyfill import with granular imports, filtered by the browser environment that we’re targeting.
// Transformed output import "core-js/modules/es7.string.pad-start"; import "core-js/modules/es7.string.pad-end"; import "core-js/modules/web.timers"; …
3. Polyfilling Web Platform Features
To ship polyfills for web platform features to our users, we will need to create two entry points for both environments:
require('whatwg-fetch'); require('es6-promise').polyfill(); // … other polyfills
And this:
// polyfills for modern browsers (if any) require('intersection-observer');
This is the only step in our flow that requires some degree of manual maintenance. We can make this process less error-prone by adding eslint-plugin-compat to the project. This plugin warns us when we use a browser feature that hasn’t been polyfilled yet.
4. CSS Prefixing
Finally, let’s see how we can cut down on CSS prefixes for browsers that don’t require it. Because autoprefixer was one of the first tools in the ecosystem to support reading from a browserslist configuration file, we don’t have much to do here.
Creating a simple PostCSS configuration file at the project’s root should suffice:
module.exports = { plugins: [ require('autoprefixer') ], }
Putting It All Together
Now that we’ve defined all of the required plugin configurations, we can put together a webpack configuration that reads these and outputs two separate builds in dist/modern and dist/legacy folders.
const MiniCssExtractPlugin = require('mini-css-extract-plugin') const isModern = process.env.BROWSERSLIST_ENV === 'modern' const buildRoot = path.resolve(__dirname, "dist") module.exports = { entry: [ isModern ? './polyfills.modern.js' : './polyfills.legacy.js', "./main.js" ], output: { path: path.join(buildRoot, isModern ? 'modern' : 'legacy'), filename: 'bundle.[hash].js', }, module: { rules: [ { test: /\.jsx?$/, use: "babel-loader" }, { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'] } ]}, plugins: { new MiniCssExtractPlugin(), new HtmlWebpackPlugin({ template: 'index.hbs', filename: 'index.html', }), }, };
To finish up, we’ll create a few build commands in our package.json file:
"scripts": { "build": "yarn build:legacy && yarn build:modern", "build:legacy": "BROWSERSLIST_ENV=legacy webpack -p --config webpack.config.js", "build:modern": "BROWSERSLIST_ENV=modern webpack -p --config webpack.config.js" }
That’s it. Running yarn build should now give us two builds, which are equivalent in functionality.
Serving The Right Bundle To Users
Creating separate builds helps us achieve only the first half of our goal. We still need to identify and serve the right bundle to users.
Remember the Browserslist configuration we defined earlier? Wouldn’t it be nice if we could use the same configuration to determine which category the user falls into?
Enter browserslist-useragent. As the name suggests, browserslist-useragent can read our browserslist configuration and then match a user agent to the relevant environment. The following example demonstrates this with a Koa server:
const Koa = require('koa') const app = new Koa() const send = require('koa-send') const { matchesUA } = require('browserslist-useragent') var router = new Router() app.use(router.routes()) router.get('/', async (ctx, next) => { const useragent = ctx.get('User-Agent') const isModernUser = matchesUA(useragent, { env: 'modern', allowHigherVersions: true, }) const index = isModernUser ? 'dist/modern/index.html', 'dist/legacy/index.html' await send(ctx, index); });
Here, setting the allowHigherVersions flag ensures that if newer versions of a browser are released — ones that are not yet a part of Can I Use’s database — they will still report as truthy for modern browsers.
One of browserslist-useragent’s functions is to ensure that platform quirks are taken into account while matching user agents. For example, all browsers on iOS (including Chrome) use WebKit as the underlying engine and will be matched to the respective Safari-specific Browserslist query.
It might not be prudent to rely solely on the correctness of user-agent parsing in production. By falling back to the legacy bundle for browsers that aren’t defined in the modern list or that have unknown or unparseable user-agent strings, we ensure that our website still works.
Conclusion: Is It Worth It?
We have managed to cover an end-to-end flow for shipping bloat-free bundles to our clients. But it’s only reasonable to wonder whether the maintenance overhead this adds to a project is worth its benefits. Let’s evaluate the pros and cons of this approach:
1. Maintenance And Testing
One is required to maintain only a single Browserslist configuration that powers all of the tools in this pipeline. Updating the definitions of modern and legacy browsers can be done anytime in the future without having to refactor supporting configurations or code. I’d argue that this makes the maintenance overhead almost negligible.
There is, however, a small theoretical risk associated with relying on Babel to produce two different code bundles, each of which needs to work fine in its respective environment.
While errors due to differences in bundles might be rare, monitoring these variants for errors should help to identify and effectively mitigate any issues.
2. Build Time vs. Runtime
Unlike other techniques prevalent today, all of these optimizations occur at build time and are invisible to the client.
3. Progressively Enhanced Speed
The experience of users on modern browsers becomes significantly faster, while users on legacy browsers continue to get served the same bundle as before, without any negative consequences.
4. Using Modern Browser Features With Ease
We often avoid using new browser features due to the size of polyfills required to use them. At times, we even choose smaller non-spec-compliant polyfills to save on size. This new approach allows us to use spec-compliant polyfills without worrying much about affecting all users.
Differential Bundle Serving In Production
Given the significant advantages, we adopted this build pipeline when creating a new mobile checkout experience for customers of Urban Ladder, one of India’s largest furniture and decor retailers.
In our already optimized bundle, we were able to squeeze savings of approximately 20% on the Gzip’d CSS and JavaScript resources sent down the wire to modern mobile users. Because more than 80% of our daily visitors were on these evergreen browsers, the effort put in was well worth the impact.
Further Resources
“Loading Polyfills Only When Needed”, Philip Walton
@babel/preset-env A smart Babel preset
Browserslist “Tools” Ecosystem of plugins built for Browserslist
Can I Use Current browser marketshare table
Tumblr media
(dm, ra, yk, il, al)
0 notes
not-a-space-alien · 8 years ago
Text
To Ineffability and Beyond!
Surely you all knew this must be coming eventually???  Obligatory “ineffable husbands in space!!!!” fic
Big thanks to @lunasong365 for always being an incredibly helpful beta!!
Title:  To Ineffability and Beyond
Pairing/Characters: Aziraphale/Crowley 
Rating:  Explicit [nsfw]
Word count: 22,900
Warnings: Smut, body horror, bestiality??
Summary: Far into the future, Aziraphale and Crowley get a new assignment: to accompany humanity into the deepest reaches of a distant galaxy.
On LJ
On AO3
Part 1 | Part 2 | Part 3 |  Part 4 |  Part 5
You would be surprised at humans’ ability to make any topic politically controversial.
Well, you might not, since you’re a human yourself.  Or presumably you’re a human, since aliens don’t exist.  But we’ll get to that later.
The point is, conservative factions on Earth managed to raise objections to the idea of interstellar travel at every step. First there was talk about how atheists wanted to use space travel to further their secular agenda.  Then there were objections that aliens, if they existed, would be damned to Hell and it wasn’t worth finding them.  Alternatively, some kind souls argued it was their duty to proselytize the aliens, if there were any.  Those factions argued into stalemate.  Then some on earth said that it would be dangerous and immoral to send humans into the depths of space for a variety of reasons, none of which could be articulated properly, of course, because they were ineffable.  Comparisons with the tower of Babel abounded—humans had no business trying to reach the sky, and the deep space program was a work of human hubris like nothing before it.  These arguments were countered by religious liberals who argued that they had a right or even a duty to explore all of God’s creation so it could be properly admired.
Aziraphale eyed the developments with nervousness.  He’d received no orders from Up There about the topic, so he kept his head in the sand as much as possible.  When he could not help getting involved, he generally tried to persuade humans to keep their feet on the ground.  Not because he was taking the side of the religious protesters in the debate, but because he did not like the thought of Heaven sending him on a journey a million light-years away.  He could see it off in the distance coming towards him, like a train on an inevitable track.
Exploring the galaxy.  Where no man (etc.) had gone before.  Giant leap for mankind, and all that.  The talk about the bird on the spaceship travelling for eternity to the end of the universe came back to him.  He didn’t like it at all.  Space seemed uncomfortable and dismal and he probably wouldn’t be able to bring his books.
Well, that issue was resolved when new laws put into place restricted the use of paper.  He holed himself up for a week in the throes of depression after it happened, because he knew his collection would be seized as contraband.  They would give him digital copies, of course, but it wasn’t the same.  He thought bitterly of the Library of Alexandria and how they had stolen the manuscripts of everyone coming in.  It didn’t seem fair now that he was on the other side of things.  The computer bank he received as compensation just didn’t have the same effect as being surrounded by books.  But it did make him feel better that he could take his collection with him rather easily if he should have to move.
It seemed like an increasingly likely possibility when finally, after centuries of development, interstellar space travel became a reality.
They tested with a probe, of course.  Humans always use a probe first for everything.  But the government said that the test was in preparation for a manned mission to colonize a distant planet.
Humans watched the probe, did their calculations, and turned their telescopes to the stars to find a suitable candidate planet.  Aziraphale drank more heavily than usual during this time, waiting, watching.
The probe was successful. An enormous deep-space vessel was commissioned. Aziraphale waited for the orders he just knew were coming.  Then finally:
Your new mission is to relocate with the humans who will board the Aphelion vessel and continue your angelic duties in their new destination.
At this point in history, Crowley and Aziraphale had been living together for several hundred years, so Crowley saw the instructions as soon as the angel got them.  He shook Aziraphale by the shoulders.
“We get to be space explorers!”
“Yes,” said Aziraphale dismally.
“Where no man has gone before,” said Crowley, tripping in his excitement.
“Yes, of course, dear.”
“Hell is going to send me too, of course.”
“I’m sure they will.”
“We should start packing.”
“It’s going to take decades to build the vessel, my dear.”
Over the next few years, Crowley’s consumption of science-fiction media skyrocketed.  He got out his telescope every night and looked at the sky from the porch of their little cottage to track the progress of the construction of the vessel.  The thing was so enormous that it had to be constructed in orbit as there would be no way for it to escape Earth’s gravity.  It was visible to the naked eye in the sky as it began to take shape.
Humans had a pretty decent mastery over living and working in space by that point.  They’d had a colony on Mars for a while; Crowley had gone up to see what it was all about, but he’d returned a few years later complaining that it had been incredibly boring since they weren’t terraforming Mars and were just living in a big bubble mining things.  But he remarked on how efficient it was.  Humans truly were fluent in the mechanics of working in space.
So the construction of the Aphelion vessel was rapid, efficient, and enthusiastic. And yet Crowley began to mutter to himself when he saw how it was coming along.
“What’s the matter, dear?” Aziraphale said, coming up behind him one evening with a mug of cocoa for each of them.
Crowley took his cup sourly. “I don’t like it.”
“What?  The ship?”
“Yeah.”
“And why not?”
“It’s…”  He struggled to put his feelings into words.  “It’s….not cool!”
“Not cool?  It’s an interstellar space ship!  What could possibly make it un-cool?”
“Just look at it!”
Aziraphale turned, gazing up at the sky and sipping his cocoa.  The vessel was faintly visible in orbit, mostly built, although parts of it still had a skeletal frame and nothing more.  “What about it?”
“It looks like a bloody Hula-Hoop! Or a wagon wheel!”
“Crowley, the ship is circular so it can spin and generate artificial gravity with centrifugal force. What did you think it was going to look like?”
Crowley had been thinking of the thirty-fifth James Bond movie, which had taken place in space and had not been scientifically accurate.  It wouldn’t do to admit that, of course, so he sipped his cocoa bitterly without answering.
His enthusiasm returned when their applications for becoming colonists arrived in the electronic mail. He opened them the second he laid eyes on them.  The two of them snuggled together on the couch to fill them out.
The questions were pretty basic, although the two of them had a hard time answering them.  Date and place of birth were difficult to decide on, and neither of them had ever been to the physician and didn’t know their blood type.
“Angel,” said Crowley. “Look at item 137.”
Aziraphale scrolled to the end of his application and saw that 137 was a simple statement in bold:
THE INTENTION OF THE APHELION MISSION IS A PERMANENT SETTLEMENT ON PLANET KEPLER-442B.  THE APHELION VOYAGER IS EQUIPPED FOR A RETURN JOURNEY TO EARTH IN THE EVENT OF MISSION FAILURE, BUT THE LIKELIHOOD OF A RETURN JOURNEY TO EARTH IS VERY SMALL.  BY SIGNING HERE, YOU ACKNOWLEDGE THAT YOU ARE AWARE OF AND ACCEPT THIS LIKELIHOOD.
“What’s the matter?”
“If we get on board, we’re probably not going to come back to Earth.  They don’t have any plans to come back.”
Aziraphale set the screen with his application down on the table.  “Well, I had thought that was a given.  They’re going out there to colonize.  And it’s very far away.”
Crowley was looking at his application with an expression of sorrow.  
“Had you not thought about that?’
He tapped a finger on the side of his screen.  “It’s not worth staying here anymore since they stopped making cars,” he said, signing the line.
It was said with a forced joking tone.  Aziraphale took his hand.  “Crowley, it’s not the same as Armageddon.  It’ll still be here.  It’ll just be a bit further away.”
“Yeah,” said Crowley. “Yeah, you’re right.”
Aziraphale thought he was quashing down his feelings because it had already been decided that Aziraphale was going, and one of them staying and the other going was unthinkable.  And maybe, just maybe the thought of being on a space ship and going off into the unknown where strange and exciting things awaited was enough to make up for it.
They were both called in for the second round of screening.  They were given a physical examination, an ethics test, an aptitude test, a personality test.  Crowley chatted excitedly about the questions, which were supposed to be confidential, as soon as they stepped out of the testing center.
Their results came back within a month:  Crowley had been accepted for the third round of screening, while Aziraphale was given a letter of polite declination. Aziraphale glared at Crowley when the demon turned red and shook with suppressed laughter, and then the angel set about changing his corporation and applying again under a different name.
The second attempt was also rejected.  Crowley fell into a giggling heap on the couch.  Aziraphale huffed indignantly and asked Crowley to pull some strings in the computer system to let him in, the same way he had designed the sigil Odegra into the M25 all those centuries ago when humans still used highways.
“Oh, all right,” he said. “Anything for you, angel.”
Aziraphale was awoken by the sound of bare feet on the wood floor rapidly pattering towards him, and then a weight ramming into him.
“Oof!” Aziraphale wheezed, opening his eyes to see that Crowley had jumped onto the bed and landed directly on the angel’s ribs.
“Wake up, angel!” Crowley said, bouncing on the mattress excitedly.  “Wake up!  Wake up! Wake up!  Today’s the day!  It’s today!”
“Yes, all right, all right,” said Aziraphale, untangling himself from the sheets.  “Give me a moment.”
There was already a cup of tea waiting for him on the table.  Crowley was busily moving things around in the kitchen.
“Crowley, what are you doing? The landlord is going to be coming later today to take care of the house.”
Crowley shook his hands out. “I don’t know.  I’m just so excited.”
“Relax, dear.  Just enjoy the morning, because things will be very different soon.”
They ate a leisurely breakfast, although Crowley’s leg was still vibrating under the table.  Crowley grabbed the suitcases, and Aziraphale wheeled the cart that had his digital collection of books behind him.
“See, you can take your whole collection with you!” said Crowley.  “Humans know what they’re doing.”
They stopped by the park to feed the ducks one last time, emptying a bag of birdseed onto the ground and watching them squabble over it.  Aziraphale had to convince Crowley not to try and sneak a mallard onto the Aphelion.
They arrived at the airport and went straight to the gates reserved for interplanetary travel.  Crowley had cheated to get them first class seats, so they got to sip champagne while they waited to board.
“So where are you two headed?” said a woman who sat down next to them, a kind soul who apparently had never gotten the memo that small talk with strangers was taboo.
“The Aphelion,” Crowley answered proudly.
“No way!” said the woman.  “Lucky!  I applied to go, but they turned me down.”
“Not that lucky,” said the man waiting on the other side of them. “They get to go into deep space and live on some barren rock and never come back.  Probably go mad with cabin fever and kill each other, the lot of them. I’ll pass.”
Crowley glared at the man, but he was wearing his sunglasses so the intended effect was lost.
They were finally called on board. Interplanetary ships looked a lot like airplanes, except they pointed nose-up at the sky and you had to climb a ladder to get to your seat.  Crowley and Aziraphale allowed their luggage to be wheeled away and strapped themselves in, suspended in their seats looking up.
“Aziraphale, have you ever been on an interplanetary trip?” said Crowley as the seats around them filled in.
“Afraid not,” said Aziraphale. “Prefer to keep my feet on the ground, I suppose.”
“Halfway through the flight, the whole cabin is at zero-G, and while you’re not technically supposed to unstrap yourself and move around, the stewards will usually let you if it looks like you know what you’re doing.”
“Charming.”
“You’re not going to give it a shot?”
“No.”
A man in a flight attendant’s outfit came through and made sure everyone had strapped themselves in, as though they were on an amusement park ride.
“Attention in the cabin,” said the voice of the pilot through the intercom.  “Welcome aboard flight T654.  Our destination today is Earth’s moon with a layover in the upper ionosphere.  We have some special passengers on board today headed to the Aphelion.”
Crowley enthusiastically waved his hands above his head.  Aziraphale grabbed his arms and pulled them down.
“This is a reminder that the pull of gravity decreases the further we get from earth and then increases closer to the moon.  Docking at the Aphelion will bring us up to approximately 1.1G’s, so if you’re remaining on the shuttle please stay in your seat for the duration of that connection.”
“How are we going to dock with the Aphelion?” said Aziraphale. “I thought it was spinning around at a zillion revolutions per hour?”
“That’s what generates the artificial gravity,” said Crowley from beside him, in an impeccable and nasally imitation of Aziraphale’s voice.  The angel glared at him.
“Now, if you please, pay attention to the health and safety demonstration at the front of the shuttle, and we can take off.”
The in-flight video demonstrated where the emergency exits were (“Where on Earth would we be exiting to?” Aziraphale commented, to which Crowley replied, “No.”), the location of the emergency oxygen masks (“That wouldn’t be helpful if we were in the burning cold of space!” Aziraphale had said worriedly, and Crowley had shushed him.), and a plethora of other safety devices upon which Aziraphale offered his fussy commentary.
Another flight attendant came by to check and make sure there weren’t any items loose in the cabin that would start floating around without gravity.  Aziraphale thought they were rather making a big deal out of this, and people went to the moon all the time and why was this a whole big long process? They should just take off already.
The crew buckled themselves in, and the countdown finally started over the intercom.
10…9…8…
“Do they have to be so dramatic about it?” Aziraphale said.
7…6…5…
“Because I’m sure they don’t need to actually count down.”
4…3…
“It’s for the ambiance. Hey, angel.”
2…
Aziraphale looked over. Crowley was giving him a lecherous look.
1…
“I can’t wait to suck you off in zero-G.”
The woman behind Crowley had clearly heard what he had said and had a shocked look on her face.  Aziraphale was thrown back flush against his seat before he could respond.  The cabin rattled and shuddered.  Aziraphale was glad there weren’t any windows, because he was sure they were going faster than he had ever gone before in his life.
We have liftoff.
They began to slow.  The motion died down.
“Angel, relax,” said the voice beside him.
Aziraphale looked down and realized he was white-knuckling his armrest.  He peeled his hand off and ran it through his hair.  “That wasn’t so bad.”
Crowley suppressed a snort.
A ticker at the front of the cabin showed their altitude, skyrocketing before their eyes.
“Humans are amazing, aren’t they?” said Crowley.  “Remember when they thought the moon was only a couple dozen miles away?”
“Yeah,” said Aziraphale.
They sat there in silence for a while, just holding hands, thinking of the planet zooming away beneath them.
“It seems a little odd to me that they’re only sending one angel and one demon with the Aphelion crew,” said Aziraphale.  “The population is slated to be, what, several thousand isn’t it?”
“You know they don’t pay attention to those things, angel.”
“Mm, maybe they just wanted to get rid of us once and for all.”
“Ha!  I wouldn’t put it past them.”
“Hmm, who should we send to be Hell’s representative on the barren ball of rock a trillion miles away? I know—that chap Crowley!  He messed up the apocalypse, but surely he’s perfect for this job.”
Crowley sat in uncomfortable silence.
“Crowley?  Did I say something wrong?  I’m sorry, I was only joking.”
“They didn’t send me,” Crowley said.
“What?”
“They told me to keep my feet on the ground because they were sending another demon.”
Aziraphale grimaced.  “Oh.”
Crowley flashed him a nervous smile.  “Fuck ‘em, I say.  What are they gonna do about it?”
“My dear, they might very well do something if we aren’t careful.”
“Whatever,” said Crowley, letting go of his hand to indignantly cross his arms.  “And it’s not going to be a ‘barren ball of rock,’ Aziraphale.  There’s going to be aliens on there.”
“…You can’t be serious.”
“Of course I’m serious! Aliens have to be real somewhere out there in the galaxy!  It wouldn’t surprise me if they were on the very planet we’re going to!”
“Did you read the pre-voyage materials they sent us?”
Crowley didn’t answer.
“You didn’t read them.”
“It looked like homework.  I don’t do homework.”
“Crowley, they already did a scan of the surface of Kepler-442b and it showed no signs of life at all. If there were a bustling alien civilization on it, I hardly think we’d be going to colonize it.”
“Wouldn’t surprise me with the way Europeans behaved in the 16th century,” Crowley muttered.  “I’m telling you, there’s going to be aliens on there.”
“We have to terraform it first. There’s nothing alive on there. It’s empty.”
“Aliens.  Mark my words.”
“They would have seen them.”
“They’re underground.”
Aziraphale patted his hand. “Whatever makes you feel better, dear.”
They began to feel lighter and lighter as the pull of gravity lessened.  At one point Crowley looked over to see Aziraphale’s mass of curly hair had drifted upwards and ringed his head like a halo.
The intercom dinged.  “We are now approaching the Aphelion for docking.  If you’re getting off, please stay in your seats until the ‘Gravity’ sign at the front of the cabin turns green.  Reminder that if you’re continuing on to the moon, stay in your seat.”
Aziraphale’s stomach dropped as gravity re-engaged, gradually forcing him back into his seat.
“Aw,” said Crowley.  “We didn’t get to float around at all.”
One of the flight attendants came by and escorted them from their seats.  They were ushered to the same door at the back of the ship from which they had entered.  When it whooshed open, they were greeted by a positively utilitarian bare metal room, the front of which led to a single extremely thick, locked porthole.
“This is the place, then?” said Aziraphale.  His shoes tapped on the metal as he went in.  
Two stewards came out with their baggage, plopped it down, then scurried back inside.
“Have a nice journey, boys,” said one as they disappeared back into the shuttle.
The door vacuumed shut and sealed. Crowley and Aziraphale picked up their luggage.  The door on the other side of the room did not open.  The shuttle remained where it was.
“Ah…” said Aziraphale.  “Are we supposed to…do something?”
“You’re the one who read the pre-voyage materials,” said Crowley.
A red light began to flash on the door in front of them, accompanied by an alarm that sounded like a foghorn.  The porthole at the far end popped open and swung outwards with a groan.  The two of them scuttled across the threshold, dragging and wheeling baggage behind them.  But they found themselves in a second room identical to the first, except this one had a small, squat window in the door at the far end of the room.
The door slammed shut behind them of its own accord.
“Uh….” said Crowley.
Aziraphale strode forwards and looked into the small window.  “I can’t really see anything.”
Crowley huffed and sat down on one of his suitcases.  He zipped the other one open and withdrew a potted plant.  It was in one of those fancy electronic pots that held all the soil in and regulated water levels.
“Ah good, he survived the baggage compartment.”
“Crowley!” said Aziraphale. “They were very clear that you’re not supposed to bring your own plants or animals on board!”
“Aw, what are they going to do about it?” said Crowley.  “Nick’s already here.”
“You’ve named it.”
“He was the best of the best of the best.  This spider plant is ninety-five years old and has risen to every challenge I’ve thrown at him.  I’ve decided to be nice to him now.  He’s proven himself.  We need something to liven up our cabin!  I’m sure it will be dreadful without at least one plant.”
The same red light and foghorn sounded in the empty room, and the door with the window whooshed outwards.
“Come in, come in!” said a woman’s voice.
They dragged their things out the door into a metal hallway.  It was an infinite hallway, connecting rows and rows and rows of metal doors as far as the eye could see, until the unnoticeable curve became visible in the distance and the hallway dipped up and out of sight behind the ceiling.
Crowley blinked at it, fighting vertigo.
A perky woman in a blue vest smiled at them.  “Welcome aboard the Aphelion, space explorers!”
As soon as her eyes fell on the plant in Crowley’s hands, she gasped and lunged at him.
“What are you doing?” Crowley yelled as she tried to wrestle it off him.
“Flora not from the approved greenhouse is strictly prohibited onboard the Aphelion!”
“Get off him!”
“I need to confiscate this, sir.”
“He never did anything to you!”
She finally managed to wrench the plant out of his hands, and she immediately threw it back through the door through which they had come and punched a button on the wall.  An alarm beeped and the door slammed shut.
“Hey!”  Crowley pressed against the door and peeked out the window. The plant was on its side on the floor.
Another alarm sounded, and through the window Crowley could see the door at the far end of the antechamber open, revealing the black void of space dotted with stars and milky swirls of distant galaxies.  The plant flew out in the blink of an eye.
“Nick!” said Crowley. “No!  You murderer!”
He turned away from the window. The woman was breathing heavily, and she smoothed back her hair and put her smile back on.  “Sir, we have a seed bank on board that contains upwards of 75% of the estimated plant species on Earth.  If you’d like a potted plant, you can get one from the greenhouse free of charge.”
“He didn’t deserve that.”
“Sir, if outside flora brings disease on board it would be an ecological disaster.  We’ve under strict quarantine.”
Crowley crossed his arms and glared at her sourly.
“Now, may I see your boarding passes, please?”
Aziraphale took his screen out of his pocket, pulled it open, and navigated the glassy surface to the information card they had given him.  Crowley was still muttering to himself as he took his out and followed suit.
“Oh, you two are in the F wing. Excellent choice,” she said.  “I’m partial to the third circle myself.  Come on, I’ll show you to your room.”
The wheels of Aziraphale’s cart clattered on the metal grate beneath them as they moved forwards, down that logic-defying hallway.  “Did you say the third circle?” said Crowley.
Aziraphale elbowed him and whispered, “I told you to read the pre-voyage materials.”
They filed into an elevator, which ended up going more sideways than up or down.  Even given the fact that there were signs and arrows and maps spattering every inch of the walls, Aziraphale and Crowley immediately got lost.
The woman in the vest gestured to a door.  “Here you are, suite 889b!  If you need anything, my name is Maria and my contact information will be on the vidscreen in your room.  Have a nice day!”
She moved off, disappearing into the wall a distance off.  They both blinked, staring down the narrow hallway.
“This place gives me the creeps,” said Crowley.  “It’s like a big metal labyrinth.”
“The pre-voyage materials had a blueprint, dear,” said Aziraphale, swiping his screen in the slot on the door. “It wasn’t supposed to be a surprise to anyone.”
The door swung open.  Their room was small, with one decent-sized bed in the center and a pair of dressers and not much else. All the furniture was bolted to the floor, and the walls were bare except for a vidscreen that said:
YOUR VOYAGE ASSISTANT (VA) IS MARIA
CONTACT NUMBER 60.547.8
Crowley muttered under his breath and approached the vidscreen, tapping it and swiping, crossing out Maria’s name and writing plant murderer.
Aziraphale collapsed his screen into its smallest shape and stuck it into the wall to charge.  “All right, Crowley, now that we’re here, I insist that you read the pre-voyage materials.  They had some very important information that you’ve simply missed.  You’re going to mess something up and get us in trouble because you won’t follow directions.”
Crowley gave him a dirty look and pulled his own screen out, sliding it open and tapping on it.  “All right, then, Mr. Follow-the-Rules.”
Aziraphale set about putting his clothes into his dresser.  Crowley threw himself on the bed, the materials from the Aphelion management open on his screen.  “Ugh, Aziraphale this thing is like a thousand screens long!  It’ll take forever to get through it all.”
“It only took me a few hours, and I was taking notes.”
“Whatever, nerd.”  Crowley rolled over, holding the screen above his face, the light from the ceiling shining through the screen’s translucent, plasticky surface.  The first screen had a picture of the great metal donut herself, accompanied by the words WELCOME ABOARD, SPACE EXPLORERS
He flipped.  The second screen went on and on about the mission statement, to expand the human consciousness into the furthest reaches of the galaxy in the noblest way, etc.  He scrolled past that to the details about the star that served as their destination, Kepler-442 (K type star, nestled in the constellation Lyra), and its planet that would be their new home, Kepler-442b (exoplanet).  The days on Kepler-442b were three weeks long, and with an axial tilt that small, say goodbye to seasons.
“It says it’s going to take us 500 years to get there going at twice the speed of light!” said Crowley. “They expect us to stay on here for 500 years?  Hey, angel, what’s this bit about cryosleep?”
Aziraphale’s face appeared above him, warped by the screen.  “Crowley, if you would actually read it, you’d see that we’re going to live on the Aphelion for about a month as it leaves the solar system, and then once we’re stable at light speed everyone on board is going to go into cryosleep until we reach our destination.  It’s the only way humans could actually live long enough to get to Kepler-442.”
Crowley collapsed his screen. “Hold on, angel.  You’re telling me we’re going to sleep for 500 years?”
“Yes.”
“I get to sleep—”
“Yes, dear.”
“—for 500 years.  And not only is this expected—”
“Yes, Crowley.”
“—but it’s mandatory?”
Aziraphale stared at him for an additional second and then said, “Yes, Crowley.”
“Why didn’t you tell me?” said Crowley, sliding his screen back open.  “This is fantastic!”
“Because I thought you had read it,” Aziraphale said testily.  He dragged Crowley’s suitcase over and began to unpack the demon’s things when it became obvious it wouldn’t get done otherwise.
Crowley noted that the pods for cryosleep would come out of the floor of their cabin, but he failed to find where they would be appearing from.
The Aphelion will be your home for the next 500 years, although you’ll only perceive it to be a few months.  The living spaces are arranged in three circles.  The outermost and largest circle, the first circle, holds wings A, B, and C and is subject to 1.1G’s.  The second circle is slightly smaller and is maintained at exactly the same gravitational force as on Earth, and holds wings D and E.  Guests in wing F in the third and innermost circle can expect to live in 0.9G for their stay.  Each wing has its own greenhouse and set of amenities.  Non-authorized personnel are not allowed to move further than the third circle; the force of gravity decreases with the radius of the ship, and the ship’s engines and robotics are maintained at temperatures below zero. Please note that the Aphelion is a perpetual motion machine; barring the event of catastrophic failure, the vessel always remains in motion and the outer circles should never experience zero-G.  Please rest assured that the AI programs that will control the ship during cryosleep are programmed to put the safety of the human passengers as its paramount goal.
Since most of the processes on the Aphelion are automated, most of its citizens do not need to work full 6-hours days as on Earth; however, depending on your profession, you may be summoned to lend your expertise at various points throughout the journey.  
Crowley had been growing bored, but he snapped back to reality as he read the part about being called to help with the ship.  “Angel.”
“Hm?” said Aziraphale, not looking up from folding laundry.
“It says they might call us to help out depending on what our skillsets are.”
“Well, yes.  I told them I was a shopkeeper, so I had assumed I won’t be doing much until we establish settlements on the planet.”
Crowley bit his lip.
“Crowley?”
“So…do you remember how you asked me to pull some strings to get you in?”
“Yes.  Crowley…what did you do?”
“They wouldn’t take you because of the lame personnel profile you submitted!  I had to make some changes to it to get you on board!”
“Crowley, what did you tell them my profession was?”
“I…may have…told them that you were a robotics engineer.”
“Crowley!” said Aziraphale. “I don’t know anything about robotics! What am I going to do if they call me to help with something?”
“Just lie!” said Crowley. “A few miracles, they’ll never know the difference!”
“I can’t lie!  And I’m going to mess something up!  Bugger, Crowley!  What did you tell them your profession was?”
“Botanist.”
“Of course!  The nice and easy one!  If you get called in all you need to do is prance around in the garden for a while and—”
The vidscreen on the wall suddenly flashed to life, vibrating and showing the microphone icon that indicated a call.  They both jumped with surprise, clutching each other.
They stared at the screen. The microphone vibrated.
“Ah…Hello?” said Crowley.
CROWLEY, said the voice from the screen.
“Bloody hell!” said Crowley, jumping again.
CROWLEY, WE NOTICED YOU DID NOT FOLLOW OUR INSTRUCTIONS TO STAY ON EARTH.
Crowley looked at the vidscreen fearfully.
COME BACK NOW, CROWLEY.  WE HAVE PLANS FOR YOU DOWN HERE.
Crowley’s hands tightened on Aziraphale’s arm.
CROWLEY?
“No,” he said.
WHAT?
“No, I’m not coming back down. There, I said it!”
The microphone icon vibrated ominously.
“I’m a space explorer, on a mission to expand the human consciousness into the furthest reaches of the galaxy in the noblest way, etc., and I’m staying up here!  What are you going to do about it?  Are you going to come up and drag me back down?”
More vibrating, no speaking. A smile began to dawn on Crowley’s face.
“You can’t, can you?”
WHAT?
“You can’t get up here.”
DON’T BE RIDICULOUS.  OF COURSE WE CAN.
“You can’t!  Hah!  You don’t know how!”
CROWLEY, WE HAVE DONE INFERNAL WORK ON MARS BEFORE.
“That was me.  I’m the only demon who’s ever left Earth.  Nobody else knows how to go about it, especially on such short notice.”
The icon vibrated in angry silence, and Crowley knew he had struck on the truth.  He fell onto the bed laughing.
“I’m going to be sent a zillion miles away where you can’t reach me because nobody down there could figure out how to get on the shuttle fast enough.”
IT’S NOT THAT FUNNY, CROWLEY.
“Amazing.  This is amazing.  I know you can’t see me right now, but I’m giving you the finger.”
YOU DARE TALK TO US LIKE THIS?
“It’s two fingers now.  All the way up.”
YOU’LL RECALL WE WERE SENDING ANOTHER AGENT, THOUGH.
Crowley’s smile faded.
WE HAVE PULLED A CHAOS DEMONESS STRAIGHT FROM THE PITS IN THE NINTH CIRCLE.  HER POWER IS SO TERRIFYING THAT SHE HAS BEEN LOCKED AWAY FOR MILLENIA. WE HAVE RELEASED HER ESPECIALLY FOR THIS MISSION.
Crowley began to shake with peals of laughter.
CROWLEY???  HAVE YOU LOST YOUR MIND??
“You sent a demoness who hasn’t set foot on Earth in thousands of years.  And who wouldn’t know jack shite about talking to humans, let alone operating technology.  To be your sole representative.  On a space ship?”
The icon vibrated.  IN RETROSPECT, IT DOES NOT SEEM TO HAVE BEEN THE IDEAL CHOICE.
“Bloody hell!”
BUT WE HAVE REPORTS THAT SHE HAS ALREADY MANAGED TO BOOK A TICKET.
“Oh, has she?  How long did that take her?”
THAT’S NOT IMPORTANT.  SHE’S BETTER THAN YOU IN EVERY WAY, CROWLEY.  REMEMBER THAT.  GOODBYE.
The screen clicked off.
“Oof,” Crowley said, rolling over and throwing a hand over his face.  “Hey, angel, how much time did you say we had before we go into cryosleep?”
“A month from when all the passengers have boarded.”
Crowley heaved a sigh.  “I suppose we need to resolve this situation with the other demon onboard before we go under, then.”
“Why?”
“Put it this way.  We’ll be asleep, and we wouldn’t know if someone was, say, ejecting our pods out the airlock.”
“Point taken.”  Aziraphale turned back to the laundry.  “We can get started on that after you finish reading the materials.”
9 notes · View notes