Saturday, March 20, 2021

How to display media with relative links in Twine play testing mode

Twine is great, and the Twine 2 UI is a fantastic little tool for developing nonlinear stories. But as of this writing, it's great for text and not-so-great for other media. You can easily embed media using html, but it's not easy to work with as you're developing or testing your game. One frustrating note from the Twine documentation:

If you are using relative links for your multimedia, you will need to publish your story to the correct location on your computer so that the references point to the right place. If you have an image tag whose source property is “myimage.jpeg”, for example, then your published file must be placed in the same folder as the file myimage.jpeg. Learn more about relative links

If you are using relative links, testing or playing your story inside Twine will unfortunately not work.

I was using many local, relative links for images and video as I was working on OnlyBans and got annoyed enough by this to make a temporary solution for myself. To use this, you need a file syncing tool

  1. Make a media/ directory in the same location that your Twine story lives. This is likely your Twine/Stories directory. Drop your images here: Twine/Stories/images/myimage.jpg. (This step is largely for convenience.)
  2. Open your story and add an image to a story passage using an HTML tag such as <img> or <video>
  3. Test your story. You'll notice that instead of images, you'll get a little default 'missing image' icon. 
  4. Open the developer view tool for your browser. Find your image in the HTML source panel. You can often hover over the icon to locate it. 
  5. Right-click on the image name, hover over it, or open the image in a new tab to find an expanded file path. The specific filepath will vary by browser and operating system. The image below shows one way to view the expected path in Chrome. For example, on my Windows machine my browser expected to find the file at C://Users/username/AppData/Temp/Images/myimage.jpg. Our goal now is make sure that there's a copy of our image in this location. 
    Screenshot of a Twine game with a broken image link "feet-cc0.jpg". Half the screen is filled with Chrome's developer tool window. The HTML source code is displayed with "feet-cc0.jpg" highlighted. A tooltip show the full filepath, "C://Users/username/AppData/Images/feet-cc0.jpg."

  6. Open or download a file syncing tool. For Linux or people comfortable with the command line, I recommend Rsync. Right now I'm using Windows, so I used SyncFolder
  7. Sync these two folders. The source directory should be Twine/Stories/images/ and the destination directory should be the one from your browser, C://username/AppData/Temp/Images/. If syncing feels too complicated to you, you can also just manually copy and paste your images to the destination directory.
  8. Every time you add an image, alter media, change the name of a file, or close/re-open your browser, you may need to Sync that folder again. You can set up your syncing tool to run frequently, or you can manually run the sync job by pressing 'Sync' in your tool.

You might be wondering: Why not just store my images in the destination folder in the first place? That's not not ideal for two reasons. First, these temporary directories are sometimes automatically deleted by your operating system to clear up space. If you only store your images there, you may lose them to deletion! Second, when you finish your story and are ready to publish it using Twine, Twine expects to find those images in a "nearby" folder with relative paths. If you upload your media online or want to send your game to others, you will need to send them the media as well. 

Let me know if this helped you on your Twine journey, or if you have a different trick you used instead. 


Sunday, February 21, 2021

A blessing for mishmash family

A blessing for mishmash family

Maggie Oates

You are invited to unmute. If the words speak to you or resonate with you, please respond with the words in italics.


There are photos we point to, saying "she looks so much like you!" Twins sharing a secret handshake. A medical history, an inheritance.

Blessed is the family bound by blood. 


There are beacons of food, song, or craft, pulling us together like gravity

Blessed is the family bound by senses. 


Ocean Vuong notes, “In Vietnamese, the word for missing someone and remembering them is the same.” When his mother asks him over the phone in Vietnamese: Do you miss me? he flinches, thinking she meant: Do you remember me? 

He is honest, “I miss you more than I remember you.” 

Blessed is the family missed. 
Blessed is the family not remembered. 


There are places where we have precious refrigerator rights. Dinners at another’s table. A candy from a neighbor. The child that always smiles and drools on you on your usual bus route. 

Blessed is the family borrowed.
Blessed is the family stumbled upon.


There are names and relationships lost to time or to violence. African Americans honoring their ancestors face “the brick wall” of documentation, with few written records of Black families before emancipation. 

Blessed is the family unknown, but felt. 


There are reunions, first-unions, births, awkward hugs and long excavations through time and memory. 

Blessed is the family found.


There are lovers of leaving. As HP Rivers says, “leaving family and familiarity, leaving tables where love is not being served.” Those who could not see a light in us, maybe a queerness or a disability. 

Blessed is the family that needs to be grieved.


There are strange and defiant mishmashes. Ones who clung together at first in survival. Then, held each other gently in thriving.

Blessed is the family that is chosen.


There are ones we will never meet, never know, never find, never even consider. The ones seen in church pews or quiet libraries or playgrounds. May we quietly reach to embrace them.

Blessed is the family bound by spirit.
Blessed is our family.



Written by Maggie Oates for the February 21, 2021 online Allegheny Unitarian Universalist Church service with Rev. Deryck Tines called "Celebrating Family in Black History Month." 

1. Ocean Vuong's words are from his book, On Earth We're Briefly Gorgeous. You can find it in bookstores and libraries. The full quote is
In Vietnamese, the word for missing someone and remembering them is the same: nhớ. Sometimes, when you ask me over the phone, Có nhớ mẹ không? I flinch, thinking you meant, Do you remember me? I miss you more than I remember you.
2. It is very difficult for African-Americans to research their ancestry before the 1900s because "enslaved African Americans were rarely recorded by name in documents of any kind, making the tracing of their antebellum ancestry nearly impossible." However, sometimes this wall is possible to scale. For resources, see Henry Louis Gates Jr and Meaghan Siekman's "Cheat Sheet for Researching African-American Ancestors" and this list of "African American Resources for Pennsylvania." Locally, there is a chapter of the Afro-American Historical and Genealogical Society.

3. HP Rivers wrote "Blessed Are the Queer."


Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.



Sunday, April 19, 2020

What does freedom feel like? (Guided Meditation)

This 5-minute guided meditation was written for an online service on Liberation at Allegheny Unitarian Universalist Church, to be read by Sue Watts. 

What does freedom feel like?

Have you felt freedom, felt it in your body? Where does freedom lie in your body? Summon a bit of it, if you can, for just for a moment.

If your freedom soars, summon that rising in your chest. If your freedom sits and settles, summon that good weight around your hips. If your freedom dances, summon that electricity on your skin. If your freedom is lightness or floating, banish that lump in your throat and ask your limbs to let go of their tightness.

[Pause, 30 sec]

Have you witnessed the freedom of another? Seen a woman walk from prison? Seen a dog with ears flapping in the wind? Seen a child stick up for another when they know something is Right? Seen a man kiss a man on the street and in the sun?

How does it feel to witness freedom?

[Pause, 30 sec]

Have you witnessed the chains of another? Opened your eyes to pain you couldn’t see before? Lifted the veil on a horror where oppressors had taped it down, refusing to let you see?

How does it feel to witness chains?

[Pause, 30 sec]

Have you ever moved your body toward liberation? Not just lifting a helping hand, but moving your whole being? As Aboriginal activists said in the 70s, “If you have come here to help me, you are wasting your time. But if you have come because your liberation is bound up with mine, then let us work together.”

How does it feel to be bound up with me?

[Pause, 30 sec]

What does freedom feel like? Can you expand this freedom?
Can you move your whole being toward freedom?
Can you move your whole being toward your freedom, and mine?

[Pause, 30 sec]



Words by Maggie Oates and Sue Watts. They were written for the voice and spirit of Sue Watts in mind. I am not associated with the following people or organizations, but this meditation was heavily inspired by the work of adrienne maree brown (particularly her book Pleasure Activism) and by all the wisdom and teachings of generative somatics.

The quote “If you have come here to help me, you are wasting your time. But if you have come because your liberation is bound up with mine, then let us work together.” was popularized by Aboriginal activist Lilla Watson. It can be credited to Aboriginal activist groups, Queensland, 1970s.

If you use this work, I strongly suggest you consider a donation to individuals or organizations working at the intersection of liberation and body, such as generative somatics or Black Organizing for Leadership and Dignity (BOLD).

Creative Commons License
"What does freedom feel like?" by Maggie Oates and Sue Watts is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Tuesday, April 7, 2020

List of Machine Learning Projects That Will Inevitably Be Used to Identify Your Nudes

Anus print detection

A mountable toilet system for personalized health monitoring via the analysis of excreta. 6 April 2020. https://www.nature.com/articles/s41551-020-0534-9
Each user of the toilet is identified through their fingerprint and the distinctive features of their anoderm, and the data are securely stored and analysed in an encrypted cloud server.

Areola and Nipple Detection "For Criminal Identification"


Log In To Cam Sites with Penis Detection

(This project didn't go anywhere)


Ear print detection


Blurring doesn't always work


(Will be updated as more arise.)

Tuesday, June 4, 2019

Public Comment on AI for the Defense Innovation Board



On March 14, 2019, the Defense Innovation Board held a listening session on Artificial Intelligence Principles at Carnegie Mellon. The DIB is an independent committee made up mainly of tech execs and academics that advises the DOD. I wasn't planning on giving a comment at the session, but I got so angry listening to the pre-written publicity statements read aloud by defense contracting tech companies, that I couldn't stay seated.

Here's my very last-minute statement:
Hello, my name is Maggie Oates. I'm a PhD student here in Societal Computing and I work in Cylab, which is the cybersecurity lab here.

Let me first say that I disagree with the very enterprise and existence of the Defense Innovation Board, as it seems like a tool to lend credibility to the project of advancing military efficiency and further escalating the baseline of 'defense.' Second, I disagree with CMU's continued involvement with the military and am hard-pressed to think of an ethical and responsible use of AI at all [in defense].
That said, I would like to focus on something else today and that is what I view as an externality of the project of AI in the DOD. And that is the growth of civil surveillance, both domestically and abroad. The development of machine learning algorithms relies on massive amounts of data, of course. And while methods are being developed to reduce the amount of data required, or to reduce the amount of labeled data required, these methods often correlate with having the downside of being hard to explain and more difficult to verify, making them an unlikely use in the DOD's context. Beyond that, the project of labeling data often rests on exploitative labor practices. So I stand here to assert that any responsible principles must address the effects that DOD AI will have on surveillance, not only from the state, but also from the tech companies that will be the first line in building that AI. This topic is absolutely not out of scope. Thank you.

You can view the video and comments on the DIB site.

Thursday, April 5, 2018

JSON and & "Good, not Evil"

The JSON license is apparently infamous in the FOSS community for its inclusion of a moral clause. The license was nearly identical to the classic MIT License, except the one line,
The Software shall be used for Good, not Evil.
This line has persisted in the license since 2002 when Douglas Crockford originally penned it, and not without controversy. This clause prevents the license from being considered a free license, since it places restrictions on use. That has consequences for artifacts licensed under JSON. Below are some highlights of its fascinating, contentious past and present.

Google Code stops hosting

Around 2009, Google Code (at the time a host for open-source projects) reportedly stopped hosting projects that used the license. Ryan Grove described how he chose to migrate his project, JSMin, to Github. 

In 2010, it would appear that the Google Android team replaced JSON.org implementations in core Android by writing them from scratch, with the commit "Removing the non-free org.json implementation."

Debian rejects use

In 2010, the debian-legal listserv re-visited the topic of whether JSON.org software can be included in Debian's free distributions. Thomas Koch reported he emailed Crockford about the line and received the response,
If you cannot tolerate the license, then do not use the software.
The opinion of the listserv, summarized by Josselin Mouette, was
Definitely non-free, and the author’s clarification removes any doubt.

Crockford & "Evil" IBM

In a fascinating talk for Yahoo on the history of JSON (Trivia: the first JSON 'Hello world' message failed), Crockford discussed granting a license change. In a short section on the history of the license he says
this was late in 2002, you know, we just started the war on terror and you know we were going after the evildoers with the president and the vice president and I felt like I need to do my part. So I added one more line to my license was that the software shall be used for good not evil.
 However, he also describes how he's frequently approached by individuals and companies wanting to use his license. After IBM asked for a separate license, he allowed IBM to use his software under the JSON license, writing,
I give permission to IBM, its customers, partners, and minions, to use JSLint for evil.
Apparently that was enough for IBM lawyers in 2011. So Crockford has, in fact, granted adjusted licenses to some large organizations like IBM.

Crockford & Actual Evil

In 2012, compelled by a conference talk that covered how "the regime in Syria was using open source software in its efforts to track down and murder anyone with the courage to oppose the evil government," Crockford posted on Google+ ,
My very, very, very small part in this is that I include The software shall be used for good, not evil in my licenses. It is not effective at all, but it at least states my intention. It is quite controversial in the open source community because it is claimed that it restricts a specific field of use (specifically, evil), and that software cannot be considered free unless its license permits it to be used in the investigation, torture, and murder of patriots who dare to resist tyrants.
 The line, "It is not effective at all, but it at least states my intention," brings forth questions about the tensions between intention and impact. I'd be curious what Kant thinks about this case study.

 Github & project bug reports

Across Github and other software hosts, you can find references and arguments to the license in bug reports and feature requests. 

In 2013, @blickly opened the issue "json.org is not free software #187" on the popular jshint project for Javascript linting and hints. This issue has 79 comments and remains unresolved as of this writing. In September 2017, user @eclipseo commented that the issue was "preventing us from including it in Fedora."

In contrast, the open project management system Trac resolved their use of JSON software in less than two months in 2012. They simply replaced the parser they were using. 

Change.org petition

2014, Thomas Koch (yes, the same Koch from Debian) begins a Change.org petition to get Crockford to remove that line from its license with the reasoning
Many free software activists are also active for good causes in other areas than software. The non-evil clause costs them time and nerves and distracts them from doing good.
The petition got 35 signatures.

Apache doesn't get the joke

In 2016, Apache reversed (archived text) its prior 8-year decision to use JSON-licensed software in its products. Originally, circa 2008, the legal-discuss listserv's thread indicated that "Good, not Evil" was, for the most part, a joke rather than a legal concern. Henri Yandell wrote, 
It's a joke clause in my opinion.

Yahoo & Nukes

This is the first in a series of tech licenses and terms that involve moral clauses.

Back in 2013, the Yahoo! Desktop Search Software License Agreement contained a fun clause in Section 4, Licensed Uses and Restrictions. While it's explicitly there for liability reasons, it certainly also has the undertones of an ethical question.
[You May Not:]
(v) use the Yahoo! Software to operate nuclear facilities, life support or other mission critical application where human life or property may be at stake and understand that the Yahoo! Software is not designed for such purposes and that its failure in such cases could lead to death, personal injury, or severe property or environmental damage for which Yahoo! is not responsible.
While Yahoo no longer has a desktop search and has since unified its licensing, these terms no longer exist.