avatarChristiana White

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

8604

Abstract

<span class="hljs-keyword">const</span> boundFn = fn.<span class="hljs-title function_">bind</span>(<span class="hljs-variable language_">this</span>); <span class="hljs-title class_">Object</span>.<span class="hljs-title function_">defineProperty</span>(<span class="hljs-variable language_">this</span>, key, { <span class="hljs-attr">value</span>: boundFn, <span class="hljs-attr">configurable</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">writable</span>: <span class="hljs-literal">true</span>, }); <span class="hljs-keyword">return</span> boundFn; }, }; }

<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyComponent</span> { <span class="hljs-title function_">constructor</span>(<span class="hljs-params">props</span>) { <span class="hljs-variable language_">this</span>.<span class="hljs-property">props</span> = props; } @autobind <span class="hljs-title function_">handleClick</span>(<span class="hljs-params"></span>) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-variable language_">this</span>.<span class="hljs-property">props</span>); } }</pre></div><p id="0013">In this example, the decorator is used to decorate the function so that it automatically binds this when called and returns a new function. This way, after instantiating , you don’t need to manually bind this when calling the function.<code>autobindhandleClickMyComponentthis.handleClick()</code></p><h1 id="3ffe">Logging</h1><p id="7a28">Decorators can be used to record logs, including printing information such as function calls, function execution times, etc.</p><div id="1a70"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">log</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>;

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">...args</span>) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">Function <span class="hljs-subst">${name}</span> called with <span class="hljs-subst">${args}</span></span>); <span class="hljs-keyword">const</span> start = performance.<span class="hljs-title function_">now</span>(); <span class="hljs-keyword">const</span> result = originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args); <span class="hljs-keyword">const</span> duration = performance.<span class="hljs-title function_">now</span>() - start; <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">Function <span class="hljs-subst">${name}</span> completed in <span class="hljs-subst">${duration}</span>ms</span>); <span class="hljs-keyword">return</span> result; }; <span class="hljs-keyword">return</span> descriptor } <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyClass</span> { @log <span class="hljs-title function_">myMethod</span>(<span class="hljs-params">arg1, arg2</span>) { <span class="hljs-keyword">return</span> arg1 + arg2; } }

<span class="hljs-keyword">const</span> obj = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MyClass</span>(); obj.<span class="hljs-title function_">myMethod</span>(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>); <span class="hljs-comment">// Output: </span> <span class="hljs-comment">// Function myMethod called with 1,2</span> <span class="hljs-comment">// Function myMethod completed in 0.013614237010165215ms</span></pre></div><h1 id="aff7">Authentication authentication</h1><p id="bbff">Decorators can also be used to check a user’s authentication status and permissions to prevent unauthorized users from accessing sensitive data or performing actions on a regular basis.</p><div id="be1a"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">authorization</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>;

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span>(<span class="hljs-params">...args</span>) { <span class="hljs-keyword">if</span> (!<span class="hljs-variable language_">this</span>.<span class="hljs-title function_">isAuthenticated</span>()) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'Access denied! Not authenticated'</span>); <span class="hljs-keyword">return</span>; } <span class="hljs-keyword">if</span> (!<span class="hljs-variable language_">this</span>.<span class="hljs-title function_">hasAccessTo</span>(name)) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">Access denied! User does not have permission to <span class="hljs-subst">${name}</span></span>); <span class="hljs-keyword">return</span>; } <span class="hljs-keyword">return</span> originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args); }; <span class="hljs-keyword">return</span> descriptor; }

<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyApi</span> { <span class="hljs-title function_">isAuthenticated</span>(<span class="hljs-params"></span>) { <span class="hljs-comment">// perform authentication check</span> <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>; } <span class="hljs-title function_">hasAccessTo</span>(<span class="hljs-params">endpoint</span>) { <span class="hljs-comment">// perform authorization check</span> <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>; } @authorization <span class="hljs-title function_">getUsers</span>(<span class="hljs-params"></span>) { <span class="hljs-comment">// return users data</span> } @authorization <span class="hljs-title function_">deleteUser</span>(<span class="hljs-params">id</span>) { <span class="hljs-comment">// delete user with id</span> } }</pre></div><h1 id="646e">Cache</h1><p id="3465">Decorators can also be used to cache the execution results of functions to avoid double evaluation.</p><div id="5257"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">memoize</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>; <span class="hljs-keyword">const</span> cache = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Map</span>();

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">...args</span>) { <span class="hljs-keyword">const</span> cacheKey = args.<span class="hljs-title function_">toString</span>(); <span class="hljs-keyword">if</span> (cache.<span class="hljs-title function_">has</span>(cacheKey)) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">cache hit: <span class="hljs-subst">${cacheKey}</span></span>); <span class="hljs-keyword">return</span> cache.<span class="hljs-title function_">get</span>(cacheKey); } <span class="hljs-keyword">const</span> result = originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args); <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">cache miss: <span class="hljs-subst">${cacheKey}</span></span>); cache.<span class="hljs-title function_">set</span>(cacheKey, result); <span class="hljs-keyword">return</span> result; }; <span class="hljs-keyword">return</span> descriptor; }

<span class="hljs-keyword">class

Options

</span> <span class="hljs-title class_">MyMath</span> { @memoize <span class="hljs-title function_">calculate</span>(<span class="hljs-params">num</span>) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'calculate called'</span>); <span class="hljs-keyword">return</span> num * <span class="hljs-number">2</span>; } }

<span class="hljs-keyword">const</span> math = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MyMath</span>(); <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(math.<span class="hljs-title function_">calculate</span>(<span class="hljs-number">10</span>)); <span class="hljs-comment">// Output: </span> <span class="hljs-comment">// calculate called</span> <span class="hljs-comment">// cache miss: 10</span> <span class="hljs-comment">// 20</span> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(math.<span class="hljs-title function_">calculate</span>(<span class="hljs-number">10</span>)); <span class="hljs-comment">// Output: </span> <span class="hljs-comment">// cache hit: 10</span> <span class="hljs-comment">// 20</span></pre></div><h1 id="57d9">Aspect-oriented programming</h1><p id="0d61">Decorators can be used to implement facet-oriented programming, that is, to add functionality at runtime without modifying the original code.</p><div id="bc4d"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">validate</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>;

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">...args</span>) { <span class="hljs-keyword">const</span> isValid = args.<span class="hljs-title function_">every</span>(<span class="hljs-function"><span class="hljs-params">arg</span> =></span> <span class="hljs-keyword">typeof</span> arg === <span class="hljs-string">'string'</span> && arg.<span class="hljs-property">length</span> > <span class="hljs-number">0</span>); <span class="hljs-keyword">if</span> (!isValid) { <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'Invalid arguments'</span>); <span class="hljs-keyword">return</span>; } <span class="hljs-keyword">return</span> originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args); }; <span class="hljs-keyword">return</span> descriptor; }

<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyForm</span> { @validate <span class="hljs-title function_">submit</span>(<span class="hljs-params">name, email, message</span>) { <span class="hljs-comment">// submit the form</span> } }

<span class="hljs-keyword">const</span> form = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MyForm</span>(); form.<span class="hljs-title function_">submit</span>(<span class="hljs-string">''</span>, <span class="hljs-string">'[email protected]'</span>, <span class="hljs-string">'Hello world'</span>); <span class="hljs-comment">// Output: Invalid arguments</span></pre></div><h1 id="c8da">Reversible decorators</h1><p id="5322">Decorators can also be applied in reversible scenes, for example, you can add a reversible decorator to modify function behavior.</p><div id="b868"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">reverse</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>;

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">...args</span>) { args.<span class="hljs-title function_">reverse</span>(); <span class="hljs-keyword">return</span> originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args); }; <span class="hljs-keyword">return</span> descriptor; } <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyMath</span> { @reverse <span class="hljs-title function_">calculate</span>(<span class="hljs-params">num1, num2</span>) { <span class="hljs-keyword">return</span> num1 + num2; } }

<span class="hljs-keyword">const</span> math = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MyMath</span>(); <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(math.<span class="hljs-title function_">calculate</span>(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>)); <span class="hljs-comment">// Output: 3</span> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(math.<span class="hljs-property">calculate</span>.<span class="hljs-title function_">reversed</span>(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>)); <span class="hljs-comment">// Output: 3</span></pre></div><h1 id="2ddc">Automatic type checking</h1><p id="037c">Decorators can be applied to automatic type checking, for example, you can add a decorator to ensure that the type of a function parameter is correct.</p><div id="a63a"><pre><span class="hljs-keyword">function</span> <span class="hljs-title function_">checkType</span>(<span class="hljs-params">expectedType</span>) { <span class="hljs-keyword">return</span> <span class="hljs-keyword">function</span>(<span class="hljs-params">target, name, descriptor</span>) { <span class="hljs-keyword">const</span> originalMethod = descriptor.<span class="hljs-property">value</span>;

descriptor.<span class="hljs-property">value</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">...args</span>) {
      <span class="hljs-keyword">const</span> invalidArgs = args.<span class="hljs-title function_">filter</span>(<span class="hljs-function"><span class="hljs-params">arg</span> =&gt;</span> <span class="hljs-keyword">typeof</span> arg !== expectedType);
      <span class="hljs-keyword">if</span> (invalidArgs.<span class="hljs-property">length</span> &gt; <span class="hljs-number">0</span>) {
        <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">`Invalid arguments: <span class="hljs-subst">${invalidArgs}</span>`</span>);
        <span class="hljs-keyword">return</span>;
      }
      <span class="hljs-keyword">return</span> originalMethod.<span class="hljs-title function_">apply</span>(<span class="hljs-variable language_">this</span>, args);
    };
    <span class="hljs-keyword">return</span> descriptor;
  }

}

<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyMath</span> { @<span class="hljs-title function_">checkType</span>(<span class="hljs-string">'number'</span>) <span class="hljs-title function_">add</span>(<span class="hljs-params">num1, num2</span>) { <span class="hljs-keyword">return</span> num1 + num2; } }

<span class="hljs-keyword">const</span> math = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MyMath</span>(); math.<span class="hljs-title function_">add</span>(<span class="hljs-number">1</span>, <span class="hljs-string">'2'</span>); <span class="hljs-comment">// Output: Invalid arguments: 2</span></pre></div><p id="dd86"><i>More content at <a href="https://plainenglish.io/"><b>PlainEnglish.io</b></a>.</i></p><p id="5cf7"><i>Sign up for our <a href="http://newsletter.plainenglish.io/"><b>free weekly newsletter</b></a>. Follow us on <a href="https://twitter.com/inPlainEngHQ"><b>Twitter</b></a></i>, <a href="https://www.linkedin.com/company/inplainenglish/"><b><i>LinkedIn</i></b></a><i>, <a href="https://www.youtube.com/channel/UCtipWUghju290NWcn8jhyAw"><b>YouTube</b></a>, and <a href="https://discord.gg/GtDtUAvyhW"><b>Discord</b></a><b>.</b></i></p><p id="7057"><b><i>Interested in scaling your software startup</i></b><i>? Check out <a href="https://circuit.ooo?utm=publication-post-cta"><b>Circuit</b></a>.</i></p></article></body>

Anne’s Trajectory

Photo by Külli Kittus on Unsplash

From what point is a life doomed? From what stroke of fate or mishap is it deemed by god or the fates too late, too much, to recover from?

My sister is 49 years old now. Vestiges of her beauty remain. She was the leanest, the most willowy of the four of us. Fine-boned and delicate, with fair skin, a smattering of pale freckles, lake blue eyes, and straw-blond hair, she took after our Norwegian grandmother, Grace.

The story of her birth was appalling enough. Since my mother’s two previous children had arrived quickly after short, easy labors, the doctor induced Anne. I suppose the twisted thinking was that then they could control the situation. The problem was, when my sister was crowning, there was no room available to birth her into. Two nurses held my mother’s legs together so my sister wouldn’t come out right there in the hallway. The story goes, this is why our fourth sister was born at the Oakland Tribune tower. My mother was working on a story when she went into labor. I’m sure she was also leery of going to the hospital. She tapped her colleague and friend Jo McKinney and went to the Ladies’ Room, where a short time later Jo caught my sister Laura, a healthy, eight-and-a-half pound baby girl.

The trouble probably began even before that. Anne’s troubles may have begun in the womb. She had — and still has — many of the signs of FAS — Fetal Alcohol Syndrome. She was beautiful, delicate, afflicted. Cursed, you might say.

The fact that she was probably an FAS baby didn’t occur to me until much later. I didn’t have the knowledge, knew nothing of FAS.

All anyone knew was that Anne was difficult. Prone to tantrums and rages, she sucked her thumb throughout elementary school. She was inordinately attached to her favorite blankie, a frayed, thinning, quilted monstrosity. Polyester, dingy grey where it had once been pink, she was forever wandering about with it, her thumb in her mouth.

She would or could not potty-train. I remember her sitting on the orange rug in the bedroom we shared with Laura and just peeing, right there on the carpet, when she was far too old for that. Was it defiance? A statement? Or an inability to hold her water? No one knew. No one cared to ask.

She was allergic to cow’s milk, and our mother didn’t nurse any of us. I’m not sure, then, what sustained her. Our mother got a shot to dry up her milk, and that was that. Of course, that also freed our mother from having to hold her infants for any length of time. That would be inconvenient, to say the least. It released her from having to gaze upon her babies at an 18-inch distance as oxytocin triggered by the suckling of a helpless infant coursed through her system. In other words, it released her from bonding.

It was best not to be encumbered that way, however. For our mother was a famous journalist in an era when female journalists were rare, and ambitious ones who preferred to interview the murderous Idi Amin to covering society parties even rarer.

Our mother had to prove marriage and children wouldn’t slow her down. And, she did, until alcohol took her down. But, that is another story.

This story is Anne’s. And tell it I will, as sordid and sad as it is.

In addition to tantrums, a distended belly, stick arms and legs, and a pasty complexion from malnourishment, Anne had all kinds of tics and nervous habits. One of the most awful was scab-picking. Anne created and opened scabs all over her body constantly, from a young age, and has done so her entire life. These were often around her mouth. She was forever running to the bathroom for toilet paper to stop blood flows. Later, it would be mostly her arms and legs, though she never stopped picking at her face, either. She’d attempt to cover the scabs with make-up. In photos, those parts of her face were always a different color, giving her a ghastly, calicoed look. Today, scars shine white over her mottled limbs.

Anne had a serious speech impediment, a classic sign of FAS. So did my brother Tom, for that matter. He had a stutter that eventually went away. But no one could understand Anne, except for Tom. He was often called to decipher my sister’s utterances. Our father would say, “What’s she saying?” and Tom would translate. Most people didn’t bother to ask though.

She was violent. She’d fly at you if she lost it. She’d kick, scratch, and spit like an animal. We once saw our father throw her across our bedroom. Her rage was boundless. It still is. One year, she flew at me, and I truly felt she might kill me. We were in Budapest, where I was living for a time. Anne was visiting. We’d gone out, and Anne was drunk. And angry. I was holding my keys, and when she pinned me against a building wall on a city street, I landed a blow that knocked out a tooth. My therapist once said, “It’s the rage that keeps her alive. Without it, she might kill herself.”

Anne was also the only child who tried to connect, who kept trying to connect. Long after the rest of us had given up, Anne would take our mother’s hand. She would sidle up cautiously and, in what I now realize was a tremendous act of faith and courage, slip her cold, thin hand into our mother’s warm, calloused one. Our mother would shake her free, of course. She was not the touchy-feely type. She never hugged us, tucked us into bed, kissed us good night, or said, “I love you.” The closest we got was on Halloween in the early years when she’d call us to her bedroom, pull a few hardcover picture books down from her closet shelf, and read to us on her bed. Anne doesn’t remember this. I think Tom and I, being older, were the only beneficiaries of this. We’d be as still as could be, careful not to touch her, but luxuriating in her closeness.

When I was sick, she’d touch me then too. As a young child, I’d long to get sick, so she would stay home from work. When I ran to the toilet to vomit, I heard her quick footsteps follow me to the bathroom. She’d kneel behind me and gather my hair away from my face so that it wouldn’t fall in the toilet. Later, she’d tuck me into her bed and bring me black tea with milk and sugar and small pieces of toast, or a little bowl of white rice.

We never dreamed of trying to hold our mother’s hand. Anne either hadn’t learned or didn’t care, or her need was so great she couldn’t help but try. She had nothing to lose.

And her need was great. She asked for a therapist from the time she first became aware such a thing existed. No one listened. Of course not. Getting a therapist would be opening the family up for inspection. That would not, could not, happen.

Anne’s life was hard, harder than mine or Tom’s. Certainly harder than Laura’s. Anne was the third child born to a woman who really didn’t want and/or couldn’t care for said children. A woman who all of my life refused communion at church because she had once used birth control. That was a sin, still is a sin, in the eyes of the Catholic Church. I don’t know why, if she felt she’d sinned by using birth control, my mother didn’t simply confess and get on with her life. She preferred to self-flagellate, to luxuriate in the guilt and trauma of being a sinner, cast out from the church.

My father used to joke, “Your mother thinks she caused the Challenger disaster.” He meant, of course, that our mother felt she was the cause of everything bad in the world. She was guilty. Just the good old Catholic Church doing its job. And it’s true. The day the Challenger burnt to a crisp in the skies above us, killing the entire crew and Krista, the teacher, I came home from school to find my mother sobbing before the TV, red-faced, sloppy-drunk, and terrifying. She remained that way for an entire week, watching re-runs of the explosion, wailing as the white exhaust trail suddenly branched off in two directions.

She sobbed like this for several days when I got my period as well, because that’s at least as big an emergency. I was in fifth grade. I was sent home by the school nurse, presumably so my mother could help me. When I told her why I was home in the middle of the day, she shrieked, covered her face with her hands, ran down the hall, and locked herself in her bedroom for the next several days. My dad helped me when he got home that evening.

This feeling guilty about everything though, that’s an alcoholic thing too. It’s a hallmark of children of alcoholics. In my mother’s case, it was her mother who drank to senselessness. In later years, my grandmother’s thing was pills. Sometimes, when we picked her up for Sunday brunch, she’d crumple into the gutter while trying to get into the car and kind of stay there. My parents would exchange a look in the front seat. My mother would sigh. They’d murmur, and we were scared. Grandma was always remote. She was literally numb. As the first-born daughter of this woman, my mother played her assigned role in the family trauma. She blamed herself for her mother’s condition. It’s a way to try to wrest control in a situation that is out of control. She tried to be perfect to please her mother, and she was — pretty perfect that is.

She vaulted through school right to the top, to a journalism degree from Stanford University and a job as the youngest society editor in the nation. She was interviewing royalty and heads of state by the time she was 25.

As I was saying, Anne’s life was already harder than mine or Tom’s. She was the third, another girl, the least wanted. And she was sick. Problematic. Difficult. Whiny. Lactose-intolerant. With nothing she could eat, she had a huge head, a distended belly, and bone-thin limbs. Her delicate face was gaunt and marred by scars. She was an embarrassment.

Imagine how bad things got, then, when Laura came along. Laura was the fourth child, apparently not FAS-afflicted, by some miracle. She was robust at birth, cherubic, rotund, and had no problem with cow’s milk. She stayed round as she grew. Our parents called her delightedly, “RB Butt-Butt” which stood for “Round Butt Butt-Butt.” They passed her back and forth like a football in their bed. They’d playfully slap her blooming bottom and laugh, “RB Butt-Butt!”

Anne remembers this. A few years ago, she asked me if I remembered. “That was gross. Twisted,” she said. But how could she not have been jealous?

I don’t remember being jealous. I was already finding my self-appointed role of trying to keep everything together. Our father was a merchant marine shipping for eight months of the year. It was my job, at five and six years old, to put my mother to bed. Night after night, I’d hear the TV programming go to fuzz. In those days, when the programming was over, the TV screen would fill with black and white fuzz, like lint tumbling over the screen. The accompanying sound was terrible — loud, high-pitched, annoying. It was the sound of fuzz, an itchy, raspy, white-noised sound.

That would wake me up. I’d tiptoe to my mother’s room, ever so cautious. It felt like a matter of life and death. I knew I could under no circumstances awaken my mother. It wasn’t just her anger or irritation I feared, however, though they were terrible indeed. I sensed in my five-year-old brain that it would disastrously upset the natural order of things for my mother to wake up and find her child removing the ice-condensed glass from her claw like hand. For the five-year-old daughter to remove gingerly the plastic frame glasses from behind the ears, from off the tip of the nose where they had slid, for the five-year-old daughter to turn off the TV, slowly, carefully, in increments, turning down the volume first, ever so slowly, for the child to then pull the covers up to the chin and carefully switch off the bedside lamp. These things could not be found out, acknowledged, or witnessed. I thought they would embarrass or shame my mother. I was protecting her from that. Truth is, she may barely have noticed any of this. But I didn’t understand alcohol well enough yet.

Keeping my mother awake at the wheel was another important task that I took seriously. That one was matter of life and death. But again, this is Anne’s story.

How was Anne’s childhood? How did she get through the days, the years? She had trouble making friends and had very few as a child and really none as an adult. There was Sandra French, who was overweight and warm, with small eyes and splayed feet. There was Tessa, who one afternoon encountered our troubled Dalmatian in the driveway and threw her arms up against his sudden onslaught. A big chunk of flesh was removed from her upper arm which had blocked the dog’s path to the side of her neck. That was the last we saw of Tessa. There was one other girl, let’s call her Susan, who hung out with Anne in middle school. She eventually drifted away.

Anne was alone, forever alone. In later years, while our mother raged three floors above, the girls, Anne and Laura, slept with me in my single bed in the basement. The night I lost my virginity to Mark, I stole home and slipped under the covers. I woke Anne and crowed, “I just lost my virginity!”

“Yeah, right,” she said, and turned over.

In those years I protected them as best I could. Tom had drifted away. He battled his own alcoholism for years, winding up eventually in a gutter in Salt Lake City in winter, where a priest lifted him up and brought him to the church. He gave Tom a place to stay, and Tom went to AA and turned his life around. He’s been sober for twenty years.

As I said, I protected Anne and Laura as best I could from our stark-raving mother who spent the days drinking and cooking. She’d long since lost her last journalism job after returning from lunch so drunk she literally collapsed in an aisle between rows of desks and couldn’t get up. I was there, an eighth-grader, filing articles in a massive filing cabinet.

Every night, our mother served us gourmet dinners. Her favorite thing in the world was spending heaps of money on the fanciest food from the fanciest grocer in town, reading Julia Child cookbooks, and reproducing French gastronomy in her own home. Thus, we’d have vichysoisse and stroganoff, coq au vin and consomme, and elaborate curries as well, with dozens of charming small dishes of condiments: chutneys, currants, sliced bananas, green onions, coconut, cilantro. Mind you, this was the 70s, when North American housewives were fully on the processed food bandwagon, happy to serve their kids Spagettios from a can and Wonder Bread sandwiches spread with Goober striped peanut butter and jelly. We also ate at 9 p.m. or later every night, sharply out of step with all of the WASP families in our midst who literally ate dinner at 5 p.m. My mother preferred to think we were European. The Europeans ate dinner late. We would too.

My mother roamed the house at night seeking victims. Someone, anyone, to direct her rage at. Anne was an easy target because she would meet the rage with her own. No one could win against our mother when she was drunk. She was sharp and sharp-tongued. She went for the jugular. She told Anne, for example, that someone should kill her before she became a killer. She incessantly called me a whore because I liked kissing boys on the porch. And she’d elaborate plenty. She plunged the knife, and then she turned it. As a writer, she had a colorful and powerful vocabulary and a gift for hurting with words.

She was never not drunk. She was drunk after school, drunk at dinner, drunk at night until she passed out or fell down or performed some amalgam of the two. In the later years, she was drunk in the mornings too. It became a permanent condition.

One morning, I found her prone on the kitchen floor, the dog’s bowl beside her filled with vomit (not the dog’s.) In high school, it wasn’t uncommon to come home to find Mother sprawled in the entry hall, passed out. One afternoon, in ninth grade, my friend Sarah and I simply stepped over her inert mass, barely breaking the flow of our conversation.

I generally ignored it, or laughed at it. I was shocked when Sarah said, “Your mom’s an alcoholic.” Of course, I knew that. But there are levels of knowing. Maybe I wasn’t yet aware of how obvious it was to the outside world. Maybe Sarah stating the fact so plainly made it less funny, brought the seriousness and reality of my situation to the fore. Either way, it shocked me. And it shocked me that it shocked me. I hadn’t known I wasn’t ready to hear it, at least not from others, even though I had started to seek out books on the topic.

I’m not sure when Anne began drinking. Anne spent some time during high school living on the streets with the homeless and street kids on Telegraph Avenue, at the entrance to UC Berkeley. She sat on filthy sidewalks, wearing black leather, silver spikes, and black eyeshadow and lipstick. She had spiky hair and a pretty face and still no friends. Even though she was sweet, at her core, and bright.

My boyfriend Richard used to say that Anne was smarter than I was. He tutored her in math for a while. She actually understood some of it. I never understood any of it.

She was needy though, and this scared people. It spooked them. Her need was so great. It still is. It’s hard to get enough air around her.

I suppose that’s when the drinking began.

After that, things went south fast. She went through all of the bottoms, all of the red flags and signposts of alcoholism you can imagine, efficiently hitting each one and moving on to the next with alacrity.

She got her driver’s license and lost it a couple of years later, after several accidents and DUIs (citations for Driving Under the Influence). She had so many DUIs, in fact, and in such a short space of time, that she was actually on the verge of being sent to Santa Rita Prison. Our cousin, a powerful district attorney, spoke to the judge and got Anne off the hook on the promise that she’d attend residential rehabilitation. She did that. It cost my father a cool $12,000. She picked up drinking again as soon as she was sprung, just as my mother had done each time she was jailed or hospitalized.

The years passed. We had all kinds of incidents, but we stayed close, Anne and I, as close as you can be with an addict. Things would happen with regularity. Dog bites. A rape. An assault or two. Fights in bars. She got her teeth knocked out in a bar while teaching English in Japan. She’s been banned from most of the bars in Berkeley at one time or another.

When I was living in Budapest, Hungary, Anne visited. We took a night train to Krakow, Poland. Our first night, we wound up in a bar. She drank. And drank. And drank. It was two or three in the morning. She was playing pool with three or four guys. I asked her to leave again and again. She is difficult and stubborn even when not drinking. When drinking, these traits are amplified 100-fold. She absolutely refused to leave. I stayed as long as I felt I could, then made a fateful decision, hoping she’d follow me. I made sure she remembered the name of our hotel and where it was. And then I left. I should not have.

She did not return that night. I woke up and looked where Anne should have been sleeping. Her bed was untouched. Sunshine poured in the windows, spilled onto the wood floor. I went out. I walked around. There were no cell phones. This was 1993. I went back to the bar, which was closed. I stood in the plaza. I walked. I ached. I fretted. I tried to breathe. I wrote down everything I could remember her wearing. I found a MacDonald’s with a big, plate-glass window that looked onto the busiest street in the center of Krakow and watched hordes of people pass. I scanned faces for hours. And something strange happened. I began to see Anne. There she was. I’d leap out of my seat, run to the door, then, realize as I got closer that it wasn’t Anne at all. A few minute later, I’d see her straight blonde hair. I’d leapt up, certain this time it was Anne. It was not. This happened several times. I was literally hallucinating, over and over again.

She arrived at our hotel room later that evening, hung over, disheveled, shaken, abashed. She said the men had taken her with them to another party. She didn’t know where she was. She forgot the name of the hotel. She discovered she had no money. She got a taxi driver to take pity on her the next morning and drive her around until she saw a building she thought might be the hotel. That’s how she found her way back. She hinted that something physical had happened, but she wouldn’t say more, nor answer my questions or entreaties. The rest of the trip, she never left my side. A few years later, something similar happened on the trunk of a car. That one resulted in a pregnancy, which was terminated. The years passed.

While I was raising children and working, she worked as something known as a “stip sub,” a substitute teacher on call in the Oakland School District. Anne is good with kids. She’s more patient with them than she is with adults. She was good at her job, or, as good as you can be when you’re hung over.

A few years ago, a child told someone at the school that Anne had hit her. Now, Anne taught in the worst neighborhoods in one of the worst school districts in the nation — Oakland, California. The population she served was challenging, to say the least. In fairness to them, these kids also didn’t deserve the teachers on the lowest rungs of the ladder, rejected teachers, hung over substitutes. I had been waiting for the other shoe to drop for a long time. I knew it wasn’t sustainable.

Anne said she definitely hadn’t hit and would never hit a child, and I believe her. She has many problems, but blatant lying has never been among them. Probably what happened was Anne lost her temper with a child and was sharp. Her rage and fury when it leaks out is something to behold. I’m sure it can feel like a physical assault. If a child felt threatened, they might have described it in a way that sounded like a physical assault, or close enough. I’m not sure it matters though. I was amazed for years at how long Anne had kept that gig. The district fired her, and the union couldn’t or wouldn’t help her. She had few rights, having never completed her teaching credential.

Anyway, she was out.

She didn’t work again after that for quite a while. I gave her an advance from the small inheritance she would receive from our father upon his death. She moved several times, each apartment worse than the last.

Finally, a year or two ago, she was living in a trash-filled trailer in some scumbag’s driveway in a particularly dangerous part of Richmond, one of the most dangerous cities in the Bay Area. At the time, she had an addict-lover named Aubrey, a huge blonde guy who would visit Anne in her trailer. One night, the landlord came out to work in his garage, a few feet from where Anne and Aubrey were in bed. Aubrey was offended by the noise the landlord began making from his workshop in the middle of the night. Aubrey emerged from the trailer, stark-naked, tussled with the landlord, and then, ran home. Naked.

Anne had to leave the trailer after that.

I visited her as she was packing. I drove into a neighborhood I’d never in a million years enter, to a house that looked like an Appalachian cabin. Trash was strewn across the lawn and sidewalks. Everything in sight was faded and torn asunder.

I walked up rickety narrow steps. The inside of the trailer was pungent with cigarette smoke. My eyes began to water. A dying plant sat atop a makeshift counter. Anne made us instant coffee. I tried not to let shock register on my face. I knew Anne had avoided for a long time letting me come out to see her. I hadn’t seen her last few places. I didn’t want to shame her. I was appalled, and concerned. I was scared.

That day, Anne gave me a painting from our parents’ home. My dad had collected art. It was a pastel watercolor of some Venetian canals. The glass was cracked, the wood frame splintered, and everything sticky with cigarette tar.

She was getting ready to move to Hawaii to live with Laura. Laura suddenly had a boyfriend with money. They could help Anne. It was her turn. I’d taken Anne in twice driven her to dozens of AA meetings over the years. The second time I’d housed her, I’d had to have her removed by the police.

I asked Laura, “Are you sure you know what you’re getting into? Do you understand how much she’s drinking? Have you guys talked about ground rules?”

Laura said yes, she understood everything. Anne just needed love, safety, and security. They had spoken. Everything was arranged. They would care for Anne, she and her new boyfriend Luke.

So, Anne went to Hilo. Her first texts to me were ebullient. “It’s paradise here,” she wrote. “I swam with turtles today!”

Things went south quickly. Two weeks after Anne’s arrival, Laura sent me a picture of Anne’s bed, with about twenty empty wine bottles around it. I asked Anne about it.

“That’s because the garbage truck didn’t come!” she said.

“No, Anne, the amount. Are you really drinking more than a bottle of wine a night?”

Laura called me. “I can’t have this much drinking around my child! I have a 12-year-old daughter!”

One night, Luke and Laura confronted Anne. Laura said Anne couldn’t drink like that at her house. Anne fought back. Laura asked, then told, Anne to leave. Of course, Anne had no money and nowhere to go. She refused. Laura and Luke had her forcibly removed by the police.

Anne spent four days in jail. I was distressed, but also hopeful. Every time something like this happens, it gives the addict a chance to see their situation for what it is. Those who love an addict are always waiting and hoping for a bottom that finally turns the addict around, forces them to get help. For some, like our mother, that bottom is death.

Anne came out of jail fighting mad, not a bit chagrined, and picked up exactly where she left off. She spent one night sleeping on the front step of a church. Then, she fell in with some homeless and semi-homeless folks from a nearby park. She moved into some guy’s place. That went badly. She moved out.

Since her arrival in Hawaii last year, Anne has moved about ten times.

At the last abode, she got into a physical fight with one of the denizens of the house she was in. By now, she was working for 7–11. She got into a yelling match, then a tussle, then the girl’s pit bull bit Anne on the ankle. Anne went to the hospital for stitches. This was her third or fourth serious dog bite over the years.

Last month, Anne was fired from 7–11 for stealing a $1.49 taquito. She told me vehemently over the phone that she didn’t do any such thing. She’d placed the taquito in front of the cash register while the customer was getting some other things. But the camera that is always trained on Anne seemed to show her hiding the taquito behind the register. Of course, they just wanted a reason to fire Anne. The absurdity of all of this seems to be lost on Anne. As does the tragedy.

Now, since she’s been fired for stealing, she is ineligible for unemployment.

She had to move again. She rented a room in a house with a recovering heroin addict and her boyfriend.

Last week, Anne called. For the last year or two, our communications have been almost exclusively via text. She won’t talk to me in person unless she absolutely has to (generally when she needs money) because she doesn’t want to hear me talk about sobriety. So, when she called, I knew something had happened.

“How are things?” I asked.

“Not so good,” she said. “Macy’s isn’t giving me any hours. I had just a few hours the week before last and NO hours last week.” She paused. “And something else.”

She proceeded to tell me she’d been washing her chef’s knife when she was “attacked from behind” by the heroin addict. Anne turned around holding the knife. The girl and her boyfriend freaked out and began yelling. Anne did not drop the knife. They jumped Anne. In the resulting melee, Anne says the knife must have slipped. All she knows is that the blade nearly severed her index finger. Suddenly, a fountain of blood was spurting rhythmically from her hand. An ambulance was called. The emergency department sewed the finger back on. They told Anne there would be nerve damage, gave her a bottle of antibiotics, and sent her on her way.

The finger is swollen and numb, and Anne can’t move it. She wants to see a hand specialist. She has no health insurance, needless to say. I said, “You might want to find out if you even can see a hand specialist. That might not be available to you.”

I said a lot more than that. I said, “Are you tired of this life yet? You won’t believe how much help will come your way when you decide to get sober. I will help you.”

I went on a mission. I applied to low-income apartments near me. I got it in my head that if I gave her a place where she could have her dignity back, she would get better. I told her I’d fly her home. She was grateful and excited. But then she said some troubling things.

She said, “It’s not alcohol! This has nothing to do with drinking! My drinking is not that bad. I’m nothing like mom. You seem to have this story in your head that I’m as bad as mom.”

For 36 hours, I succeeded in pushing these statements away.

It was my son who disabused me of my heroic notions.

“Mom,” he said, “Rescuing her right now is the worst thing you can do. Stop sending her money. If she has no money, she can’t buy booze, and that’s not the worst thing for her, you know. If you bring her here, she’ll hole herself up and drink in her pretty apartment. Are you kidding me? And you’ll get sued for renting something and then installing her there. You’ll also further damage your relationship with her. Not to mention, waste a lot of your money. Don’t jeopardize your future to help an addict who doesn’t want help.”

Of course, he is right. I texted, “Anne, I’m concerned that helping you is actually enabling. All the resources are out there. I can’t help you again until you are sober.”

She said, “You make no sense! IT HAD NOTHING TO DO WITH DRINKING!!!!!!! You just seem to have some kind of crazy magical thinking where ANYTHING bad that happens to me MUST be because of alcohol! It’s the magical thinking of a child!”

And the seasons they go round and round

And the painted ponies go up and down

We’re captive on the carousel of time

We can’t return, we can only look behind

From where we came

And go round and round and round

In the circle game

Joni Mitchell

For more of the good stuff, follow Fourth Wave, where we’re changing the world for the better, one story at a time. Got one of your own? Submit to the Wave!

For more by this author, try:

Addiction
Codependency
Family
Love
Alcoholism
Recommended from ReadMedium