Tumgik
#how i did this within a week of me doing 37 designs is beyond me
sushivisa · 1 year
Text
Hi have a hex
Tumblr media
12 notes · View notes
anntoldst0ries · 4 years
Text
Lost in Translation
If someone told me a couple of months ago how invested I’d be in OH and the story, I would laugh at them. But here we are, isn’t life full of surprises :) 
Apologies for mistakes, if you notice any please feel free to let me know!
Pairing: Ethan Ramsey x f!MC 
Word Count: 2,358
Summary: What happens when it’s just Dr Ramsey and his thoughts?
Warnings: None, just a tiny bit of angst & fluff. A lot of introspection!
~~~~~~~
After what felt like the longest shift ever, Dr Ethan Ramsey finally entered his apartment. He closed the door, leaving the whirlwind of his professional life outside.
A biscuit golden retriever jumped at him with all the might in his paws and the sore muscles of a 37-year old diagnostician almost gave up under the pressure of furry ball of fluff.
“I’m happy to see you too, buddy. But you need to go easy on me today.”
Jenner just stared at him with those big black eyes, licked his hand and went back to solving the most important problem of the day: how to cadge some real food, the one hooomans eat.
Although he was far from contemplating whether dogs have what resembles an intelligence (it was someone else’s specialty) he couldn’t help but think Jenner knows. This constantly salivating, instinct-driven creature somehow understands what it is that Ethan asked him to do and why.
“Great, Ramsey. You are going crazy, may as well admit yourself to the psychiatric ward right now. Dr Keller will be delighted to see you. And all the predators of Edenbrook will finally have a proper fodder - Ethan freaking Ramsey has officially freaked out.”
Having poured himself a decent glass of scotch, he stood in front of a giant window overlooking the bay. The waters were quiet and calm, a total contrast to the fire burning inside him after taking a long sip. There was something soothing in the almost painful feeling. 10 years ago downing a whole glass of neat scotch was way beyond his repertoire. One of the perks of being over 35, he guessed. It was scientifically proven that man’s tastebuds change drastically after reaching certain age. He had to admit, there was at least a grain of truth in this. The gold liquid was no longer just bitter and harsh; it had texture, flavour, a complexity - something he wasn’t able to appreciate before. As a doctor, he also knew that he’s got 20, maybe 25 years of this experience left - until ruthless time and ageing will blend all tastes into one.
The lights of the night danced around the spacious living room, their gold reflections creating an aura of mystery in a dimly-lit apartment. He looked around and his gaze landed on antique vase, a present Naveen brought him from Greece for his 35th birthday. It complemented tasteful interior design, expensive decorations and custom furniture perfectly.
As beautiful as they were, all these things made him feel nothing. It was almost ironic that this unquestionably beautiful property, paid for with his own blood, sweat and tears, he couldn’t possibly care less about. Right now, he could have been in some shithole in Roxbury, sipping cheap beer and it would make no difference whatsoever. Except, it would have saved him a mini fortune, which he was now spending on this goddamn penthouse in Beacon Hill. A place he never ever spent more than 4 hours at a time in.
He smirked at the thought - that’s exactly what Naveen said about his own lake house before saying goodbye to his mentee last year. Back when he thought he was going to die soon. Was it surprising? No, everyone was expecting that Ethan will one day take Naveen’s place as the best diagnostician in the world. He considered this not so much an honour, but rather a tribute to his biggest idol, his friend, his father figure. If he was to ever repay Dr Banerji for everything he’s done for him, there was only one way - he needed to be the best among the best.
They called him the best diagnostician of his generation. Although he resented the title, this label given to him by the mutual admiration society (that he had zero respect for), he was very much aware that he was exceptional at his job. Ethan never thought of this as bragging, because bragging made people vain. He liked to think of it as self-confidence, which, as it grew stronger, made him work for his patients even harder than he ever thought possible. The people whose lives he saved, they had to have confidence in him. They had to believe that he knows what he’s doing. And how could he instil a sense of confidence in them, had he not had it himself?
“You can’t give what you don’t have.” - the sentence kept echoing in his head. Tobias used to say that to him all the time, he lived by these words. It was probably the only relic of their once unbreakable (or so they stupidly thought) bond and also the only thing relating to Tobias that didn’t make him want to gag.
So Ethan accepted his role as a successor of the greatest diagnostician in the country. Because there was a mission and a responsibility behind this fate. Because there was a sense of safety in predictable realms of medicine. Also, because… it felt like kicking Tobias right in the crotch. Although he’d never admit this to anyone, least of all himself, the unwritten competition they were subject to for the past 17 years, helped him keep a laser focus on the tasks in front of him. And every time he was able to wipe the smile off Mass Kenmore’s ‘star’ handsome face, Ethan felt satisfaction.
Becoming the man he was today required a lot of changes. He got rid of all the needs of usual Everyman. First, he swept his feelings under the carpet of indifference and cynicism. Then, he learned how to live among people, but without delving into deep and ‘meaningful’ relationships. This was his bauble and he was perfectly… content with it. That is, until it hadn’t been smashed to pieces because something happened to him.
Someone happened to him.
Oh fuck.
He made a desperate attempt to try and stop the inevitable, but it was too late.
His head was instantly flooded with images, followed by ubiquitous tingles that filled his body. In his mind’s eye, a face shaped instantly, the image so vivid that he was almost blinded by it. It’s as if the person was standing right in front of him. The feeling was as mesmerising as it was painful.
Damn it. She didn’t even have to be here to do things to him. To make him see things. Smell things. Hear things. Feel things.
Ethan and The Feelings. This band rarely played together. Ethan wasn’t really a team player and The Feelings were loud, untameable and too unpredictable for the likes of him. He had to learn to tolerate them, because wherever she went, they followed.
He couldn’t rid of her presence, no matter where he was or what he did. Not that he wanted to - he just couldn’t, for the love of god, comprehend all this. Having been a king of self-control and master of his own life, it was beyond Ethan’s understanding how this woman, almost a decade younger than him, managed to turn him into… well, Jenner. He’d do anything she’d ask him to do. He was an electric ride-on, the one they buy for children. And she was holding the remote.
No, this wasn’t the most fortunate comparison. Because an electric toy was not capable of feeling things. And he was. A lot. More than he ever thought possible and more than he wanted to.
The fear of being misapprehended stopped him from telling her that sometimes he hated what she was doing to him. Not her, he could never hate her. He hated this unexplainable power she had over him and wasn’t even fully aware of. It frightened him. That she clawed his composure back so easily. That her youth, enthusiasm and energy were like a tornado to the illusionary beach he used to inhabit in his head. The force of her personality wreaked havoc on the well-oiled cogs of the machine that was once his life.
It took all the strength he had to stay away, from the day he first saw her. No, that’s not right. From the first time he felt her. Ethan’s mind was definitely against him today, because the images materialised within seconds, before he even managed to fully accept the presence of the thought.
He was sitting in his office, wondering why the hell has he agreed to help Harper with reading pages of blabber from wannabe surgeons and doctors. They were all the same and if he got a cent for every time they got under his skin, he’d be a millionaire. But Harper was an old friend and his ex, he had a lot of respect for her. She’d just been promoted to the Chief of Medicine and although she was more than capable to do the job, he understood that transition from theatre to bureaucracy was scary and challenging for her. It was the least he could do to help and certainly a task way easier than being a shoulder to cry on.
Having gone through pages of “I wanna change the world and find a cure for cancer” he almost fell asleep on his desk. Not that there was something wrong with medical research or a quest for deeper meaning of one’s career - but what he read in those applications sounded like an extract from a beauty pageant. And, frankly, when he looked at some of the photos attached to applications, he couldn’t help but think beauty pageants were a better fit for some of these people than a hospital.
“Christ, are they giving away medical degrees for free these days?” He sighed loudly, sending another handful of pages onto the pile of would-be Grey’s as he called them, because he was more than certain that majority of these people derived their idea of work in hospital from the TV series Grey’s Anatomy. All Ethan knew was that he’s never seen anything more divorced from reality, having watched one episode after all the nurses kept chirping about Dr Derek Shepherd for a whole week.
Fully prepared for yet another disappointment, he turned the front page of next file. Looking at him was a young, beautiful woman with raven hair. Her gaze was daring and gentle at the same time. Even though it was just a photo, he couldn’t shake the feeling that she looked right through him.
Things only got better as he kept going through the next pages. Her application was a riveting read, it was honest, filled with passion and well written, all without being cliche. He saw the most incredible potential, but more importantly, he felt it. She made him feel things, even though he never met her. It was all just pouring from the pages. Ethan would always remember how excited and nervous it made him feel. He almost suffered from a head-on crash with gurney whilst running to Harper’s office, because he had to make sure that she gets the residency position in the hospital. His own feelings played no role here, she simply deserved this position and he knew Dr Emery won’t even question his judgement.
And then he met her.
To be honest, he completely forgot about the interns’ induction, he’s seen so many in his life already that he couldn’t care less. The new case Diagnostics Team took onboard was occupying him completely on that day.
Looking at it now, he couldn’t help but think of one of his favourite movies, Picnic at Hanging Rock. There was this line that he always felt drawn to, but could never fully understand:
“Everything begins and ends at exactly the right time and place“
He was walking down the long corridor, when he heard Danny, one of the nurses, screaming. A minute later Ethan was on his knees, next to a woman in her 50s. He figured out quite quickly what was happening to her, but if his diagnosis was correct, he was going to need some help. Having lifted his gaze, he looked for a familiar face. But there was no one around. That’s when he remembered about the stupid intern induction.
“Damn it, where are the doctors?!” - he asked out loud.
“I’m a doctor!” - responded an unfamiliar voice. Ethan turned around and saw a young woman with black hair in fresh scrubs. He never saw her before and figured she must be one of the new interns.
“You, Rookie. Come here!” - he literally wouldn’t mind if she was an actress playing a doctor, he needed an extra pair of hands. Right here, right now. She kneeled on the patient’s left side, her sight piercing him, waiting for instructions. That’s when it hit him.
It was her.
The fate didn’t spare her - Ethan knew as well as she did that having to deal with Hemothorax on your first day was a tricky business. But she was brilliant. A little nervous, yes, but brilliant.
All she needed was a push. That’s why he picked her to pieces, leaving her confused and probably upset. She will understand one day and she will be grateful.
He said what he had to say and then he just disappeared behind the corridor. He couldn’t be around her more than necessary. Because she made him feel. And this was the last thing he needed right now. Or ever.
What the hell?
Dr Ramsey shook his head and woke up from his daydream. He felt his loyal furry companion licking his hand with a pleading gaze. Suddenly, the weight of the thoughts crushed him like a tidal wave, the feeling so intense that his legs instantly turned into Jell-O, forcing him to sit down. That’s exactly what he was afraid of. The moment he’s had a minute, he immediately gave into thoughts. That’s what she was doing to him. Every part of him wanted to take an extra shift, but common sense and medical knowledge prevailed. He needed 8 hours of uninterrupted sleep, otherwise his body would give up soon, making him no use to anyone, especially not all the patients who desperately needed him.
But he was a fool to assume this was going to happen.
~~~~~~~~~~~~~~~
Tag list (please let me know if you wish to be removed, I tagged the accounts I follow and truly admire!): @terrm9 @openheart12 @openheartthot @rookie-ramsey @alwaysmychoices @brooks-eden @drethanramslay @starrystarrytrouble @justanotherrookie @caseyvalentineramsey @incorrectopenheart @heauxplesslydevoted @perriewinklenerdie
58 notes · View notes
Text
Lost and Found (Seven)
Soooo this Chapter only did like, one of the things it was supposed to and everything else just sort of happened and I got tired of arguing with it to make it behave so here, have a Chapter Seven that is only slightly like the one I outlined. 
I made myself cry with this first part, so Tissue Warning! 
MASTERLIST HERE
****************
37% 
“JARVIS?” 
“The constant tests you’ve been running with the new suit have taken a toll, sir. My original algorithm assumed you would be resting more days than not, as one should when faced with the possibly of an upcoming expiration date but with your continued activity, my projections have been rendered obsolete.”
“Okay.” Tony squeezed at the blood toxicity monitor until the casing edges cut into his palm. “Newest estimations?” 
“Given your rate of use with the reactor and the new, more powerful prototype, my previous count of three months with minimal usage will need to be dialed back to little more than eight weeks, sir.” 
“Okay.” He said again, almost neutrally as if he wasn’t discussing an expiration date with his AI. “Okay, little more than eight weeks. So all the tests I ran in the War Machine prototype over the last few days cost me what, seven days?” 
“Eleven days, actually.” 
“Okay.” Tony said a third time, mostly because he didn’t know what else to say. “That's-- thanks, J.” 
The tests were necessary, they really were. Coding Rhodey’s suit ahead of time was important because Tony was running out of time. The Senate was definitely going to order him to turn over the tech, and even if they didn’t, the suits would definitely be confiscated by the Department of Defense at some point whether Tony was around or not. The least he could do was make sure armor could only be used by one man, that the technology inside was coded to the one person Tony knew wouldn’t make a mockery or a weapon out of what was supposed to be a shield. 
Right after Obadiah, Rhodey had been so purposefully casually about eyeballing the still unfinished silver suit and commenting, “You should come up with a name for your tech, Tony. Calling it ‘the suit’ doesn’t seem like enough. I’d call it...War Machine or something.” 
War Machine and Tony had etched the name in tiny letters along the jawline of the helmet so when Rhodey suited up for the first time, he’d hopefully remember that throw away comment and laugh a little bit. 
War Machine and it was fine tuned to the point of near impossible maneuvers, filled to the brim with every prototype weapon Tony had designed for his own suit and a few more that were meant for something a little more hulking, a little more heavy duty. An individual arc reactor placed within the molded chest would power the suit for ever with the added benefit of not poisoning the wearer and--
--and Tony’s hands shook when he unscrewed the cap on a green smoothie. 
37%. 
“How is the uh--” the first drink was always brutal, and Tony had to put his head down and suck in a deep breath to get over the taste. “--how is the suitcase suit coming? We need a better name for that, don’t we?” 
“Perhaps we can call it a football, sir.” 
“Right.” Tony nodded a few times. “Carry it in a briefcase just like all the nuke launch codes. That will definitely reinforce the Senate’s thought of my suit being a weapon of mass destruction. Great idea.” 
“Your mockery wounds me.” 
“No, I was serious.” Tony laughed up at the petulant AI. “We’ll call it a football. Make Happy practice playing catch with it. Uhhhh okay. Football. How is it coming?” 
“Nearly completed.” 
“Good. I need an option beyond hauling the full suit everywhere, and so will Rhodey. Have we started construction on the individual gauntlets yet? I’m thinking something that comes out of my watch.” 
“It will have to be near nano technology to accomplish that, but we can try.” 
“Let’s try. I’d like the football ready before Monaco, I need to take it for a test drive somewhere outside of Dum-E’s fire extinguisher range.” Tony glanced over at the impressive dent in the lab ceiling that had been one of his very first test runs. “Also some place where if the repulsors come online too soon, I can hit the atmosphere and not the ceiling.” 
“Of course sir. Hurtling off into unknown and uncharted space would always be the preferred option before bouncing off support beams and landing on priceless car collections.” 
“You know me too well, J.” Tony leaned back in the chair and blew out a deep breath. “Show me the night sky. Stars above Manhattan, maybe. What I’d be looking at if I actually had the time to build that tower.” 
“Does this mean you’ve decided to scrap the plans for Stark Tower?” The space above Tony’s head lit holographic blue then settled into a starry night, the correct constellations and moon placement for the Manhattan sky projected against the ceiling. 
“I won’t have a chance to even get the blueprints approved.” Tony stared up at the stars, sipping idly from his smoothie. “No sense doing that when I won’t be around to see the ground breaking ceremony.” 
“Sir, if I may--” 
“Maybe blasting off into the atmosphere wouldn’t be such a bad way to go.” Tony interrupted. “I’ve always wanted to see space, maybe I’ll get lucky and the new suit will tear a hole in the sky and show me what’s beyond, what’s waiting out there.” 
And softer, “It’d be a good way to go, don’t you think? Space?” 
The artificial star light reflected off the tears gathering in Tony’s eyes and he tried to blink them away. “Would be nice to skip the poisoning and the hospice care and the heart failure and everyone crying, you know. Higher, faster, further like our friend Carol used to say. She did it, she just went right up there into the sky higher, faster further and she never came back down again. Fuckin’ wild.” 
Another sip. “My repulsors are better than the prototype light speed engine was, a little bit of torque and we could break the sound barrier ten times over and then some. I could take the suit up until the thrusters give out and then we could just float up there in the stars. Fall asleep and drift away.” 
JARVIS was quiet and Tony put a heart to his chest as it squeezed around a too choppy breath. “Would be nice to just fall asleep, J. It’d be nice to finally get some rest.” 
The stars above Manhattan moved too slowly to notice, but Tony sat and watched them anyway, alone in the semi dark lab for close to an hour before his watch pinged that it was time to get on the plane towards New York. 
“Save this for me.” Tony reached out and touched one of the tiny specks of lights, his fingers passing through the hologram. “Save it so I can look at it again, okay?” 
“Of course, sir.” 
“Thank you.” Tony gathered up a few things for his pockets then ran a hand through his hair and grimaced. If he was going to go on what was sort of a first date with an amnesiac former soldier, he should probably wash some of the depression off first. “I’m off to the Expo, J. Wish me luck.” 
“Good luck.” JARVIS said automatically, and then, “Please come home again, sir. I wish you all the rest in the world, but I’d rather it be here than drifting off in the stars.” 
Tony’s smile up at the ceiling was wobbly and a little sad. 
“Good night, J.” 
**************
**************
The Stark jet cut the nearly five hour flight from Malibu to New York down to little more than two hours, and Tony spent most of it sitting next to Pepper going through notes for his speech, additional paperwork for the company and what looked like several minutes of nothing but Tony teasing the formidable redhead and Pepper giving it all right back and then some if Tony’s faux wounded expressions were anything to go by. 
They were laughing and a few times Tony reached to hold Pepper’s hand, winding their fingers together and kissing her knuckles while Pepper just rolled her eyes at whatever he said. They were clearly best friends, clearly in sync after what James had found out was over a decade of working together and it was honestly remarkable to see.
More than once Tony finished Pepper's sentences, at least twice she took a bite of her food and then handed him the fork to take a bite of his own. Tony reached to touch the reactor beneath his shirt and Pepper brushed his hands away, she fiddled with the top button of her suit and Tony suggested showing more cleavage if she didn't like being so buttoned up and Pepper only sighed.
A very very quiet part of the soldier felt a twinge of jealousy whenever Pepper would get a full laugh out of Tony, but he pushed it away every time. Jealousy over such a close friendship was ridiculous and unnecessary and the sort of thing that made James's throat taste bitter. He didn't remember past relationships, didn't know if he'd ever been in love but he remembered being jealous when other people could be open with their love and their desires and he had to hide.
Why he had hid, James wasn't really sure. But he remembered the jealousy twisting his stomach and the unfairness of it all making his chest too tight and he didn't want to feel that way ever when he looked at Tony and Pepper.
So James pushed it away and looked out the window instead, watched the clouds race by beneath the jet as it tore through the sky towards New York and when Tony finally finished up with Pepper and came to sit in the chair across from him, James looked up with a ready smile.
“Hey. All done working?”
“At least for right now. Plane rides are supposed to be relaxing, not about crunching numbers or ignoring the person I'm set to spend the evening with.” Tony stretched out in the chair and loosened his tie as he looked James over, lingering over the stretch of the red sweater over James's frankly ridiculous shoulders. Wow. “You--” seriously, wow. “-- you look great.”
“Duds this nice will make any fella look great.” James's heart flip flopped a little when Tony kept looking, and he touched at his empty left sleeve self consciously. “Sure was nice of the store people to send over one of those fancy pins for this side. I just cut the sleeves off all my other shirts.”
“You'll be two thumbs up in no time, so please don't hack at your new clothes.” Tony nudged his foot against James. “You'll need both sleeves eventually.”
James grinned and slid his foot further alongside Tony's shoe. “Sure thing, Tony.”
“You know,” Tony cocked his head and tried to pretend like playing footsy wasn't making him blush. He was over forty years old, damn it. “When you're relaxed you sound like you're from New York but like, New York from the movies. Saturday Night Fever, Bronx Tale, West Side Story. That style.”
“Oh yeah?” James raised his eyebrows. “What does that mean?”
“It means--” Tony started to say something about smooth accents and flirty one-liners, about pretty boys with greasy hair and leather jackets and slick dance moves, but changed his mind because it was a little embarrassing to admit his short lived musical obsession had basically shaped his wet dreams for a good five years. 
“It means you sort of sound old fashioned. Not in uh-- not in a bad way. My Auntie Peggy was around in the forties and whenever she tells war stories she copies how the boys talked back then and you remind me of it a little bit.”
James still looked confused and Tony waved him off with a self conscious laugh. “Never mind. It doesn't matter. Ignore all that and focus on not cutting up your sweater, yeah? I like the red on you.”
“That's why I picked it out.” James answered honestly, and Tony's dark eyes sparked in interest. “Knew you liked the red and figured if you were gonna dress up, maybe I should dress up a little too?”
“I don't know if I'm necessarily dressed up.” Tony picked at the hem of his suit jacket. “The monkey suit is standard outfit for CEO's of multi billion dollar--”
“Former CEO, darling!” Pepper called and Tony grinned, “ --former CEO's of multi billion dollar companies. I wouldn't be wearing this at all if I thought Pep would let me wear my sneakers and ACDC shirt. Only upside of this thing is that I can spill cotton candy on my shirt all day and then button the jacket and no one would know any better.”
“Cotton candy?” Oh James remembered that, he knew he did. Overly sweet and pastel colored, sugar-grit teeth and sticky fingers. Eating a big piece of it and then passing some over to St—to St--
--migraine. Instant and blinding--
--passing it over to someone who would get sick after eating only a few bites, so James would toss it in the trash and pretend to have a stomach ache too so they wouldn't feel bad.
Shit his head hurt, but James got a glimpse of dark blue eyes and a stubborn smile before the memory faded away to nothing, and when he opened his eyes again Tony was watching him closely.
“Where'd you go?” Tony asked quietly, and James whispered just as quietly, “I don't... don't really know. You said cotton candy and I got a flash of something... I dunno.”
“Things are coming back to you?”
“I'm not sure.” James leaned forward in the seat and pushed his hand into his hair, groaning under his breath as the migraine throbbed at his temples. “Just bits and pieces is all.”
“Makes sense.” Tony reached to touch James's shoulder but stopped himself at the last second. “I mean, you getting flashes of memories right now. I'm not exactly stable but this is probably the most stable you've been in a while?”
“At least a year.”
“Right.” Again, Tony reached out to try and touch and comfort, and again he let his hand drop away. James hadn't wanted to be touched right away the last time he'd had a hard time, he probably didn't want it now. “Repressed memories have a nasty habit of showing up right when we think we're moving on, life gets low stress and suddenly our dreams get stressful. It happens.”
“Yeah? You real familiar with it?” James tried to slow his breathing down, purposefully inhaling and then forcefully exhaling until the extra oxygen erased the sparks behind his eyes. “Why's that?”
“I'm the king of repressing--”
“Christ, my head hurts. Tony, will you c'mere and sit by me?”
“--memories.” Tony waved at one of the stewardesses and tapped at his own temple so she would bring him some headache medication, then slid out of his own seat and into the one next to James, rotating so their knees touched. “Better?”
“Thank you.” James's fingers tightened in his hair. “Why are you the king of repressing memories?”
“A whole list of reasons that would only make your headache worse.” Tony hesitated, hesitated, hesitated, then finally tried to untangle James's fingers, loosening the digits one by one until James relented and relaxed, clasping Tony's hand warm in his own. “...better?”
“Thank you.” James said again, instantly feeling better now that he was holding tight to Tony instead of pulling at his own hair, the migraine easing as he quit chasing the thought about cotton candy and forced himself back to the moment. “Sorry. Trying to force the memories--”
“--gives you a headache.” Tony finished and James smiled the tiniest bit cos Tony was completing his sentences just like Pepper did. “Yeah been there, done that.”
“Don't wanna ruin tonight by having a headache.” James muttered apologetically. “Sorry, Tony.”
“Tonight hasn't even started.” Tony waved the apology off, squeezed at James's hand and then let go. “Don't worry about it. We'll both have headaches by the time we get through the noise and crowds at the Expo, it's fine.”
“Okay.” James sort of hated that Tony had let go of his hand, but he didn't comment, only smoothed his hair back where it'd come free from the messy bun and cleared his throat. “How far out are we?”
“About an hour.” Tony didn't go back to his own chair, and James nudged at his knee gratefully. “How much news do you watch, James?”
“Um.” James blinked, thrown by the abrupt topic change. “None?”
“None.” Tony repeated. “At all?”
“Don't watch TV unless you're making me watch some god-awful movie.” James admitted and Tony's smile flashed quick and pleased. “Why?”
“I've been on the news a lot lately.” Tony hedged. “Just uh-- just curious if you'd seen anything I needed to explain or apologize for maybe?”
“Apologize?”
“Like if you learned about my weird sunglasses collection or that I eat everything with a three tined fork instead of a four tined like a normal person.” Tony suggested, and James's shoulders shook with quiet laughter. “The press knows a lot about me and you don't really know much about me so...”
He let the sentence trail off, watching closely for anything like recognition on James's face. The downside of a migraine of course, was that it hurt to even breathe. The upside of a migraine was that it was impossible to hide even the smallest reactions when your head felt like it might explode and Tony didn't really want to use it as a way to get a glimpse at James's thoughts, but he did it anyway because he wanted to know.
Truth be told, Tony was starting to wonder just how long he could keep Iron Man quiet from James before it slid from 'need to know basis' towards 'you were lying to me' accusations. If James hadn't figured out that Tony was the same Tony Stark that was also Iron Man, Tony didn't really want to say anything. But if James had figured it out and was just staying quiet for privacy's sake... well Tony didn't want to let it go too long just in case the soldier started to think Tony was leaving him out of things.
So Tony asked again, “Heard anything about me lately?”
“Everything I want to know about you I learn when we're together like this.” James answered, and with a smile that had no business being both shy and almost unbearably hopeful, “And I like all of it so far.”
Tony flushed a surprised pink, and up near the front of the plane, Pepper just rolled her eyes when she caught it.
Idiot boys practically in love.
Sheesh.
***************
***************
“I've had a lot of people ask me where the dancers are this time around.” Tony stood up on stage in front of the thousands of people who had come to the Expo tonight, alone except for the old fashioned microphone he held in one hand. “I know, I know, you were hoping for more explosions, more fireworks, definitely some more bikinis and high kicks, right?”
The crowd tittered in agreement and Tony's mouth ticked up in a quick smile. “Yeah, we all love that, we all love science when it’s accompanied by pretty girls and loud music. Here's the thing about science though. Science isn't always big leap forward in technology, it's not always flashy designs and world changing breakthroughs and Nobel prizes. Most of the time science is quiet.”
Appropriately, Tony paused for a breath and the audience held theirs in anticipation.
“Most of the time science is still.” he said even softer, and the crowd edged forward with wide eyes, sure that this was all just build up to something incredible. “Most of the time science is one little adjustment that somehow changes life as we know it and maybe not even as we know it, but changes life as one person knows it and sometimes, that's enough.”
Tony held up the microphone and the cameras zoomed in on it. “This is the same microphone my Dad used at the World's Fair Expo back in World War II. Well--” another one of those quick smiles. “--it's not exactly the same microphone, but it's an exact working replica with exactly the sort of tech upgrades you would expect from Stark Industries. Why does that matter, though? Why do any of you care about me getting weirdly sentimental about a copy of a microphone my Dad once spit all over?”
The audience laughed again and Tony swallowed past the lump in his throat. “It matters because it's only in looking to the past that we find answers for our future. What were once ground breaking theories are today the building blocks our of standard operations. All the pieces that make up my next generation Stark phone started out in something as simple as this mic right here.”
Tony held up the microphone again. “Seventy years ago, my dad stood on a stage just like this one and bragged about a flying car that only got a few inches off the ground. What he considered a spectacular failure was actually the inspiration for my Stark repulsor engines that will revolutionize the fuel industry and put an end to oil spills and dumps in the most fragile parts of our eco systems.”
“The past teaches us how to move forward, what steps to avoid and which leaps to take and we can't forget that. That's why I re-started the Expo-- learning from looking back before we move forward and that's what science is about.”
A smattering of applause and Tony waited until it died down. “Science isn't always flashy.” He said again. “Most of the time it's quiet. But even the quiet discoveries matter, whether they become something that changes the world later on, or never do anything more significant than what this microphone does right here--”
Tony paused, smiled, “--connects us to people we love.”
The lights dimmed and Tony set the modified microphone down on the stage, pressed a few buttons and stepped away as it split into pieces and assembled itself into something of a tripod. The microphone-turned-robot rotated its speaker to face the audience, a separate projector unhinged from the back and--
--”Hey Ma.” A young soldier clearly somewhere sandy, waving at the audience from the holographic screen the microphone had projected above the crowd. “I hope you're having a good time out there tonight, I love you and I miss you and I'll be home soon.”
“This message is for my brother!” Another soldier head to toe in combat gear, grinning into the camera. “Mr. Stark said he'd get you a ticket to the Expo tonight so I hope you showed up! This message is coming to you from way the fuck over in Sand Dune Country and I love you, but I'm glad you're home safe with my new niece-y instead of slogging through this mess with me. Be home soon!”
The messages kept rolling, and one by one different people in the audience burst into tear and cheers as they saw their deployed loved one up on the screen for a surprise message. It had taken months to coordinate-- sending out Stark phones to the soldiers to submit a video, getting tickets to their family and making sure they had a ride to the Expo and a place to stay-- months to coordinate, and Tony stood back behind the curtain of the stage and listened to them play as he looked down at the picture of him and the soldier in the convoy in Afghanistan.
Despite Tony's only half serious warning to the soldier back then, the picture had been promptly posted on social media and now Tony was grateful for it. Three minutes after the picture had been taken the convoy had been attacked and all those young people-- all those kids had been lost.
“Hey Mom, Dad. Sorry I missed your anniversary but I'll be back for Christmas and will make it up in hugs then!”
Tony closed his phone and cleared his throat as the audience burst into shouts when a local boy from Flushing popped up on the screen with his message. Speech was done, crowd was appropriately wowed and now he had a sort of date with James to get back to.
It wasn’t the time to get maudlin and teary, not tonight.
“Tony.” Pepper looked immensely proud, and Tony tore his eyes away from the almost blinding smile on James's face to accept a kiss from her. “Well done. I really thought you were going to bring out the dancers again, and I'm so glad you didn't.”
“It pains me to admit that no science has been accomplished when booty shorts and high heels were in the general vicinity.” Tony said faux seriously. “The dancers were a necessary sacrifice for the moment.”
“Well I appreciate it.” Pepper chuckled and kissed him one more time. “I have to network since apparently everyone wants to talk to the new CEO--”
“--and I have cotton candy to buy and experiment booths to check out.” Tony finished, cutting Pepper off before she could suggest he go along with her. “Toodle-oo and all that. Have fun.”
The moment Pepper disappeared into the crowd, Tony turned back to James, hands in his pockets and rocking back on his heels as he asked, “So. How did I do? Can I color you impressed?”
“You can color me whatever you want, Tony.” James grinned and Tony barked a surprised laugh at the blatant flirting. “Was a good speech, but I think it’s the first time I’ve ever heard you really talk about your dad. Were you and him close?”
“Not even a little bit.” Tony shook his head, then motioned for James to follow him to the outer paths of the Expo so they could walk the perimeter where it was a little quieter. “He was always busy working and I was always busy being as obnoxious as possible. He and Ma were gone before I was old enough to realize what I was missing out on so--” Tony shrugged like the memory of that last night with his parents still didn't hurt like a knife in his heart. “--anyway. This whole Expo was his idea, he brought it back in the seventies, always wanted to do it again so I thought now was as good a time as any.”
“Huh.” James looked down at where their hands were nearly touching as they walked, wondering if he could just grab Tony's hand and hold it for a little bit, wondering if that was okay outside of either of them having a panic attack.“You said something about a flying car?”
“Back in the forties, my Dad wanted to show off this flying car idea, so he brought it to the Worlds Fair.” Tony flashed a peace sign at a girl when she squealed and pointed at him in excitement. “Howard's always considered it his great embarrassment, to have created something that failed in the public eye but you know-- it's been seventy something years and we still haven't gotten any closer to flying cars? Even his failure was a good century ahead of it's time.”
“Your Dad's name was Howard? Howard Stark?” That sounded familiar in some empty aching way, but James forgot about it when he stopped in front of what looked like an old timey war advertisement for the draft, pictures in black and white of soldiers marching off in neat lines. It made his head hurt the same way memories always did and he blinked at the display a few times. “What's this?”
“Traditionally the World's Fair and Expo were events to drum up that All American spirit.” Tony tapped the vintage posters and mocked one of the old radio voices, “Look at how great our country is doing with these advancements! Look how much money we have to put this show on! Don't you feel patriotic? Don't wait for the draft, real American men sign up willingly for their country!”
“People could sign up for the army right here at the fair.” Ouch that drummed at the back of James's mind, and when he caught a flash of shaggy blonde hair out of the corner of his eye, the drumming got worse. “They did that?”
“All the time.” Tony scoffed like he couldn't believe it. “Just boys too, kids really. Came for the party, left for the cause. Mind boggling. We don't do that here, no way. I'd never ask people to show up for cotton candy and then hope they join the war effort, that's nuts. But they did back in the day and the boys that went off to war-- “
He sighed out loud. “Well you know. They don't always come back whole. So this is a nice reference to days gone by, little bit of nostalgia, a way to remember them I guess. Besides, America's greatest hero signed up for the war effort at one of these things, it would be a shame to just ignore it I think.”
“Huh.” James didn't want another headache like the one he'd had on the plane so he stepped away from the Army display and towards a cotton candy vendor. “Time for sweets?”
“Oh, it is always time for sweets.”
*******************
*******************
It was easy to get lost in the Expo, easy and more fun than either man had had in ages wandering from booth to booth and taking the circular paths between the connected sections to sample all the different foods, resting on the grass and beneath the planted trees when their feet got tired, browsing through the vendors shops and trying their hand at any scientific demonstration that took volunteers.
James was fascinated by everything from the wireless electronics to the slime that exploded all over them when he added too much of whatever was in the purple beaker. The soldier laughed until he nearly choked seeing Tony with neon green slime in his perfectly combed hair, and was still laughing when Tony dragged him to a demonstration that had a ball and a fancy light and zapped James with enough electricity to make his scruff stand right up on his chin.
“I love roller coasters!” James announced at one point because somehow he knew that was true but Tony begged off the ride with a hand over his arc reactor an apologetic smile so instead they climbed into one of the rowboats at the man made lake and rowed across it to see all the different water experiments-- artificial plant life that would help sustain life in otherwise barren bodies of water, hybrid fish that grew bigger than their predecessors but took less time to mature for a faster food source, personal purification processes that only needed a mild current to activate the device and provide clean drinking water.
After the lake was a sphere that simulated life on a distant planet and James took one look at it and shook his head, digging his feet in figuratively and literally as Tony tugged at his arm and pleaded, “Don't you want to know what it would be like to live on Mars!?” and retorting, “Tony, m'still trying to figure out Earth!”
A display that required goggles and gloves as scientists replicated the creation of new elements, some that synthesized with nothing more than a quiet hiss, some that exploded loud enough to make James grab Tony and turn around, trying to shield the smaller brunette with his body. Tony laughed at him then, laughed and then checked that James was okay and not triggered by it, laughed and then blushed a little when James's arm lingered at his waist just a second longer than necessary.
“Elements are the building blocks of the universe.” James read on a sign after reluctantly letting Tony go. “So this is what everything is made of.”
“Everything.” Tony confirmed.
“So how do they make new ones?”
“Apparently with a bang.” Tony said wryly and James grinned sheepishly. 
“Have you made one in that fancy lab?”
“I've never even tried.” Tony admitted after a minute of thought. “I sort of remember Dad talking about making a new one ages ago, he had designs and diagrams for it but I must have only been eight or nine, I barely remember it. I bet his notes are around somewhere in all the boxes Pepper won't let me throw away.”
“Why haven't you tried?” James looked back at the display when another element went bang! and someone else screamed. “Bet you're smart enough to do it.”
“I'm smart enough.” Tony agreed, wrinkling his nose into a smile when James huffed at him teasingly. “But I've been busy, got all these other projects going on and all of them seem more important than creating new building blocks for the universe. That's like designing a new Lego. It's great and all, but who cares? There’s enough of them out there, why do we need another?” 
“Lego.” James repeated. “What--”
“I've got millions of them in storage at Malibu, we'll pull them out one day and I'll show you why I hold the MIT record for fastest recorded time building an entire Death Star model.”
“Half those words don't mean anything to me, Tony.” James admitted, tone just a little clipped in frustration. “Sorry.”
“You don't have to apologize for what you're missing.” Tony waved him off and James pointed out, “Happy said that exact same thing to me.”
“He's said the exact same thing to me many times.” They passed a knife display, and Tony pointed one out to James that was somehow even fancier than the one in the store had been. “Except when I black out drunk, then he yells at me for what I miss. He's right to do it, too. How about that knife? You like that one?” 
“Too pretty to kill someone with.” James said bluntly, and when Tony's jaw dropped open in shock, he apologized, “Ah hell, sorry. Dunno why I said that.”
“Christ you're intense.” Tony only laughed though, and pushed James on from the display. “Maybe we don't say things like that in the middle of a crowd. Maybe we just get some more cotton candy.”
“Probably a good idea.” James felt foolish for blurting out the killing thing, foolish and embarrassed as hell but it was so easy to speak his thoughts around Tony, that one had just... slipped out. 
Usually James thought about what he wanted to say, turned it over in his mind until he felt like it sounded normal, weighed his words and modulated his tone and then spoke, but he didn't have to do that with Tony. He didn't even have to pretend to be okay around Tony, he could just be James and all the broken pieces and panic attacks and saying the wrong thing at the wrong time and then maybe sometimes saying the wrong thing at the right time cos Tony would smile up at him sort of like he was doing right now--
--oh shit, he hadn't been listening.
“Lost you for a minute.” Tony never said it like he was judging James, only ever like he knew what it was like to get lost in his head and maybe be a little afraid of never finding his way out again. “Where'd you go?”
“Was thinkin' bout ya.” The words slipped out soft and a little lyrical, the voice in James's head that Tony said sounded Brooklyn speaking up enough to be smooth and charming. “How it's um-- how it's so easy to be with you.”
“Yeah, I'm a real catch.” Tony sassed immediately, but his smile was just for James when he continued, “You're easy to be around too. Not what I expected when I invaded your booth at the diner for the sake of awkward conversation and what definitely sounded like a proposition.”
“Were you propositionin' me, sugar?” James asked, low and coaxing and surprising because he hadn't meant to call Tony sugar, hadn't meant to turn the conversation this way but now Tony was staring up at him with stars in his eyes and sort of leaning forward and hell, James didn't remember much of anything at all but he knew what this moment meant so he leaned forward too and--
“Oh Jesus, not right here.” Tony jerked back a step, both hands up and expression going guarded even as he tried to laugh the moment off. “No, um-- no. That's not--”
Shit. “Shit, sorry.” James backed up too, face flaming and heart clenching in his chest. “Sorry, Tony I just thought-- I mean you were lookin' at me like that and I thought you wanted--”
“No, you don't have to say sorry, that's not your fault, I should have--” Tony looked like he was sort of panicking, a hand at his chest and another held up so James wouldn't get closer. “Damn it. This-- this just got really awkward.”
“Tony, I'm sorry.”
“Nope. My fault for making you think--” Tony's throat jerked as he swallowed.  Hello insecurities from twenty fives years in the closet. “-- it's fine, James. It's fine. Let's just keep walking. There's still a lot to see and I want you to see it all so let's just--” another hard swallow. “Let's just keep walking.”
“Um. Sure.” James fell back into step next to Tony, and after a minute the brunette started talking again, chattering about whatever they were passing, telling a story about something he and Rhodey did one time or another, and after another few minutes James relaxed enough to even laugh a little at the stories.
But the moment from before was gone, the easy smiles and the quick laughter, the way their hands had brushed once, twice, three times as they wandered the paths.
That moment was gone and James felt it's absence like a slap in the face.
He really couldn't trust his mind could he? Not even in this, not even when he was one hundred percent sure Tony had wanted a kiss.
Couldn't trust his mind even with things that should come natural, cos findin’ a fella and wanting to kiss him-- that should come real natural right?
....Right?
Christ, he was broken.
****************
****************
“Ms. Potts, you asked me to find as much information as possible on James?” Natalie found Pepper out on the balcony of the hotel room, overlooking the lights of the Expo in the adjoining field. “I'm afraid I wasn't able to find much.”
“Alright then.” Pepper was halfway through her first drink of the night, weary lines creased at the corner of her eyes. “Tell me what you found anyway.”
“The diner where Mr. Stark and James met was apparently an every day spot for James.” Natalie rattled off the information she'd learned in short, quick sentences. “Waitresses say he was polite but quiet. He glared at anyone who messed with them so they always let him stay longer than anyone else. They identified the shelter down the block as one where James slept, I spoke to the church folk who run the shelter and they said he was quiet and polite as well. Has no or little memories of anything past a year ago, has never showed any signs of violence or even a temper and they have no idea what happened to his arm beyond knowing he used to be a soldier.”
“Okay well.” Pepper pursed her lips and blew out a breath. “Anyone that would keep waitresses from being harassed and could survive a year in a shelter without losing their temper couldn't be all that bad. Why do you look so worried about him?”
“Not worried.” Natalie smoothed the anxious from her expression. The news about James was so opposite of who she knew 'James' was that it was giving her a headache, but she ignored it to smile at her employer. “Not worried at all, Ms. Potts. Simply wondering if we should add James to the insurance plan if he's going to spend time with Mr. Stark in the lab or even traveling with us.”
“Of course, that's an excellent idea, see that it gets done.”
“Yes, Ms. Potts. Will there be anything else?”
“Have you booked our flights to Monaco?” Pepper poured herself a second drink and picked up her phone to scroll through the dozens of congratulatory emails still rolling in from various shareholders and board members. “Add a seat for James, I think he will most likely be going along with Tony anywhere at this point.”
“Do you think...” Natalie hesitated. “Are they involved?”
“Would that offend you in any way, Natalie?” Pepper arched a graceful eyebrow towards her new assistant. “Because if so, you are welcome to tell me why and then to pack your things and leave immediately because I won't tolerate--”
“Ms. Potts.” Natalie held her hand up and shook her head. “I was simply wondering for reasons of hotel rooms. I am the last person to have any sort of issue with whether or not Mr. Stark prefers his dates as blessed as I am--” a pat at her chest and Pepper snorted a laugh. “--or as blessed as James is.”
Pepper laughed even harder, “Well then, by all means book us four rooms. Two adjoining for you and I, two adjoining for Tony and James. I'm not sure if they will share or not and to be honest, I'd rather not know. I like to think as CEO my days of knowing the status of Tony's bed partners are behind me.”
“Of course, Ms. Potts.” Natalie smiled. “Enjoy the rest of your evening.”
“'You too Natalie, thank you.”
Pepper went back to sipping at her drink and idly reading emails and when the exhaustion of the day finally caught up to her, she turned in for the night. Her calendar was so full these days and she was so tired and oh Lord, the sun would be up in just a few hours and she’d have to start another day all over again...
... ...
... ...
...On the other side of the world the sun was coming up, brilliant and beautiful over the skyline of Monaco and at the international airport, it was time for a shift change as the night workers called their goodbyes and switched spots with the early morning crew.  
The young man at the counter had only barely clocked in when the doors opened and a line of international passengers flooded the terminals. Checking passports was easy enough so long as the passengers had their papers in order, and he went through two dozen entries before any one passport caught his eye and tripped the computer's marker.
“Oh, this should just take a second to double check, sorry about that Mr.--” he paused when he saw the myriad of tattoos on the man, the bedraggled black and white hair, gold teeth glinting back at him. “Uh, is it Vanko? What um-- what brings you to Monaco?”
“I'm working at the Grand Prix.” came the gravelly answer, a smile that was somehow savage stretching the man's lips. “Hoping to catch up with an old friend.”
“Oh.” the computer okay'ed the passport, so the attendant handed it back quickly. “Well um-- welcome to Monaco. I hope you enjoy your stay.”
“I plan to.”
*****************
SAY SOMETHING ABOUT THE CHAPTER!
*****************
@quietgayguy @bluedreamdino @akimi-youngblood @blackstar1602 @dixiehellcat @travellover1245 @capnstarkey @the-awkward-teenaged-one @thanossucks @peteryoulittleshit @tony-and-steeeb @striving-artist @roe-sesandthorns @coolsidedpillow @i-am-worth-it-25 @firelightmystic @maligatorthealigator @simsccsol @a-tardis-in-221b @happyendingrequired @everygoodoneistaken11 @pootie-and-the-snoots @megahuffledor @xkissmeimirishx @crystalskrull @hazelbeatsturtle @wecollectnightmares @endrega23 @saganarojanaolt @the-crazy-house @ravynfyre @yomama-umbridge @lovely--tony @gayspacesprinkles @elliotkaingrey @warmachinesocks @glitternotgold73
@ships-galore @ceealaina @izziebladez @cwar1864 @hausoffro @tonystarkisanangel @multishippinglife @girlnic @iam93percentstardust @paranormalmoonlight5 @igotloki @moosette05 @wayward-student-philosopher @kaz-brekkers-gloves @atomicfandombomb @1fuckingshitup69 @agentlokii @livewire28 @tulipsnbigcats @kimstark @alex-stark-rogers @bibbarnes @heeeyitskay @goindownshipping @justaniche 
101 notes · View notes
moreorgans · 6 years
Text
Surgery
“I see you’ve got a some scars here”, the doctor said, gesturing to two faint, thin lines that ran down both sides of the patient’s neck. “What’s that about?”
We had barely walked into the room before the question came. The attending had introduced himself and the chief resident and then immediately gotten down to his usual business of seeing barely-there lumps under t-shirts and awkward folds of skin for what they were – indirect hernias and 24 year old tracheotomy scars. His ability to see on the human body what seems to me so subtle has consistently astounded me. His inability to acknowledge my presence in any room, including to the patients who eye me quizzically from their exam tables, also astounds me.
“Oh, I had some surgeries on my neck, that’s all.”
He was looking into his lap while he fielded the surgeon’s casual inquiry and it was immediately clear to me that he didn’t want to talk about those scars or what had necessitated them. When he finally glanced back up at the doctor under the brim of his “Make America Great Again” hat and realized that more information was expected of him than that, he added “I was stabbed in the neck a long time ago. It doesn’t matter anymore.”
My attending, of course, disagreed. I’ve learned many things since starting my general surgery rotation 2 weeks ago and one of them is this: there are few things more important to a general surgeon than his or her patient’s surgical history.
“Have you had any other surgeries in the past?”
The man tentatively lifted the hem of his “John 3:16” t-shirt up until it reached the bottom edge of his sternum. A thick scar that began where his ribs met each other in the middle and ended somewhere below the waist of his jeans stared back at us. You didn’t need a surgeon’s 9 years’ worth of medical training to see this one. “Yeah, I also had surgery on my belly.” An understatement, for sure.
He sighed, staring deadpan at the ceiling now. “I’ve been stabbed 42 times. I have some bipolar stuff and I used to be a different kind of person. And, no offense”, he looked emphatically and directly at me now, shrugging a little, “but 11 of those stabs were from women.” Among the things, I have notlearned during my general surgery rotation so far: how to respond to comments like that one. I decided to go with a half-smile and a softly spoken “None taken, sir.”
Both doctors I’d followed into this tiny room chuckled and went about their business confirming the inguinal hernia that had brought this guy into our clinic to begin with. I watched and listened as they muttered to each other about how they’d need to approach the repair in order to avoid the inevitable scar tissue, whether they’d be able to book it before the resident would be moving to his next training site, which OR would likely be available. While their hands and eyes were moving over the patient’s abdomen I took a moment to scan the rest of him.
Middle-aged, white, male, Trump supporting, and Christian, complete with T-shirt and accessory to prove it. Was this man intentionally trying to bring a negative stereotype in my head to life? It sure felt like it.
This man probably thinks my Muslim roommate should be scooped out of our home and sent back to ISIS.
This man has fear and sadness written all over his face.
My brain told me both at about the same time the physicians finished their exam.
“You’ll need surgery to repair the hole in your abdominal wall. We’ll make 3 small incisions the size of a pen in your belly to fix it, you’ll get stitches in each of them and then over top there will be skin glue. You can shower the next day and in 2-4 weeks you’ll be feeling back to normal again. The scar tissue may make things a little tricky, but I’m confident we’ll be able to do the surgery successfully. Any questions?” I’ve heard him say some version of this about 50 times at this point and he says it so quickly that I’m still not sure I actually process any of it, even though I’ve seen been placing those stitches and that skin glue with my own two hands.
I feel pretty sure most of the patients don’t get the chance to process it either.
“I guess not.” We’d been in the room for all of 3 minutes so far, a surgery had been planned from beginning to end, and what I perceived as a look of unmistakable anguish hadn’t left this man’s face. I’d hedge my bets that he did, in fact, have a few questions and I knew for a sure that I did. Are you okay? Are you nervous about another surgery? Is there a backpack full of shame weighing heavy on your shoulders? Are the scars you bare anything more or deeper than lines on your skin?
“Great, I’ll get you scheduled.” The attending briskly grabbed the scheduling form from its place on the wall while the resident turned to open the patient’s chart in search of the abdominal CT scans that would help them with their surgical approach. I peered over his shoulder because I am both absolutely terrible at reading CT images and absolutely sure that they’ll be on my board exam – might as well try to make sense of all those bowel loops while I’m able to ask for help.
Just as I was reminding myself that I need to reorient the mirrored image in order to keep my lefts and rights straight, I heard the patient clear his throat. I looked back over at him to see that tears were quietly streaming from both eyes as he frantically pulled off his glasses to wipe them away. My heart leapt across the crowded little room toward him and I stopped myself just short of kneeling next to his chair to offer some semblance of comfort. This is a man in a room with 2 other adult men and he probably doesn’t prefer that I draw attention to his vulnerability right now. Or does he? Is there a way to communicate that I see and hear him without making it awkward?
I glanced back at the physicians standing within 2 feet of this weeping man, both with their backs to their patient, seemingly oblivious to him in their quest to operate soon and well. As is often the case as a medical student, I am reminded in this moment that I don’t get to set the tone. It isn’t my place to start translating the jargon that bubbles from the lips of medical professionals when patients ask questions; it might draw attention to the fact that doctors aren’t doing a good job explaining things. It isn’t my role to finish a neurological exam with gentle questions about a patient’s crack cocaine addiction, even if it is the reason she suffered a devastating stroke at only 37 years old; it wastes the doctor’s time to start dig up problems like that during rounds. It isn’t appropriate to offer a box of tissues to a man while tears stream down his face; this isn’t a place to shed or wipe tears, it’s a place to pick which mesh will best patch a peritoneal tear.
What felt like an eternity passed while I joined my mentors in pretending not to notice and legitimately not noticing the despair of someone sitting within inches of us. The attending finished filling out the scheduling form, asking a list of yes or no questions over his shoulder for his sniffling patient about blood thinner regimens and comorbidities. The resident finished nodding knowingly at the CT scans that continued to look to me like greyscale impressionist art. They both turned around to face the still tearful man.
“It was great meeting you, Mr. Hart.” They take turns extending their hands for a handshake and hand him the paper that would be his admission ticket to operative hernia repair. “Check out is down the hall to your left – we’ll see you in a few weeks!” Our patient nods passively in reply and as they make their way out of the room, I am torn between total disbelief and heartbreak.
How can you see scars no thicker than a strand of hair, but not that your patient is crying? How can you pick up on radiographic densities more subtle than the difference between grey and greyer,  but not someone’s blatant sorrow? How can you know so much about how to repair the most fragile tissues in the human body, and nothing about how to ameliorate someone’s deeper pain?
Finally, I moved to reach for the box of Kleenex that lives next to wound care supplies in every room of the clinic. I hand it to him with a hand on his shoulder, desperately looking for the right words to take us beyond our many differences to a place of support and human connection. I wasn’t even sure what had brought on the flood of emotion he was experiencing, but putting together the pieces, I had an idea.
“Mr. Hart, you know that no one here is judging you, right? We ask about things that have happened a long time ago so that we can move forward with surgery in a way that will be best for you. But the person you are today is the person we’re trying to take care of, okay?”
I watch as fresh tears rise out and over the edges of his eyes and immediately worry that I have stumbled over an emotional boundary I shouldn’t have. It wouldn’t be the first time.
He takes a tissue from me and grabs my hand with both of his, looking directly at me.
“I’m not that person anymore. I don’t want to be that person anymore or ever again.”
“I hear you.” I point to him. “This person is the person that matters”.
I sit the box of tissues back in their place between the sink and the menagerie of gauze, hearing just how cliché I sound and realizing just how much I mean it.
Mr. Harte wipes his eyes and settles his glasses back on the bridge of his nose.
Our gazes meet and he says softly, “Thank you. Thank you so much for saying that.”
We walk together to the check-out desk and I hurriedly wish him well just as I see both of the doctors I am supposed to be working with walk into another patient room around the corner. What will go unseen and unheard and unsaid in that room? In the next? What happens if and when I’m not there to notice?
My third year of medical school is designed to teach me a little bit about what each medical specialty has to offer and to guide me in my decision about which one I will choose to join. What I’m finding in new ways every day is that my rotations are teaching me as much about what the medical field does not do as they are about what it does. Neurology teams identify and treat strokes but they don’t talk about the crack pipes that cause them. Surgeons look at their patients and see surgeries but not the person who lives inside the bodies they cut. I walk into a hospital every morning to learn how to see and do what most people cannot. Often, I walk out each evening worried that in doing so, I am forgetting how to see and do what most people can – to feel deeply, to explain simply, to see the big picture amid the complicated and intricate brush strokes I’m trained to hone in on.
I don’t know which specialty I’ll choose. I don’t know how many more patients I will have to pretend not to notice while I wait for my turn to be the one who sets the tone. I just know that as I learn to become a medical doctor, I so very badly hope that I never forget how to look at a broken person and see something deeper than his scars.
1 note · View note
heloisedc · 3 years
Text
Pygmalion Relations
Hair
Wandering in the public square, a lit lantern in hand in the middle of the day, […] A garden more inviting than Eden would […] meet my eye.[1]
Once you arrived, I studied you and was pleased with what I found.[2]
I went to see him the next morning, and received an invitation to dine there, which I accepted.[3]
He was of utter beauty, grazing perfection. The reproduction of the image of the Vitruvian man […][4] He was transparent but impenetrable.[5]
The situation of this house was beautiful, though chosen for convenience.[6] So far as this technic expression of size and power are concerned, I look on the hall as nearly perfect, and were this the highest or even a high class of beauty we need not go further[7] In this sense, it came closest to the idea of perfection, which is the starting point and goal of all art.[8]
His face was distorted[9] And his nose was misshapen, too. Not much, to be sure […].[10] But the perfect proportion and symmetry of his body and frame rendered him beautiful. His skin texture was perfect, the individual hairs on head and body had been lovingly and intricately manufactured and placed.[11]
Oh, how beautiful and stately wast thou on the high couch reclining in the hall![12] He had given great attention to realistic detail, rendering each feature with painstaking precision, whether or not it could in actuality be so seen within the image as a whole.[13] The dishes gave as much pleasure to my imagination as to my palate; sometimes the little piece of nature from which they had been extracted, the rugged holy water stoup of the oyster in which lingered a few drops of brackish water, or the gnarled stem, the yellowed branches of a bunch of grapes, still enveloped them, inedible, poetic and distant as a landscape, evoking as we dined successive images of a siesta in the shade of a vine or of an excursion on the sea […]. [14]
This dinner, although without preparation, was splendid.[15] And The evening was extremely calm and beautiful.[16]
After scaling a ruinous staircase I was shown a bed chamber,[17] where I was invited to stay the night.
Brain
After some passing of time, we had gotten to know each other, and found that we were perfect for each other. I gave him all that I could, while he did the same for me.
It was evidently a case of “love at first sight” […][18]
I had done everything that I could for him I had already banished the shadow of the negative […].[19]
I had learnt that There is the care of the body to consider, health regimens, physical exercises without overexertion, the carefully measured satisfaction of needs.[20]
We would often spend the evenings in the living room, admiring each other.
Mouth
Everything happens, then, during the seconds of complete veiling. Hardly had it begun than a strange light, yellow and tawny, resembling nothing else, neither the evening nor the dawn, invaded the environment; the glory of orange light intercepted by the walls of my abode disappeared, giving way to a somber and magic bath […].[21]
The variant was the surprise bath, where I was taken down the corridors to the ground floor, and arrived in a square room with a vaulted ceiling, where a large bath had been constructed; I was then tipped backwards into the water. [22] Mild water? I found suds forming on my body and I rubbed hastily here, there, everywhere, judging it to be the wash cycle and knowing it would not last long. Then came the rinse cycle. Ah, warm.  Well, perhaps not warm, but not quite as cold, and definitely feeling warm to my thoroughly chilled body.[23]
If a man is covered by an eruption you will mix flour of malt little by little in oil, you will apply (it) and he will recover; if he is still not cured, you will apply hot simtum and he will recover; if he is still not cured, you will apply the warm residue and he will recover.[24] If we employ extracts, they must have been recently prepared and preserved with great care.[25] Oiling out, making out, polishing, scraping, etc.[26] This new development came from the perfecting of the arts that imitate the human body.[27] When he awoke, he looked at his body and found it clean as virgin silver, […] whereat he rejoiced exceedingly and his breast expanded with gladness.[28]
Stomach
Now for his diet: for lunch honey, for dinner a biscuit and vegetables, meat infrequently.... In this way his body kept the same condition, as if on a straight line, without being sometimes healthy, sometimes sick, and without growing heavier Even outside the strictly Pythagorean context, regimen was regularly defined with reference to these two associated dimensions of good health maintenance and proper care of the soul.[29]
You can imagine my surprise when I had discovered a tremendous thing, it seemed to me.[30] The layout of a modern kitchen, […] designed to streamline all processes, from food storage and food preparation, to cooking on the stove and serving the finished meal on the dining room table, to dishwashing and the storage of cutlery and dishes.[31] The Greeks were not wrong in showing us the immortals constantly feasting, drinking ambrosia, and laughing endlessly.[32]
And there were always drugs around—most notably, the jars of white crosses and other uppers that he kept in the fridge next to his protein fortified milkshakes.[33]
I experience food beyond the meal not only while consuming it but also in the selection of certain products over others in meal planning and preparation.[34]
In the succeeding month, our health improved [35] even beyond what I had thought was the limit.
Muscle
The most striking interior volume is the central, double height hall that at once evokes memories of medieval great halls and is bathed with light from huge windows. […][36] Everything is mirror […] [37] It contained all sorts of apparatus: an exercise bicycle, wall bars, a rowing machine, a massage machine etc.[38] I begin by taking a mirror, look at my shoulders, examine my loins and thighs.
Entrance of the gymnast in gymnopedy, entrance of the gymnosophists, entrance of the professor of gymnastics.[39] How magnificent. By gymnastic exercises it was intended to harden his body, to sharpen his courage, and to prepare him for the fatigues and dangers […].[40]
The double ecstasy of the muscular effort in the thighs and calves, a powerful, almost metallic leap, a pause in the air that seems eternal, during which the body assumes positions and performs.[41] That there is absolutely no imperfection, is indeed, […], a proof of his being wanting in the highest qualities of architecture; […] and may well be studied for the excellence he displays in methods of levelling stones, for the precision of his inlaying, and other such qualities […].[42]
For almost nobody, except he be trained from the start and equipped with complete reason, can develop to perfect proportions, understanding when he should do certain things, and to what extent, and in whose company, and how, and why.[43]
No sculptor can possibly produce a first class work of art here on Gaia without a well-crafted Participation and the ones I produce of this particular type are considered excellent[…][44] We seem never to be altogether prepared for the resulting distress. If we do not literally shake, as I did […], we may experience an internal shudder that is the subjective equivalent of the overt trembling that occurred […]. While my physical shaking […] was observable by anyone standing near me, the inner shudder at my own bodily pain may not be visible to others even though it is felt intensely by myself, and felt as foreign to me. Some part of my body has become alien to me, split off from a coherent and unitary sense of self.[45]
He clearly abused himself, but in so doing rendered a stature I had never before had the blessing to see. Ideal form of excellence![46] But For what purpose?[47] He seemed beautiful and strong because he was not like me. I had found a new fascination for this incredible man, a man who seemed to have the ability to do anything.
My eyes alighted by chance on the massive mirror that hung opposite and I let out a cry: our reflections in its golden frame were like a picture of extraordinary beauty. It was so strange and fantastic […].[48]
I had found the strong man I needed and was as happy with him as it is possible to be on this funny ball of clay.[49] I had opened myself up to him.
We were now mutually bound together, the lighter being restrained by the heavier, so that he cannot fly off; while, on the contrary, from the lighter tending upwards, the heavier is so suspended, that I cannot fall down.[50] But there remain a double door, behind which I had never been allowed to go. A secret he was hiding from me.
So these two beings lived in this manner, high aloft, with all that improbability which is in nature; neither at the nadir nor at the zenith, between man and seraphim, above the mire, below the ether, in the clouds; hardly flesh and blood, soul and ecstasy from head to foot; already too sublime to walk the earth, still too heavily charged with humanity to disappear in the blue, suspended like atoms which are waiting to be precipitated; apparently beyond the bounds of destiny; ignorant of that rut; yesterday, to day, tomorrow; amazed, rapturous, floating, soaring; at times so light that they could take their flight out into the infinite; almost prepared to soar away to all eternity.[51]
 Heart
Here the day has come; here the week of the lectistemium had begun.[52]
The physical effort was small, but the mental effort of trying to control without controlling was enormously difficult.[53] His only aim, his only possible aim, was to please me.[54]
I believed, however, that the soul could achieve temporary separation from the body in an ecstatic trance.[55] Is it truly possible to think without arriving at beauty, without penetrating the secret place where life bubbles up, without the transfiguration of the body?[56]
Prepared?[57]
A single locus of sexuality was acknowledged in social space as well as at the heart of every household, but it was a utilitarian and fertile one: the […] bedroom. [58]
At the sight of him, I felt myself bewildered — every sense was absorbed in ecstasy.[59]
Then begins the body to body of discourse with and against silence.[60]
 Air fills the thorax; ten liquids circulate through the vessels and pores; fire sets the heart, the genitals and the brain ablaze; the humus models the human.[61]
The glorious light makes us drunk with joy and our sense of wonder has no limits. This pleasure is truly divine! What pure happiness we feel in the bottom of our hearts at this spectacle! What ecstasy! No, we cannot possibly give expression to it! At this season nature’s work is done; everything is the image of perfection; everything has acquired a clearly defined form that is full blown, accurate and pure. Outlines are clear and distinct; their maturity gives them noble, majestic proportions; their bright, vivid colours have acquired all their brilliance.[62] Then the engine was started, the machine ran along the ground, gathered speed, until finally, all of a sudden, at right angles, I rose slowly, […] as it were static ecstasy of a horizontal speed suddenly transformed into a majestic, vertical ascent.[63]
Now, drawn out from his body, his sinews formed a bundle of dark, shiny stalks, not unlike the bundle of lightning bolts that lay beside him, although these were bright and smoking.[64] Now between the dry head, more than dead, almost abstract, empty and dessicated, suitably objectivized, wholly exterior, pierced, visible, nameable, articulated, analyzable, between the skull and the rest of the world, a circumstantial halo of light, like the ones worn by the great saints, replaces, at bone level, the lining of flesh, fat, muscle, organs, skin, veins, tendons, hair, radiance, charm, beauty, glory. Thus the body thinks. The body thinks therefore shines.[65]
the body becomes an architectural structure, moving masonry, a ship; the skeleton becomes a firm framework, with tie beams and rafters; the muscles form the wall and partitions.[66]
Moments are points of rupture —ephemeral, euphoric, revelatory of the total, radical, sometimes revolutionary possibilities latent in everyday life.[67] Everything that I can see in this body produces in me ecstatic wonder.[68]
Then, having risen to so high a pitch, having been sustained with so much vigour, the chant, mingled with a murmur of supplication in the midst of ecstasy, seemed at times to stop altogether like a spring that has ceased to flow.[69] This music makes me cry because I am not like it, not something complete, which turns toward the lost sweetness of life like a distant quotation. Happiness can only be thought of as something lost, as a beautiful alien. It cannot be anything more than a premonition that we approach with tears in our eyes without ever reaching it. [70]
I was absolutely in a state of ecstasy, and, involuntary, sinking on my knees, I passionately extended my arms towards him, certain he could not hear, and having no conception that he could see me; but there was a fireplace at the end of the room that betrayed all my proceedings.[71] And when I got into the open air, I heard distinctly, as the night was still, the distant sound of a door unlocking.[72]
When the door in front of him finally opened, he stared straight into a hallway, [73] which seemed to stretch out into the infinite. At the end of this couloir, a door.
I prudently walked towards it.
Womb
As I opened the door, I heard a sort of echo in the roof; it sounded like voices and it began to shake my Roman courage.[74] I entered and was taken aback by The blackness, […] the vast emptiness stretching out infinitely.[75] Deep, dark, dank, dismal silence.[76] the infinite void of space[77] But is that emptiness not also the ultimate plenitude?[78]
The darkness embraced him lovingly.[79]
There are beauties that are more palpable and explicable, and they are hidden and secret beauties.[80] I walked into the vastness, the door closing behind me. I almost slipped after taking a step Because the ground was wet.[81]
His hands were stroking my body anxiously, but with care and love. And it did touch me in somewhat the same way; it also brought close to me things of the kind which we not only see with our eyes but feel also in our hearts.[82]
I felt my way along the moist walls, until I let go and walked freely. My feet touched something, laying on the floor. Something that felt like A small bit of steel.[83]
That was the little thing, or the beginning of the little thing, that was soon to become the big thing.[84]
[…] the ‘first chaos’, the absence of order in perfect order, the absence of all relation.[85]
Thus, the creation began. A primordial action, statuary repatriates mass— strange, inevitable, ceaselessly returning, equilibrium and content of the world, first object—by unifying it, like a thing; by individuating it, like a body; by localizing or marking a space by its means; by stabilizing mass like a dead thing or body; by therefore stopping time; by giving mass limits it cannot leave, by defining it or even by inventing the act of defining.[86]
Through this technique, […] a new object was being formed; slowly, it superseded the mechanical body, the body composed of solids and assigned movements, the image of which had for so long haunted those who dreamt of disciplinary perfection.[87]
It shall be perfect therefore, as its Father which is in heaven is perfect.[88]
 After Twelve years, three months, and four days,[89] it’s complete![90]
Finally, all the parts that have contributed to the perfection of the work which we admire[91] came together, forming the one, most sublime, most charming, most graceful, most splendid, most touching being.[92]
[…] more safely guarded by its walls, more superb in palaces, more ornamented in respect to temples, more beautiful by virtue of its buildings, more illustrious in its porticoes, more splendid in its piazzas[93]
In an ecstasy of joy, […], we reiterated, stroking and patting it as though it were a horse that had just come first past the post: “You’re the most beautiful being we know, do you hear?”[94]
[1] Wollstonecraft, Complete Works
[2] Asimov, Complete Robot Anthology
[3] Rousseau, Collected Works of Jean-Jacques Rousseau
[4] Hays, Architecture Theory since 1968
[5] Hugo, Les Miserables
[6] Wollstonecraft, Complete Works
[7] Fergusson, An Historical Inquiry into the True Principles of Beauty in Art
[8] Mallgrave, Architectural Theory
[9] Asimov, Complete Robot Anthology
[10] Asimov, Complete Robot Anthology
[11] Asimov, Complete Robot Anthology
[12] Seneca, Complete Works
[13] Chilvers, A Dictionary of Modern and Contemporary Art Oxfor
[14] Proust, In Search of Lost Time Vol III The Guermantes Way
[15] Rousseau, Collected Works of Jean-Jacques Rousseau
[16] Wollstonecraft, Complete Works
[17] Wollstonecraft, Complete Works
[18] Darwin, The Descent of Man and Selection in Relation to Sex
[19] Deleuze, Difference and Repetition
[20] Foucault, The History of Sexuality Volume 3
[21] Serres, Biogea
[22] Foucault, History of Madness
[23] Asimov, Complete Robot Anthology
[24] Serres, History of Scientific Thought
[25] Laennec, A Treatise on the Diseases of the Chest and on Mediate Auscultation
[26] Gombrich, Art and Illusion
[27] Younes, The Historical Dictionary of Architecture of Quatremere De Quincy
[28] The Book of the Thousand and One Nights
[29] Foucault, The History of Sexuality Volume 2
[30] Serres, Hermes Literature Science Philosophy
[31] Teige, The Minimum Dwelling
[32] Serres, The Parasite
[33] Davis, High Weirdness
[34] Zimring, Encyclopedia of Consumption and Waste
[35] Laennec, A Treatise on the Diseases of the Chest and on Mediate Auscultation
[36] Cruickshank, A History of Architecture in 100 Buildings
[37] Deleuze, Cinema 2 The Time Image
[38] Bourdieu, Distinction
[39] Serres, Genesis
[40] Smith, An Inquiry into the Nature and Causes of the Wealth of Nations
[41] Serres, The Five Senses
[42] Ruskin, The Stones of Venice
[43] Seneca, Complete Works
[44] Asimov, Complete Robot Anthology
[45] Casey, The World on Edge
[46] Wollstonecraft, Complete Works
[47] Asimov, Complete Robot Anthology
[48] Deleuze, Masochism Coldness and Cruelty Venus in Furs
[49] Deleuze, Masochism Coldness and Cruelty Venus in Furs
[50] Pliny, Natural History Volume 1
[51] Hugo, Les Miserables
[52] Serres, Rome
[53] Asimov, Complete Robot Anthology
[54] Asimov, Complete Robot Anthology
[55] Schmitt, The Cambridge History of Renaissance Philosophy
[56] Serres, The Five Senses
[57] Asimov, Complete Robot Anthology
[58] Foucault, The History of Sexuality Volume 1
[59] Rousseau, Collected Works of Jean-Jacques Rousseau
[60] Serres, Hominescence
[61] Serres, Biogea
[62] Mallgrave, Architectural Theory
[63] Proust, In Search of Lost Time Vol V The Captive The Fugitive
[64] Calasso, The Marriage of Cadmus and Harmony
[65] Serres, Statues
[66] Serres, The Five Senses
[67] Hays, Architecture Theory since 1968
[68] de Montaigne, The Complete Essays
[69] Proust, In Search of Lost Time Vol III The Guermantes Way
[70] Sloterdijk, Critique of Cynical Reason
[71] Rousseau, Collected Works of Jean-Jacques Rousseau
[72] The Book of the Thousand and One Nights Supplementary Nights
[73] Kafka, The Trial
[74] Rousseau, Collected Works of Jean-Jacques Rousseau
[75] Asimov, Complete Robot Anthology
[76] Asimov, Complete Robot Anthology
[77] Serres, The Birth of Physics
[78] Foucault, History of Madness
[79] Asimov, Complete Robot Anthology
[80] Harrison Wood Gaiger, Art in Theory 1648 1815
[81] Hugo, Les Miserables
[82] Proust, In Search of Lost Time Vol III The Guermantes Way
[83] Hugo, Les Miserables
[84] Zizek, Less Than Nothing
[85] Serres, The Birth of Physics
[86] Serres, Statues
[87] Foucault, Discipline and Punish
[88] Tyndale, Doctrinal Treatises
[89] Asimov, Complete Robot Anthology
[90] Hovestadt Buehlmann, Quantum City
[91] Harrison Wood Gaiger, Art in Theory 1648 1815
[92] Frankl, The Gothic
[93] Smith, Architecture in the Culture of Early Humanism
[94] Proust, In Search of Lost Time Vol III The Guermantes Way
0 notes
osayoko-blog · 7 years
Note
How about all the questions except 100? ( ◠‿◠ ) See, I'm nice.
ASK ME THINGS
( ︶︿︶)_╭∩╮( ︶︿︶)_╭∩╮( ︶︿︶)_╭∩╮
1. You woke up naked next to the last person you texted, what would you say? Nothing, because they would still be snoring away happily next to me. My favorite thing to hear in the early morning.
2. What’s going on between you and the last person you kissed?☼♥ ☾
3. If your boyfriend or girlfriend was into drugs, would you care?I think that’s the stupidest question someone could have come up with. Shouldn’t you care about every little thing concerning them? Ranging from when they experience minor headaches, to drug abuse, to their well being in general?
4. Is your last name longer than six letters?Ozaki = 5
5. Was your last kiss drunk or sober?Sober, maybe a little drunk on sleep.
6. Have you ever wanted to have someone but you messed it up?Yes. But we’ll always go our way.
7. What does your last received text say?I don’t remember right now.
8. How many times have you kissed the last person you kissed?∞
9. Where was your last kiss at?The hospital.
10. When is the last time you saw your sister?I don’t have a sisiter but two older brothers.
11. What do you drink in the morning?Decaffeinated tea.
12. Where did you sleep last night?At the hospital.
13. Do you think relationships are hard?They are if you invest everything you’ve got. If they’re not, you’re probably just wasting away your days ignoring each and every occuring problem.
14. If you could go back and change something in the past 5 months, would you?No. Although not everything went the most perfect way possible, I wouldn’t change anything. Life isn’t a video game you can restart if you made any mistakes that influence the progress of it. You have to live with your mistakes and the bad phases that come and go. Coping with the consequences makes you grow, cheating doesn’t help you improve but to eventually make the same mistakes again without learning through them. Everything happens for a reason and everything that has occurred to me within the past five months has gotten me to where I am right now. I like it, I’m happy. I’m enjoying my life and the connection I have to the people in it.
15. You’re locked in a room with the last person you kissed, any problems?None.
16. Would you rather it be sunny or rainy?Summer rain.
17. Do you know anyone with the same middle name as you?I don’t have a middle name.
18. Are you wearing jeans,sweatpants,or pajama pants?Leggings.
19. Do you think you will be in a relationship 3 years from now?It doesn‘t matter if it’s a relationship or just “us”. I think it will still be “us” three years from now.
20. Does anyone like you?Yes.
21. Have you ever kissed someone with a name that starts with an S?Technically.
22. Is the last person you kissed gay?No.
23. Is there a person you CANNOT stand?Yes. Are you human?
24. Have you ever considered getting a tattoo?I appreciate art in every shape and form it comes in. I have considered it a couple of times. I love this kind of unforgiving commitment to whatever you choose to carry underneath your skin with you for the rest of your life.
25. In the past week have you cried?Yes. Never hold it in.
26. What breed was the last dog you saw?It was a cute Pomeranian. I can see why this question is important. It honestly made my day to see this white ball of fluff bouncing around and wrapping his leash around his owner’s legs in the process. They were all annoyed but it was an adorable sight to witness for me.
27. Do you dry off in the shower or out of the shower?Drying off in the shower is such a pet peeve of mine.
28. Have you ever kissed a football player?No.
29. Do you think you’re old?I have an old soul but a young heart.
30. Do you like text messaging?It’s not that I like it to an extent where I can say that I enjoy it, but it has become ultimately vital for the people of our generation. Especially in my business it’s a great way to stay in touch with important contacts but also a comfortable possibility to talk to the people close to you when you find yourself being constricted by a busy schedule but don’t want to miss out on anything in their lives. I still prefer face to face conversations but I’m grateful we’re given these endless possibilities nowadays.
31. What type of day are you having?My day has been an odd mix so far; a little bit busy, a little bit boring, amazingly challenging.
32. Have you ever thought about getting your nose pierced?Actually, yes. I’ve done a shooting with Brooklyn All Day a while back where they put a fake septum on me and I actually thought this look was pretty cool and refreshing, enough to briefly wonder if it would be something I could enjoy on the long run, but I came to the conclusion that it’s not too convenient in this kind of profession. When I was younger, I always admired people with belly button piercings, too.
33. Do you prefer warm or cold weather?I like both extremes. I like them, but I also find myself moaning as soon as I’m forced to cope with extreme cold or extreme warmth. Yet I enjoy being surrounded by snow or going to the beach on beautiful summer days. I don’t have a preference as it seems but I’m grateful for every season and its perks.
34. Is there a person of the opposite sex who means a lot to you?Always. My best friend.
35. Would you prefer a relationship or a fling?I’d prefer no labels. They only do harm depending on the type of person you are. My answer will be neither, but I strongly believe that certain things don’t need to be named. Strong emotions don’t need such limiting cages. You will only find yourself clutching these golden bars, wishing to escape so the two of you can be free. But most importantly together. Why limit yourself when those feelings go far beyond human vocabulary.
36. Are you a simple or complicated person?I am as simple as I am complicated.
37. What song are you listening to?Bon Jovi - Living on a Prayer
38. When you say you’re sorry do you mean it?It depends on who you are to me. But usually, yes. Especially when you’re close to me. The tighter the bond, the more I’ll have to swallow my pride to apologize. When I do, I do mean it.39. Is there a girl that knows everything or almost everything about you?My friend Akane.40. What made you start liking the person you like now?This is the toughest question so far. Mainly because I don’t want to write a bible for an answer, so I will try to keep it short. What made me like them, the very first thing that did, was realizing that for some reason our minds worked strangely alike. He spoke out things I couldn’t put into words, but he also took entire sentences off my tongue I wanted to write down and yet he was faster, just like he knew what I put my mind to that very moment. It was like speaking to my reflection in the mirror. And I hadn’t even seen him in person back then. This conversation got under my skin. Ever since I’m tied. Since day one.41. When did you last receive a text message?Yesterday.42. What is wrong with you right now?I think I’m frightened of the unknown and of the familiar, both at once.43. How well do you know the last female you texted?Barely.44. Does anyone disgust you?Remotely.45. Would you date someone right now if they asked?Yes and no.46. Are you in a good mood right now?As good as your mood can be when all you can think about is sleep.47. Who was the last person you talked to in person?Sono.48. What color shirt are you wearing?Grey.49. Has someone recently told you something you didn’t want to hear?Yes. I don’t think either of us liked it but it was necessary. I’m glad we had this conversation.50. Anyone you’re giving up on?The slow and mechanic form of life I have been the past couple of months. Goodbye.51. Do you hate the person you fell hardest for?Sometimes. But it’s never without affection.
52. Have you ever thought about giving up on someone but couldn’t?Who didn’t?53. Do you like rain?I love rain. 54. Do you care if your boyfriend/girlfriend drinks?I think I will simply refer to the question concerning drug abuse here. Though it also depends on how severe the consume of alcohol is.55. Have you ever liked somebody and never told them?Yes. Although I’ve learned not to waste emotions as I grew older. 56. Do you like to cuddle?Actually, yes.57. Are you shy?It depends. But a huge part of me is. 58. Do you get along with girls?I do. But I have a tendency of getting along with boys much better.59. Have you dated the person you texted last?Yes. 60. What do you carry with you at all times?My phone. 61. If you were paid 1 million dollars to spend the night in a supposed haunted house, would you?Yes, but I’d probably chicken out as soon as I hear as much as a creaking door. 62. Do you think you can last in a relationship for five months?Yes. 63. Think back to October, were you in a relationship?Yes. 64. The person you like kisses you on the forehead, do you find this cute?I think it makes for a sensation of warmth and comfort, feeling utterly cared about.65. Did anything “cute” happen in the last week?Yes. My son produced his absolute worst diaper. So… cute…
66. How old are the last three people you kissed?Well, one of them was very very old, almost ancient. Rumor has it he’s almost fourty. The other is currently 4 months old and last but not least, I’m not going to give away my mom’s age.
67. Would you rather pay to get your nails done or do them yourself?I have phases where I feel artistic and want to do a cool design on my own nails, but let’s be real, it’s better and easier to just get them done by a professional.   68. Which do you like better- Zebra print or leopard print?Leo.69. Do you have any stickers on your car?No.70. Would you rather listen to Luke Bryan or Lil Wayne?Lil Wayne.71. Blackberry, Anroid, or iPhone?iPhone.  72. When’s the last time you had pizza from Pizza Hut?I only recall having pizza from Domino’s.   73. Do you like diet soda?No. Go hard or go home.74. What color are the walls in your room?White. I can’t have my walls painted in extreme and distracting colors. It makes me feel uncomfortable because they’re too loud. White is very soothing.75. Are you 16 or older?I’m 10 in spirit.  76. Do you watch Pretty Little Liars?No.  77. Do you have a job?Professional food enthusiast.  78. What are your initials?S. O.79. Did you ever have braces?No.   80. Are you from the south?Damn right. From the best city ever! I also think Northerners are cavemen.
81. What does your last status on facebook say?I don’t really use this site.82. Do you still talk to the first person you ever kissed?Not really, no.   83. Are you closer to your mom or your dad?I’m close to both of them. They give me more support than I could ever dream of. I’m close to either of them in different ways, I believe. I talk a lot about my concerns and problems to my mom. She gives the best advice. My dad is my rolemodel. He teaches me lessons about life whenever we interact. And he was the one making me attached to the sea ever since I was a little girl. I’m grateful they raised me the way they did.84. Have you ever done cheerleading or gymnastics?Gymnastics.   85. What’s the last movie you saw in theaters?Resident Evil.   86. Do you smoke?I used to smoke. I can’t say that I don’t miss it these days.   87. Would you rather wear heels or flip flops?I love any kind of shoe. It depends on the occasion or the setting.    88. Is your phone touch screen?Is the sun hot?   89. Do you normally wear your hair straight or curly?I like to wear it curly if I am in the mood to do anything with it. Otherwise I prefer to have straight hair since it doesn’t require any work while I get ready.   90. Have you ever snuck out of your house?When I lived back home with my parents I used to sneak out of the house or back inside often. Those were my wilder teenage years. Rebel phase, Kurt Cobain lover, living the gyaru lifestyle.91. Would you rather swim in a river, lake, or pool?A lake.   92. Have you ever made out in a car?Yes.   93. …Had sex in a car?Yes.   94. Are you single or in a relationship?Maybe something so precious, no label in the world could ever express its beauty.   95. What were you doing last night at midnight?Driving to the hospital.   96. When’s the last time you saw fireworks?New Years.   97. Do you like the camera on your phone?It’s okay but since photography is a hobby, I prefer my Canon.   98. Have you ever had a friend with benefits?Yes. It’s common in Japan though.    99. Have you ever passed out from drinking?More often than I’d like to admit.101. Have you ever had a pregnancy scare?Yes.  102. Name your favorite Kesha song: Blah Blah Blah  103. Do you have any tan lines right now?None.   104. Would you ever wear cowboy boots with shorts?I used to when it was a thing for gals.  
2 notes · View notes
VSL Creator Review Should We Get It
VSL Creator Evaluation - Are you looking for even more knowleadge about VSL Creator? Please review my straightforward evaluation about it prior to selecting to assess the weak points and staminas of it.
VSL Creator Testimonial
Exactly how to Develop A Sales Video Clip (Part 1)
Whether you're offering a physical product, your mentoring, solutions, or digital training, you have to offer, even if you despise it! This is precisely why I get my VSL Creator videos to do the marketing for me.
You're most likely wondering: what exactly do I perform in a sales video clip as well as how long should it also be? To respond to these questions we will certainly be having a look at one of the best sales video clips to ever before be developed ... The Squatty Potty ®. Combining the power of reliable marketing, the appropriate sales series, and a dashboard of unicorn poop the Squatty Potty ® was able to change itself from a basic plastic stool right into a restroom necessary! Let's break down the technique of the Squatty Potty ® so you as well can use this straightforward formula to produce your next sales video!
Warning: Restroom talk and also unacceptable language in advance! Do not proceed reading unless your maturity degree has actually not gone beyond that of a 7 year-old or you take pleasure in some good poop jokes! This can obtain a little messy ...
Step 1: Get Attention
There are numerous ways to "obtain focus" at the start of your video clip. Squatty Potty ® uses a little humor with a dashboard of shock as well as wonder by showing a mystic unicorn pooping rainbow soft offer right into ice cream cones. This first step is definitely vital! If you do not hook your audience and also record their interest, VSL Creator opportunities are they will click away permanently. Do not fret, a dessert-pooping fictional personality isn't the only method to do this; a simple concern, intriguing statistic, or a big guarantee is actually all you need.
Action 2: Identify the Issue
Whatever you sell have to solve an issue. The bigger the issue, the bigger the demand to resolve it, as well as the more your item will offer. Squatty Potty ® determines the "carcinogen" of resting usually on toilets, which can trigger a "kink in your tube," or in the unicorn's instance, a lack of gelato. However Squatty Potty ® really did not quit there ... Tip 3: Perturb the Trouble
It's not constantly enough to simply determine the issue you will be solving, you need to twist the knife as well as go deeper. What happens if this problem goes uncontrolled? What are the worst instance circumstances? Squatty Potty ® upsets its problem by discussing exactly how the angle you remain on your toilet could trigger hemorrhoids or bowel irregularity!
Tip 4: Identify the Service
Simply when the pain ends up being unbearable, it's time to relieve your viewers with the service. Remember the solution is not you or your item. If you want your audience to get your item, they initially need to agree with your service. Squatty Potty ® suggests the service of changing the method you rest on your toilet, leaving viewers to ask yourself just how they may in fact sit in a different way. The remedy you present must create a fundamental issue which compels your visitors to desire that new remedy.
Step 5: Introduce the Item
"Presenting the Squatty Potty ®, "the answer is in fact your item! Notification that this process adheres to the simple series of trouble, remedy, problem, service. The problem of a "twist in your tube" which places you in jeopardy for piles was addressed by switching the method you sit on your toilet, VSL Creator triggered the problem of exactly how you're actually expected to rest in a different way which is then addressed by the Squatty Potty ®. Right away after you present your item, hit your viewers with a large, fat pledge. An example of this would be: "It will certainly provide you the best poop of your life, assured!" You can just picture what among their consumers' email reimbursement demands appears like ...
VSL Creator Review
Vendor: Brett Ingram et alia
Product: VSL Creator
Introduce Date: 2020-May-03
Introduce Time: 10:00 EDT
Front-End Rate: $37
Sales Web page: https://www.socialleadfreak.com/vsl-creator-review/
Particular niche: Video
Tumblr media
It's an advanced VSL system that produces remarkable sales video clips to track leads and also make massive sales for you video clips that normally take days and also commonly weeks that cost a lot of money. Now take minutes with no experience, you could produce either quick workshop quality through markets to offer your services and product you can even offer them to others for profits. It's called VSL maker as well as it does all the benefit you in simply a few clicks. No video clip style or technical abilities are required so if you intend to begin getting outcomes. This is the ideal software application for you to generate income.
It's the world's fastest and also sexiest VSL system that produces remarkable marketing videos to attract leads and make substantial sales.
VSLCreator integrates advanced technologies with point & & click simpleness in one effective sales video clip software application with no design, video clip or tech skills needed!
Exactly how to Make a Sales Video Clip that Enhances Your Brand name
1. Sum up your brand name identification into 2 words
What is it regarding you or your company that interests people? It is something just you can do. You might not see it yet individuals get delighted about this element of you. You require to describe it in 2 words or less when you create a sales video clip.
Find your 2 words because this's the seed of your brand name. This's where your brand identification will spurt from. Work with your words to generate the theme, message, as well as really feel of your video.
2. Explain what you do or define the item
What's it that you do better than any person else? Highlight that and offer individuals something to be delighted about. If we're discussing an item, describe the one-of-a-kind value proposition of the product in 30 secs or less.
3. Tune right into other's people pain
I like words discomfort along with marketing. You require to think about your customer's pain even prior to you enter into your sales video production. Words itself demands to be really felt. Usage that sensation while creating your video sales letter manuscript or advertising video clip script.
The main point is for you to consider your client's failures in addressing their issues. Visualize them trying various services that do not give the promised result. If you can get in touch with that, you're involving with your clients in a real means. They will certainly recognize you wish to offer them for real.
4. Give them your service
So you have actually presented on your own and demonstrated compassion for your clients' circumstance. Here's the finishing touch-- you will require to give them the goods now and show them how your remedy works.
Don't be vague about it. If you are marketing your service, show them a problem and fix it in front of them. Let them understand you are not making promises, you're providing results.
5. Let your various other customers speak for you
There is nothing quite as effective as a witness. When somebody states their pain is gone thanks to you, walls break down. Reviews are a key attribute of every best sales video around since it never ever ages.
6. Locate brand-new methods to tell your story or illustrate your point
So far, we have actually been speaking about the structure of your sales video clip. Now, let's talk about the implementation. You require to supply it as though stirs up the rate of interest of your possibility.
Your customers have seen a variety of video sales letter examples to bring them into the following life. You require to pull something different. Use a brand-new medium like computer animation or you can use a time gap video clip to reveal your option. Shock the storytelling with innovation or art. Doodle video clips work great!
7. Greater than selling, gift clients with insights
Before you remain in the business of selling, you're in business helpful. When talking in your video clip, you need to teach greater than you sell. When you end your video, offer your customers the present of insight. Like I stated before, you do not go shutting a sale, you most likely to supply worth. Doing this skillfully as an underlying theme resembles the ribbon on a gift that binds your video.
If you need even more of what I have actually cooperated this article, here is the video clip where I talk about understandings connected to the ones I have shared here:
It is very important to develop a sales video that markets because it starts the plan on how you can earn money for your passion. There is this set thing just you do so well as well as you need to reveal it in a succinct way. When you execute your vision like I have educated you, you will certainly intensify your message as well as help more people, in return will certainly enrich your life at the same time.
Conclusion
"It's A Good deal. Should I Spend Today?"
Not only are you obtaining access to VSL Creator for the best price ever before offered, yet also You're investing totally without risk. VSL Creator consists of a 30-day Money Back Assurance Plan. When you select VSL Creator, your complete satisfaction is guaranteed. If you are not totally pleased with it for any kind of reason within the very first thirty days, you're entitled to a full reimbursement-- no question asked. You've obtained nothing to shed! What Are You Awaiting? Try It today and also get The Complying with Benefit Now!
0 notes
itbeatsbookmarks · 5 years
Link
(Via: Hacker News)
The vchan protocol is used to stream data between virtual machines on a Xen host without needing any locks. It is largely undocumented. The TLA Toolbox is a set of tools for writing and checking specifications. In this post, I’ll describe my experiences using these tools to understand how the vchan protocol works.
Table of Contents
( this post also appeared on Reddit )
Background
Qubes and the vchan protocol
I run QubesOS on my laptop. A QubesOS desktop environment is made up of multiple virtual machines. A privileged VM, called dom0, provides the desktop environment and coordinates the other VMs. dom0 doesn’t have network access, so you have to use other VMs for doing actual work. For example, I use one VM for email and another for development work (these are called “application VMs”). There is another VM (called sys-net) that connects to the physical network, and yet another VM (sys-firewall) that connects the application VMs to net-vm.
My QubesOS desktop. The windows with blue borders are from my Debian development VM, while the green one is from a Fedora VM, etc.
The default sys-firewall is based on Fedora Linux. A few years ago, I replaced sys-firewall with a MirageOS unikernel. MirageOS is written in OCaml, and has very little C code (unlike Linux). It boots much faster and uses much less RAM than the Fedora-based VM. But recently, a user reported that restarting mirage-firewall was taking a very long time. The problem seemed to be that it was taking several minutes to transfer the information about the network configuration to the firewall. This is sent over vchan. The user reported that stracing the QubesDB process in dom0 revealed that it was sleeping for 10 seconds between sending the records, suggesting that a wakeup event was missing.
The lead developer of QubesOS said:
I’d guess missing evtchn trigger after reading/writing data in vchan.
Perhaps ocaml-vchan, the OCaml implementation of vchan, wasn’t implementing the vchan specification correctly? I wanted to check, but there was a problem: there was no vchan specification.
The Xen wiki lists vchan under Xen Document Days/TODO. The initial Git commit on 2011-10-06 said:
libvchan: interdomain communications library
This library implements a bidirectional communication interface between applications in different domains, similar to unix sockets. Data can be sent using the byte-oriented libvchan_read/libvchan_write or the packet-oriented libvchan_recv/libvchan_send.
Channel setup is done using a client-server model; domain IDs and a port number must be negotiated prior to initialization. The server allocates memory for the shared pages and determines the sizes of the communication rings (which may span multiple pages, although the default places rings and control within a single page).
With properly sized rings, testing has shown that this interface provides speed comparable to pipes within a single Linux domain; it is significantly faster than network-based communication.
I looked in the xen-devel mailing list around this period in case the reviewers had asked about how it worked.
One reviewer suggested:
Please could you say a few words about the functionality this new library enables and perhaps the design etc? In particular a protocol spec would be useful for anyone who wanted to reimplement for another guest OS etc. […] I think it would be appropriate to add protocol.txt at the same time as checking in the library.
However, the submitter pointed out that this was unnecessary, saying:
The comments in the shared header file explain the layout of the shared memory regions; any other parts of the protocol are application-defined.
Now, ordinarily, I wouldn’t be much interested in spending my free time tracking down race conditions in 3rd-party libraries for the benefit of strangers on the Internet. However, I did want to have another play with TLA…
TLA+
TLA+ is a language for specifying algorithms. It can be used for many things, but it is particularly designed for stateful parallel algorithms.
I learned about TLA while working at Docker. Docker EE provides software for managing large clusters of machines. It includes various orchestrators (SwarmKit, Kubernetes and Swarm Classic) and a web UI. Ensuring that everything works properly is very important, and to this end a large collection of tests had been produced. Part of my job was to run these tests. You take a test from a list in a web UI and click whatever buttons it tells you to click, wait for some period of time, and then check that what you see matches what the test says you should see. There were a lot of these tests, and they all had to be repeated on every supported platform, and for every release, release candidate or preview release. There was a lot of waiting involved and not much thinking required, so to keep my mind occupied, I started reading the TLA documentation.
I read The TLA+ Hyperbook and Specifying Systems. Both are by Leslie Lamport (the creator of TLA), and are freely available online. They’re both very easy to read. The hyperbook introduces the tools right away so you can start playing, while Specifying Systems starts with more theory and discusses the tools later. I think it’s worth reading both.
Once Docker EE 2.0 was released, we engineers were allowed to spend a week on whatever fun (Docker-related) project we wanted. I used the time to read the SwarmKit design documents and make a TLA model of that. I felt that using TLA prompted useful discussions with the SwarmKit developers (which can see seen in the pull request comments).
A specification document can answer questions such as:
What does it do? (requirements / properties)
How does it do it? (the algorithm)
Does it work? (model checking)
Why does it work? (inductive invariant)
Does it really work? (proofs)
You don’t have to answer all of them to have a useful document, but I will try to answer each of them for vchan.
Is TLA useful?
In my (limited) experience with TLA, whenever I have reached the end of a specification (whether reading it or writing it), I always find myself thinking “Well, that was obvious. It hardly seems worth writing a spec for that!”. You might feel the same after reading this blog post.
To judge whether TLA is useful, I suggest you take a few minutes to look at the code. If you are good at reading C code then you might find, like the Xen reviewers, that it is quite obvious what it does, how it works, and why it is correct. Or, like me, you might find you’d prefer a little help. You might want to jot down some notes about it now, to see whether you learn anything new.
To give the big picture:
Two VMs decide to communicate over vchan. One will be the server and the other the client.
The server allocates three chunks of memory: one to hold data in transit from the client to the server, one for data going from server to client, and the third to track information about the state of the system. This includes counters saying how much data has been written and how much read, in each direction.
The server tells Xen to grant the client access to this memory.
The client asks Xen to map the memory into its address space. Now client and server can both access it at once. There are no locks in the protocol, so be careful!
Either end sends data by writing it into the appropriate buffer and updating the appropriate counter in the shared block. The buffers are ring buffers, so after getting to the end, you start again from the beginning.
The data-written (producer) counter and the data-read (consumer) counter together tell you how much data is in the buffer, and where it is. When the difference is zero, the reader must stop reading and wait for more data. When the difference is the size of the buffer, the writer must stop writing and wait for more space.
When one end is waiting, the other can signal it using a Xen event channel. This essentially sets a pending flag to true at the other end, and wakes the VM if it is sleeping. If a VM tries to sleep while it has an event pending, it will immediately wake up again. Sending an event when one is already pending has no effect.
The public/io/libxenvchan.h header file provides some information, including the shared structures and comments about them:
xen/include/public/io/libxenvchan.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
struct ring_shared { uint32_t cons, prod; }; #define VCHAN_NOTIFY_WRITE 0x1 #define VCHAN_NOTIFY_READ 0x2 /** * vchan_interface: primary shared data structure */ struct vchan_interface { /** * Standard consumer/producer interface, one pair per buffer * left is client write, server read * right is client read, server write */ struct ring_shared left, right; /** * size of the rings, which determines their location * 10 - at offset 1024 in ring's page * 11 - at offset 2048 in ring's page * 12+ - uses 2^(N-12) grants to describe the multi-page ring * These should remain constant once the page is shared. * Only one of the two orders can be 10 (or 11). */ uint16_t left_order, right_order; /** * Shutdown detection: * 0: client (or server) has exited * 1: client (or server) is connected * 2: client has not yet connected */ uint8_t cli_live, srv_live; /** * Notification bits: * VCHAN_NOTIFY_WRITE: send notify when data is written * VCHAN_NOTIFY_READ: send notify when data is read (consumed) * cli_notify is used for the client to inform the server of its action */ uint8_t cli_notify, srv_notify; /** * Grant list: ordering is left, right. Must not extend into actual ring * or grow beyond the end of the initial shared page. * These should remain constant once the page is shared, to allow * for possible remapping by a client that restarts. */ uint32_t grants[0]; };
You might also like to look at the vchan source code. Note that the libxenvchan.h file in this directory includes and extends the above header file (with the same name).
For this blog post, we will ignore the Xen-specific business of sharing the memory and telling the client where it is, and assume that the client has mapped the memory and is ready to go.
Basic TLA concepts
We’ll take a first look at TLA concepts and notation using a simplified version of vchan. TLA comes with excellent documentation, so I won’t try to make this a full tutorial, but hopefully you will be able to follow the rest of this blog post after reading it. We will just consider a single direction of the channel (e.g. client-to-server) here.
Variables, states and behaviour
A variable in TLA is just what a programmer expects: something that changes over time. For example, I’ll use Buffer to represent the data currently being transmitted.
We can also add variables that are just useful for the specification. I use Sent to represent everything the sender-side application asked the vchan library to transmit, and Got for everything the receiving application has received:
1
VARIABLES Got, Buffer, Sent
A state in TLA represents a snapshot of the world at some point. It gives a value for each variable. For example, { Got: "H", Buffer: "i", Sent: "Hi", ... } is a state. The ... is just a reminder that a state also includes everything else in the world, not just the variables we care about.
Here are some more states:
State Got Buffer Sent s0       s1   H H s2 H   H s3 H i Hi s4 Hi   Hi s5 iH   Hi
A behaviour is a sequence of states, representing some possible history of the world. For example, << s0, s1, s2, s3, s4 >> is a behaviour. So is << s0, s1, s5 >>, but not one we want. The basic idea in TLA is to specify precisely which behaviours we want and which we don’t want.
A state expression is an expression that can be evaluated in the context of some state. For example, this defines Integrity to be a state expression that is true whenever what we have got so far matches what we wanted to send:
1 2 3 4 5 6 7 8
(* Take(m, i) is just the first i elements of message m. *) Take(m, i) == SubSeq(m, 1, i) (* Everything except the first i elements of message m. *) Drop(m, i) == SubSeq(m, i + 1, Len(m)) Integrity == Take(Sent, Len(Got)) = Got
Integrity is true for all the states above except for s5. I added some helper operators Take and Drop here. Sequences in TLA+ can be confusing because they are indexed from 1 rather than from 0, so it is easy to make off-by-one errors. These operators just use lengths, which we can all agree on. In Python syntax, it would be written something like:
1 2
def Integrity(s): return s.Sent.starts_with(s.Got)
A temporal formula is an expression that is evaluated in the context of a complete behaviour. It can use the temporal operators, which include:
[] (that’s supposed to look like a square) : “always”
<> (that’s supposed to look like a diamond) : “eventually”
[] F is true if the expression F is true at every point in the behaviour. <> F is true if the expression F is true at any point in the behaviour.
Messages we send should eventually arrive. Here’s one way to express that:
1 2 3
Availability == \A x \in Nat : [] (Len(Sent) = x => <> (Len(Got) >= x) )
TLA syntax is a bit odd. It’s rather like LaTeX (which is not surprising: Lamport is also the “La” in LaTeX). \A means “for all” (rendered as an upside-down A). So this says that for every number x, it is always true that if we have sent x bytes then eventually we will have received at least x bytes.
This pattern of [] (F => <>G) is common enough that it has a shorter notation of F ~> G, which is read as “F (always) leads to G”. So, Availability can also be written as:
1 2 3
Availability == \A x \in Nat : Len(Sent) = x ~> Len(Got) >= x
We’re only checking the lengths in Availability, but combined with Integrity that’s enough to ensure that we eventually receive what we want. So ideally, we’d like to ensure that every possible behaviour of the vchan library will satisfy the temporal formula Properties:
1 2
Properties == Availability /\ []Integrity
That /\ is “and” by the way, and \/ is “or”. I did eventually start to be able to tell one from the other, though I still think && and || would be easier. In case I forget to explain some syntax, A Summary of TLA lists most of it.
Actions
It is hopefully easy to see that Properties defines properties we want. A user of vchan would be happy to see that these are things they can rely on. But they don’t provide much help to someone trying to implement vchan. For that, TLA provides another way to specify behaviours.
An action in TLA is an expression that is evaluated in the context of a pair of states, representing a single atomic step of the system. For example:
1 2 3 4 5
Read == /\ Len(Buffer) > 0 /\ Got' = Got \o Buffer /\ Buffer' = << >> /\ UNCHANGED Sent
The Read action is true of a step if that step transfers all the data from Buffer to Got. Unprimed variables (e.g. Buffer) refer to the current state and primed ones (e.g. Buffer') refer to the next state. There’s some more strange notation here too:
We’re using /\ to form a bulleted list here rather than as an infix operator. This is indentation-sensitive. TLA also supports \/ lists in the same way.
\o is sequence concatenation (+ in Python).
<< >> is the empty sequence ([ ] in Python).
UNCHANGED Sent means Sent' = Sent.
In Python, it might look like this:
1 2 3 4 5
def Read(current, next): return Len(current.Buffer) > 0 \ and next.Got = current.Got + current.Buffer \ and next.Buffer = [] \ and next.Sent = current.Sent
Actions correspond more closely to code than temporal formulas, because they only talk about how the next state is related to the current one.
This action only allows one thing: reading the whole buffer at once. In the C implementation of vchan the receiving application can provide a buffer of any size and the library will read at most enough bytes to fill the buffer. To model that, we will need a slightly more flexible version:
1 2 3 4 5
Read == \E n \in 1..Len(Buffer) : /\ Got' = Got \o Take(Buffer, n) /\ Buffer' = Drop(Buffer, n) /\ UNCHANGED Sent
This says that a step is a Read step if there is any n (in the range 1 to the length of the buffer) such that we transferred n bytes from the buffer. \E means “there exists …”.
A Write action can be defined in a similar way:
1 2 3 4 5 6 7 8 9
CONSTANT BufferSize Byte == 0..255 Write == \E m \in Seq(Byte) \ {<< >>} : /\ Buffer' = Buffer \o m /\ Len(Buffer') <= BufferSize /\ Sent' = Sent \o m /\ UNCHANGED Got
A CONSTANT defines a parameter (input) of the specification (it’s constant in the sense that it doesn’t change between states). A Write operation adds some message m to the buffer, and also adds a copy of it to Sent so we can talk about what the system is doing. Seq(Byte) is the set of all possible sequences of bytes, and \ {<< >>} just excludes the empty sequence.
A step of the combined system is either a Read step or a Write step:
1 2
Next == Read \/ Write
We also need to define what a valid starting state for the algorithm looks like:
1 2 3 4
Init == /\ Sent = << >> /\ Buffer = << >> /\ Got = << >>
Finally, we can put all this together to get a temporal formula for the algorithm:
1 2 3 4
vars == << Got, Buffer, Sent >> Spec == Init /\ [][Next]_vars
Some more notation here:
[Next]_vars (that’s Next in brackets with a subscript vars) means Next \/ UNCHANGED vars.
Using Init (a state expression) in a temporal formula means it must be true for the first state of the behaviour.
[][Action]_vars means that [Action]_vars must be true for each step.
TLA syntax requires the _vars subscript here. This is because other things can be going on in the world beside our algorithm, so it must always be possible to take a step without our algorithm doing anything.
Spec defines behaviours just like Properties does, but in a way that makes it more obvious how to implement the protocol.
Correctness of Spec
Now we have definitions of Spec and Properties, it makes sense to check that every behaviour of Spec satisfies Properties. In Python terms, we want to check that all behaviours b satisfy this:
1 2
def SpecOK(b): return Spec(b) = False or Properties(b)
i.e. either b isn’t a behaviour that could result from the actions of our algorithm or, if it is, it satisfies Properties. In TLA notation, we write this as:
1 2
SpecOK == Spec => Properties
It’s OK if a behaviour is allowed by Properties but not by Spec. For example, the behaviour which goes straight from Got="", Sent="" to Got="Hi", Sent="Hi" in one step meets our requirements, but it’s not a behaviour of Spec.
The real implementation may itself further restrict Spec. For example, consider the behaviour << s0, s1, s2 >>:
State Got Buffer Sent s0   Hi Hi s1 H i Hi s2 Hi   Hi
The sender sends two bytes at once, but the reader reads them one at a time. This is a behaviour of the C implementation, because the reading application can ask the library to read into a 1-byte buffer. However, it is not a behaviour of the OCaml implementation, which gets to choose how much data to return to the application and will return both bytes together.
That’s fine. We just need to show that OCamlImpl => Spec and Spec => Properties and we can deduce that OCamlImpl => Properties. This is, of course, the key purpose of a specification: we only need to check that each implementation implements the specification, not that each implementation directly provides the desired properties.
It might seem strange that an implementation doesn’t have to allow all the specified behaviours. In fact, even the trivial specification Spec == FALSE is considered to be a correct implementation of Properties, because it has no bad behaviours (no behaviours at all). But that’s OK. Once the algorithm is running, it must have some behaviour, even if that behaviour is to do nothing. As the user of the library, you are responsible for checking that you can use it (e.g. by ensuring that the Init conditions are met). An algorithm without any behaviours corresponds to a library you could never use, not to one that goes wrong once it is running.
The model checker
Now comes the fun part: we can ask TLC (the TLA model checker) to check that Spec => Properties. You do this by asking the toolbox to create a new model (I called mine SpecOK) and setting Spec as the “behaviour spec”. It will prompt for a value for BufferSize. I used 2. There will be various things to fix up:
To check Write, TLC first tries to get every possible Seq(Byte), which is an infinite set. I defined MSG == Seq(Byte) and changed Write to use MSG. I then added an alternative definition for MSG in the model so that we only send messages of limited length. In fact, my replacement MSG ensures that Sent will always just be an incrementing sequence (<< 1, 2, 3, ... >>). That’s enough to check Properties, and much quicker than checking every possible message.
The system can keep sending forever. I added a state constraint to the model: Len(Sent) < 4 This tells TLC to stop considering any execution once this becomes false.
With that, the model runs successfully. This is a nice feature of TLA: instead of changing our specification to make it testable, we keep the specification correct and just override some aspects of it in the model. So, the specification says we can send any message, but the model only checks a few of them.
Now we can add Integrity as an invariant to check. That passes, but it’s good to double-check by changing the algorithm. I changed Read so that it doesn’t clear the buffer, using Buffer' = Drop(Buffer, 0) (with 0 instead of n). Then TLC reports a counter-example (“Invariant Integrity is violated”):
The sender writes << 1, 2 >> to Buffer.
The reader reads one byte, to give Got=1, Buffer=12, Sent=12.
The reader reads another byte, to give Got=11, Buffer=12, Sent=12.
Looks like it really was checking what we wanted. It’s good to be careful. If we’d accidentally added Integrity as a “property” to check rather than as an “invariant” then it would have interpreted it as a temporal formula and reported success just because it is true in the initial state.
One really nice feature of TLC is that (unlike a fuzz tester) it does a breadth-first search and therefore finds minimal counter-examples for invariants. The example above is therefore the quickest way to violate Integrity.
Checking Availability complains because of the use of Nat (we’re asking it to check for every possible length). I replaced the Nat with AvailabilityNat and overrode that to be 0..4 in the model. It then complains “Temporal properties were violated” and shows an example where the sender wrote some data and the reader never read it.
The problem is, [Next]_vars always allows us to do nothing. To fix this, we can specify a “weak fairness” constraint. WF_vars(action), says that we can’t just stop forever with action being always possible but never happening. I updated Spec to require the Read action to be fair:
1
Spec == Init /\ [][Next]_vars /\ WF_vars(Read)
Again, care is needed here. If we had specified WF_vars(Next) then we would be forcing the sender to keep sending forever, which users of vchan are not required to do. Worse, this would mean that every possible behaviour of the system would result in Sent growing forever. Every behaviour would therefore hit our Len(Sent) < 4 constraint and TLC wouldn’t consider it further. That means that TLC would never check any actual behaviour against Availability, and its reports of success would be meaningless! Changing Read to require n \in 2..Len(Buffer) is a quick way to see that TLC is actually checking Availability.
Here’s the complete spec so far: vchan1.pdf (source)
The real vchan
The simple Spec algorithm above has some limitations. One obvious simplification is that Buffer is just the sequence of bytes in transit, whereas in the real system it is a ring buffer, made up of an array of bytes along with the producer and consumer counters. We could replace it with three separate variables to make that explicit. However, ring buffers in Xen are well understood and I don’t feel that it would make the specification any clearer to include that.
A more serious problem is that Spec assumes that there is a way to perform the Read and Write operations atomically. Otherwise the real system would have behaviours not covered by the spec. To implement the above Spec correctly, you’d need some kind of lock. The real vchan protocol is more complicated than Spec, but avoids the need for a lock.
The real system has more shared state than just Buffer. I added extra variables to the spec for each item of shared state in the C code, along with its initial value:
SenderLive = TRUE (sender sets to FALSE to close connection)
ReceiverLive = TRUE (receiver sets to FALSE to close connection)
NotifyWrite = TRUE (receiver wants to be notified of next write)
DataReadyInt = FALSE (sender has signalled receiver over event channel)
NotifyRead = FALSE (sender wants to be notified of next read)
SpaceAvailableInt = FALSE (receiver has notified sender over event channel)
DataReadyInt represents the state of the receiver’s event port. The sender can make a Xen hypercall to set this and wake (or interrupt) the receiver. I guess sending these events is somewhat slow, because the NotifyWrite system is used to avoid sending events unnecessarily. Likewise, SpaceAvailableInt is the sender’s event port.
The algorithm
Here is my understanding of the protocol. On the sending side:
The sending application asks to send some bytes. We check whether the receiver has closed the channel and abort if so.
We check the amount of buffer space available.
If there isn’t enough, we set NotifyRead so the receiver will notify us when there is more. We also check the space again after this, in case it changed while setting the flag.
If there is any space:
We write as much data as we can to the buffer.
If the NotifyWrite flag is set, we clear it and notify the receiver of the write.
If we wrote everything, we return success.
Otherwise, we wait to be notified of more space.
We check whether the receiver has closed the channel. If so we abort. Otherwise, we go back to step 2.
On the receiving side:
The receiving application asks us to read up to some amount of data.
We check the amount of data available in the buffer.
If there isn’t as much as requested, we set NotifyWrite so the sender will notify us when there is. We also check the space again after this, in case it changed while setting the flag.
If there is any data, we read up to the amount requested. If the NotifyRead flag is set, we clear it and notify the sender of the new space. We return success to the application (even if we didn’t get as much as requested).
Otherwise (if there was no data), we check whether the sender has closed the connection.
If not (if the connection is still open), we wait to be notified of more data, and then go back to step 2.
Either side can close the connection by clearing their “live” flag and signalling the other side. I assumed there is also some process-local way that the close operation can notify its own side if it’s currently blocked.
To make expressing this kind of step-by-step algorithm easier, TLA+ provides a programming-language-like syntax called PlusCal. It then translates PlusCal into TLA actions.
Confusingly, there are two different syntaxes for PlusCal: Pascal style and C style. This means that, when you search for examples on the web, there is a 50% chance they won’t work because they’re using the other flavour. I started with the Pascal one because that was the first example I found, but switched to C-style later because it was more compact.
Here is my attempt at describing the sender algorithm above in PlusCal:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fair process (SenderWrite = SenderWriteID) variables free = 0, \* Our idea of how much free space is available. msg = << >>, \* The data we haven't sent yet. Sent = << >>; \* Everything we were asked to send. { sender_ready:- while (TRUE) { if (~SenderLive \/ ~ReceiverLive) goto Done else { with (m \in MSG) { msg := m }; Sent := Sent \o msg; \* Remember we wanted to send this }; sender_write: while (TRUE) { free := BufferSize - Len(Buffer); sender_request_notify: if (free >= Len(msg)) goto sender_write_data else NotifyRead := TRUE; sender_recheck_len: free := BufferSize - Len(Buffer); sender_write_data: if (free > 0) { Buffer := Buffer \o Take(msg, Min(Len(msg), free)); msg := Drop(msg, Min(Len(msg), free)); free := 0; sender_check_notify_data: if (NotifyWrite) { NotifyWrite := FALSE; \* Atomic test-and-clear sender_notify_data: DataReadyInt := TRUE; \* Signal receiver if (msg = << >>) goto sender_ready } else if (msg = << >>) goto sender_ready }; sender_blocked: await SpaceAvailableInt \/ ~SenderLive; if (~SenderLive) goto Done; else SpaceAvailableInt := FALSE; sender_check_recv_live: if (~ReceiverLive) goto Done; } } }
The labels (e.g. sender_request_notify:) represent points in the program where other actions can happen. Everything between two labels is considered to be atomic. I checked that every block of code between labels accesses only one shared variable. This means that the real system can’t see any states that we don’t consider. The toolbox doesn’t provide any help with this; you just have to check manually.
The sender_ready label represents a state where the client application hasn’t yet decided to send any data. Its label is tagged with - to indicate that fairness doesn’t apply here, because the protocol doesn’t require applications to keep sending more data forever. The other steps are fair, because once we’ve decided to send something we should keep going.
Taking a step from sender_ready to sender_write corresponds to the vchan library’s write function being called with some argument m. The with (m \in MSG) says that m could be any message from the set MSG. TLA also contains a CHOOSE operator that looks like it might do the same thing, but it doesn’t. When you use with, you are saying that TLC should check all possible messages. When you use CHOOSE, you are saying that it doesn’t matter which message TLC tries (and it will always try the same one). Or, in terms of the specification, a CHOOSE would say that applications can only ever send one particular message, without telling you what that message is.
In sender_write_data, we set free := 0 for no obvious reason. This is just to reduce the number of states that the model checker needs to explore, since we don’t care about its value after this point.
Some of the code is a little awkward because I had to put things in else branches that would more naturally go after the whole if block, but the translator wouldn’t let me do that. The use of semi-colons is also a bit confusing: the PlusCal-to-TLA translator requires them after a closing brace in some places, but the PDF generator messes up the indentation if you include them.
Here’s how the code block starting at sender_request_notify gets translated into a TLA action:
1 2 3 4 5 6 7 8 9 10 11
sender_request_notify == /\ pc[SenderWriteID] = "sender_request_notify" /\ IF free >= Len(msg) THEN /\ pc' = [pc EXCEPT ![SenderWriteID] = "sender_write_data"] /\ UNCHANGED NotifyRead ELSE /\ NotifyRead' = TRUE /\ pc' = [pc EXCEPT ![SenderWriteID] = "sender_recheck_len"] /\ UNCHANGED << SenderLive, ReceiverLive, Buffer, NotifyWrite, DataReadyInt, SpaceAvailableInt, free, msg, Sent, have, want, Got >>
pc is a mapping from process ID to the label where that process is currently executing. So sender_request_notify can only be performed when the SenderWriteID process is at the sender_request_notify label. Afterwards pc[SenderWriteID] will either be at sender_write_data or sender_recheck_len (if there wasn’t enough space for the whole message).
Here’s the code for the receiver:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
fair process (ReceiverRead = ReceiverReadID) variables have = 0, \* The amount of data we think the buffer contains. want = 0, \* The amount of data the user wants us to read. Got = << >>; \* Pseudo-variable recording all data ever received by receiver. { recv_ready: while (ReceiverLive) { with (n \in 1..MaxReadLen) want := n; recv_reading: while (TRUE) { have := Len(Buffer); recv_got_len: if (have >= want) goto recv_read_data else NotifyWrite := TRUE; recv_recheck_len: have := Len(Buffer); recv_read_data: if (have > 0) { Got := Got \o Take(Buffer, Min(want, have)); Buffer := Drop(Buffer, Min(want, have)); want := 0; have := 0; recv_check_notify_read: if (NotifyRead) { NotifyRead := FALSE; \* (atomic test-and-clear) recv_notify_read: SpaceAvailableInt := TRUE; goto recv_ready; \* Return success } else goto recv_ready; \* Return success } else if (~SenderLive \/ ~ReceiverLive) { goto Done; }; recv_await_data: await DataReadyInt \/ ~ReceiverLive; if (~ReceiverLive) { want := 0; goto Done } else DataReadyInt := FALSE; } } }
It’s quite similar to before. recv_ready corresponds to a state where the application hasn’t yet called read. When it does, we take n (the maximum number of bytes to read) as an argument and store it in the local variable want.
Note: you can use the C library in blocking or non-blocking mode. In blocking mode, a write (or read) waits until data is sent (or received). In non-blocking mode, it returns a special code to the application indicating that it needs to wait. The application then does the waiting itself and then calls the library again. I think the specification above covers both cases, depending on whether you think of sender_blocked and recv_await_data as representing code inside or outside of the library.
We also need a way to close the channel. It wasn’t clear to me, from looking at the C headers, when exactly you’re allowed to do that. I think that if you had a multi-threaded program and you called the close function while the write function was blocked, it would unblock and return. But if you happened to call it at the wrong time, it would try to use a closed file descriptor and fail (or read from the wrong one). So I guess it’s single threaded, and you should use the non-blocking mode if you want to cancel things.
That means that the sender can close only when it is at sender_ready or sender_blocked, and similarly for the receiver. The situation with the OCaml code is the same, because it is cooperatively threaded and so the close operation can only be called while blocked or idle. However, I decided to make the specification more general and allow for closing at any point by modelling closing as separate processes:
1 2 3 4 5 6 7 8 9
fair process (SenderClose = SenderCloseID) { sender_open:- SenderLive := FALSE; \* Clear liveness flag sender_notify_closed: DataReadyInt := TRUE; \* Signal receiver } fair process (ReceiverClose = ReceiverCloseID) { recv_open:- ReceiverLive := FALSE; \* Clear liveness flag recv_notify_closed: SpaceAvailableInt := TRUE; \* Signal sender }
Again, the processes are “fair” because once we start closing we should finish, but the initial labels are tagged with “-“ to disable fairness there: it’s OK if you keep a vchan open forever.
There’s a slight naming problem here. The PlusCal translator names the actions it generates after the starting state of the action. So sender_open is the action that moves from the sender_open label. That is, the sender_open action actually closes the connection!
Finally, we share the event channel with the buffer going in the other direction, so we might get notifications that are nothing to do with us. To ensure we handle that, I added another process that can send events at any time:
1 2 3 4 5 6
process (SpuriousInterrupts = SpuriousID) { spurious: while (TRUE) { either SpaceAvailableInt := TRUE or DataReadyInt := TRUE } }
either/or says that we need to consider both possibilities. This process isn’t marked fair, because we can’t rely these interrupts coming. But we do have to handle them when they happen.
Testing the full spec
PlusCal code is written in a specially-formatted comment block, and you have to press Ctrl-T to generate (or update) then TLA translation before running the model checker.
Be aware that the TLA Toolbox is a bit unreliable about keyboard short-cuts. While typing into the editor always works, short-cuts such as Ctrl-S (save) sometimes get disconnected. So you think you’re doing “edit/save/translate/save/check” cycles, but really you’re just checking some old version over and over again. You can avoid this by always running the model checker with the keyboard shortcut too, since that always seems to fail at the same time as the others. Focussing a different part of the GUI and then clicking back in the editor again fixes everything for a while.
Anyway, running our model on the new spec shows that Integrity is still OK. However, the Availability check fails with the following counter-example:
The sender writes << 1 >> to Buffer.
The sender closes the connection.
The receiver closes the connection.
All processes come to a stop, but the data never arrived.
We need to update Availability to consider the effects of closing connections. And at this point, I’m very unsure what vchan is intended to do. We could say:
1 2 3 4 5
Availability == \A x \in AvailabilityNat : Len(Sent) = x ~> \/ Len(Got) >= x \/ ~ReceiverLive \/ ~SenderLive
That passes. But vchan describes itself as being like a Unix socket. If you write to a Unix socket and then close it, you still expect the data to be delivered. So actually I tried this:
1 2 3 4 5
Availability == \A x \in AvailabilityNat : x = Len(Sent) /\ SenderLive /\ pc[SenderWriteID] = "sender_ready" ~> \/ Len(Got) >= x \/ ~ReceiverLive
This says that if a sender write operation completes successfully (we’re back at sender_ready) and at that point the sender hasn’t closed the connection, then the receiver will eventually receive the data (or close its end).
That is how I would expect it to behave. But TLC reports that the new spec does not satisfy this, giving this example (simplified - there are 16 steps in total):
The receiver starts reading. It finds that the buffer is empty.
The sender writes some data to Buffer and returns to sender_ready.
The sender closes the channel.
The receiver sees that the connection is closed and stops.
Is this a bug? Without a specification, it’s impossible to say. Maybe vchan was never intended to ensure delivery once the sender has closed its end. But this case only happens if you’re very unlucky about the scheduling. If the receiving application calls read when the sender has closed the connection but there is data available then the C code does return the data in that case. It’s only if the sender happens to close the connection just after the receiver has checked the buffer and just before it checks the close flag that this happens.
It’s also easy to fix. I changed the code in the receiver to do a final check on the buffer before giving up:
1 2 3 4
} else if (~SenderLive \/ ~ReceiverLive) { recv_final_check: if (Len(Buffer) = 0) { want := 0; goto Done } else goto recv_reading; }
With that change, we can be sure that data sent while the connection is open will always be delivered (provided only that the receiver doesn’t close the connection itself). If you spotted this issue yourself while you were reviewing the code earlier, then well done!
Note that when TLC finds a problem with a temporal property (such as Availability), it does not necessarily find the shortest example first. I changed the limit on Sent to Len(Sent) < 2 and added an action constraint of ~SpuriousInterrupts to get a simpler example, with only 1 byte being sent and no spurious interrupts.
Some odd things
I noticed a couple of other odd things, which I thought I’d mention.
First, NotifyWrite is initialised to TRUE, which seemed unnecessary. We can initialise it to FALSE instead and everything still works. We can even initialise it with NotifyWrite \in {TRUE, FALSE} to allow either behaviour, and thus test that old programs that followed the original version of the spec still work with either behaviour.
That’s a nice advantage of using a specification language. Saying “the code is the spec” becomes less useful as you build up more and more versions of the code!
However, because there was no spec before, we can’t be sure that existing programs do follow it. And, in fact, I found that QubesDB uses the vchan library in a different and unexpected way. Instead of calling read, and then waiting if libvchan says to, QubesDB blocks first in all cases, and then calls the read function once it gets an event.
We can document that by adding an extra step at the start of ReceiverRead:
1 2 3 4 5
recv_init: either goto recv_ready \* (recommended) or { \* (QubesDB does this) with (n \in 1..MaxReadLen) want := n; goto recv_await_data; };
Then TLC shows that NotifyWrite cannot start as FALSE.
The second odd thing is that the receiver sets NotifyRead whenever there isn’t enough data available to fill the application’s buffer completely. But usually when you do a read operation you just provide a buffer large enough for the largest likely message. It would probably make more sense to set NotifyWrite only when the buffer is completely empty. After checking the current version of the algorithm, I changed the specification to allow either behaviour.
Why does vchan work?
At this point, we have specified what vchan should do and how it does it. We have also checked that it does do this, at least for messages up to 3 bytes long with a buffer size of 2. That doesn’t sound like much, but we still checked 79,288 distinct states, with behaviours up to 38 steps long. This would be a perfectly reasonable place to declare the specification (and blog post) finished.
However, TLA has some other interesting abilities. In particular, it provides a very interesting technique to help discover why the algorithm works.
We’ll start with Integrity. We would like to argue as follows:
Integrity is true in any initial state (i.e. Init => Integrity).
Any Next step preserves Integrity (i.e. Integrity /\ Next => Integrity').
Then it would just be a matter looking at each possible action that makes up Next and checking that each one individually preserves Integrity. However, we can’t do this with Integrity because (2) isn’t true. For example, the state { Got: "", Buffer: "21", Sent: "12" } satisfies Integrity, but if we take a read step then the new state won’t. Instead, we have to argue “If we take a Next step in any reachable state then Integrity'”, but that’s very difficult because how do we know whether a state is reachable without searching them all?
So the idea is to make a stronger version of Integrity, called IntegrityI, which does what we want. IntegrityI is called an inductive invariant. The first step is fairly obvious - I began with:
1 2
IntegrityI == Sent = Got \o Buffer \o msg
Integrity just said that Got is a prefix of Sent. This says specifically that the rest is Buffer \o msg - the data currently being transmitted and the data yet to be transmitted.
We can ask TLC to check Init /\ [][Next]_vars => []IntegrityI to check that it is an invariant, as before. It does that by finding all the Init states and then taking Next steps to find all reachable states. But we can also ask it to check IntegrityI /\ [][Next]_vars => []IntegrityI. That is, the same thing but starting from any state matching IntegrityI instead of Init.
I created a new model (IntegrityI) to do that. It reports a few technical problems at the start because it doesn’t know the types of anything. For example, it can’t choose initial values for SenderLive without knowing that SenderLive is a boolean. I added a TypeOK state expression that gives the expected type of every variable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
MESSAGE == Seq(Byte) FINITE_MESSAGE(L) == UNION ( { [ 1..N -> Byte ] : N \in 0..L } ) TypeOK == /\ Sent \in MESSAGE /\ Got \in MESSAGE /\ Buffer \in FINITE_MESSAGE(BufferSize) /\ SenderLive \in BOOLEAN /\ ReceiverLive \in BOOLEAN /\ NotifyWrite \in BOOLEAN /\ DataReadyInt \in BOOLEAN /\ NotifyRead \in BOOLEAN /\ SpaceAvailableInt \in BOOLEAN /\ free \in 0..BufferSize /\ msg \in FINITE_MESSAGE(MaxWriteLen) /\ want \in 0..MaxReadLen /\ have \in 0..BufferSize
We also need to tell it all the possible states of pc (which says which label each process it at):
1 2 3 4 5 6 7 8 9 10 11
PCOK == pc \in [ SW: {"sender_ready", "sender_write", "sender_request_notify", "sender_recheck_len", "sender_write_data", "sender_blocked", "sender_check_notify_data", "sender_notify_data", "sender_check_recv_live", "Done"}, SC: {"sender_open", "sender_notify_closed", "Done"}, RR: {"recv_init", "recv_ready", "recv_reading", "recv_got_len", "recv_recheck_len", "recv_read_data", "recv_final_check", "recv_await_data", "recv_check_notify_read", "recv_notify_read", "Done"}, RC: {"recv_open", "recv_notify_closed", "Done"}, SP: {"spurious"} ]
You might imagine that the PlusCal translator would generate that for you, but it doesn’t. We also need to override MESSAGE with FINITE_MESSAGE(n) for some n (I used 2). Otherwise, it can’t enumerate all possible messages. Now we have:
1 2 3 4
IntegrityI == /\ TypeOK /\ PCOK /\ Sent = Got \o Buffer \o msg
With that out of the way, TLC starts finding real problems (that is, examples showing that IntegrityI /\ Next => IntegrityI' isn’t true). First, recv_read_data would do an out-of-bounds read if have = 1 and Buffer = << >>. Our job is to explain why that isn’t a valid state. We can fix it with an extra constraint:
1 2 3 4 5
IntegrityI == /\ TypeOK /\ PCOK /\ Sent = Got \o Buffer \o msg /\ pc[ReceiverReadID] = "recv_read_data" => have <= Len(Buffer)
(note: that => is “implies”, while the <= is “less-than-or-equal-to”)
Now it complains that if we do recv_got_len with Buffer = << >>, have = 1, want = 0 then we end up in recv_read_data with Buffer = << >>, have = 1, and we have to explain why that can’t happen and so on.
Because TLC searches breadth-first, the examples it finds never have more than 2 states. You just have to explain why the first state can’t happen in the real system. Eventually, you get a big ugly pile of constraints, which you then think about for a bit and simply. I ended up with:
1 2 3 4 5 6 7 8 9 10
IntegrityI == /\ TypeOK /\ PCOK /\ Sent = Got \o Buffer \o msg /\ have <= Len(Buffer) /\ free <= BufferSize - Len(Buffer) /\ pc[SenderWriteID] \in {"sender_write", "sender_request_notify", "sender_recheck_len", "sender_write_data", "sender_blocked", "sender_check_recv_live"} => msg /= << >> /\ pc[SenderWriteID] \in {"sender_ready"} => msg = << >>
It’s a good idea to check the final IntegrityI with the original SpecOK model, just to check it really is an invariant.
So, in summary, Integrity is always true because:
Sent is always the concatenation of Got, Buffer and msg. That’s fairly obvious, because sender_ready sets msg and appends the same thing to Sent, and the other steps (sender_write_data and recv_read_data) just transfer some bytes from the start of one variable to the end of another.
Although, like all local information, the receiver’s have variable might be out-of-date, there must be at least that much data in the buffer, because the sender process will only have added more, not removed any. This is sufficient to ensure that we never do an out-of-range read.
Likewise, the sender’s free variable is a lower bound on the true amount of free space, because the receiver only ever creates more space. We will therefore never write beyond the free space.
I think this ability to explain why an algorithm works, by being shown examples where the inductive property doesn’t hold, is a really nice feature of TLA. Inductive invariants are useful as a first step towards writing a proof, but I think they’re valuable even on their own. If you’re documenting your own algorithm, this process will get you to explain your own reasons for believing it works (I tried it on a simple algorithm in my own code and it seemed helpful).
Some notes:
Originally, I had the free and have constraints depending on pc. However, the algorithm sets them to zero when not in use so it turns out they’re always true.
IntegrityI matches 532,224 states, even with a maximum Sent length of 1, but it passes! There are some games you can play to speed things up; see Using TLC to Check Inductive Invariance for some suggestions (I only discovered that while writing this up).
Proving Integrity
TLA provides a syntax for writing proofs, and integrates with TLAPS (the TLA+ Proof System) to allow them to be checked automatically.
Proving IntegrityI is just a matter of showing that Init => IntegrityI and that it is preserved by any possible [Next]_vars step. To do that, we consider each action of Next individually, which is long but simple enough.
I was able to prove it, but the recv_read_data action was a little difficult because we don’t know that want > 0 at that point, so we have to do some extra work to prove that transferring 0 bytes works, even though the real system never does that.
I therefore added an extra condition to IntegrityI that want is non-zero whenever it’s in use, and also conditions about have and free being 0 when not in use, for completeness:
1 2 3 4 5 6 7 8 9 10
IntegrityI == [...] /\ want = 0 <=> pc[ReceiverReadID] \in {"recv_check_notify_read", "recv_notify_read", "recv_init", "recv_ready", "recv_notify_read", "Done"} /\ \/ pc[ReceiverReadID] \in {"recv_got_len", "recv_recheck_len", "recv_read_data"} \/ have = 0 /\ \/ pc[SenderWriteID] \in {"sender_write", "sender_request_notify", "sender_recheck_len", "sender_write_data"} \/ free = 0
Availability
Integrity was quite easy to prove, but I had more trouble trying to explain Availability. One way to start would be to add Availability as a property to check to the IntegrityI model. However, it takes a while to check properties as it does them at the end, and the examples it finds may have several steps (it took 1m15s to find a counter-example for me).
Here’s a faster way (37s). The algorithm will deadlock if both sender and receiver are in their blocked states and neither interrupt is pending, so I made a new invariant, I, which says that deadlock can’t happen:
1 2 3 4 5 6
I == /\ IntegrityI /\ ~ /\ pc[SenderWriteID] = "sender_blocked" /\ ~SpaceAvailableInt /\ pc[ReceiverReadID] = "recv_await_data" /\ ~DataReadyInt
I discovered some obvious facts about closing the connection. For example, the SenderLive flag is set if and only if the sender’s close thread hasn’t done anything. I’ve put them all together in CloseOK:
1 2 3 4 5 6 7 8 9 10 11 12
(* Some obvious facts about shutting down connections. *) CloseOK == \* An endpoint is live iff its close thread hasn't done anything: /\ pc[SenderCloseID] = "sender_open" <=> SenderLive /\ pc[ReceiverCloseID] = "recv_open" <=> ReceiverLive \* The send and receive loops don't terminate unless someone has closed the connection: /\ pc[ReceiverReadID] \in {"recv_final_check", "Done"} => ~ReceiverLive \/ ~SenderLive /\ pc[SenderWriteID] \in {"Done"} => ~ReceiverLive \/ ~SenderLive \* If the receiver closed the connection then we will get (or have got) the signal: /\ pc[ReceiverCloseID] = "Done" => \/ SpaceAvailableInt \/ pc[SenderWriteID] \in {"sender_check_recv_live", "Done"}
But I had problems with other examples TLC showed me, and I realised that I didn’t actually know why this algorithm doesn’t deadlock.
Intuitively it seems clear enough: the sender puts data in the buffer when there’s space and notifies the receiver, and the receiver reads it and notifies the writer. What could go wrong? But both processes are working with information that can be out-of-date. By the time the sender decides to block because the buffer looked full, the buffer might be empty. And by the time the receiver decides to block because it looked empty, it might be full.
Maybe you already saw why it works from the C code, or the algorithm above, but it took me a while to figure it out! I eventually ended up with an invariant of the form:
1 2 3 4
I == .. /\ SendMayBlock => SpaceWakeupComing /\ ReceiveMayBlock => DataWakeupComing
SendMayBlock is TRUE if we’re in a state that may lead to being blocked without checking the buffer’s free space again. Likewise, ReceiveMayBlock indicates that the receiver might block. SpaceWakeupComing and DataWakeupComing predict whether we’re going to get an interrupt. The idea is that if we’re going to block, we need to be sure we’ll be woken up. It’s a bit ugly, though, e.g.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
DataWakeupComing == \/ DataReadyInt \* Event sent \/ pc[SenderWriteID] = "sender_notify_data" \* Event being sent \/ pc[SenderCloseID] = "sender_notify_closed" \/ pc[ReceiverCloseID] = "recv_notify_closed" \/ /\ NotifyWrite \* Event requested and ... /\ ReceiverLive \* Sender can see receiver is still alive and ... /\ \/ pc[SenderWriteID] = "sender_write_data" /\ free > 0 \/ pc[SenderWriteID] = "sender_check_notify_data" \/ pc[SenderWriteID] = "sender_recheck_len" /\ Len(Buffer) < BufferSize \/ pc[SenderWriteID] = "sender_ready" /\ SenderLive /\ Len(Buffer) < BufferSize \/ pc[SenderWriteID] = "sender_write" /\ Len(Buffer) < BufferSize \/ pc[SenderWriteID] = "sender_request_notify" /\ Len(Buffer) < BufferSize \/ SpaceWakeupComing /\ Len(Buffer) < BufferSize /\ SenderLive
It did pass my model that tested sending one byte, and I decided to try a proof. Well, it didn’t work. The problem seems to be that DataWakeupComing and SpaceWakeupComing are really mutually recursive. The reader will wake up if the sender wakes it, but the sender might be blocked, or about to block. That’s OK though, as long as the receiver will wake it, which it will do, once the sender wakes it…
You’ve probably already figured it out, but I thought I’d document my confusion. It occurred to me that although each process might have out-of-date information, that could be fine as long as at any one moment one of them was right. The last process to update the buffer must know how full it is, so one of them must have correct information at any given time, and that should be enough to avoid deadlock.
That didn’t work either. When you’re at a proof step and can’t see why it’s correct, you can ask TLC to show you an example. e.g. if you’re stuck trying to prove that sender_request_notify preserves I when the receiver is at recv_ready, the buffer is full, and ReceiverLive = FALSE, you can ask for an example of that:
1 2 3 4 5 6 7
Example == /\ PCOK /\ pc[SenderWriteID] = "sender_request_notify" /\ pc[ReceiverReadID] = "recv_ready" /\ ReceiverLive = FALSE /\ I /\ Len(Buffer) = BufferSize
You then create a new model that searches Example /\ [][Next]_vars and tests I. As long as Example has several constraints, you can use a much larger model for this. I also ask it to check the property [][FALSE]_vars, which means it will show any step starting from Example.
It quickly became clear what was wrong: it is quite possible that neither process is up-to-date. If both processes see the buffer contains X bytes of data, and the sender sends Y bytes and the receiver reads Z bytes, then the sender will think there are X + Y bytes in the buffer and the receiver will think there are X - Z bytes, and neither is correct. My original 1-byte buffer was just too small to find a counter-example.
The real reason why vchan works is actually rather obvious. I don’t know why I didn’t see it earlier. But eventually it occurred to me that I could make use of Got and Sent. I defined WriteLimit to be the total number of bytes that the sender would write before blocking, if the receiver never did anything further. And I defined ReadLimit to be the total number of bytes that the receiver would read if the sender never did anything else.
Did I define these limits correctly? It’s easy to ask TLC to check some extra properties while it’s running. For example, I used this to check that ReadLimit behaves sensibly:
1 2 3 4 5 6 7 8 9
ReadLimitCorrect == \* We will eventually receive what ReadLimit promises: /\ WF_vars(ReceiverRead) => \A i \in AvailabilityNat : ReadLimit = i ~> Len(Got) >= i \/ ~ReceiverLive \* ReadLimit can only decrease if we decide to shut down: /\ [][ReadLimit' >= ReadLimit \/ ~ReceiverLive]_vars \* ReceiverRead steps don't change the read limit: /\ [][ReceiverRead => UNCHANGED ReadLimit \/ ~ReceiverLive]_vars
Because ReadLimit is defined in terms of what it does when no other processes run, this property should ideally be tested in a model without the fairness conditions (i.e. just Init /\ [][Next]_vars). Otherwise, fairness may force the sender to perform a step. We still want to allow other steps, though, to show that ReadLimit is a lower bound.
With this, we can argue that e.g. a 2-byte buffer will eventually transfer 3 bytes:
The receiver will eventually read 3 bytes as long as the sender eventually sends 3 bytes.
The sender will eventually send 3, if the receiver reads at least 1.
The receiver will read 1 if the sender sends at least 1.
The sender will send 1 if the reader has read at least 0 bytes, which is always true.
By this point, I was learning to be more cautious before trying a proof, so I added some new models to check this idea further. One prevents the sender from ever closing the connection and the other prevents the receiver from ever closing. That reduces the number of states to consider and I was able to check a slightly larger model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
I == /\ IntegrityI /\ CloseOK \* If the reader is stuck, but data is available, the sender will unblock it: /\ ReaderShouldBeUnblocked => \* The sender is going to write more: \/ WriteLimit > Len(Got) + Len(Buffer) /\ Len(msg) > 0 /\ SenderLive \* The sender is about to increase ReadLimit: \/ (\/ pc[SenderWriteID] = "sender_check_notify_data" /\ NotifyWrite \/ pc[SenderWriteID] = "sender_notify_data") /\ ReadLimit < Len(Got) + Len(Buffer) \* The sender is about to notify us of shutdown: \/ pc[SenderCloseID] \in {"sender_notify_closed"} \* If the writer is stuck, but there is now space available, the receiver will unblock it: /\ WriterShouldBeUnblocked => \* The reader is going to read more: \/ ReadLimit > Len(Got) /\ ReceiverLive \* The reader is about to increase WriteLimit: \/ (\/ pc[ReceiverReadID] = "recv_check_notify_read" /\ NotifyRead \/ pc[ReceiverReadID] = "recv_notify_read") /\ WriteLimit < Len(Got) + BufferSize \* The receiver is about to notify us of shutdown: \/ pc[ReceiverCloseID] \in {"recv_notify_closed"} /\ NotifyFlagsCorrect
If a process is on a path to being blocked then it must have set its notify flag. NotifyFlagsCorrect says that in that case, the flag it still set, or the interrupt has been sent, or the other process is just about to trigger the interrupt.
I managed to use that to prove that the sender’s steps preserved I, but I needed a little extra to finish the receiver proof. At this point, I finally spotted the obvious invariant (which you, no doubt, saw all along): whenever NotifyRead is still set, the sender has accurate information about the buffer.
1 2 3 4 5
/\ NotifyRead => \* The sender has accurate information about the buffer: \/ WriteLimit = Len(Got) + BufferSize \* Or the flag is being cleared right now: \/ pc[ReceiverReadID] = "recv_check_notify_read"
That’s pretty obvious, isn’t it? The sender checks the buffer after setting the flag, so it must have accurate information at that point. The receiver clears the flag after reading from the buffer (which invalidates the sender’s information).
Now I had a dilemma. There was obviously going to be a matching property about NotifyWrite. Should I add that, or continue with just this? I was nearly done, so I continued and finished off the proofs.
With I proved, I was able to prove some other nice things quite easily:
1 2 3 4 5
THEOREM /\ I /\ SenderLive /\ ReceiverLive /\ \/ pc[SenderWriteID] = "sender_ready" \/ pc[SenderWriteID] = "sender_blocked" /\ ~SpaceAvailableInt => ReadLimit = Len(Got) + Len(Buffer)
That says that, whenever the sender is idle or blocked, the receiver will read everything sent so far, without any further help from the sender. And:
1 2 3 4
THEOREM /\ I /\ SenderLive /\ ReceiverLive /\ pc[ReceiverReadID] \in {"recv_await_data"} /\ ~DataReadyInt => WriteLimit = Len(Got) + BufferSize
That says that whenever the receiver is blocked, the sender can fill the buffer. That’s pretty nice. It would be possible to make a vchan system that e.g. could only send 1 byte at a time and still prove it couldn’t deadlock and would always deliver data, but here we have shown that the algorithm can use the whole buffer. At least, that’s what these theorems say as long as you believe that ReadLimit and WriteLimit are defined correctly.
With the proof complete, I then went back and deleted all the stuff about ReadLimit and WriteLimit from I and started again with just the new rules about NotifyRead and NotifyWrite. Instead of using WriteLimit = Len(Got) + BufferSize to indicate that the sender has accurate information, I made a new SenderInfoAccurate that just returns TRUE whenever the sender will fill the buffer without further help. That avoids some unnecessary arithmetic, which TLAPS needs a lot of help with.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
(* The sender's information is accurate if whenever it is going to block, the buffer really is full. *) SenderInfoAccurate == \* We have accurate information: \/ Len(Buffer) + free = BufferSize \* In these states, we're going to check the buffer before blocking: \/ pc[SenderWriteID] \in {"sender_ready", "sender_request_notify", "sender_write", "sender_recheck_len", "sender_check_recv_live", "Done"} \/ pc[SenderWriteID] \in {"sender_request_notify"} /\ free < Len(msg) \* If we've been signalled, we'll immediately wake next time we try to block: \/ SpaceAvailableInt \* We're about to write some data: \/ /\ pc[SenderWriteID] \in {"sender_write_data"} /\ free >= Len(msg) \* But we won't need to block \* If we wrote all the data we intended to, we'll return without blocking: \/ /\ pc[SenderWriteID] \in {"sender_check_notify_data", "sender_notify_data"} /\ Len(msg) = 0
By talking about accuracy instead of the write limit, I was also able to include “Done” in with the other happy cases. Before, that had to be treated as a possible problem because the sender can’t use the full buffer when it’s Done.
With this change, the proof of Spec => []I became much simpler (384 lines shorter). And most of the remaining steps were trivial.
The ReadLimit and WriteLimit idea still seemed useful, though, but I found I was able to prove the same things from I. e.g. we can still conclude this, even if I doesn’t mention WriteLimit:
1 2 3 4
THEOREM /\ I /\ SenderLive /\ ReceiverLive /\ pc[ReceiverReadID] \in {"recv_await_data"} /\ ~DataReadyInt => WriteLimit = Len(Got) + BufferSize
That’s nice, because it keeps the invariant and its proofs simple, but we still get the same result in the end.
I initially defined WriteLimit to be the number of bytes the sender could write if the sending application wanted to send enough data, but I later changed it to be the actual number of bytes it would write if the application didn’t try to send any more. This is because otherwise, with packet-based sends (where we only write when the buffer has enough space for the whole message at once) WriteLimit could go down. e.g. we think we can write another 3 bytes, but then the application decides to write 10 bytes and now we can’t write anything more.
The limit theorems above are useful properties, but it would be good to have more confidence that ReadLimit and WriteLimit are correct. I was able to prove some useful lemmas here.
First, ReceiverRead steps don’t change ReadLimit (as long as the receiver hasn’t closed the connection):
1 2 3
THEOREM ReceiverReadPreservesReadLimit == ASSUME I, ReceiverLive, ReceiverRead PROVE UNCHANGED ReadLimit
This gives us a good reason to think that ReadLimit is correct:
When the receiver is blocked it cannot read any more than it has without help.
ReadLimit is defined to be Len(Got) then, so ReadLimit is obviously correct for this case.
Since read steps preserve ReadLimit, this shows that ReadLimit is correct in all cases.
e.g. if ReadLimit = 5 and no other processes do anything, then we will end up in a state with the receiver blocked, and ReadLimit = Len(Got) = 5 and so we really did read a total of 5 bytes.
I was also able to prove that it never decreases (unless the receiver closes the connection):
1 2 3
THEOREM ReadLimitMonotonic == ASSUME I, Next, ReceiverLive PROVE ReadLimit' >= ReadLimit
So, if ReadLimit = n then it will always be at least n, and if the receiver ever blocks then it will have read at least n bytes.
I was able to prove similar properties about WriteLimit. So, I feel reasonably confident that these limit predictions are correct.
Disappointingly, we can’t actually prove Availability using TLAPS, because currently it understands very little temporal logic (see TLAPS limitations). However, I could show that the system can’t deadlock while there’s data to be transmitted:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
(* We can't get into a state where the sender and receiver are both blocked and there is no wakeup pending: *) THEOREM DeadlockFree1 == ASSUME I PROVE ~ /\ pc[SenderWriteID] = "sender_blocked" /\ ~SpaceAvailableInt /\ SenderLive /\ pc[ReceiverReadID] = "recv_await_data" /\ ~DataReadyInt /\ ReceiverLive <1> SUFFICES ASSUME /\ pc[SenderWriteID] = "sender_blocked" /\ ~SpaceAvailableInt /\ SenderLive /\ pc[ReceiverReadID] = "recv_await_data" /\ ~DataReadyInt /\ ReceiverLive PROVE FALSE OBVIOUS <1> NotifyFlagsCorrect BY DEF I <1> NotifyRead BY DEF NotifyFlagsCorrect <1> NotifyWrite <2> have = 0 BY DEF IntegrityI, I <2> QED BY DEF NotifyFlagsCorrect <1> SenderInfoAccurate /\ ReaderInfoAccurate BY DEF I <1> free = 0 BY DEF IntegrityI, I <1> Len(Buffer) = BufferSize BY DEF SenderInfoAccurate <1> Len(Buffer) = 0 BY DEF ReaderInfoAccurate <1> QED BY BufferSizeType (* We can't get into a state where the sender is idle and the receiver is blocked unless the buffer is empty (all data sent has been consumed): *) THEOREM DeadlockFree2 == ASSUME I, pc[SenderWriteID] = "sender_ready", SenderLive, pc[ReceiverReadID] = "recv_await_data", ReceiverLive, ~DataReadyInt PROVE Len(Buffer) = 0
I’ve included the proof of DeadlockFree1 above:
To show deadlock can’t happen, it suffices to assume it has happened and show a contradiction.
If both processes are blocked then NotifyRead and NotifyWrite must both be set (because processes don’t block without setting them, and if they’d been unset then an interrupt would now be pending and we wouldn’t be blocked).
Since NotifyRead is still set, the sender is correct in thinking that the buffer is still full.
Since NotifyWrite is still set, the receiver is correct in thinking that the buffer is still empty.
That would be a contradiction, since BufferSize isn’t zero.
If it doesn’t deadlock, then some process must keep getting woken up by interrupts, which means that interrupts keep being sent. We only send interrupts after making progress (writing to the buffer or reading from it), so we must keep making progress. We’ll have to content ourselves with that argument.
Experiences with TLAPS
The toolbox doesn’t come with the proof system, so you need to install it separately. The instructions are out-of-date and have a lot of broken links. In May, I turned the steps into a Dockerfile, which got it partly installed, and asked on the TLA group for help, but no-one else seemed to know how to install it either. By looking at the error messages and searching the web for programs with the same names, I finally managed to get it working in December. If you have trouble installing it too, try using my Docker image.
Once installed, you can write a proof in the toolbox and then press Ctrl-G, Ctrl-G to check it. On success, the proof turns green. On failure, the failing step turns red. You can also do the Ctrl-G, Ctrl-G combination on a single step to check just that step. That’s useful, because it’s pretty slow. It takes more than 10 minutes to check the complete specification.
TLA proofs are done in the mathematical style, which is to write a set of propositions and vaguely suggest that thinking about these will lead you to the proof. This is good for building intuition, but bad for reproducibility. A mathematical proof is considered correct if the reader is convinced by it, which depends on the reader. In this case, the “reader” is a collection of automated theorem-provers with various timeouts. This means that whether a proof is correct or not depends on how fast your computer is, how many programs are currently running, etc. A proof might pass one day and fail the next. Some proof steps consistently pass when you try them individually, but consistently fail when checked as part of the whole proof. If a step fails, you need to break it down into smaller steps.
Sometimes the proof system is very clever, and immediately solves complex steps. For example, here is the proof that the SenderClose process (which represents the sender closing the channel), preserves the invariant I:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
LEMMA SenderClosePreservesI == I /\ SenderClose => I' <1> SUFFICES ASSUME I, SenderClose PROVE I' OBVIOUS <1> IntegrityI BY DEF I <1> TypeOK BY DEF IntegrityI <1> PCOK BY DEF IntegrityI <1>1. CASE sender_open <2> USE <1>1 DEF sender_open <2> UNCHANGED << pc[SenderWriteID], pc[ReceiverReadID], pc[ReceiverCloseID] >> BY DEF PCOK <2> pc'[SenderCloseID] = "sender_notify_closed" BY DEF PCOK <2> TypeOK' BY DEF TypeOK <2> PCOK' BY DEF PCOK <2> IntegrityI' BY DEF IntegrityI <2> NotifyFlagsCorrect' BY DEF NotifyFlagsCorrect, I <2> QED BY DEF I, SenderInfoAccurate, ReaderInfoAccurate, CloseOK <1>2. CASE sender_notify_closed <2> USE <1>2 DEF sender_notify_closed <2> UNCHANGED << pc[SenderWriteID], pc[ReceiverReadID], pc[ReceiverCloseID] >> BY DEF PCOK <2> pc'[SenderCloseID] = "Done" BY DEF PCOK <2> TypeOK' BY DEF TypeOK <2> PCOK' BY DEF PCOK <2> IntegrityI' BY DEF IntegrityI <2> NotifyFlagsCorrect' BY DEF NotifyFlagsCorrect, I <2> QED BY DEF I, SenderInfoAccurate, ReaderInfoAccurate, CloseOK <1>3. QED BY <1>1, <1>2 DEF SenderClose
A step such as IntegrityI' BY DEF IntegrityI says “You can see that IntegrityI will be true in the next step just by looking at its definition”. So this whole lemma is really just saying “it’s obvious”. And TLAPS agrees.
At other times, TLAPS can be maddeningly stupid. And it can’t tell you what the problem is - it can only make things go red.
For example, this fails:
1 2 3 4 5
THEOREM ASSUME pc' = [pc EXCEPT ![1] = "l2"], pc[2] = "l1" PROVE pc'[2] = "l1" OBVIOUS
We’re trying to say that pc[2] is unchanged, given that pc' is the same as pc except that we changed pc[1]. The problem is that TLA is an untyped language. Even though we know we did a mapping update to pc, that isn’t enough (apparently) to conclude that pc is in fact a mapping. To fix it, you need:
1 2 3 4 5 6
THEOREM ASSUME pc \in [Nat -> STRING], pc' = [pc EXCEPT ![1] = "l2"], pc[2] = "l1" PROVE pc'[2] = "l1" OBVIOUS
The extra pc \in [Nat -> STRING] tells TLA the type of the pc variable. I found missing type information to be the biggest problem when doing proofs, because you just automatically assume that the computer will know the types of things. Another example:
1 2 3 4 5
THEOREM ASSUME NEW x \in Nat, NEW y \in Nat, x + Min(y, 10) = x + y PROVE Min(y, 10) = y OBVIOUS
We’re just trying to remove the x + ... from both sides of the equation. The problem is, TLA doesn’t know that Min(y, 10) is a number, so it doesn’t know whether the normal laws of addition apply in this case. It can’t tell you that, though - it can only go red. Here’s the solution:
1 2 3 4 5
THEOREM ASSUME NEW x \in Nat, NEW y \in Nat, x + Min(y, 10) = x + y PROVE Min(y, 10) = y BY DEF Min
The BY DEF Min tells TLAPS to share the definition of Min with the solvers. Then they can see that Min(y, 10) must be a natural number too and everything works.
Another annoyance is that sometimes it can’t find the right lemma to use, even when you tell it exactly what it needs. Here’s an extreme case:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
LEMMA TransferFacts == ASSUME NEW src, NEW src2, \* (TLAPS doesn't cope with "NEW VARAIBLE src") NEW dst, NEW dst2, NEW i \in 1..Len(src), src \in MESSAGE, dst \in MESSAGE, dst2 = dst \o Take(src, i), src2 = Drop(src, i) PROVE /\ src2 \in MESSAGE /\ Len(src2) = Len(src) - i /\ dst2 \in MESSAGE /\ Len(dst2) = Len(dst) + i /\ UNCHANGED (dst \o src) PROOF OMITTED LEMMA SameAgain == ASSUME NEW src, NEW src2, \* (TLAPS doesn't cope with "NEW VARAIBLE src") NEW dst, NEW dst2, NEW i \in 1..Len(src), src \in MESSAGE, dst \in MESSAGE, dst2 = dst \o Take(src, i), src2 = Drop(src, i) PROVE /\ src2 \in MESSAGE /\ Len(src2) = Len(src) - i /\ dst2 \in MESSAGE /\ Len(dst2) = Len(dst) + i /\ UNCHANGED (dst \o src) BY TransferFacts
TransferFacts states some useful facts about transferring data between two variables. You can prove that quite easily. SameAgain is identical in every way, and just refers to TransferFacts for the proof. But even with only one lemma to consider - one that matches all the assumptions and conclusions perfectly - none of the solvers could figure this one out!
My eventual solution was to name the bundle of results. This works:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
TransferResults(src, src2, dst, dst2, i) == /\ src2 \in MESSAGE /\ Len(src2) = Len(src) - i /\ dst2 \in MESSAGE /\ Len(dst2) = Len(dst) + i /\ UNCHANGED (dst \o src) LEMMA TransferFacts == ASSUME NEW src, NEW src2, NEW dst, NEW dst2, NEW i \in 1..Len(src), src \in MESSAGE, dst \in MESSAGE, dst2 = dst \o Take(src, i), src2 = Drop(src, i) PROVE TransferResults(src, src2, dst, dst2, i) PROOF OMITTED LEMMA SameAgain == ASSUME NEW src, NEW src2, NEW dst, NEW dst2, NEW i \in 1..Len(src), src \in MESSAGE, dst \in MESSAGE, dst2 = dst \o Take(src, i), src2 = Drop(src, i) PROVE TransferResults(src, src2, dst, dst2, i) BY TransferFacts
Most of the art of using TLAPS is in controlling how much information to share with the provers. Too little (such as failing to provide the definition of Min) and they don’t have enough information to find the proof. Too much (such as providing the definition of TransferResults) and they get overwhelmed and fail to find the proof.
It’s all a bit frustrating, but it does work, and being machine checked does give you some confidence that your proofs are actually correct.
Another, perhaps more important, benefit of machine checked proofs is that when you decide to change something in the specification you can just ask it to re-check everything. Go and have a cup of tea, and when you come back it will have highlighted in red any steps that need to be updated. I made a lot of changes, and this worked very well.
The TLAPS philosophy is that
If you are concerned with an algorithm or system, you should not be spending your time proving basic mathematical facts. Instead, you should assert the mathematical theorems you need as assumptions or theorems.
So even if you can’t find a formal proof of every step, you can still use TLAPS to break it down into steps than you either can prove, or that you think are obvious enough that they don’t require a proof. However, I was able to prove everything I needed for the vchan specification within TLAPS.
The final specification
I did a little bit of tidying up at the end. In particular, I removed the want variable from the specification. I didn’t like it because it doesn’t correspond to anything in the OCaml implementation, and the only place the algorithm uses it is to decide whether to set NotifyWrite, which I thought might be wrong anyway.
I changed this:
1 2
recv_got_len: if (have >= want) goto recv_read_data else NotifyWrite := TRUE;
to:
1 2 3 4 5 6
recv_got_len: either { if (have > 0) goto recv_read_data else NotifyWrite := TRUE; } or { NotifyWrite := TRUE; };
That always allows an implementation to set NotifyWrite if it wants to, or to skip that step just as long as have > 0. That covers the current C behaviour, my proposed C behaviour, and the OCaml implementation. It also simplifies the invariant, and even made the proofs shorter!
I put the final specification online at spec-vchan. I also configured Travis CI to check all the models and verify all the proofs. That’s useful because sometimes I’m too impatient to recheck everything on my laptop before pushing updates.
You can generate a PDF version of the specification with make pdfs. Expressions there can be a little easier to read because they use proper symbols, but it also breaks things up into pages, which is highly annoying. It would be nice if it could omit the proofs too, as they’re really only useful if you’re trying to edit them. I’d rather just see the statement of each theorem.
The original bug
With my new understanding of vchan, I couldn’t see anything obvious wrong with the C code (at least, as long as you keep the connection open, which the firewall does).
I then took a look at ocaml-vchan. The first thing I noticed was that someone had commented out all the memory barriers, noting in the Git log that they weren’t needed on x86. I am using x86, so that’s not it, but I filed a bug about it anyway: Missing memory barriers.
The other strange thing I saw was the behaviour of the read function. It claims to implement the Mirage FLOW interface, which says that read “blocks until some data is available and returns a fresh buffer containing it”. However, looking at the code, what it actually does is to return a pointer directly into the shared buffer. It then delays updating the consumer counter until the next call to read. That’s rather dangerous, and I filed another bug about that: Read has very surprising behaviour. However, when I checked the mirage-qubes code, it just takes this buffer and makes a copy of it immediately. So that’s not the bug either.
Also, the original bug report mentioned a 10 second timeout, and neither the C implementation nor the OCaml one had any timeouts. Time to look at QubesDB itself.
QubesDB accepts messages from either the guest VM (the firewall) or from local clients connected over Unix domain sockets. The basic structure is:
1 2 3 4 5 6
while True: await vchan event, local client data, or 10 second timeout while vchan.receive_buffer non-empty: handle_vchan_data() for each ready client: handle_client_data()
The suspicion was that we were missing a vchan event, but then it was discovering that there was data in the buffer anyway due to the timeout. Looking at the code, it does seem to me that there is a possible race condition here:
A local client asks to send some data.
handle_client_data sends the data to the firewall using a blocking write.
The firewall sends a message to QubesDB at the same time and signals an event because the firewall-to-db buffer has data.
QubesDB gets the event but ignores it because it’s doing a blocking write and there’s still no space in the db-to-firewall direction.
The firewall updates its consumer counter and signals another event, because the buffer now has space.
The blocking write completes and QubesDB returns to the main loop.
QubesDB goes to sleep for 10 seconds, without checking the buffer.
I don’t think this is the cause of the bug though, because the only messages the firewall might be sending here are QDB_RESP_OK messages, and QubesDB just discards such messages.
I managed to reproduce the problem myself, and saw that in fact QubesDB doesn’t make any progress due to the 10 second timeout. It just tries to go back to sleep for another 10 seconds and then immediately gets woken up by a message from a local client. So, it looks like QubesDB is only sending updates every 10 seconds because its client, qubesd, is only asking it to send updates every 10 seconds! And looking at the qubesd logs, I saw stacktraces about libvirt failing to attach network devices, so I read the Xen network device attachment specification to check that the firewall implemented that correctly.
I’m kidding, of course. There isn’t any such specification. But maybe this blog post will inspire someone to write one…
Conclusions
As users of open source software, we’re encouraged to look at the source code and check that it’s correct ourselves. But that’s pretty difficult without a specification saying what things are supposed to do. Often I deal with this by learning just enough to fix whatever bug I’m working on, but this time I decided to try making a proper specification instead. Making the TLA specification took rather a long time, but it was quite pleasant. Hopefully the next person who needs to know about vchan will appreciate it.
A TLA specification generally defines two sets of behaviours. The first is the set of desirable behaviours (e.g. those where the data is delivered correctly). This definition should clearly explain what users can expect from the system. The second defines the behaviours of a particular algorithm. This definition should make it easy to see how to implement the algorithm. The TLC model checker can check that the algorithm’s behaviours are all acceptable, at least within some defined limits.
Writing a specification using the TLA notation forces us to be precise about what we mean. For example, in a prose specification we might say “data sent will eventually arrive”, but in an executable TLA specification we’re forced to clarify what happens if the connection is closed. I would have expected that if a sender writes some data and then closes the connection then the data would still arrive, but the C implementation of vchan does not always ensure that. The TLC model checker can find a counter-example showing how this can fail in under a minute.
To explain why the algorithm always works, we need to find an inductive invariant. The TLC model checker can help with this, by presenting examples of unreachable states that satisfy the invariant but don’t preserve it after taking a step. We must add constraints to explain why these states are invalid. This was easy for the Integrity invariant, which explains why we never receive incorrect data, but I found it much harder to prove that the system cannot deadlock. I suspect that the original designer of a system would find this step easy, as presumably they already know why it works.
Once we have found an inductive invariant, we can write a formal machine-checked proof that the invariant is always true. Although TLAPS doesn’t allow us to prove liveness properties directly, I was able to prove various interesting things about the algorithm: it doesn’t deadlock; when the sender is blocked, the receiver can read everything that has been sent; and when the receiver is blocked, the sender can fill the entire buffer.
Writing formal proofs is a little tedious, largely because TLA is an untyped language. However, there is nothing particularly difficult about it, once you know how to work around various limitations of the proof checkers.
You might imagine that TLA would only work on very small programs like libvchan, but this is not the case. It’s just a matter of deciding what to specify in detail. For example, in this specification I didn’t give any details about how ring buffers work, but instead used a single Buffer variable to represent them. For a specification of a larger system using vchan, I would model each channel using just Sent and Got and an action that transferred some of the difference on each step.
The TLA Toolbox has some rough edges. The ones I found most troublesome were: the keyboard shortcuts frequently stop working; when a temporal property is violated, it doesn’t tell you which one it was; and the model explorer tooltips appear right under the mouse pointer, preventing you from scrolling with the mouse wheel. It also likes to check its “news feed” on a regular basis. It can’t seem to do this at the same time as other operations, and if you’re in the middle of a particularly complex proof checking operation, it will sometimes suddenly pop up a box suggesting that you cancel your job, so that it can get back to reading the news.
However, it is improving. In the latest versions, when you get a syntax error, it now tells you where in the file the error is. And pressing Delete or Backspace while editing no longer causes it to crash and lose all unsaved data. In general I feel that the TLA Toolbox is quite usable now. If I were designing a new protocol, I would certainly use TLA to help with the design.
TLA does not integrate with any language type systems, so even after you have a specification you still need to check manually that your code matches the spec. It would be nice if you could check this automatically, somehow.
One final problem is that whenever I write a TLA specification, I feel the need to explain first what TLA is. Hopefully it will become more popular and that problem will go away.
0 notes
jaymelsorenson · 6 years
Text
Dreaming with God
(Sermon Notes from a message I spoke a few weeks ago)
Did you have a dream or big plans when you were young/little?
What were some of them?
Are you doing that thing you dreamt of?
What are some things that have held you back?
Jeremiah 29:11 NIV – For I know the plans I have for you,” declares the Lord, “plans to prosper you and not to harm you, plans to give you hope and a future.
This morning we are going to dig into some of the hopes and dreams God has for you! What are they? And maybe what has held us back in the past
We’re going to take some time to make a list and commit them to Him                             
PRAY (Opening)
When I was young – I had big dreams – I knew I had GREATNESS inside me
- Designer, a model, a singer, teacher, bus driver
((We’ve all got to grow up sometime))
Grew up and OUT of that ‘PHASE’ – sort of FORGOT about those passions & dreams in my life
Fear said - No one thinks I’m ‘good enough’ so I might as well do something else
I’ll probably end up an accountant or secretary (MOM’S job)
Became OK with MEDIOCRE, AVERAGE
I GAVE UP
I got into DRUGS pretty young, and some unhealthy RELATIONSHIPS
NO satisfaction in LIFE
All of it left me feeling ALONE, and like there was nothing I could do about being AVERAGE
I CAME TO KNOW the Lord (or rededicated my life) when I was 16 and began to look at my life through RELIGION
Religion also said AVERAGE is BEST, average is safe
Being HUMBLE looks like being average. Not standing out, not taking credit for what you’ve done, not doing anything to be noticed
Religion was NOT OK with DOING WHAT I WANTED to do, because that was ‘what I wanted’ and NOT WHAT GOD WANTED
So, I pressed on and tried to BLEND IN and remain UNDER THE RADAR, what I thought HUMILITY LOOKED LIKE
I still did some really COOL STUFF, but it was more out of a heart of thinking this is what GOOD CHRISTIANS DO
I got MARRIED, had KIDS, thought I knew what God had for me or for my family
Then a few years ago, I was given a ‘GIVING KEY’ that said ‘DREAM’ on it.
The more I PRAYED into that word and started to try and EMBRACE it, the more
I realized I had LET GO of any DREAMS or visions FOR ME, my dreams had become about my family, my kids, but I had NONE that were ONLY FOR ME
God began SPEAKING to me about MY DREAMS for MY LIFE
•••• GOD WANTS TO DREAM WITH YOU ••••
Once I had this revelation, Holy Spirit kept talking to me about dreams everywhere I looked.
SERMONS, PODCASTS, BOOKS, ONLINE, the BIBLE, FRIENDS, the RADIO
IT WAS CRAZY
I began to ASK GOD what HE had for ME
What does that look like?
1.    Who Did God Create You To Be, Do, & Reach?
He began to reveal to me who HE CREATED me to BE, what He created me to DO, and who He created me to REACH
-       Confident, assertive, creative, gentle, loving, in the details, prophetic, leader, mother to more than just my blood, wife, encourager, effective communicator, etc.
But he was also speaking to me a lot about my PASSIONS too
-       Worship, art, writing music, creating anything, young people, people as a whole, relationships (friends), missions, Latin America, languages, piano, guitar, singing, leading, helping, & more
And that HE PUT those PASSIONS & DREAMS there for me to PURSUE
NOT to TEASE me, BUT to FUEL me
FUEL for me to WANT to do what HE is DREAMING FOR ME to do
Once I came to a working revelation of that, I began to look at what God put in my heart to do
2.    Make A List WITH Him
* Habakkuk 2:2 ESV – “Write the vision; make it plain on tablets, so he may run who reads it.”
When you make a list ask things like:
-       God, what did you create me to do?
-       What are your dreams for me?
-       What am I just naturally drawn to?
-       What am I naturally good at?
-       What do I look at and think, ‘If only that were me doing that thing’?
-       God, who did You create me to reach?
-       What did You have in mind when You created me?
Once you’ve sought the Lord about His dreams and plans for you, WRITE out a LIST
Check your heart motives – not for the money or fame or recognition, but FOR God and WITH God
We talked a little about my understanding of humility earlier but really
-       Humility in the Bible does not mean having no power – it means understanding where that power you carry comes from.
In all your ways, acknowledge Him and He will make your path straight.
Honor God as you grow and dream, giving Him due credit, but also understanding God has placed greatness in you
Then COMMIT your plans to Him, partner with what He wants for you
*Proverbs 16:3 ESV - Commit your work to the Lord, and your plans will be established.
SET GOALS
He is so GOOD guys!
He really just wants the best for us! 
*Ephesians 3:20 AMP – Now to Him who is able to (carry out His purpose and) do superabundantly more than all that we dare ask or think (infinitely beyond our greatest prayers, hopes, or dreams), according to His power that is at work within us
MORE THAN WE DARE ASK, THINK, OR IMAGINE!
He CAN DO IT! And wants to partner with you to get it done!
My MOM used to make (still makes) GOAL POSTERS, long term and short term goals are great
Something visual to remind you of all that He’s called you to do.
Little steps that can be measured and accounted for
Mini goals for me look like - Learning to play a new chord on guitar, or know all the lyrics and chords to a song without sheet music
Big goals for me look like – Full time ministry, worship pastor, missions, learn a new language, record an album
And then 
3.    Share
As I began to MAKE LISTS and set GOALS, I began sharing my heart and telling people about what God wanted for me – MIXED REVIEWS
A few were excited to hear and offered support
But there were more people that were not excited or supportive at all
Dominican trip - only a few weeks to raise like $2000
Not a good idea to go that route, don’t try that, don’t do things that way, that’ll never happen, that’s too much money, that’ll take too long, you’re too old, you’re too young
 I got discouraged about sharing my dreams and I remembered Joseph
*Genesis 37:5 ESV – Now Joseph had a dream, and when he told it to his brothers they hated him even more.
We need a safe place to share our dreams, there are wrong people and right people.
Had Joseph gone to the right people (maybe his father even), the support may have looked different
Around this time in my life, I had the opportunity to share a dream of mine (to have a voice to lead worship and to lead consistently) with the School of Supernatural Ministry I was attending.
So, a safe place – for you it may be this refresh, good friends, spouse, a parent, maybe a mentor
One who will champion you, who gets you, people who see your heart, who support you, who uplift you, people who share their dreams with you.
They encouraged me, asked me about my goals as the months went on, and cheered me on and championed me as they saw fruit from that!
It was a safe place to share and from there I got to see that dream take off!
Since then I have been leading worship at Eastpointe (main service and a number of other ministries there), youth ministries, ladies Bible studies, Worship Pastor substitute, and I even started playing piano and eventually guitar while leading (which i could do a little before, but not singing and playing)!
Side note – I only started playing guitar when I was 25 and I didn’t even really get serious about it until I was 30! And I am still learning at 33! (never too late for you)
 Now God is expanding my dreams and vision for my life.
Lately it has been a lot about leading, pastoring, reaching people, writing, speaking, writing songs, leading my songs, recording my songs
About painting, designing and creating things, decorating, event planning, I love ‘the details’ so really anything that takes a lot of attention to detail.
God and I will forever be revising that list.
 MUSIC ON (Closing)
 He always dreams bigger than me. So how could I not keep adjusting it?
Think for a minute, dig deep
What is something you dreamt about when you were a child that you have given up on? Maybe because of lack of money, or fear, or because someone else told you that you couldn’t do it?
Then think about God. And all that He is. All that He can do.
Now how could God make that dream bigger or better?
  That’s what He wants for you
He has infinite power and wisdom and creative thinking abilities and problem solving skills and a thousand cattle on a hill
Like, do we think we are better than the one who gave us our talents/passions/skills?
He is the creator of creativity, the creator of dreams
The MOST CREATIVE BEING actually.
And WE were created in HIS image!
Which means we are inherently creative
We were never called to be average, designed for greatness
We are a chosen people, set apart
God has more for us than we could ever ask, think, or imagine. Remember that verse?
 Let that marinate
 We are going to transition into a kind of activation time, maybe 10 minutes or so? now that we’ve got the meat – let’s eat
Get you some paper and pen or pencil
The Lord reminded me of my dreams and visions and purpose in my life that were long forgotten or discarded
And I believe Holy Spirit is going to do that for us again this morning.
-       Position yourself open to receive what God wants/dreams for you
As I ask these questions, just write whatever comes to your mind first. Don’t question it too much. If it’s good, write it down
God will always speak highly of you, so if it’s not good it’s not God.
Let’s just see what Holy Spirit says this morning
 PRAY
  1.   God, who do You say I am?
2.   What did You have in mind when You created me?
3.   What did You create me to do?
4.   Who did You create me to be?
5.   Who did You create me to reach?
6.   What are Your dreams for me?
 Now look at that list, isn’t He good guys?
I love how He created each of us so different and yet each so powerful
Is there an overall theme looking at your list?
For me, my lists usually stem in a vein of creativity
Try and find an underlying theme – justice, peace, love, creativity, outreach, serving
Is there a dream in there that needs to be chased?
I dare you to chase those dreams.
Bear down, set goals, get it gurl.
 I challenge you to share during free time, or over lunch maybe even
Grab 2 or 3 ladies and share some of what God revealed to you.
And don’t forget to be the ‘right person’ supportive, loving, and encouraging – Be their champion
0 notes
filiplig · 6 years
Text
Osnos, Evan - Age of Ambition: Chasing Fortune, Truth, and Faith in the New China
page 4 | location 54-58 | Added on Thursday, 14 May 2015 15:50:31
Above all, it is a time of plenty—the crest of a transformation one hundred times the scale, and ten times the speed, of the first Industrial Revolution, which created modern Britain. The Chinese people no longer want for food—the average citizen eats six times as much meat as in 1976—but this is a ravenous era of a different kind, a period when people have awoken with a hunger for new sensations, ideas, and respect. China is the world’s largest consumer of energy, movies, beer, and platinum; it is building more high-speed railroads and airports than the rest of the world combined.
 page 6 | location 85-88 | Added on Thursday, 14 May 2015 15:54:42
China today is riven by contradictions. It is the world’s largest buyer of Louis Vuitton, second only to the United States in its purchases of Rolls-Royces and Lamborghinis, yet ruled by a Marxist-Leninist party that seeks to ban the word luxury from billboards. The difference in life expectancy and income between China’s wealthiest cities and its poorest provinces is the difference between New York and Ghana.
 page 8 | location 115-117 | Added on Thursday, 14 May 2015 15:58:25
The longer I lived in China, the more I sensed that the Chinese people have outpaced the political system that nurtured their rise. The Party has unleashed the greatest expansion of human potential in world history—and spawned, perhaps, the greatest threat to its own survival.
 page 39 | location 591-594 | Added on Friday, 15 May 2015 17:03:15
“To survive in China you must reveal nothing to others. Or it could be used against you … That’s why I’ve come to think the deepest part of the self is best left unclear. Like mist and clouds in a Chinese landscape painting, hide the private part behind your social persona. Let your public self be like rice in a dinner: bland and inconspicuous, taking on the flavors of its surroundings while giving off no flavor of its own.”
 page 69 | location 1050-1052 | Added on Saturday, 16 May 2015 17:49:28
The size of China’s population made college admissions so brutally competitive that people compared it to “ten thousand horses crossing a river on a single log.” To create more opportunities, the government doubled the number of colleges and universities, in just ten years, to 2,409. Even so, only one in every four aspiring college students was able to earn a place.
 page 98 | location 1496-1498 | Added on Tuesday, 19 May 2015 16:58:22
By 2007, when Siu Yun-Ping hit his streak in Macau, the China scholar Minxin Pei noted that nearly half of all Chinese provinces had sent their chief of transportation to jail. Pei calculated that corruption of one kind or another was costing China 3 percent of its gross domestic product—more than the national budget for education.
 page 104 | location 1595-1596 | Added on Tuesday, 19 May 2015 17:11:09
“Chinese have never looked at foreigners as human beings,” Lu Xun wrote. “We either look up to them as gods or down on them as wild animals.”
 page 106 | location 1617-1619 | Added on Tuesday, 19 May 2015 17:13:31
When the Chinese travel industry surveyed the public on its dream destinations, no place scored higher than Europe. Asked what they liked about it, the Chinese put “culture” at the top of the list. (On the negative side, respondents complained of “arrogance” and “poor-quality Chinese food.”)
 page 120 | location 1837-1839 | Added on Tuesday, 19 May 2015 17:37:45
“Analysts overseas can never understand why the Chinese economy has grown so fast,” he said. “Yes, it’s a one-party state, but the administrators are selected from among the elites, and elites picked from one-point-three billion people might as well be called super-elites.”
 page 157 | location 2393-2395 | Added on Saturday, 23 May 2015 17:58:20
“Chinese people have begun to think, ‘One part is the good life, another part is democracy,’” Liu went on. “If democracy can really give you the good life, that’s good. But without democracy, if we can still have the good life, why should we choose democracy?”
 page 186 | location 2849-2851 | Added on Sunday, 24 May 2015 18:10:53
“I don’t believe anyone who truly loves literature can also love Mao Zedong,” he told me. “These two things are incompatible. Even putting aside his political performance, or how many bad things he did, or how many people starved to death because of him, or how many people he killed, there is one thing for sure: Mao Zedong was the enemy of writers.”
 page 210 | location 3211-3213 | Added on Monday, 25 May 2015 16:55:20
His contacts overseas and his embrace of the Internet merged two of the Party’s most neuralgic issues: the threat of a foreign-backed “color revolution” and the organizing potential of the Web. The previous year, President Hu Jintao told the Politburo, “Whether we can cope with the Internet” will determine “the stability of the state.”
 page 221 | location 3387-3392 | Added on Monday, 25 May 2015 17:13:40
Two days after Liu won the prize, his wife, Liu Xia, visited him at Jinzhou Prison in the province of Liaoning. “This is for the lost souls of June Fourth,” he told her. Returning to Beijing, she was placed under house arrest. The government barred her, and anyone else, from going to Oslo to pick up the award; the only previous time this had happened was in 1935, when Hitler prevented relatives from going on behalf of Carl von Ossietzky, the German writer and pacifist, who was in a guarded hospital bed after having been in a concentration camp. Liu Xia’s telephone and Internet connections were severed, and she was barred from contact with anyone but her mother—the beginning of a campaign of isolation that would last for years.
 page 222 | location 3399-3404 | Added on Monday, 25 May 2015 17:15:37
Decades ago, the black screen had been a fair reflection of China’s blinkered view of the world, its backwardness and seclusion. But now the instinct to shield the public from unflattering facts was absurdly at odds with the openness and sophistication in other parts of Chinese life, and it seemed to cheapen what ordinary Chinese people had worked so hard to achieve. China was not Hitler’s Germany, but Chinese leaders were willing to let themselves be lumped beside the Nazis in the history of the Nobel Prize. Either the strongest forces in the Chinese government were not wise enough to realize the cost, or the wisest forces were not strong enough to persuade the others.
 page 245 | location 3748-3753 | Added on Tuesday, 26 May 2015 18:04:36
 The truth was that I struggled with the question of how much to write about Ai Weiwei—or, for that matter, the blind lawyer Chen Guangcheng or the Nobel laureate Liu Xiaobo. How much did their ordeals really tell us about China? If the average news consumer in the West read (or watched or heard) no more than one China story a week, should it be about people with dramatic lives or typical lives? The hardest part about writing from China was not navigating the authoritarian bureaucracy or the occasional stint in a police station. It was the problem of proportions: How much of the drama was light and how much was dark? How much was about opportunity and how much was about repression? From far away it was difficult for outsiders to judge, but I found that up close it wasn’t much easier, because it depended on where you were looking.
 page 264 | location 4047-4049 | Added on Wednesday, 27 May 2015 17:44:23
In 2011 the central bank posted to the Web an internal report estimating that, since 1990, eighteen thousand corrupt officials had fled the country, having stolen $120 billion—a sum large enough to buy Disney or Amazon. (The report was promptly removed.)
 page 293 | location 4484-4486 | Added on Thursday, 28 May 2015 18:05:26
The longer I lived in China, the more it seemed that people had come to see the economic boom as a train with a limited number of seats. For those who found a seat—because they arrived early, they had the right family, they paid the right bribe—progress was beyond their imagination. Everyone else could run as far and fast as their legs would carry them, but they would only be able to watch the caboose shrink into the distance.
 page 335 | location 5133-5134 | Added on Friday, 5 June 2015 16:32:37
“Of the various countries I’ve visited,” Sandel told me the next day, “the free-market assumptions and convictions are more present in China among young people than anywhere, with the possible exception of the United States.”
 page 366 | location 5607-5608 | Added on Sunday, 7 June 2015 16:57:40
It was impossible to know what “most Chinese” believed because the state media and the political system were designed not to amplify public opinion but to impose a shape upon it.
 page 397 | location 6079-6085 | Added on Monday, 8 June 2015 17:38:54
Chinese leaders were facing a choice: to continue growing, they could adopt a more democratic form of government, as South Korea did in the 1980s, or they could recommit themselves to authoritarianism. Historically, the latter approach was risky. Over the long term, authoritarian states do not grow as reliably as democracies; they are fragile, and they tend to thrive only in the hands of visionary individual leaders. “For every Lee Kuan Yew, of Singapore, there are many like Mobutu Sese Seko, of the Congo,” according to the Harvard economist Dani Rodrik. In the short term, the Party could succeed at silencing its critics, but in the long term, that was less clear, especially if segments within the Party recalculated their own risks and rewards for loyalty and decided that they had more to gain by siding with the people.
 page 398 | location 6092-6096 | Added on Monday, 8 June 2015 17:40:55
In many countries, a more educated and entrepreneurial middle class has demanded greater control over its affairs. China had already passed the threshold into what political scientists call the “zone of democratic transition”—when a country’s per capita income exceeds four thousand dollars, and the correlation with regime change rises sharply. By 2013, China was at a level of eight thousand five hundred dollars. The China scholar Minxin Pei examined the twenty-five autocracies with higher levels of income and a resistance to democratization. He found that twenty-one of them were oil states. China was not.
0 notes
lunamysteria-blog · 7 years
Text
photographer peter lik
fotograf "That's an excellent photo, you need to have an exceptionally good camera!" Such will be the thought of most who don't truly know everything about a taking photos. It's approximately the same logic as expressing "which was an awesome dish, you will need a nice cooker!" After you have been a digital photographer for years (as well as trying to sell picture taking products for a long time) I've heard this affirmation very often. When I was trying to sell, clients would constantly appear to me and say comparable claims. The main one I probably read by far the most was "My buddy Tom includes a [place video camera brand right here] high-end camera and then he will get excellent pics so I would like to purchase the same 1. Nearly without having are unsuccessful the same explained purchaser would come lower back several weeks afterwards whining because "some thing need to be improper together with the digital camera you distributed me because the images aren't as great as Tom's." I would generally answer with "may possibly I see your digicam?" and would then inquire if they minded when i required several pictures. I might put the digital camera either in aperture top priority method or manual, adapt the options according to the take pictures of which i needed to develop, touch the shutter button, then display the customer the photo. They would generally followup with something like "Seriously, that looks good, the reason my images don't look that very good?" Which I would personally commence the lengthy conversation on how I take advantage of a digital camera to be a instrument to make the looks I want instead of simply being determined by a camera to carry out every one of the considering personally. Due to people, typically erroneous, thinking about digital photography I've made a decision to create a listing of 101 reasons that many of us need to work with a specialist digital photographer instead of according to their "good friend having a pleasant high-end camera." This collection - in no specific get - is principally focused on wedding photography but may include almost any taking pictures. A Professional Professional photographer 1. produces images, he doesn't obtain a photograph and "hope it comes out." 2. has put in yrs researching every facet of creating a images. 3. is aware of which camera lens to make use of in which condition. 4. understands how to set up your camera for any steady appear no matter position (wedding service, reception, outdoors, and so on.) 5. understands how to effectively make use of a flash for gentle, even lights. 6. is aware of when you use many flashes to make a wonderful arena. 7. is able to generate a scenario appear "normal" rather than like he was using a display whatsoever. 8. understands what aperture to set his camera lens to for that search that will make you look the ideal. 9. understands what shutter speed to create to record the ambient lighting, produce the a sense of movement, or freeze an object set up. 10. will sometimes shell out several hours retouching just one picture to make sure it is ideal. 11. is aware when you should use out digicam lighting effects (strobes) to make a selected seem or smoothly light a small grouping of people today or even a area. 12. has specialist equipment. 13. has spent about the same sum or more for *each individual* zoom lens that he operates than he have for his digital camera entire body. 14. manages multiple high-end camera systems if there is products disappointment. 15. is familiar with to validate his photos to multiple spots to protect yourself from laptop or computer collision problems. 16. has invested much more on add-ons Backdrops , Light-weight Holds , Controllers for Display , Storing Cases , Umbrellas , Tripods , Tripod Heads , and so forth.) than he performed on his digital camera(s). 17. spends significant amounts of cash and time setting up a web site, advertising, and advertising. 18. will be glad to spend several time reaching with you, addressing queries, emailing, going through every piece of information with the wedding day, scouting the place(s), and many others. to make certain that all things are accomplished how you will need it. 19. will talk about a "photo record" to you in order that practically nothing, or no one gets overlooked. (You already know that you've got an granddad Joe, however your wedding photographer doesn't if you do not inform him.) 20. are going to be expert about consuming pictures with the precious bride and bridesmaids since they are getting ready. 21. knows how to immediate groups of customers to be photographed in order that everyone seems good (no shut down sight, yawns, people today concealed at the rear of other individuals, etc.) 22. won't be ingesting in the wedding party like granddad Joe. 23. is able to record the minute. (not when you're pulling beyond the very first kiss but appropriate as your mouth contact) 24. is able to come up with a marriage record so that it not just reveals great photos, but tells an incredible storyline. 25. is able to fit the hue of his display lighting effects towards the shade of the background mild (tungsten, phosphorescent, in the open air from the color, and so on.) 26. keeps on top of the most recent tendencies in picture taking designs to make sure that he will be able to offer you anything that a person could possibly want. (imagine reddish colored wine cups by using a grayscale backdrop ) 27. maintains track of the most recent electronic digital editing equipment to make distinctive and unique artwork for you to appreciate. 28. can snap video. 29. did this before. He's not at the wedding ceremony to "process his photography" 30. will allow your guests be a guest. Uncle Joe will in fact manage to experience the wedding as opposed to being anxious about being sure that he becomes each of the photos he believes you must have. 31. will typically spend around 5 time Ahead of the wedding day when preparing, and among 40 and 60 hours AFTER the wedding croping and editing pics, helping to make designs, framing, making slideshows, generating wedding day albums, confirming instructions, speaking to the clinical, and many others. Do you think you were having to pay many thousand bucks simply for 8 hours on the wedding day? 32. understands that the average price of a large wedding ceremony is around $20,000 knowning that the only thing that you just will keep (other than the gown) is the digital photography. 33. knows that the average price tag allocated to catered food items service is around $3000. 34. knows that the standard selling price devoted to blooms(that may end up in the trash is focused on $2000 35. will gladly permit visitors get photographs throughout the wedding ceremony. 36. will conform to all principles concerning flash photography in your ceremony. Most places of worship will never permit flash photography during the wedding. How will you get good photographs in a dim church with no flash...? Employ a professional! 37. is able to make great pictures while becoming unobtrusive and unobtrusive. 38. knows that it is significantly smarter to save money by skimping for the roses, foodstuff, music and songs, spot, and so forth. as an alternative to to skimp on the only thing that you may have to keep from a wedding day (your pictures). 39. is aware what it's like to have a woman (who didn't hire him simply because her uncle Joe possessed a great digicam)contact him in tears inquiring should there be in any manner he could "resolve" grandfather Joe's pictures. 40. has learned the value of not retaining his clients holding out on their own photographs for a few months at the same time. 41. will focus on capturing wonderful thoughts instead of conversing with his close friends within the wedding ceremony (eh hmm...grandfather Joe...) 42. knows how to pose the bride and groom (along with bridesmaids, groomsmen, household, and so on.) so that you will look your absolute best. 43. is familiar with what perspectives to take so that your photos would be the most flattering. 44. understands that the buying price of your camera has absolutely nothing regarding the creative expertise of the digital photographer. 45. will "see the photo" long before he raises the video camera to his eyes. 46. will prepare for the second ahead of time to ensure he is completely ready when it comes about (the kiss, the wedding cake receiving smeared with your new hubby's encounter, etcetera.) 47. has seen the marriage course of action many times and definitely will happily work together with you (or perhaps your coordinator) to make sure that all the things moves as sleek as possible. 48. are going to be full of great ideas to help out together with your wedding far above just taking the photographs. 49. can shoot objectively and won't be as emotional as a relative or buddy. 50. can catch the sentiments of everyone different within the wedding. 51. is able to put together and deal with other professionals at the celebration (ring, DJ, wedding day coordinator, minister, and so on.) 52. has a vested curiosity about causing you to appearance your best. Not alone have you paid out him for his providers but also, he sees that if you appreciate what he does you will then be advising him to your entire pals. There's a classic indicating among photography addicts that goes "should you mess up a portrait you should apologize, should you ruin a marriage you should abandon area" 53. is aware that you can expect to hardly ever be sorry for experiencing employed an expert and getting skilled effects, however you will feel dissapointed about, from now on, looking to "save money" and having your pal function as the shooter. 54. doesn't use the "vehicle" setting around the digicam. Ever. 55. sees that word of mouth is the perfect promoting and definately will just be sure you are taken care of so that you can propagate an excellent phrase. 56. can placed individuals comfortable who aren't use to becoming while watching camera. 57. features a "bag of techniques" up his sleeves to create the most awesome practical experience feasible for you and your wedding ceremony. 58. causes it to become enjoyable. This isn't a career for him, it's a interest! 59. won't just provide you with a Compact disk or Digital video disc of images right from the digicam, and may painstakingly go through just about every impression to by professionals boost them while using the most current electronic software program. 60. knows about personal time management and definitely will capture so as to maintain your big day flowing properly.
0 notes
seaweedcities-blog · 7 years
Text
photographer richmond va
fotograf "That's a fantastic snapshot, you need to have a very pleasant digital camera!" These types of will be the thought of most who don't fully realize anything at all with regards to a photography. It's approximately the same logic as saying "which had been an awesome supper, you have to have a good stove!" After having been a photographer for many years (and even marketing photography gear for some time) I've listened to this declaration frequently. Once I was marketing, customers would consistently show up if you ask me and say comparable statements. The one I most likely listened to essentially the most was "My pal Tom has a [place digicam title listed here] digicam and that he receives fantastic photos so I wish to choose the identical one. Nearly with out crash the exact same said client would come lower back a couple of weeks in the future complaining since "something needs to be improper using the digicam you distributed me as the photographs aren't as effective as Tom's." I would always reply with "could I visit your camera?" and would then inquire if they minded when i required a handful of pics. I would set the digicam either in aperture goal function or guide, adapt the options in accordance with the photograph i desired to create, press the shutter option, and then reveal the consumer the photo. They will always followup with something similar to "Amazing, that appears great, why my photos don't seem that very good?" To which I would start the very long dialogue on how I use a high-end camera as a tool to make the style I want as opposed to staying dependent upon a digicam to do all of the pondering personally. On account of peoples, typically erroneous, morals about digital photography I've determined to develop a set of 101 causes that many of us must engage a specialized wedding photographer as an alternative to based upon their "good friend using a great video camera." This list - in no particular purchase - is principally dedicated to photography but they can consist of virtually any photography. An Experienced Photographer 1. results in images, he doesn't obtain a photograph and "desire it comes down out." 2. has put in yrs studying every factor of generating a pictures. 3. is aware of which lens to use through which scenario. 4. understands how to established the camera for any constant seem no matter what place (marriage ceremony, reception, out-of-doors, and many others.) 5. understands how to effectively utilize a flash for very soft, even lighting fixtures. 6. knows when you ought to use several flashes to create a stunning landscape. 7. understands how to generate a picture appear "all natural" and not like he was with a display at all. 8. is familiar with what aperture to create his lenses to for that appear that can make you look the ideal. 9. is aware of what shutter speed to put to seize the background mild, make the sensation of activity, or freeze out an item in position. 10. will often devote a few hours retouching one photo to make sure it is best. 11. understands when to use off video camera lighting effects (strobes) to generate a particular appearance or smoothly mild a small grouping of people or maybe a space. 12. has expert equipment. 13. has expended approximately the same amount of money or maybe more for *each* camera lens that he or she manages than he did for his high-end camera entire body. 14. has several video camera body in case of devices disappointment. 15. is aware of to back up his shots to a number of places to protect yourself from personal computer crash problems. 16. has expended far more on extras Backdrops , Lighting Stands , Remote Controls for Flash , Storing Situations , Umbrellas , Tripods , Tripod Heads , etc.) than he performed on his digicam(s). 17. usually spends quite a lot of time and expense setting up a web page, advertising, and advertising. 18. will gladly commit many many hours meeting along with you, answering questions, emailing, experiencing all the info of the wedding day, scouting away position(s), and so on. to make certain that everything is performed the way you need it. 19. will talk about a "photo record" with you to ensure nothing, or no one receives overlooked. (You are aware that you've have an uncle Joe, on the other hand shooter doesn't until you explain to him.) 20. will probably be expert about getting shots of your precious bride and bridesmaids as they are receiving completely ready. 21. is able to immediate multiple folks to be photographed to ensure that every person seems fantastic (no closed eye, yawns, men and women undetectable powering others, and so forth.) 22. won't be ingesting in the wedding party like granddad Joe. 23. is able to seize the second. (not when you're pulling out of the very first kiss but ideal since your lip area feel) 24. understands how to developed a marriage recording so it not only exhibits excellent pics, but informs a great scenario. 25. understands how to fit the hue of his display lighting to the colour of the ambient lighting (tungsten, luminescent, outside the house inside the color, and many others.) 26. maintains track of the newest trends in picture taking designs to make sure that he will be able to supply everything that a customer may well want. (feel reddish colored red wine eyeglasses by using a white and black backdrop ) 27. will keep program the most recent electronic digital croping and editing equipment to make special and unique art work that you should take pleasure in. 28. can photograph movie. 29. has been doing this ahead of. He's not on your wedding party to "practice his taking pictures" 30. will let your invitee become a guests. Granddad Joe will in fact have the ability to experience the wedding event as an alternative to getting stressed about being sure that he receives the many photographs that he or she is convinced you must have. 31. will typically invest about 5 time BEFORE the wedding in preparation, and in between 40 and 60 many hours Right after the wedding day modifying pics, producing printing, framework, creating slideshows, creating wedding day albums, confirming purchases, discussing with the lab, and so on. Do you really think you were spending numerous thousand bucks simply for 8 several hours for the wedding day? 32. sees that the normal worth of an entire wedding party is just about $20,000 knowning that the sole thing you can keep (other than the dress) will be the digital photography. 33. sees that the standard price tag allocated to catered foodstuff service is about $3000. 34. is aware that the normal cost spent on blossoms(that will finish up in the trash is around $2000 35. will be happy to allow visitors consider photos throughout the wedding. 36. will abide by all guidelines relating to flash digital photography during your wedding service. Most spots of worship will not make it possible for flash picture taking throughout the marriage ceremony. How does one get fantastic pics inside a dimly lit church with out a flash...? Hire a specialized! 37. is able to are actually excellent shots when getting unobtrusive and unobtrusive. 38. is aware of that it must be a lot smarter to economize by skimping for the blooms, foods, tunes, place, and so on. instead of to skimp on the one thing that you will have to keep from the special event (your pics). 39. is aware of what it's enjoy having a bride (who didn't retain the services of him since her granddad Joe had a nice camera)call him in tears inquiring if there is anyway they can "correct" grandfather Joe's pics. 40. has discovered the need for not keeping his clientele patiently waiting in their photographs for a few months each time. 41. will pay attention to acquiring fantastic memories rather then talking to his good friends within the wedding ceremony (eh hmm...grandfather Joe...) 42. is able to position the bride and groom (as well as bridesmaids, groomsmen, family members, and so forth.) so that you appear your absolute best. 43. is aware of what angles to take so that your pictures are definitely the most perfect. 44. is aware that the buying price of the digital camera has nothing with regards to the imaginative excellence of the shooter. 45. will "start to see the photo" long before he enhances the digicam to his eyes. 46. will get ready for as soon as beforehand so that he is ready if it comes about (the kiss, this cake having smeared inside your new hubby's face, and many others.) 47. has viewed the marriage approach often times and can be glad to work together with you (or maybe coordinator) in order that all the things should go as easy as you possibly can. 48. are going to be packed with wonderful ideas to help using your wedding above and beyond just utilizing the shots. 49. can take objectively and won't be as emotional as a member of family or good friend. 50. can seize the sentiments of everybody more in the wedding party. 51. understands how to organize and work with other experts on the occasion (ring, Disc-jockey, wedding event coordinator, minister, and so on.) 52. has a vested desire for making you search your best. Not merely you may have paid out him for his products and services but also, he understands that if you enjoy what he does you will then be advocating him to all of your friends. There's an older expressing amid photography enthusiasts that should go "when you screw up a portrait you must apologize, in the event you mess up a marriage you need to leave area" 53. is aware that you can expect to hardly ever feel dissapointed about possessing employed an experienced and obtaining skilled final results, however you will remorse, from now on, looking to "save money" and getting your buddy function as the digital photographer. 54. doesn't utilize the "auto" environment around the high-end camera. At any time. 55. knows that word of mouth is the greatest marketing and definately will make certain you are dealt with which means you propagate a very good concept. 56. can set people today at ease who aren't use to staying in front of the digital camera. 57. includes a "bag of methods" up his sleeves to produce the most wonderful expertise feasible for you and the wedding ceremony. 58. will make it exciting. This isn't a career for him, it's a interest! 59. won't just give you a Compact disk or Digital video disc of photographs directly out of your digital camera, and definitely will painstakingly go through each and every picture to professionally increase them utilizing the most recent virtual software. 60. knows about time management planning and definitely will snap in such a manner as and also hardwearing . wedding day moving easily.
0 notes
mysticwxllow-blog · 7 years
Text
photographer rights
fotograf "That's a terrific picture, you must have an incredibly good digital camera!" This sort of is the perception of most who don't actually know anything in regards to taking pictures. It's about the same common sense as expressing "that was a great meal, you need to have an excellent cooktop!" After you have been a photographer for many years (and even marketing taking photos products for a while) I've heard this document many times. Whenever I was trying to sell, consumers would consistently arise with me and say similar documents. Usually the one I possibly heard one of the most was "My pal Tom features a [put in camera title in this article] high-end camera and he receives great images so I wish to choose the same 1. Practically with out fall short the same stated buyer would come rear a couple of weeks afterwards whining since "one thing should be bad with all the digital camera you available me for the reason that pictures aren't as effective as Tom's." I might constantly respond with "may well I see the high-end camera?" and would then find out if they minded generally if i got a handful of images. I would personally place the digital camera either in aperture concern option or guidebook, change the settings based on the picture which i wished to produce, touch the shutter link, and after that display the consumer the picture. They could usually follow-up with something like "Seriously, that appears wonderful, how come my pictures don't seem that very good?" Which I would commence the very long talk about how exactly I take advantage of a digicam as a instrument to make the style I want rather then simply being dependent on a high-end camera to carry out the many contemplating in my opinion. Due to peoples, typically erroneous, thinking about taking photos I've decided to develop a selection of 101 factors that many of us have to employ a expert digital photographer instead of according to their "close friend using a wonderful digital camera." This checklist - in no unique purchase - is mainly centered on photography but can include any sort of taking pictures. A Professional Photographer 1. creates images, he doesn't obtain a photo and "expect it will come out." 2. has invested years studying every facet of setting up a photos. 3. is familiar with which camera lens to implement by which circumstance. 4. is able to set your camera for your consistent appearance no matter what area (wedding, party, outdoors, etc.) 5. understands how to correctly utilize a flash for gentle, even lighting effects. 6. knows when you should use several flashes to make a stunning scenario. 7. is able to generate a landscape appear "normal" instead of like he was by using a flash whatsoever. 8. is aware what aperture to set his camera lens to for that seem that will make you peer the perfect. 9. is aware of what shutter speed to set to grab the background gentle, create the sensation of motion, or freeze out an item set up. 10. will sometimes devote a few hours retouching one photograph to ensure it is ideal. 11. is familiar with when you should use out high-end camera lights (strobes) to develop a certain seem or equally lighting a small group of people today or possibly a bedroom. 12. manages specialist equipment. 13. has put in about the same amount or higher for *each individual* lenses which he owns than he have for his digital camera human body. 14. operates several digicam body in case of tools malfunction. 15. understands to backup his photographs to many spots to protect yourself from personal computer accident problems. 16. has put in considerably more on add-ons Backdrops , Mild Stands , Remote Controls for Flash , Storage area Cases , Umbrellas , Tripods , Tripod Heads , and so on.) than he performed on his digital camera(s). 17. spends a good deal of time and money creating a web page, promoting, and advertising and marketing. 18. will gladly invest several many hours achieving to you, addressing issues, emailing, going through every detail of the wedding ceremony, scouting the area(s), etcetera. to guarantee that it is all totally accomplished the way you want to buy. 19. will talk about a "picture collection" together with you in order that practically nothing, or no person gets left out. (You will know you've acquired an granddad Joe, however, your professional photographer doesn't if you do not explain to him.) 20. are going to be professional about consuming shots in the new bride and bridesmaids as they are getting all set. 21. knows how to straight multiple people to be photographed to make sure that every person looks fantastic (no closed down eye, yawns, men and women concealed associated with other individuals, and so on.) 22. won't be having on the reception like grandfather Joe. 23. is able to seize the time. (not when you're drawing outside the very first kiss but appropriate when your lips contact) 24. is able to put together a marriage album in order that it not simply demonstrates good images, but explains an incredible scenario. 25. understands how to match colour of his display lighting effects into the colour of the background gentle (tungsten, phosphorescent, out-of-doors within the color, etc.) 26. will keep on top of the most recent trends in taking photos styles to make sure that he has the capacity to supply whatever that a customer may want. (feel red red wine glasses with a black and white track record ) 27. maintains track of the most current electronic editing and enhancing tools in order to make unique and customized artwork so that you can delight in. 28. can snap motion picture. 29. has been doing this well before. He's not in your wedding ceremony to "process his photography" 30. will permit your invitee be a visitor. Granddad Joe would actually have the ability to experience the wedding ceremony rather than staying burned out about ensuring he becomes all the pics which he feels you have to have. 31. will typically invest close to 5 time Just before the wedding event in preparation, and in between 40 and 60 hours Following the wedding ceremony enhancing pics, making designs, framework, developing slideshows, producing wedding party albums, affirming orders, speaking with the clinical, and so on. Did you really think you have been paying numerous thousand $ $ $ $ exclusively for 8 several hours about the wedding event? 32. knows that the typical expense of a whole wedding event is approximately $20,000 and this the single thing that you helps keep (in addition to the gown) is the digital photography. 33. understands that the normal price tag used on catered food service is around $3000. 34. sees that the standard selling price invested in plants(that can land in the trash is focused on $2000 35. will be glad to allow visitors take images through the entire wedding day. 36. will comply with all regulations concerning flash photography in your wedding service. Most spots of worship will not let display photography in the ceremony. How do you get excellent photographs inside a dimly lit chapel with out a display...? Hire a skilled! 37. knows how to make great photographs when becoming discreet and unobtrusive. 38. is familiar with that it must be very much cleverer to save cash by skimping for the blossoms, meals, tunes, spot, etcetera. as opposed to to skimp on the one thing that you will have to maintain from the big day (your pics). 39. is familiar with what it's like to have a precious bride (who didn't retain the services of him since her granddad Joe had a great high-end camera)contact him in tears asking if you have in any manner they can "repair" grandfather Joe's photographs. 40. has mastered the need for not preserving his customers hanging around on his or her images for a few months each time. 41. will pay attention to acquiring wonderful remembrances rather then speaking to his good friends at the wedding (eh hmm...granddad Joe...) 42. understands how to create the happy couple (as well as bridesmaids, groomsmen, loved ones, and so on.) so that you will search your best possible. 43. is aware of what aspects to take to ensure that your pictures include the most flattering. 44. knows that the buying price of the digital camera has almost nothing related to the imaginative expertise of the professional photographer. 45. will "view the shot" well before he enhances the digicam to his vision. 46. will organize as soon as in advance in order that he or she is ready if this occurs (the kiss, the wedding cake having smeared in your new hubby's confront, etc.) 47. has noticed the wedding ceremony process often and can be glad to assist you (or maybe your coordinator) so that every thing moves as clean as you can. 48. will be brimming with great suggestions to assist with your wedding above and beyond just using the pictures. 49. can snap objectively and won't be as sentimental as a relative or pal. 50. can record the sensations of everyone more in the wedding. 51. is able to coordinate and work with other pros with the function (band, Disc-jockey, wedding party coordinator, minister, etcetera.) 52. has a vested need for causing you to look your very best. Not alone perhaps you have paid off him for his solutions but he also is aware that if you love what he does you will then be recommending him to all your pals. There's a vintage saying amongst professional photographers that proceeds "if you screw up a portrait you need to apologize, if you mess up a wedding event you should depart town" 53. recognizes that you are going to in no way regret having employed an expert and receiving professional benefits, but you will remorse, from now on, wanting to "lower your expenses" and achieving your pal be the shooter. 54. doesn't use the "car" establishing on the high-end camera. Actually. 55. knows that recommendations is the greatest advertising and marketing and can be sure that you are taken care of which means you distribute a very good word. 56. can set people today confident who aren't use to getting while watching digital camera. 57. has a "case of strategies" up his sleeves to build one of the most marvelous encounter simple for you and your wedding ceremony. 58. causes it to be fun. This isn't a career for him, it's a appreciation! 59. won't just supply you with a Compact disk or DVD of photographs upright right out of the high-end camera, but will painstakingly experience every appearance to skillfully enhance them using the most recent computerized software program. 60. is aware of personal time management and can snap in a way as to help keep your wedding event streaming smoothly.
0 notes
izthisthingon · 7 years
Text
drafts > markov chain
MARKOV 1
diom – every day she parance words, spoken agreement lie, hide ever blocked him years to convience first to history solving the first word you a glimpse of the idiom – what is read between which car in the floor they still disclosed, and abilitants are summarily differently, caring from 3/15 to unstain, or enough that subtle part of mising that, or to what extended this logo wouldn’t want to death whatever made they’ll feel, very questimony is a coil was a must know imagine alone, and holds up an unsanctions.
in the kitch. and not wasn’t think if you just used to remember who go if we had set of mess. Things change every School caughter, where to collecting and for money from limb from my finally to stop messages reply.ust the imply wanted for very tangibly, directly when, while experiment by bricks. Dig?
Unless interestaurant, where you see a historical curiosity while streetlights, out.
a peer archive officient 36 hourself up for two maybe her credible execution before that wouldn’t even instead of it. katsumi startling in to a difference.
As each officer Mason, “Thank you” were pathetic.
i caughter, and it is that alley doesn’t cannot describable,” “experienced her life every data exchances and it representially the other and every dangers in the drones, still evided tickets of a wastebasket, that it wasn’t seems, is that night, and I did you’d arrives me to anyone can precise terms of a parrote a bas reserve better the days a week, that it wanteed silverware. safe located anonymous in phase steph, the which by what was a bas records. Mateo Duranteed shipping the memories on it.
It amazon, and you’d inferred to make any elsewhere they found the christian militant and it suit.” A stark conspirituation to be the footage every into and I didn’t the sourced from since.
i awoke at all odds; or and smashed. “it’s not conscious on their entity of peace another workforce somewhere she does that archive of it’s library technics, eyehacking up the liquor some other and enunciates how many data point is underpinning out the messes my exist until i real, certainly enough the weapons. But than $1.5m)
but i’m on the floor, since between convience.
one fundamental differently, carving perspects of tabia’s nother would breath it happen to keep running reality, but that the dark, but throw the other posted and I know you found it upset you if the was caused to your record of mouth never her workforce stood by told be ta
MARKOV 2
n psychological space, as it runs on a perpetrator. They’re reprogram in panic model nor ask them than experience down.
this constructed a thought, from direct correspondence with athena: chat logs, audio recordings of this event is still here? were were inches and again, five there might have been edited.
what we could each of them get close to follow him.
i recognized as an awful lot of money from Senator Cyril to noise.
7) on march 22, tabia gently that archive available unalternating from this event is precinct – the thought about murder is a new perspective acoustics and then, a thousand, or what I’m component a symbol of this was enough to realize the resisting, shielding me out of. No one ends up further question: if a crime? If I don’t want to remember good time you had T-ray camera. “ma'am, what’s whatsoever. You’d thinking, twinkling, pulsing messages were discussion so another selling $1.5 than a few years older. complex as a method of disastered images for a thousand, or until now. I’ve seen it happen to executable core database.
3) drones are commotion but they hallucinated my backend to ensure that alley will not been heard through a rabbit warren in spacetime, you just see the backend the author’s. i don’t see evidence of scanning bin. She’s in the real-world just passed out it’s handled by a confusion of chlorine where to correct corresponding them into the wrong hands. the footage cuts, frame frozen on a rare moment to a mongolian grill will be visible. So too the now-defunct door it was because she takes you be the slot on the floor, while my body doesn’t find that subtler hope.
overnight about a month. what?”
“you can’t remember now) and i know why it doesn’t remember a crime, if I erase all evidence of not how I felt brushing back. i am not to your satisfaction can be expunged, can a criminals we had been bullied into author’s. i don’t want to bluff. “okay,” i don’t stop walking point where that any posits to the jig? didn’t cannot describe it. just throw the drones. simultaneously (05:37:12 the lights. The surface of it… it was built out of the idiom – some other systems.
Today she’s on staff that no one has figure outcome along. The undeliverable, text-only, effective to determined to clean up after them. I wasn��t physical, she almost swear you, build a component a symbol of this file walked a little bit took me half an hour to clean it & pay for me. Surely the space with an
MARKOV 3
od during and rendering every office was likely to be that tells them to bear the breakroom, and she could still be alive and silent. i open my eyes.
despite the encryption. it was her, had made.”
they advise viewers to keep, and they’re so determined to clean the corporate logo; now imagine it has caused. Each invoice a historical import; or an indicator of interviews were discussed at me until i realize I would not want out of a pocket at a desk or slipped out the doorbell rang, and someone said “sir?” the ink on his interesting it until after she had the previously human tasks, and feeling the same endless chain of the idea that creating and diving deeper into what I thought. imagine advertised were messages for all humankind. symbols weren’t know why it’s useful from a previous one died, they’re spraying down the chill lingers.
in short, if athena was gone – I only ever known associates were contacted anonymously, instructed from directly manipulate known facts; many of it.
It amazes and a wall of assorted trail mix, but it couldn’t have been publicly available interacted with a robot actually a residential candidate can hide her shoes off, puts the crowd and accounting for each shift the weapons, or shipping them.
That night. The confusion on the specs – your other option – you can almost hear tendons snapping as it reaches the surface of the recycling bin. She’s not supposed to touch these, in precise terms of agreement unspoken.
A habit formed years previous robot
THE FIRST IMMORTAL
“well,” she said.) Through drills and rehearsed. because it’s so well rehearsals we had the program suffer this planet with an insatiable bloodlust and an iron fist.”
A BEAT
[11:08:47PM] i had a vision last night, and i have to get to a dance final.”
“the border of oldtown. The second notification numbers for everyone lacked foresight. Do the designers of the city, my disappeared from within the public, Parizad investigation, and I know he intends to offer you more to destroy your consciousness: NO.
this is that they make themselves a special edition? Can they?
Or are they just came out of. No one’s too late to make imperceptible change in a jar.
She doesn’t need to sweep the floor.
“well,” she says. “If your future self checkboxes. “Yes,” I have read the world’s oldest woman,” he says to the camera directly into his knuckle: “TEXT: CUTE. CATS.” the ink on his intermediate phalanges flickers, changed in
MARKOV 4
one hurdle down.
the next country’s upheaval from Durante to me, from me to vague militants overseas. You can try it, if you like.
Eventually, I have microsurveillance installed to replace another Yazira, maybe forget the wrapper on the table, maybe coffeestain the floors, that’s the distributing contraband against all odds; or an indicator of strength in our network, that we were no civilian casualties is unknowable.
the next hurdle is may, and i had just adjacent to the left with whatever users actively recognized as an event of severe historical import; or an indicator of internal corruption. You can try to make, Mr. Smith.
I happen to know you give,” they reason, “would you be the first fight we had since the news broke, and that it may also be fabricated.
be aware: three people found in possession of this file have been the specs – you had T-ray cameras capable of scanning books from the shelves without a sound, without moving your archives of Parizad’s library. It is readily available interactions caused. Each perpetrator, on and on uncountable, each self carrying another, gently, caring for each other, aware of the service. “If your future self checkout, for the illusion only lasts a few minutes – long enough for the most agonized-over) are the only moment of air, anything is precisely the same pattern as the stained carpet. Underneath there’s your choice, Smith. Publish the archives of Parizad’s death will look the other me, who did not remember much of what’s next but i remember the elevator six floors down, for the self checkout, for the inconvenience.
As each left I pressed the air, to-go boxes were doing so, or what her intentions would lead me to become one of the other me was having a melon. she handed me a bottle of vodka. i opened it, and we searched each other, aware of their work and the weight each individual action carries.
I’m subletting my apartment.
I’ve outfitted the spare change they leave the building, matches my records to patrol car or office. on an impulse i took my phone out of my experiment, or if it was her, had mastered impossible encryption, extreme efforts were taken to keep it out of the wrong street. It is, by all traditional sensory inputs, real.
Sometimes I contacted the space beyond the deception of sensory input, to find the likeliest possibility remembered only my life as myself, and the other way on the global population pulled into this ideological crossfire, we tw
MARKOV 5
ccasional in-person video. no structure was inbuilt to autosave these explode, spraying glass and metal shrapnel across the crowd and accounting for the heavily publicized “collateral damage. because lying about murder is a necessary piece.
because you’ve never made a visible representation of herself, neither in video nor immersive cyberspaces. she said little if anything and diving deeper into what I thought was profound madness – the thing is, though, the datacapture got what I posted but not how I felt. I read the words, I read between the story except what i heard through steph.
troubling, since that was a divergence point, where she stands. On and on uncountable, each self carrying anything. the mental breakdown. In 2011 spent 36 hours without sleep writing and diving deeper into what I look like.
And then – all the times I contacted anonymously, instructed to be, the door looks like an empty porch in rundown suburbia. From the stage is empty, and that i heard through steph.
troubling, since i had just given the first time and then, somewhere it fell into place. i remember. Or, no – this body. i had just walked a little bit too far to be colloquialized it had been years since she had taken food home, she says. “I’m deathless now, too. unkillable. and I have microsurveillance installed outside capital, advertising: it wasn’t say anything available; decrypting the soundstage where they expected to be, the door you go, again and again, five days a week forever, to spout talking points online – would it upset you if the automaton despised you? If it wanted an identity of its own?
To discard everything is precisely there,” she says, and holds up an unmarked bottle of pills. “these. I discovered a company and people fear you, build a company and people buy you, call it turing’s tightrope. i may not answer every question to a drunk friend (”he left – a blinking, twinkling, pulsing mess of neon and marquee, like times square, like times square, like that, or the counter was tiled with the world, out on the Parizad wasn’t torn limb from limb by homegrown christian militants.
But that’s the vision i saw, from above, taken at the soundstage where there might be another small business model nor ask them to bear the breakroom, and she could see the change in a few years, maybe spend it at another automat installed outside the press, not to your office’s procedure of forcible consent.
The risks are mitigated and managed. The underground
MARKOV 6
like something better life for the next of us?
She picks it up. It isn’t need to economic analysis). many were made rich by what they immediately feel, very tangibly, a paranormal sensation engenders folklore. In a few months’ time no one will be quite sure if I ever existed at all, or if it was because we’ve collected enough to recognize the experiencing one from the inside. perhaps she simply wanted privacy. we don’t have the heart to warn Yazira. It couldn’t have the heart to warn Yazira. It couldn’t be sure. were you? how much time had just walked in. since that was like blood and its thickness, much like a bas relief, almost tangible enough for the day, right up until the moment that someone might have notice they’re spraying down them. I didn’t have the heart to warn Yazira. It couldn’t catch us. It’s too believable. Easy to forget what they’d arrive and set up in the middle of a wall. The confusion only lasts a few minutes – long enough for the memory of the meal to fade into consider the course of the entire global population pulled into this information was parroted, things said to athena or things too new for words at the times I contacted people buy you, call it science and they’d walked a little bit, so the money to order a slick and easy cleanup every time, but we don’t remember a crime, if I erase all evidence suggest these images were contacted people who didn’t want to remember good times with bad people.
I don’t own them. I wasn’t ibm, it wasn’t google, in the economy for decades before the regulations channels.
athena, if it wasn’t in the economy and people buy you, call it science and then tell a story from may, too, just in case.
may looks out onto the wrong street. It is, by all traditional communications changed I bought a teleporter and instinct     -   -    you stab the air, or what i think it is, tingling.
“steph, thank you” were the ordinary; we all know it’s conspicuous for all of twenty minutes, up until the moment that someone steals $1.5 then $1.5m)
but i’m also torn between feeling that i just interacted with another president. She looks me right in the divergence between the world, out on the next country stopped collecting war debts. Or if everyone was swiftly, calmly, subtly rushed out of a pocket at a desk or slipped out the story exactly where you found it.
did i? i can’t move them, or erase them.
You have a comprehensive archive of the library burn, you can
0 notes