Accessibility Testing

Story of the Garment Shop

There are three chapters. You can navigate from one to another. This is Chapter One about how Garment Shops worked.

Chapter One: Work in the Garment Shop

Garment Shops were factories for producing clothing. On this page you can listen and watch people who worked in the garment shops, and proceed to two more chapters about X

Personal Stories

Below are two interviews with people who worked in these garment Shops.

My Guide to Killing a Broken Pipe

When I start a server using node, I sometimes get this error: “Error: listen EADDRINUSE :::8092”

To be able to still use the 8092 port, or any other number, without changing my code, I need to kill or stop the process on that specific port, and restart the server:

Type in terminal $ ps -ef | grep node

A list appears. For each line, the first number listed is the process ID

Then type in terminal $kill # (# is the ID number)

Now type in $ node server.js

Artists in the Archive – Excavator

I have a couple ideas in mind. I couldn’t get the code to work but I’ll have more time to attend to it this coming week.

Subject Headings

I tried to run the code just looking at what’s returned in the SubjectHeadings.xml file. I might want to create a project that looks at the first time a subject heading was created, and the first object entered into the collection under that subject heading. Maybe I could bring in news headlines from that same time period. My question is – How does real life get into the collections?

This seems like a big project. I’m not sure how it would turn out! I’d have to interview a librarian about Subject Headings to get a better sense of how they work.

I was inspired by this LOC page, which lists all Subject Headings. The filter on the left seems to suggest LOC knows the general date for some, because I can look at only those made in the 2010s, for example.

While I did inspect the contents of .xml Subject Heading files, I am not sure whether I am seeing records of Subject Headings, or records of objects in the collection? I’m pretty sure it’s the first thing, but it’s not clear.

Either way, I want to know if LOC stores the year Subject Headings are created, and if not, how I might look for the earliest item in the collection for each subject heading.

I struggled to get the code to work, see my error below. It must be something fairly simple that’s not connected in my code.

People’s Biographies

I’m also curious how many people are in the LOC’s collections, but not in Wikipedia? It might be interesting to compare the two and see if there is any difference. I could limit it to a certain period of time, occupation, or gender. At the end, I might share the list with groups who get together to add entries to Wikipedia.

I’d need to keep in mind that this idea is more about critiquing Wikipedia than the LOC.

I could flip it, and see how many people on Wikipedia are not in the LOC.

Examining the LOC with a Critical Eye

Along the lines of the last idea, I find it hard to critique the LOC’s holdings without comparing it to something outside it, which means bringing together two data sets. I’m interested in trying it but want to talk through what this looks like.

My Guide to Javascript Objects with Functions in Them

In the open source code I’m using, there are lots of functions declared like this:

onNewParticipant: function(numberOfViewers) {
document.title = ‘Viewers: ‘ + numberOfViewers;

In larger projects where you want to scope as much as possible to prevent overusing variable and function names, you want to create objects that have functions inside of them.

People on StackOverflow informally explain here that writing loose functions willy nilly is “90s”.

More formally, Mozilla explains the many ways you can write objects and functions here. They say that a method is a function associated with an object. Said another way, methods are properties of objects. These special types of functions are defined the same ways as normal functions, except they have to be assigned as the property of an object.

Below this example starts with the object’s name, the method name I want, and the function name I use for the method name.

objectName.methodname = functionName;

var myObj = {
  myMethod: function(params) {
    // something


  myOtherMethod(params) {
    // something else

You can then call the method in the context of the object as follows:


My Guide to Adding Node.JS to My Project

My Challenge

To remind myself for all eternity how to add node.js to a project that will live remotely on a server, and not able to access the version of node.js that’s on my local computer.

What is node.js?

Node allows JavaScript, originally a client-side programming language processed in the browser, to be used as a server-side language.

Why do I need it for my project?

I want to run a little server to handle visitors’ requests to my website, and I want to write it in Javascript. Node.js will allow my javascript server to perform this “server-side” functionality.

I also need node.js inside my local project because it’s going to live on a remote server, without access to my globally installed node.js on my computer.

How do I add Node.js to a local project?

I’ll use npm (or “node packaged models”) as a tool to install node.js into my local project. npm can install the node.js packages I need in local or global mode. In local mode it will install packages in a node_modules folder in my project’s parent working directory.

Use this npm webpage to find the latest commands.

But generally all I need to do is inside my project’s working directory in terminal, use $ npm install node.js ($ npm install <package_name>).

One extra step

Then put the created package.json file and node_modules folder onto my remote server, so that my html and javascript files have access to them. I do this by opening up the application Fetch, and dropping in the files.

How do I check for updates?

Check NPM’s webpage here for the latest commands. Generally, first check that I have node and npm installed. To check if you have Node.js installed, run this command in your terminal.

Note: This command checks whether node.js exists globally on your machine, not whether a copy is saved in your project folder that will exist on a remote server. I need both.

node -v

To confirm that you have npm installed you can run this command in your terminal:

npm -v

npm is a separate project and updates more regularly, so update your npm. To update your npm, type this into your terminal:

npm install npm@latest -g

How do I make sure I’m using a LTS version of Node.js ?

Not sure yet.

Should I use a Node.js version manager?


Is there a way to switch between versions of node and npm?


How do I switch my project over to run forever?

Full instructions here.

Type $ npm install forever -g

Then type forever start app.js

My Guide to How Live Streaming Media in the Browser Will Work in My Project

The Challenge

With this guide, I am to explain to myself the higher level flow of how live streaming media, or audio in my case, is being sent by my project’s website from a speaker to a listener.

What is Live Streaming Media?

Live Streaming Media looks like …

  • Watching the Kavanaugh court proceedings live on the New York Times
  • Listening to a live Carnegie Hall concert on the radio station’s WQXR’s website
  • or watching a live Youtube feed of cats playing or sleeping…
  • [I did all of these things recently]

You are enjoying live streaming media in the browser. The technology that allows all of this is WebRTC… at least I think. Perhaps in some cases they aren’t using WebRTC?

What is WebRTC?

Coming. More here.

And here.

And here.

What kind of server do I need to use WebRTC?

From what I can tell, I need a javascript file (called server.js) that describes the behavior I want my remote server to carry out. It seems I’ll be using the word “server” a lot, but sometimes I’ll be referring to my server.js file, and other times to my remote server that is hosting all my files.

Based on further research, it looks like people tend to use the words “Signaling Server” to describe the type of behavior I want from my javascript file (?).

A signaling server takes care of a lot of things when one user “calls” another, asking for a live media stream. (The live media stream can be video, audio or both.)

What does a Signaling Server do?

A Signaling Server fulfills an essential function that the WebRTC API does not handle: getting two users connected in the first place.

This type of server lets two users transfer initial introductory messages before they have access to a WebRTC peer connection. This type of communication is called signaling.

Do I have to build it myself?

Yes. The people who wrote the WebRTC APIs (there are three) decided to not handle initial connections, allowing others to set this part up exactly as you please.

Do I really have to build it myself?

Not literally. Actually, most examples I’ve found use the library to handle signaling for them. As will I!

What are different options for setting up my Signaling Server?

@Mauz, who I am forking super helpful code from his Web RTC Experiments github repos, has a helpful page about all of this.

He suggests using either (what I’ll use, like him), XMPP/SIP, PHP/MySQL, WebSync/SignalR, PeerServer/SignalMaster or other gateway.

If people want, you can bypass and use your own signaling gateway/implementation.

What kind of messages does my Signaling Server need to send?

The bread and butter: the list below is taken from an article by HTML5Rocks.

  • Session messages to begin or end communication.
  • Error messages.
  • Media settings, such as video or audio, the formats to encode media with, bandwidth.
  • Key data for secure connections (how does this work?).
  • Network data, such as a host’s IP address and port as seen by the outside world (what does this mean?)

Once User 1 calls another User, the server needs to pass the offer from User 1, pass the answer from User 2, pass the ICE candidates (more soon) between them, and set up the WebRTC connection.

Below is a nice infographic from Tutorials Point.

Building the Server
A diagram showing communication patterns between User 1, a Server and User 2. Borrowed from Tutorials Point website.

What is RTCPeerConnection?

Not sure yet, do I need to know?

What are STUN and TURN Servers?

Not sure yet, but I might need to know… these servers apparently help users who can’t connect by the most direct route possible, and instead need to traverse NAT gateways and firewalls because direct connection fails. Are these reasons why my friends with AT&T couldn’t connect without local wifi outdoors in Washington Square Park?

It looks like the WebRTC APIs use STUN servers to get the IP address of your computer (why?) and TURN servers to function as relay servers in case peer-to-peer servers fail.

How to Actually Build X

Steps I Need to Take

I started a guide for myself here.

References and More Reading


Future Topics