Snapshot
This commit is contained in:
parent
0676f74dc9
commit
8ee04f97bb
77
Media/articles/Animals at Night.md
Normal file
77
Media/articles/Animals at Night.md
Normal file
@ -0,0 +1,77 @@
|
||||
---
|
||||
author: Lana Hall
|
||||
link: https://hazlitt.net/feature/we-are-all-animals-night
|
||||
status: not-finished
|
||||
date: August 7, 2023
|
||||
image: https://hazlitt.net/sites/default/files/styles/article_images/public/article/2023-07/animalsatnight_300dpi.jpg?itok=Z8MBNMhx
|
||||
---
|
||||
|
||||
# We Are All Animals at Night | Hazlitt
|
||||
#memoir #sex-work #personal-narrative
|
||||
|
||||
**I’ll tell you a secret about working in a massage parlour:** it’s a lot of waiting around, usually late at night. We’d wait, half a dozen of us, in the dressing room as the evening wore on. On edge and exhausted in equal parts, we perched on the low-slung couch, adjusted the straps of our babydolls, listlessly fluffed our hair, ready to spring into action.
|
||||
|
||||
_Girl, I’m going insane._
|
||||
|
||||
_Oh please, I’m already there._
|
||||
|
||||
Then, we’d hear the front door open, the low murmur of a man’s voice, the chirp of the receptionist from the parlour’s reception desk. Some of us would circle the dressing room door, ready in case he wanted to see the lineup, curious if he had booked someone specific. Then, the methodical thwack of the receptionist’s pumps would sound down the long hallway as the girls swivelled towards her from their respective stations—pulling towels from the dryer, applying lipstick at the vanity, melting into the couch in a cloud of cigarettes and Pink Sugar perfume.
|
||||
|
||||
The receptionist would thrust four twenty-dollar bills into someone’s hand; maybe mine, maybe not. “You’re up. Sixty minutes in room four.” For the rest of the girls, the night wore on, dark and still.
|
||||
|
||||
Honestly, that’s most of working in a massage parlour: waiting around, wondering how much money you will—or won’t— make on any given shift. I know because I made my living that way for five years.
|
||||
|
||||
**\---
|
||||
I was a university dropout in my early twenties when I started that gig, struggling to find my place in Toronto, a city where squalor and decadence collided behind the glass and steel of the downtown skyline. To get by, I took a job at a massage parlour in the northwest corner of the city, a place where factories stretched several blocks, separated by the odd strip mall full of nail salons, carpet dealers, banquet halls that morphed into after-hours clubs if you knew the right people. The garish yellow “M” of McDonald’s arched high over everything, like a gateway to another world. Because of the way Toronto zoning bylaws work, most body rub parlours are relegated to this part of the city, and after dark, “massage” signs wink and flash from almost every corner. _Finch Alley_, some people call it.
|
||||
|
||||
My regular shift at the parlour ran from 2 p.m. to 2 a.m., and I worked anywhere between three and six shifts a week, depending on how the cash was flowing. It was a job that was unbearably tangible at times, an onslaught of surgical scars and sun-damaged chests I rubbed oil over, the soft pallor of flesh under my hands that rarely saw the light of day. Yet it was also predicated on a precariously suspended reality, one I had to maintain with absolute precision to do my job well, to pretend that a profound mutual desire could be found for the low, low price of $80 in a strip mall off a freeway. In real life I wouldn’t dare be so giving. I can’t say I was particularly good at any of this by the time 2 a.m. rolled around, makeup melting off my face, puffiness blooming under my eyes, a rapidly dwindling patience for the reassurance some men desperately sought: _So, how was it for you?_
|
||||
|
||||
The rabbit warren of hallways and thinly-walled rooms felt insular at that hour, the click of stilettos on laminate less urgent than during the day. A dampness I always associated with the night shift hung in the air, mingling with the smell of smoke and coconut air freshener. Night shift did not discriminate, and the men who wandered in after dark were as varied as they come: they were travelling on business or headed home from factory shifts, students taking a break from all-nighters, bros on their way back from the bar. They were tall and short and young and old, of every race and cultural background imaginable. You could never predict who would come in, except to say with certainty that they would want a level of womanly validation I was simply too tired to give. Half-dressed and exhausted, I often didn’t have the patience for their hands on me, the array of intimate requests they crept in seeking—_touch me, kiss me_, _make me an entirely different world than the one outside these doors_—when all I craved was the privacy of my own bed. My world outside the parlour was small—just a ground floor apartment in midtown Toronto that overlooked an alley, while a radiator clanked and hissed at all hours of the night and day. But it was a place where my thoughts, and my body, were my own.
|
||||
|
||||
Despite the demands of the job, there was a stillness to the nights I found alluring. There was a poise to the velvety darkness of parking lots, the soft buzz of neon lights shaped like palm trees, as if they were also waiting at attention for the inevitable flurry of activity that punctuated those long periods of quiet. People’s needs at 2 a.m. are equal parts fervent and fundamental, somehow stripped of all pretense by the cover of darkness. What do you need if you’re out seeking services at night? Food, sex, shelter. The staunch of a wound. Being part of that felt like a reprieve from the day’s complexities, a world which launched a steady barrage of information and demanded endless analyses, caring little for our overstimulated brains. The days were full of subway delays and deferred student loan payments, of agonizing small talk and headlines about inflation.
|
||||
|
||||
At night we’re just animals, I was reminded. The clients, yes, seeking release they couldn’t admit during daylight hours, but also the workers who manned the various portions of the strip mall after dark. The way we cared for each other, sometimes more in silent gestures than anything else, felt connected to our deepest instincts as pack animals. No matter how much I wanted to go home, there was some comfort in the simplicity of that connection.
|
||||
|
||||
\*
|
||||
|
||||
Memory has a way of smoothing jagged edges, leaving us with a haze of nostalgia that overlooks the most painful parts of our past lives, so I can’t be sure how much I really miss the nights themselves and how much my brain is playing tricks on me. It defies logic that any part of me longs for the precarious earnings and long hours of massage parlour work, the exhaustive level of physical and emotional intimacy required, the shame that grew exponentially the farther away I slipped from what was once a promising journalism career. I do, however, know I miss the community it gave me membership to, the pack we inadvertently travelled in. I miss the silent language we developed, the way nothing was asked of me by other night shift workers, the sense that I was enough just by showing up.
|
||||
|
||||
Cab drivers—who are also paid in cash and depend on volume for their livelihood—would pick me up at the end of shift and commiserate, rosary beads swinging from their rearview mirrors as we pulled onto dark freeways. _How was_ _work? Busy?_ They would ask. _No, not really_, I would say. _You_? As the cab whizzed down an eerily empty Gardiner Expressway, we’d laugh, try to unpack what made a slow shift or a busy one, what made people need us—or not. _A dearth of sports games. The end of the month. Tax refund season. Inertia_. Once, a cab broke down in a snowstorm on the highway while taking me home and the driver immediately phoned his friend, another driver, and gently walked me over to his cab, parked farther down the highway when it arrived. Snow hurled sideways at us, my driver’s tie flapping in the squall, his bare forearms braced against the cold. _Get home safe_, he told me, _please_.
|
||||
|
||||
Women filled my Styrofoam cup at the twenty-four-seven coffee shop across the street from the parlour, glancing wordlessly at the strip of bare skin between my coat and the tops of my stockings, but still making sure my cup was full to the top, passing me extra packets of sugar, sometimes a muffin from the day-old basket. Kids in their early twenties manned the counter at all-night fast-food joints, where I’d go between clients on slow shifts, needing something to wake up my neurons: salt, heat, grease. The shock of cold air on my legs at midnight. We knew so little about each other’s lives—how could we?—but forced into this strange cohort of ragged work hours, I felt we sometimes shared a look of recognition: of people whittling time away as we tended to the incessant hungers of others.
|
||||
|
||||
\*
|
||||
|
||||
When I finally did leave the sex trade after finishing my bachelor’s degree as a mature student, I spent seven years working in “good” jobs in the corporate sector. This meant, as I understood it, that I didn’t work nights, that I was a salaried employee, and that I had dental benefits. I had a shiny access card that opened doors—to a gleaming, marble elevator bank, to planters full of plastic ferns, to blocks of cubicles illuminated by fluorescent lighting, a land of perpetual daytime.
|
||||
|
||||
Unlike sex work, my “good” jobs didn’t threaten to overthrow traditional power structures. Many sex workers, including myself, have long hypothesized that the reason so many people in power work to keep the commercial sex trade marginalized is because they’re threatened by it—by the idea that it’s the only field where women outearn men, that it’s an industry where women get to call the shots, and that women profit off something that men have been told they’re entitled to for free: sex and attention in equal parts. In my experience of the corporate landscape, there was none of this radical power structure, only an upholding of the traditional: men talking and women listening, men in powerful positions getting both credit and profit for the labour of women beneath them. _Is this what I worked so hard for?_ I wondered daily.
|
||||
|
||||
As I moved through this new world, merging into the throng of daytime professionals that swelled throughout the downtown core, absorbed by their smartphone screens, and proffering the barest morsels of small talk, I felt little of the camaraderie I once did while working night shifts. I’m unsure why I felt this dissonance, and it occurs to me now that it could have been more self-imposed than anything. Perhaps my experience in the parlours of Finch Alley felt so removed from what I perceived as the experience of my corporate colleagues and their “good life choices” that I created that distance myself, imposter syndrome as thick as the steam that rose from the downtown subway grates during the winter. When I was assigned a crisis communications task, which was often part of my job, I would try to cheer myself up by silently joking that after everything, my livelihood somehow still depended on men employing bad judgement. But there was nobody around who would understand, so the joke fell flat, even in my head.
|
||||
|
||||
Sometimes when I headed home from the office, stuffed onto a packed streetcar, I remembered nights when our strip mall felt like a kingdom, where we scurried from block to block like savvy woodland creatures, coats zipped over our lingerie, faces alight under the weak yellow streetlamps, dispatching coffee orders or supplies from clerks at the late-night convenience stores. Condoms. Baby oil. Hot Cheetos. “We know where _she_ works,” their faces said, but it felt less like a judgement and more like an acknowledgement. We were in it together; an ecosystem of tending to each other’s needs, brazen and intimate at the same time.
|
||||
|
||||
Once I sat on the leather couch in the dressing room, which was just an extension built onto the massage parlour that housed an industrial-sized washer and dryer, a makeup table, and a precarious utility shelf crammed with supplies: towels, mineral oil, rubbing alcohol, Kleenex. Nursing a black tea, I steeled myself before my last appointment of the night. It was booked as an hour-long shower session, which I hated. Sixty minutes with a regular who would never say a word to me, who just wanted to touch my breasts as we slowly turned to prunes under the tepid water, while I tried to make each stifled yawn look like it was, in fact, a shiver of ecstasy. “I don’t know if I can make it,” I said, half joking but half imploring the five other girls who sat wedged on the couch with me, or sprawled on threadbare Ikea chairs.
|
||||
|
||||
“Baby, come sit by me,” said Cheryl, an attendant from Newfoundland in her early fifties with sun-crinkled skin the colour of almonds and a voice like gravel. I plodded over to where she sat at the makeup table and pulled up a stool.
|
||||
|
||||
“At least let me fix your hair,” she said. I complied.
|
||||
|
||||
Cheryl brushed my hair extensions out with her fingers, acrylic nails flashing, pink as Malibu. Then she took out a wide-barrel curling iron and meticulously worked my unruly hair into waves, smiling and humming periodically at her handiwork. “There,” she said when she was finished. “So pretty.”
|
||||
|
||||
I felt so much care in that moment I could barely breathe, and it occurred to me that I’d never had a woman, before or since, handle my hair so tenderly.
|
||||
|
||||
Once, the fire alarm went off in the office tower where I worked downtown. We crammed into the stairwell, lurching down dozens of flights. It was the most unscripted moment I had encountered since starting that office job and for a moment I marvelled at the chaos of it all: the unvarnished panic and confusion on people’s faces, the small gesture of kindness when I dropped my elevator card and someone picked it up for me. _Maybe this is it_, I thought. _Maybe this is when the adrenaline and uncertainty give way to something more human, where we seek relief in collective company_. _Maybe we’ll all go out for a drink and watch the fire trucks tend to the real emergency._ But when the final door banged open on ground level, spitting us out into the alley behind a steakhouse, everyone dispersed in separate directions, scattering as far as the eye could see.
|
||||
|
||||
\*
|
||||
|
||||
Last year, [New York mayor Eric Adams was quoted](https://www.cnbc.com/2022/01/06/what-experts-say-eric-adams-gets-wrong-about-low-skilled-workers.html#:~:text=%E2%80%9CMy%20low%20skill%20workers%20%E2%80%94%20my,We%20are%20in%20this%20together.%E2%80%9D) referring to cooks, fast-food workers, dishwashers and messengers as “low-skill workers,” proclaiming they simply don’t have the skills to “sit in a corner office.” Like Toronto, New York relies on a variety of minimum wage and night shift workers to keep its culture “vibrant”—a term often used in city-building and real estate circles—or at least convenient. In fact, according to the [Bureau of Labor Statistics](https://www.bls.gov/careeroutlook/2015/article/night-owls-and-early-birds.htm), more than fifteen million Americans work night shifts. [In Canada](https://www.carexcanada.ca/profile/shiftwork-occupational-exposures/), it’s closer to 1.8 million, or 12 percent of the working population. Could not a single one of those people have the “skills” to work in a corner office? When I read Adams’ quote, I was back, for the briefest of seconds, in that dark parking lot under a red-lit “massage” sign, watching the outline of a coffee shop server across the street as she wiped down the midnight counter, over and over. I thought of her thankless work and the comfort she provided to so many people moving through that transient space, the way she may have wanted to do something—anything—else with her time, but perhaps was not afforded the opportunity to. What a world in which her labour went unvalued, perhaps unnoticed altogether.
|
||||
|
||||
Adams’ comments ricocheted through social media for months, at one point resulting in a tweet about how most corner office professionals wouldn’t be able to handle even one overnight shift at Waffle House. But Adams isn’t alone in his simplistic view; many of the jobs that require overnight shifts are considered “low skill” roles by those in power, regardless of how essential they might be. How quickly the discourse moves from “frontline workers” to “low-skilled labourers” as soon as the concepts of unions or minimum wage increase make an appearance. This idea of night shift jobs being less desirable, work people do because they “have to,” not because they want to, is true sometimes. It was obvious to me that many in my night shift network were working gigs as a stopgap on the way to something else, but to me that never made any of us less deserving. In reality, I thought of us as some of the strongest, the most resourceful, the most skilled at defusing confrontations that often come with late-night interactions.
|
||||
|
||||
“You’re better than this job,” clients sometimes said to me while I was working nights. Often they’d say it in the awkward and delicate moments immediately after a session, as we towelled off together and I stripped the massage table—moments where men were often fraught with shame, resignation, and satiation in equal parts, and words tumbled clumsily from their mouths. They meant it as a compliment, but it was a sentiment I hated. _You’re better than this_. As though somewhere, there was a woman who wasn’t.
|
||||
|
||||
I’ve seen security guards diffuse a knife fight. I once watched a fast-food server placate a violent customer with nothing more than her voice and a stale honey cruller at her disposal. I’ve met few professionals since who I think could handle those wearying hours and even fewer who could still react with tact and effectiveness under pressure, especially considering the low, precarious wages these gigs often pay. Plus, there’s a danger to working jobs with these hours and demands on a long-term basis. Statistics have long shown that [people who work night shifts are more likely to battle stress, illness, even premature death](https://www.ajpmonline.org/article/S0749-3797%252814%252900623-0/fulltext). Whether those late-night needs—for food, for sex—are real or perceived, as long as there’s a demand, profit-driven businesses will want to capitalize on it, perhaps at the very expense of the workers who take those shifts. The price we pay to keep cities thrumming and hungers satiated at all hours of the night and day is steep.
|
||||
|
||||
\*
|
||||
|
||||
It’s been years since I held a job requiring those kinds of late-night shifts. I woke recently at exactly 2 a.m., as I often do, pulled from slumber by some unnameable cue. I poured a glass of water and stood at my apartment window, suspended high above a ribbon of expressway. From behind the glass, everything was hushed at that hour. Then I reminded myself that an entire ecosystem still hums and clanks and keeps the world stitched together quietly: the municipal salt truck scattering brine down the street. The yellow sign of the twenty-four-seven grocery down the block advertising milk, bread, cigarettes. The wink of a red taillight as it trails across the expressway and flashes out of sight. I can’t, of course, know who it might be; perhaps another aimless man not ready to go home yet, rootless and restless and looking for validation in all the wrong places; perhaps another night shift worker on her way home, forming an unspoken understanding with her cab driver. Sometimes I think I have nothing to show for those years spent tending to people’s needs after hours, a period of my life as brief and transient as the red glow of that receding taillight. But I know the stories of the city after dark, and I keep those with me, always.
|
168
Media/articles/Error Handling in Zig.md
Normal file
168
Media/articles/Error Handling in Zig.md
Normal file
@ -0,0 +1,168 @@
|
||||
---
|
||||
author:
|
||||
link: https://www.aolium.com/karlseguin/4013ac14-2457-479b-e59b-e603c04673c8
|
||||
status: not-finished
|
||||
date: August 7, 2023
|
||||
---
|
||||
# Error Handling In Zig
|
||||
#programming #error-handling #zig #enum #error-set
|
||||
There are two aspects to Zigs simple error handling: error sets and try/catch. Zigs error set are essentially a specialized enum that can be created implicitly:
|
||||
|
||||
```
|
||||
fn divide(dividend: u32, divisor: u32) !u32 {
|
||||
if (divisor == 0) {
|
||||
return error.DivideByZero;
|
||||
}
|
||||
return dividend / divisor;
|
||||
}
|
||||
```
|
||||
|
||||
Which is, in effect, the same as making it explicit:
|
||||
|
||||
```
|
||||
const DivideError = error {
|
||||
DivideByZero
|
||||
};
|
||||
|
||||
fn divide(dividend: u32, divisor: u32) !u32 {
|
||||
if (divisor == 0) {
|
||||
return DivideError.DivideByZero;
|
||||
}
|
||||
return dividend / divisor;
|
||||
}
|
||||
```
|
||||
|
||||
In both cases our function returns an `!u32` where the exclamation mark, `!`, indicates that this function can return an error. Again, we can either be explicit about the error(s) that our function returns or implicit. In both of the above case, weve taken the implicit route.
|
||||
|
||||
Alternatively, we could have used an explicit return type: `error{DivideByZero}!u32`. In the 2nd case we could have used the explicit error set: `DivideError!u32`.
|
||||
|
||||
Zig has a special type, `anyerror`, which can represent any error. Its worth pointing out that the return types `!u32` and `anyerror!u32` are different. The first form, the implicit return type, leaves it up to the compiler to determine what error(s) our function can return. There are cases where the compiler might not be able to infer type where well need to be explicit, or, if youre lazy like me, use `anyerror`. Its worth pointing out that the only time Ive run into this is when defining a function pointer type.
|
||||
|
||||
Calling a function that returns an error, as `divide` does, requires handling the error. We have two options. We can use `try` to bubble the error up or use `catch` to handle the error. `try` is like Gos tedious `if err != nil { return err }`:
|
||||
|
||||
```
|
||||
pub fn main() !void {
|
||||
const result = try divide(100, 10);
|
||||
_ = result; // use result
|
||||
}
|
||||
```
|
||||
|
||||
This works because `main` itself returns an error via `!void`. `catch` isnt much more complicated:
|
||||
|
||||
```
|
||||
const result = divide(100, 10) catch |err| {
|
||||
// handle the error, maybe log, or use a default
|
||||
}
|
||||
```
|
||||
|
||||
For more complicated cases, a common pattern is to switch on the caught error. From the top-level handler in [http.zig](https://github.com/karlseguin/http.zig/blob/bda55c35c6167d073f3ec5e870b6fce89651d35b/src/httpz.zig#L289):
|
||||
|
||||
```
|
||||
self.dispatch(action, req, res) catch |err| switch (err) {
|
||||
error.BodyTooBig => {
|
||||
res.status = 431;
|
||||
res.body = "Request body is too big";
|
||||
res.write() catch return false;
|
||||
},
|
||||
error.BrokenPipe, error.ConnectionResetByPeer => return false,
|
||||
else => self._errorHandler(req, res, err),
|
||||
}
|
||||
```
|
||||
|
||||
Another somewhat common case with `catch` is to use `catch unreachable`. If `unreachable` is reached, the panic handler is executed. Applications can define their own panic handler, or [rely on the default one](https://github.com/ziglang/zig/blob/1c7798a3cde9e8dad31c276aab4c1affb2043ad2/lib/std/builtin.zig#L733). I use `catch unreachable` a lot in test code.
|
||||
|
||||
One final thing worth mentioning is `errdefer` which is like `defer` (think Gos `defer`) but it only executes if the function returns an error. This is extremely useful. You can see an example of it in the [duckdb driver](https://github.com/karlseguin/zuckdb.zig/blob/master/src/conn.zig#L27)
|
||||
|
||||
```
|
||||
pub fn open(db: DB) !Conn {
|
||||
const allocator = db.allocator;
|
||||
|
||||
var slice = try allocator.alignedAlloc(u8, CONN_ALIGNOF, CONN_SIZEOF);
|
||||
|
||||
// if we `return error.ConnectFail` a few lines down, this will execute
|
||||
errdefer allocator.free(slice);
|
||||
|
||||
const conn: *c.duckdb_connection = @ptrCast(slice.ptr);
|
||||
|
||||
if (c.duckdb_connect(db.db.*, conn) == DuckDBError) {
|
||||
// if we reach this point and return an error, our above `errdefer` will execute
|
||||
return error.ConnectFail;
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
A serious challenge with Zigs simple approach to errors that our errors are nothing more than enum values. We cannot attach additional information or behavior to them. I think we can agree that being told "SyntaxError" when trying to parse an invalid JSON, with no other context, isnt great. This is currently an [open issue](https://github.com/ziglang/zig/issues/2647).
|
||||
|
||||
In the meantime, for more complex cases where I want to attach extra data to or need to attach behavior, Ive settled on leveraging Zigs tagged unions to create generic Results. Heres an example from a PostgreSQL driver Im playing with:
|
||||
|
||||
```
|
||||
pub fn Result(comptime T: type) T {
|
||||
return union(enum) {
|
||||
ok: T,
|
||||
err: Error,
|
||||
};
|
||||
}
|
||||
|
||||
pub const Error = struct {
|
||||
raw: []const u8, // fields all reference this data
|
||||
allocator: Allocator, // we copy raw to ensure it outlives the connection
|
||||
|
||||
code: []const u8,
|
||||
message: []const u8,
|
||||
severity: []const u8,
|
||||
|
||||
pub fn deinit(self: Error) void {
|
||||
self.allocator.free(self.raw);
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
Because Zig has exhaustive switching, we can still be sure that callers will have to handle errors one way or another. However, using this approach means that the convenience of `try`, `catch` and `errdefer` are no longer available. Instead, youd have to do something like:
|
||||
|
||||
```
|
||||
const conn = switch (pg.connect()) {
|
||||
.ok => |conn| conn,
|
||||
.err => |err| // TODO handle err
|
||||
}
|
||||
```
|
||||
|
||||
The "TODO handle err" is going to be specific to the application, but you could log the error and/or convert it into a standard zig error.
|
||||
|
||||
In our above `Error` youll note that weve defined a `deinit` function to free `self.raw`. So this is an example where our error has additional data (the `code`, `message` and `severity`) as well as behavior (freeing memory owned by the error).
|
||||
|
||||
To compensate for our loss of `try` and `catch`, we can enhance or `Result(T)` type. I havent come up with anything great, but I do tend to add an `unwrap` function and a `deinit` function (assuming either `Error` or `T` implement `deinit`):
|
||||
|
||||
```
|
||||
pub fn unwrap(self: Self) !T {
|
||||
switch(self) {
|
||||
.ok => |ok| return ok,
|
||||
.err => |err| {
|
||||
err.deinit();
|
||||
return error.PG;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn deinit(self: Self) void {
|
||||
switch (self) {
|
||||
.err => |err| err.deinit(),
|
||||
.ok => |value| {
|
||||
if (comptime std.meta.trait.hasFn("deinit")(T)) {
|
||||
value.deinit();
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Unlike Rusts `unwrap` which will panic on error, Ive opted to convert `Error` into an generic error (which can then be used with Zigs built-in facilities). As for exposing `deinit` directly on `Result(T)` it just provides an alternative way to program against the result. Combined, we can consume `Result(T)` as such:
|
||||
|
||||
```
|
||||
const result = pg.connect();
|
||||
defer result.deinit(); // will be forwarded to either `T` or `Error`
|
||||
const conn = try result.unwrap();
|
||||
```
|
||||
|
||||
In the end, the current error handling is sufficient in most cases, but I think anyone who tries to parse JSON using `std.json` will immediately recognize a gap in Zigs capabilities. You can work around those gaps by, for example, introducing a `Result` type, but then you lose the integration with the language. Of particular note, I would say losing `errdefer` is more than just an ergonomic issue.
|
@ -1,46 +0,0 @@
|
||||
---
|
||||
link: https://madamedessert.de/veganer-beeren-crumble/
|
||||
image: Recipes/images/veganer-beeren-crumble.jpg
|
||||
portion: 4
|
||||
rating: 5
|
||||
---
|
||||
|
||||
# Veganer Beeren Crumble
|
||||
![](Recipes/images/veganer-beeren-crumble.jpg)
|
||||
|
||||
---
|
||||
|
||||
_Veganer Streuselteig_
|
||||
|
||||
- 80 g Mehl
|
||||
- 80 g brauner Rohrohrzucker
|
||||
- 1 Prise Salz
|
||||
- 50 g gemahlene Mandeln
|
||||
- 30 g ganze Mandeln
|
||||
- 80 g vegane Butter, kalt
|
||||
|
||||
_Beeren-Füllung_
|
||||
|
||||
- 400 g gemischte Beeren, tiefgekühlt
|
||||
- 50 g brauner Rohrohrzucker
|
||||
- 1 Päckchen Vanillezucker
|
||||
- 1/2 TL Zimt
|
||||
- optional zum Andicken: 1 EL Speisestärke, 3-4 EL Orangensaft
|
||||
|
||||
---
|
||||
|
||||
Backofen auf 180°C Ober-/Unterhitze vorheizen. Emntweder eine Ø 24cm große Quiche-/Tarteform oder 4 bis 6 kleinere ca. Ø 8cm große Förmchen bereitstellen.
|
||||
|
||||
_Vegane Streusel-Liebe_
|
||||
|
||||
Mehl zusammen mit Zucker, Salz und gemahlenen Mandeln in einer Rührschüssel vermischen. Die ganzen Mandeln hacken und unterrühren.
|
||||
Vegane Butter oder rein-pflanzliche Margarine dazugeben und zwischen den Fingern kurz zu einem streuseligen Teig verkneten. Streuselteig in den Kühlschrank stellen.
|
||||
|
||||
_Erdbeeren, Himbeeren, Blaubeeren, Brombeeren_
|
||||
|
||||
Tiefgekühlte Beeren zusammen mit Zucker, Vanillezucker und Zimt in eine Schüssel geben und verrühren. Optional Stärke mit Saft glattrühren und ebenfalls unter die Beeren rühren. Beeren-Mischung auf die Form bzw. Formen verteilen.
|
||||
|
||||
_Ab in den Backofen!_
|
||||
|
||||
Streuselteig aus dem Kühlschrank nehmen und gleichmäßig auf der Beerenmischung verteilen. Auf einem Backofenrost im unteren Drittel im vorgeheizten Ofen ca. 30 Minuten backen, bis die Streusel goldbraun sind.
|
||||
Fertigen Beeren Crumble in wenig auf einem Kuchengitter abkühlen lassen und anschließend servieren.
|
Loading…
Reference in New Issue
Block a user