<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-02-23T01:24:02+00:00</updated><id>/feed.xml</id><title type="html">Noa’s blog</title><subtitle>I have written things, occasionally.</subtitle><entry><title type="html">Thoughts on the piece Voice Over from This American Life</title><link href="/2022/08/28/thoughts-on-voice-over.html" rel="alternate" type="text/html" title="Thoughts on the piece Voice Over from This American Life" /><published>2022-08-28T00:00:00+00:00</published><updated>2022-08-28T00:00:00+00:00</updated><id>/2022/08/28/thoughts-on-voice-over</id><content type="html" xml:base="/2022/08/28/thoughts-on-voice-over.html"><![CDATA[<p>I caught this This American Life piece about a trans guy’s experience with his
voice as a singer on NPR on Friday, and wow did I get a lot of Feelings from it
(in a positive sense! It’s a very good piece and you should listen to it!)</p>

<p><a href="https://www.thisamericanlife.org/778/me-minus-me/act-one-2">Voice Over - This American Life: Sandy Allen tells the story of learning to play an instrument that suddenly sounds very different — his own voice. (19 minutes)</a></p>

<p>The first roughly half of the piece is about hesitancy about going on T and
that’s currently disc-horse on twitter and I don’t feel the need/want to get
into it loll, but it’s a good perspective on it. But after that it’s about him
working through his vocal changes and voice breaks and such, and it was so
interesting for me to listen to his experience with it, cause when that
happened to me it was like, traumatic, almost.</p>

<p>In 8th grade, I was still more or less a soprano, and in the all-boys choir
that you had to be in to be in the honor choir (‘'’girls’’’ had to be in the
all-girls choir) the soprano section was like me and a bunch of 6th graders. In
the honor choir itself (or maybe it was just my standard curricular choir, I’m
not sure) I was also able to be a soprano/alto, and I was learning that part
for the final concert of the year, along with a handful of ‘'’other’’’ boys.
Until, they decided that they wanted to go and just be tenors, and I was the
only ‘'’boy’’’ left among the altos/sopranos (I know they’re not one thing I
just can’t remember which one I was in specifically). And it felt really
uncomfortable to me in a way I couldn’t quite articulate, even though I loved,
loved, loved singing high! And I was literally weighing my options, this
feeling of uncomfortability about being feminine(? or something like that?) vs,
and I literally remember thinking something like this, that this’ll be the last
chance I have to sing in this range that I love. And I ended up making the
decision, and getting up without saying anything to the director and quietly
moving to the tenor section of the risers, in front of everyone. He asks “oh,
are you gonna be a tenor?” and I’m like, “yep”. And I ended up being right
about what I was thinking, that <em>was</em> the last chance that I had to sing in a
high range.</p>

<p>Then in high school, the freshman choir was split by gender (or by alto/soprano
/ tenor/bass but like, you know) and I was held back at the end of the year
for, not being able to harmonize well at that point? Something like that, I
don’t remember exactly. And so at the start of sophomore year, I’m maybe 2
weeks into my gender existential crisis and I’m in a ‘'’boy’’'’s choir. And I’m
a tenor 1 (the tenor part that tends to sing the higher parts), and like, it
could be worse. I still really like singing, and I got used to singing tenor
the year before without any gender baggage attached - though at that point I am
realizing that I actually do have a <em>shitton</em> of voice dysphoria, and am
wanting to dig my larynx out of my throat with a spoon. But it’s not as bad
when I’m singing, and I can at least do vocal warm-ups like an octave higher
than the rest of the choir cause nobody can really notice.</p>

<p>And then, at the start of 2nd semester, we do another round of voice tests. And
the long-term substitute we had (cause the normal teacher was on paternity
leave for 6 weeks) places me as a baritone. And I just really really really
really dislike the feeling of that but can’t say why without, y’know. So he
ends up being the second person I ever come out to, after my parents just 2
weeks prior. I’m trying to explain after class why I don’t want to be a
baritone and he’s like “but you’d be a good fit!” and I wait til I’m the only
kid left in the classroom and am like, “um, the reason I don’t want to sing
baritone is because I’m transgender ,,,,”</p>

<p>And alll that to give context to how it felt to listen to another trans person
talk about going through those same changes, but in an <em>intentional</em> and
<em>gender-affirming</em> and <em>joyous</em> way, in the end. And for a little bit, he
expresses similar feelings of having “lost” a voice, but he comes out the other
side really loving his new one. And him singing at the end of the piece, with a
more stabilized masc voice, feeling confident and content in it, made me tear
up.</p>

<p>He also says he specifically loves the sound of it specifically as a <em>trans</em>
voice, which I’ve grown to love my voice for as well. I haven’t done very much
voice training, but the little I have makes this graph ring very true for me,
lmao:</p>

<p><img src="/imgs/fruitycanyon.jpg" alt="a hand-drawn graph. in the bottom-left corner, there's a small section labeled &quot;dude&quot;. in the top-right corner, there's a small section labeled &quot;woman&quot;. the rest of the area of the graph is labeled &quot;fruity canyon&quot;." /></p>

<p>And do I want to do more voice training, and be able to sing comfortably in a
high range? Yes, absolutely. But I’m sorta content with my voice as it is,
certainly more than I was 3 years ago, and I think that’s what matters.</p>

<hr />

<p>I originally wrote this as a
<a href="https://twitter.com/coolreader18/status/1564082903335813120">twitter thread</a>
but decided to put it as a post here to serve as a more canonical version of
the writing.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[On being a singer and transitioning.]]></summary></entry><entry><title type="html">WebAssembly as a Universal Executable Format</title><link href="/2021/01/31/wasm-universal-exe.html" rel="alternate" type="text/html" title="WebAssembly as a Universal Executable Format" /><published>2021-01-31T00:00:00+00:00</published><updated>2021-01-31T00:00:00+00:00</updated><id>/2021/01/31/wasm-universal-exe</id><content type="html" xml:base="/2021/01/31/wasm-universal-exe.html"><![CDATA[<p>This is a paper I wrote for a scholarship application, and that I’ve rehosted
here for the benefit of those interested.</p>

<p>WebAssembly, or Wasm, is an executable bytecode format designed to run in the browser as a companion to JavaScript. It allows lower-level languages like C, C++, or Rust to be compiled to a ‘.wasm’ binary and run CPU-intensive operations efficiently while staying in the sandbox of a website. This essay will explore why Wasm has a bright future as an executable format not just for the web, but in many other domains including servers, user plugins, and distributed computing.</p>

<h4 id="why-wasm">Why Wasm?</h4>
<p>There have been languages and bytecodes claiming to be “write once run anywhere” before, most notably Java and its JVM. However, there are multiple drawbacks to the JVM that hindered its adoption, although it was, to be fair, very widely used from the mid 2000s to early 2010s. For one, the architecture of the JVM is very much tied to Java as a language, with its object-oriented style. The JVM, while for the most part a low-level stack machine, has a concept of classes, objects, and inheritance, due to the existence of those constructs in Java the language (JVM specification). Therefore, any languages that run on the JVM have to be object-oriented themselves, or at the very least support defining classes and creating objects in order to interoperate with the rest of the JVM. Even a language like Scala, which pushes the bounds of the JVM with its functional programming capabilities, still needs classes and OOP objects at a base level so that the JVM can understand it. In addition, both Scala (Mazur) and Kotlin (Kotlin docs), languages intended as direct alternatives to Java for similar problem domains, are actively exploring native compilation backends to allow users to avoid the JVM altogether if so desired. That may be because the JVM is fairly heavy, with a runtime including the entire Java standard library, a full threading model, operating system functions, and in most cases a profiling JIT interpreter. While these features may be desirable for an enterprise-grade server, the JVM doesn’t allow for easy sandboxing, and the decline of the JVM on desktop and the rise of browser applications has shown that some aspects of the JVM aren’t particularly endearing to users.</p>

<p>Wasm addresses all these concerns. It’s entirely language-agnostic, standing much closer to actual assembly than Java bytecode, and as such has better performance when it comes to raw “number-crunching” as well as being easy and fast to compile to native machine code. Its instruction set is very minimalist; most instructions are related to either control flow or arithmetic, and there’s as a small suite for reading or writing data to/from the heap and one instruction for requesting that the host extend the heap with more memory from the OS, which can fail. Any sort of allocator for managing dynamically allocated objects on the heap must be implemented in the Wasm module itself, as the Wasm “heap” (referred to as “linear memory”) is just a block of bytes that can be modified by the application (Wasm spec).</p>

<p>Instructions are grouped into functions, which can receive and return integer and floating point values and are in turn grouped into modules. Wasm modules are essentially just a list of definitions of functions, but also contain a section for imported and exported functions. The exports section just determines which functions are made available to the host under what name, but the imports section can bring in native functions that the host provides, giving the module access to the outside environment. A module has no capabilities except for what the host provides, meaning that entirely unknown and untrusted modules can be loaded and run with few concerns for security, so long as all the functions exposed to the module are properly locked down. However, that doesn’t mean that a Wasm module has no access to the operating system – there’s a specification called WASI (WebAssembly System Interface) that defines a set of functions a module can import that provide capability-based access to the file system, random number generators, and eventually networking sockets. Capability-based means that even if a module is run as a wasi program, it doesn’t receive access to the entire file system; rather, it’s given access to only certain directories, and can only read or modify files in those directories (WASI goals doc).</p>

<p>All of these features mean that Wasm is very well suited not just for expanding what’s possible in a web browser, but also for any use case that necessitates untrusted code execution. Untrusted JavaScript can’t be run unsandboxed in a web page, due to the possibility of cross-site-scripting attacks, but an untrusted Wasm module can be; there even exists a WASI implementation for the web, meaning that a program written by a user expecting to be run as a native binary can be run easily in the browser. Or, imagine a platform like BOINC or SETI@home for allowing researchers to distribute computation, but available to any research project, since data-crunching programs written in Wasm wouldn’t be able to access the outer OS or spread malware.</p>

<p>These are only a few possibilities of what Wasm is capable of, and I believe that Wasm truly represents a new era for the Web, and for many other domains of computing.</p>

<h4 id="works-cited">Works Cited</h4>
<p>“The class File Format.” Java Virtual Machine Specification, Oracle, docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html.</p>

<p>Mazur, Wojciech. “Scala Native 0.4.0 is here!.” Scala Blog, 19 Jan. 2021, scala-lang.org/blog/2021/01/19/scala-native-0.4-release.html.</p>

<p>“Kotlin/Native overview.” Kotlin Reference, Kotlin Foundation, kotlinlang.org/docs/reference/native-overview.html.</p>

<p>“Module memories.” WebAssembly Specification, WebAssembly Working Group, webassembly.github.io/spec/core/syntax/modules.html#memories.</p>

<p>“WASI High-Level Goals.” WASI documentation, WASI Working Group, github.com/WebAssembly/WASI/blob/main/docs/HighLevelGoals.md.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[This is a paper I wrote for a scholarship application, and that I’ve rehosted here for the benefit of those interested.]]></summary></entry></feed>