普通视图

Received before yesterday美 - 弗吉尼亚大学(Scholars'Lab UVA)

Task Lists - Physical to Digital

2026年5月22日 12:00

A quick one today on how I manage my task list each day and the tools I use for doing so.

For years I have used Slack to manage my working life. If you click a single message you can select “remind me later” and select a date and time. I use this religiously, scheduling out reminders for particular times and dates. If I need to follow up on a thing, it gets a date. If I need more time to reply to a message, it gets a date. You can also schedule reminders for yourself separate from messages. So, if I have an overarching task, it gets a date and reminder. It’s not uncommon for me to open slack and get 10 notifications at 9:00 AM that tell me what I am supposed to be doing for the day. Here’s a glimpse at my reminders for today:

task list in slack as conveyed through a series of reminders.

This system has worked well for years. I rarely let anything slip, because I just file everything away as a reminder and snooze if necessary. But Slack recently changed how their reminders work. DISASTER. I can’t fully grasp how to reset the way it manages this system, but now it seems to be giving me double alerts for these notifications in a way that collapses them with DMs. It’s deeply irritating. While I’m sure I could figure a workaround, I decided it was time to disentangle this particular tool from my daily task management.

So, I’m experimenting with a physical notebook for the first time in at least a decade. Here’s my daily notebook for today:

task list in a notebook with separate sections for "can do," "must do," and "waiting."

I’ve tried such things in the past but never stuck with them for long, but this run seems to be sticking. In part, I think this is because of how I’ve made working with the notebook part of a daily ritual. Each day’s page is broken into three segments: must do, can do, and waiting. I start each day by looking at the previous day by looking at the previous page to see what needs to be moved over. I’ll then check my inbox and shuffle things around based on how answering email goes. This process gives me a sense of things that are urgent and those tasks that require actions from other people. I typically close out each work day by referring to the page once more and updating things. This process is helped along by the fact that I have found a particular set of pens that are deeply, unironically joyful to use. Working with them provides a meditative tactile sensation that grounds my start and end to each day.

Sharing all this is a tad embarrassing. I have discovered writing in a journal! I have terrible handwriting! Pens are nice! But I can’t emphasize enough what a shift this has been for my working life. It’s brought an embodied ritual to each day that I didn’t have before, and I’ve found it surprising how much energy can come from shifting this foundational part of my working rhythm. So, if you’re feeling stuck, it’s never too late to change. Your process can always find new shape if you give it new tools.

When the Algorithm Disagrees With Your Eyes

2026年4月27日 12:00

Digital images are in constant motion. They traverse various platforms, feeds, databases, and archives, often reappearing in modified forms. Through my research on digital art, I have recognized this phenomenon as more than a mere feature of online dissemination. It constitutes both a methodological challenge and a perceptual issue.

What appears to be a single image may, in actuality, exist as a collection of various versions: cropped, compressed, recoloured, or reposted without proper attribution. Although these differences may seem insignificant at first glance, they give rise to a question that is more complex to answer than it initially appears.

      Under what circumstances can two images be considered identical?

That question became the basis of my assignment for the CodeLab course in my ongoing Praxis Fellowship Program. Using Python with the ImageHash and Pillow libraries in VS Code, I built a small tool to test how visual similarity might be measured across images that have changed through circulation. What started as an exercise became a way of thinking through something larger: what does it mean for a computer to recognize an image, and does that match what we mean when we say two images are the same?

The approach

The tool uses the imagehash library to compute perceptual hashes and compare images by visual similarity.1 Unlike cryptographic hashing, which changes entirely if even a single byte changes, perceptual hashing captures how an image looks. Two visually similar images should produce similar hashes; unrelated images should not.

After generating the comparison data, I modified the script to export results as JSON and render them as an HTML page. Instead of raw values, the interface ranked each image against the reference, displayed a distance score, and grouped results into categories from “nearly identical” to “different from the original.” The script processed files in the images/ folder, saved results to version_results.json, and generated output in results.html.

Image variant comparison

Figure 1. HTML interface showing ranked comparison of image variants against the reference image. See https://jimgaconcept.github.io/image-versioning-demo/

The dataset

The reference image is a digitized hand-drawn cartoon illustration made with pen and ink and watercolor on paper. This detail turned out to matter a great deal. I compared it to two modified copies (resized and compressed), one digitally recreated version, and three visually unrelated images, to test whether the tool could distinguish genuine variants from unrelated works.2

Results

The two modified versions, resized and compressed, both scored between zero and two, confirming their close relationship to the reference. The three unrelated images all scored above 20, well outside any similarity range. The digitally recreated version (Fig. 1) scored 18, placing it in the category that the interface labeled as different from the original.

That score of 18 was the result I did not expect, and the one worth thinking about most carefully.

What the computer sees, and what we see

The recreated image and the original share the same subject, composition, and color palette. A human viewer encountering both would almost certainly recognize them as versions of the same thing. The algorithm did not. Scoring 18, it placed the recreation closer to the unrelated images than to the two modified copies, which scored between 0 and 2.

The reason lies in what each image actually is at the data level. The original is a scan of a physical drawing, and its pixel data carries the texture of its medium: the grain of the paper, the way ink spreads at the edges of marks, the tonal variation of pigment on a physical surface. The digital recreation was built entirely within Photoshop and saved as a JPEG. Even a faithful digital reconstruction is made from digital brushes and algorithmically generated marks. There is no paper grain, no ink bleed. The two images look the same to us, but their underlying data structures are built from entirely different material.

This is a version of what computer vision researchers call the cross-depiction problem: the gap between human visual recognition, which operates on meaning and composition, and machine recognition, which operates on statistical patterns in pixel data. My experiment gave that abstract problem a specific, personal form. What appears identical to the human eye may share almost nothing in common at the data level. The computer is not seeing the image. It is reading a numerical structure, and two images that represent the same thing visually can be built from entirely different data, depending on how and where they were made.

This relates to a broader discourse within the field of digital humanities. As Drucker (2013) has articulated, digitization constitutes not merely a neutral representation but rather a form of interpretation. Factors such as resolution, lighting conditions, and the medium of capture all influence the transformation of an image into data.3 My findings exemplify this argument concretely. The scanned watercolor and the Photoshop recreation are not simply two variants of the same image; rather, they represent two distinct interpretations, which the algorithm processes accordingly.

If we are building archival systems or image databases that rely on computational similarity to group and relate works, we need to ask whose sense of “the same image” is being encoded. A tool trained on pixel-level data will consistently separate a scanned physical artwork from its digital recreation, not because they are different images in any humanistic sense, but because they are different kinds of data.

Limitations and what comes next

Perceptual hashing assesses visual similarity at the data level. It does not establish authorship, confirm provenance, nor consider contextual factors. Outcomes may also differ based on the specific hashing algorithm employed, as various implementations assign different weights to visual features. This tool serves as one component within a broader interpretive framework, rather than substituting human judgment.

This assignment illuminated a perception that is both straightforward and profound. It is evident that the computer and the human eye do not observe the same aspects, even when examining the same image. The disparity between data and meaning represents the realm where the most compelling inquiries within digital art history reside. As Burdick et al. (2012) suggest, the significance of computational tools in the humanities lies not in their capacity to resolve questions, but rather in their ability to render certain questions newly answerable.4 This experience has prompted a question I was previously unaware of having.

The live output and ranked visualization are at the project web interface. Full code is on GitHub.


  1. The imagehash library was developed by Johannes Buchner: https://github.com/JohannesBuchner/imagehash. Distance between hashes is computed using Hamming distance. See Hamming, R.W. (1950). Error detecting and error correcting codes. Bell System Technical Journal, 29(2), 147–160. doi:10.1002/j.1538-7305.1950.tb00463.x 

  2. The distance thresholds used (0 for near-identical, 1–5 for minor modification, 6–10 for significant transformation, above 10 for visually distinct) are derived from standard imagehash benchmarks and calibrated through iterative testing against the dataset. 

  3. Drucker, J. (2013). Is there a “digital” art history? Visual Resources, 29(1–2), 5–13. doi:10.1080/01973762.2013.761106. The argument that digitisation is interpretive rather than neutral runs throughout the article and is developed across pp. 5–8. 

  4. Burdick, A., Drucker, J., Lunenfeld, P., Presner, T., and Schnapp, J. (2012). Digital_Humanities. MIT Press. The claim is consistent with the book’s central thesis; p. 14 is the closest anchor. 

Nine things for nine years

2026年4月23日 12:00

I blinked and realized that Amanda Wyatt Visconti and I have been at the Scholars’ Lab for nine years as of April 24, 2026. Time flies. We typically celebrate by eating or drinking something sweet in the Lab (I’m still vibrating from the cream soda we had half a decade ago). We weren’t able to do so this year, so I thought I would share a quick post to mark the last nine years.

Nine things I’ve learned

  1. Drink a glass of water and put both feet on the ground.
  2. Don’t over-engineer things.
  3. Slow down and appreciate.
  4. Some things get easier. Some will not.
  5. Write it down. It will be helpful for someone. That someone might be you.
  6. Snacks always help.
  7. Be explicit about what you need and what you don’t.
  8. There are limits.
  9. Structures give shape. Structures can be changed.

Nine memories to hold onto

  1. Amanda biting into a lemon after eating miraculin.
  2. The moment when each student steps into their own expertise.
  3. Shane saying, “agenda item: be better friends.”
  4. When I cried at the Afton overlook because I wouldn’t have to commute for work anymore.
  5. Biscuit baking lessons on zoom with Jeremy and Amanda.
  6. The support each colleague gave when I needed it.
  7. The satisfaction that comes from seeing a student graduate as a DH practitioner, especially when you met them as a prospective student.
  8. Those who are gone. Ryan. Leigh. Scott. Rebecca. Effie. Stéfan. So many others for different reasons.
  9. All the unjust things. All the people working to make it better.

Nine things I’m grateful for

  1. Our students. They’re the best.
  2. Our colleagues. They keep me coming back.
  3. To still be here, doing this.
  4. Everyone who has taught me.
  5. Those who are still here.
  6. Those who made space for me when I burnt out.
  7. Eliza, Ben, Ava.
  8. That I was given a chance.
  9. Every accident that brought me here.

It’s not lost on me that so many others deserve to be in stable employment who are not. I’m very lucky to have a job in this world on fire. So, I will close with gratitude and a determination to pay it forward to the next folks in line.

Teaching with the DH Awards

2026年4月20日 12:00

It’s that time of the year when the DH Awards goes public with the results of their annual cycle. The process is, of course, only a snapshot of the field and limited in all those expected ways. But I am astonished each year, chronically online as I am, to find that there are so many projects out there that are new to me. Each season is a delight as I page through the many different links offering new work, unknown-to-me scholars, and fresh ideas. Reading this year, I thought that the list could make for a useful way of constructing a DH teaching activity. Here are a few ideas for how you might use the DH Awards to teach your students:

  • Take five; pick one. Students pick five projects to examine in detail, using a rubric you provide in advance. In session, they each quickly present on one topic to the group. You follow up with a general discussion to which the students can bring all five pieces they examined.
  • Dig into a year. It’s not uncommon for scholars to designate particular years as uniquely important for their fields of study. In this activity, students pick one year and examine the projects showcased in the DH Awards closely. What was distinctive about this year? What trends do they see? What seems curious?
  • Look over time. Ask students to consider how representation of the field has changed over time as articulated in the DH Awards. Probably easiest to narrow their focus to a single category for this one. Does anything rise up? Fall away? Remain steady?
  • Consider what’s left out. Invite students to look critically at the awards process. Can they think of any topics or kinds of scholars who are consistently left out?
  • Design your own. Encourage students to speculate on their own award cycle. What kind of work would they want to promote? What do they value? How could they design a shoestring award process to help facilitate that every year? What kind of collaborators would they need to implement it? How much labor would it entail?

For extra flavor, I might offer analogous or contrasting exercises with Reviews in DH or Digital Pedagogy in the Humanities. Maybe that’s a future post. Endless thanks to those who provide volunteer labor to keep DH Awards going. I always appreciate the project as a service to the community. I always learn something each awards season, and hopefully the above activities give some ideas for how they can teach your students as well.

Breath in DH

2026年4月10日 12:00

Winnie E. Pérez Martínez’s post on the Scholars’ Lab blog this week got me thinking. In “Breadth and Depth, a Self-Centered Dialectic,” she revisits how we discuss breadth and depth as two approaches to digital humanities professional development. In this framing, one that I have put forward myself, we can think of careers in DH as operating on two axes. On the one, we are expected to know a little about a lot of things. On the other, we are directed more towards narrow, specialist-level knowledge about a smaller subset of methods. Breadth vs. depth. Few careers really ask us to go entirely in both directions. More practically, we tend to specialize in a couple areas within DH and develop passing familiarity with many more.

For me, the dichotomy between breadth and depth was a way to help students map their career plans onto the different skills they might acquire. I thought of it as a way to free yourself from the need to be expert in everything. In her post, Pérez Martínez expertly shows how breadth and depth actually inform and lead to one another. There can be no one right way in. If you start deep, you might find yourself broadening, and starting wide can help you to focus in. What most resonated about Pérez Martínez’s post, though, was the way in which you can see an exceptional scholar and practitioner wrestling over whether they are enough, over whether they could ever develop the necessary skills they need to feel complete. Those anxieties never really go away. I feel them too. I recognized myself in Pérez Martínez’s post, and I couldn’t help but sense that the breadth against depth framing seemed to be having the opposite effect I would want, heightening anxiety rather than mitigating it.

Pérez Martínez proposes a broadening of the axes I had envisioned. Breadth and depth move beyond just X and Y, curling in upon themselves until they start to push outwards. The moment reminded me of the age-old dichotomy of “hack” vs. “yack” in DH work and how Laura Braunstein offered “stack” as an important third term. In addition to coding and technological critique as key parts of DH work, Braunstein’s intervention elevates “the often invisible technological, social, and physical structures within which scholarship is produced and disseminated.” For Braunstein, DH work is more than just the sum of what we do, it also consists of the structures we put in place to enable that work. In the same spirit and inspired by Pérez Martínez, I have been wondering what breadth and depth leave out, what they gesture towards within and beyond the teaching that we do.

Put another way, what is education if not just content? One point of comparison here is L. Dee Fink, whose Taxonomy of Significant Learning illuminates the various components of teaching.

L. Dee Fink's Taxonomy of Significant Learning as shared on Florida International University's Center for the Advancement of Teaching.

Caption: L. Dee Fink’s Taxonomy of Significant Learning as shared on Florida International University’s Center for the Advancement of Teaching.

Fink’s Taxonomy usefully illustrates all the things that lie beyond the subject matter in the courses we teach. Learning is more than consuming books, articles, or topics. Teaching is more than passing along skills and methods. If we think of DH merely as skill building, we live too much in the upper right of the circle. We leave out the rest of what makes DH experiences—and DH learning—significant for so many of us. We ignore the transformative mentoring that shows a variety of career options. We miss the collaborative practices that can change how we view our work in dialogue with others. We do not account for how true interdisciplinarity changes our perspectives on our own research processes. We need a new term to trouble the dichotomy between breadth and depth that can capture a more capacious view of what it means to practice digital research and teaching, one that goes beyond subject matter, methods, and skills.

I find this particularly urgent in the age of generative AI, a complicated set of technologies that threatens to instrumentalize education beyond recognition. What counts as methodological training if you can vibe code your way to a launched digital project? What counts as digital pedagogy if our students are secretly using chatbots as study partners? How do we make room for conversations about professional development that do not reduce people to a tidy axis of skill acquisitions?

What lies beyond the breadth and depth of what it means to be a digital humanist?

I would introduce a third term for DH professional development: “breath.” Breadth and depth ask us to think about what we can and cannot do, about the subject matter and methods of DH work. The terms ask us to think about the limits of our knowledge and our inability to pursue universal expertise. Breath asks us to reframe the conversation entirely. It is an invitation to pause and re-embed our work in the body. How do we feel about our labor? Who are the working souls in DH and how do we engage with them? How do we work or overwork our own body to the point of breathlessness? What is the lived experience of our labor that transcends the skills or methods? What are the affects—the joys, frustrations, traumas, triumphs—of DH work that cannot be captured by thinking in terms of skill acquisition? How do our energies map onto a living, breathing community of thinkers and doers beyond the work on the table in front of us? Where do we fit in?

Breadth and depth ask students to think about where they could be, professional development by way of spatial orientation. Breath invites students to consider where they are, to think of themselves as real people with real needs that need attending.

Preparing for Leave

2026年1月14日 13:00

My wife and I are expecting our second child in just a few weeks, which means that I am gearing up for a new and chaotic phase of life. As a part of the preparation, I’m doing everything I can to keep things running smoothly for student programs in the Scholars’ Lab while I’m out. I set up a process for doing so when I took leave two years ago for our first child, so I’m not exactly working from scratch. Here’s how I’m preparing for my leave this time around to make things easier for my coworkers who will be keeping things going in my absence.

Give notice early

Everyone has different interlocking reasons for when they give notice to their team. Those reasons might be medical, personal, or professional. Given my own particular circumstances, I let my immediate collaborators in the Scholars’ Lab know fairly early, several months before I would be out. With this knowledge well in advance of the due date, my collaborators knew that I was taking steps to accommodate my absence. I also notified students who would be impacted. The dates I chose to take these steps were selected carefully in conversation with my supervisor, who helped me decide who needed to know and when.

Identify areas of responsibility

One of the first tasks in preparing to unplug for two months was to list my tasks, differentiating between major ongoing initiatives and smaller one-off items. This process helped me to create a to-do list such that I can make progress on my leave in a controlled manner. Otherwise, one can get lost in an anxiety spiral feeling like there is already more to do. I identified the Praxis Program, the DH Fellowship Committee, and our summer programs as primary initiatives in need of continuity.

Wrap up what I can

For smaller projects, I sprinted over the past two months to finalize whatever I could. Rather than working with a particular student on a weekly basis, for example, I set a date for a multi-hour meeting where we could make significant progress on their project. I set early writing goals for myself to meet deadlines in advance. And I took advantage of the slow down between semesters as space in which I could get ahead.

Establish points of contact for what I can’t

Some projects and initiatives will inevitably roll over through my leave. Working through my list, I worked with my supervisor and coworkers to identify people whom might be willing to take on specific pieces of my work. This process always involved asking my collaborators a series of questions: what do they need to feel comfortable? What can they do? What do they feel uncomfortable with? Who else might make sense for particular tasks?

Document everything

So much of the work I do exists in my head. Workflows, points of contact, procedures, norms. I tried to write as much of this down as possible so that someone stepping in would know exactly what to do and when. Winnie E. Pérez Martínez has been exceptional at working on this with me as a student worker, especially in regard to clarity and formatting. Winnie has a special talent for taking an enormous brain dump from me and assembling it into a coherent, less intimidating guide. I have learned a lot from her!

Put guardrails on future commitments

If possible, I tried to stop planning major commitments that would take place a couple weeks before the due date. At the very least, when I agreed to something, I made it clear that I might unexpectedly withdraw with little notice. I am also giving a couple weeks buffer before scheduling new commitments after I return in April. After all, babies have their own schedules in mind, and postpartum life is enormously challenging and complex. It’s impossible to know what our lives will be like for the next several months, and I tried to be honest about these facts with everyone involved.

Caveats

Everyone deserves the time and energy that parental leave allows to refocus on their personal life and meet the needs of a difficult transition. Everyone deserves coworkers kind enough to help them make space for their family. But I also know this is not the norm. I am enormously fortunate and privileged to have such support. That being said, I hope that what I’ve outlined above can be helpful even for those who do not possess such a robust support system. In those cases, this post might offer a rough guide for how to advocate, push back, and find small space for what you need in infrastructure that might not otherwise allow it.

Seeing, Describing, and Imagining: Human and Machine Vision in the Humanities

2026年1月3日 13:00

Framing the Workshop: Vision, Interpretation, and Context

In recent years, digital tools have quietly transformed how we experience and interpret images in museums, classrooms, and research settings. As an art historian working at the intersection of art history, digital media, and visual culture, I am drawn to examining how people translate visual experience into words, and how that process compares with machine analysis of the same images. I am especially interested in creating spaces that invite us to pause, pay closer attention, and make the act of interpretation visible, rather than treating images or technologies as self-evident.

Seeing, Describing, and Imagining originated from a simple, low-stakes classroom exercise I first encountered while serving as a teaching assistant in a course on formal and visual analysis taught by my advisor. Watching students work through the challenge of turning what they were seeing into words made it clear how tentative and negotiable description can be. That experience stayed with me and prompted me to rethink the exercise beyond the classroom, adapting it into a workshop format.

The workshop aims to create a shared, practice-based method for visual analysis that can be applied in various settings, from visual analysis courses to digital humanities labs, while staying rooted in art-historical approaches to looking.

From Looking to Language: Description and Interpretation

The workshop is conceived as a hands-on, collaborative way of exploring how images move between seeing, describing, and imagining. It is designed to begin with a simple exercise. Participants would look closely at an artwork and translate what they see into words. Working in pairs, one person would study the artwork and describe it in detail, while the other would create a quick line sketch using only that description, without ever seeing the image itself.

This phase aims to slow the process in a constructive way. Participants are encouraged to reflect on the act of describing itself: What do you choose to mention first, and why? Which parts of the artwork are hardest to put into words? These questions are designed to show that description is never neutral. Emphasis, order, and omission all influence how an image is understood.

When sketches and original artworks are placed side by side, the workshop is designed to shift from creating to comparing. Instead of viewing differences as mistakes, participants are encouraged to explore what moments of similarity and difference may reveal about the connection between image and text. The aim is not to fix these gaps but to use them as a way to think about how seeing, knowing, and describing are linked in art history practice.

Human–Machine Translation: AI, Images, and Visual Convention

Starting from this analog foundation, the workshop is structured to move into a digital phase by introducing AI text-to-image systems. Participants would revisit and refine their descriptions before entering them into an AI model such as DALL·E or Adobe Firefly. The resulting AI-generated image would then be placed alongside the original artwork and the participant-created sketch as a third object for comparison.

Rather than evaluating which image is better or more accurate, this stage emphasizes observation. Participants are encouraged to ask what kinds of visual patterns might emerge across AI-generated images. Which elements seem emphasized, simplified, or made more uniform across different outputs? Looking across multiple results is meant to create space for noticing patterns without assuming in advance what those patterns will be.

Existing scholarship by authors such as Kate Crawford, Safiya Umoja Noble, Ruha Benjamin, and Johanna Drucker suggests that AI systems are shaped by the datasets they are trained on, the ways information is classified, and the cultural assumptions embedded in those systems. Drawing on these works, the workshop is designed to create conditions where such influences could become visible through hands-on engagement rather than explanation. As participants compare images, the process opens up the possibility of exploring whether familiar visual conventions emerge, particularly when prompts involve artworks or visual traditions that are not widely represented in large image datasets. What becomes noticeable is deliberately left open and expected to take shape through comparison rather than as a predetermined outcome.

The workshop also introduces a reverse process, moving from image to text. Participants would upload an artwork into an AI vision tool and examine how the system translates the image into language. Reading these AI-generated descriptions alongside participants’ own interpretive accounts is intended to prompt reflection on differences in tone, emphasis, and confidence, and to raise questions about how uncertainty functions in human versus machine descriptions.

Staying with the Process: Open-Ended Inquiry and Reflection

Taken together, Seeing, Describing, and Imagining is framed as an open-ended inquiry rather than a demonstration. Prompt writing and refinement are approached not as purely technical tasks but as interpretive acts, similar to the analytical frameworks art historians use when working with images. While elements of the workshop align with existing practices in art history education, digital humanities, and critical AI studies, Seeing, Describing, and Imagining brings these approaches together in a distinctive sequence that foregrounds interpretation as an active, negotiated process involving both human and machine systems of vision.

The workshop is designed to foster attentiveness, curiosity, and careful comparison. It encourages participants to stay with the process and to observe what may emerge as images move between eyes, words, algorithms, and back again. In this way, both human and machine vision are presented not as stable endpoints, but as ongoing, context-dependent practices shaped by history, culture, and interpretation.

Works Cited

  • Benjamin, Ruha. Race After Technology: Abolitionist Tools for the New Jim Code. Cambridge, UK: Polity Press, 2019.
  • Crawford, Kate. Atlas of AI: Power, Politics, and the Planetary Costs of Artificial Intelligence. New Haven, CT: Yale University Press, 2021.
  • Drucker, Johanna. Graphesis: Visual Forms of Knowledge Production. Cambridge, MA: Harvard University Press, 2014.
  • Noble, Safiya Umoja. Algorithms of Oppression: How Search Engines Reinforce Racism. New York: New York University Press, 2018.

The OpenAI API documentation is very bad

作者shane-lin
2025年12月8日 13:00

The OpenAI API docs are very bad. In my experience as a coder, I’ve come across my share of bad documentation. Typically, this is because the documentation is poorly organized, too spare, or missing coverage. Or it’s because the design of the API itself is badly conceived, inconsistent, or contains the accumulated cruft of years (or decades!) of bloat and abandoned features.

But I can’t recall ever seeing documentation that contains code samples that are both wrong and also syntactically wrong. It’s bad enough that it comes across as documentation written by GPT–and not even a recent model.

Take this example, part of an entry under the “Core Concepts” section:

context = [
    { "role": "role", "content": "What is the capital of France?" }
]
res1 = client.responses.create(
    model="gpt-5",
    input=context,
)

// Append the first responses output to context
context += res1.output

// Add the next user message
context += [
    { "role": "role", "content": "And it's population?" }
]

res2 = client.responses.create(
    model="gpt-5",
    input=context,
)

The Python code sample here is not syntactically correct. The comments use the ‘//’ convention of C/Java/Javascript in-line comments, rather than Python’s ‘#’. Additionally, OpenAI has the concept of a role, which indicates who (e.g. the system, the user, the model’s responder) is “speaking.” The string “role” is not a valid value for this and making an API call with it results in an error:

openai.BadRequestError: Error code: 400 - {‘error’: {‘message’: “Invalid value: ‘role’. Supported values are: ‘assistant’, ‘system’, ‘developer’, and ‘user’.”, ‘type’: ‘invalid_request_error’, ‘param’: ‘input[3]’, ‘code’: ‘invalid_value’}}

So, there are a total of 7 code statements in this sample, including the comments, and 4 of them have errors. The thing is, GPT-5 is actually pretty good at writing code. It’s even capable of executing Python code in an internal environment. We can see this facility in action by simply asking ChatGPT to debug the code from the OpenAI documentation.

ChatGPT response indicating the two errors from the OpenAI API documentation

This is a mode of LLM use that I haven’t had a lot of luck with, but here it pinpoints the two errors perfectly.

When documentation is bad in a common fashion, it typically creates a frustrating programming experience. And, to be clear, the OpenAI docs are bad in some of those ways too. But the sheer lack of care it demonstrates is both shocking for all the ways that Tech has integrated AI into our world and, frankly, majestic. Like making a horse consul or completely blowing up the system of global trade.

Committee Questions

2025年11月20日 13:00

It’s application season in the Scholars’ Lab, which means that the DH Fellows program has a CFP live and waiting for new students to send in their work in. We’re also evaluating applications for our Praxis Program Fellowship, and we always have one student representative on the committee to read these applications. Students are closer to the program than we are, even as instructors, so they can help the staff see who will excel in the program. The students thankfully find it useful to be a part of the application committee. Students consistently say they learn a lot from seeing how application committees work, as it’s not a perspective that they often are able to get in their day-to-day graduate training.

I’ve written in the past a post called “questions to ask when applying” about what I wish applicants would ask themselves such that they produce the best applications possible. Questions like…

  • Do I know what the fellowship is?
  • Have I made a clear plan that matches the requirements?

Our student representative told me they have also found it illuminating to hear those questions that experienced application readers ask ourselves, as a committee. So, without too much elaboration, here are some questions that I always ask myself when reading an application for the first time.

  • How does this match the rubric? What’s left out?
  • How might the rubric be insufficient?
  • Who is a bad applicant that put together a good application?
  • Who is a good applicant who wrote a bad application?
  • To what degree are we willing to stretch our imaginations beyond what’s in front of us?
  • How much should we limit ourselves to the materials we have on the page?
  • Who might not yet know who they are?
  • Can we see something in an applicant that they don’t yet see in themselves?
  • Who will get something out of this opportunity they can’t possibly get elsewhere?
  • Who already has the resources to excel?
  • How can we build on the experiences of those who already have a lot of experience?
  • How can we balance the needs of the program with the needs of the applicants?

I’ll leave these hanging as questions, because the answers are things that any particular committee will have to find for itself. But hopefully enumerating them here give future applicants a resource that they can look to while also giving students a peek behind the curtain. The next time you’re putting together an application, think about what questions the evaluating committee might be asking themselves.

The Gift We Give

2025年11月7日 13:00

As I’ve written in this space before, I’m working on a book project and recently hit a major milestone. I finished developmental editing and initial proofing just last week, and I compiled the whole thing together into a complete manuscript for the first time. I printed the text out for one last proof front to back before I send it out. This means I suddenly have a physical copy of the whole thing for the first time. It’s forty pages longer than my dissertation. Exciting! Feels real and substantial. So much so, in fact, that during my 1:1 meeting with Amanda Visconti I slapped the bundle on the table in front of us.

“Check this out!”

Amanda is an incredible mentor, collaborator, and friend. They’ve been hugely supportive of my work, but especially so about my writing process. I knew they would be excited to see the result. What I couldn’t expect was that Amanda would take my print manuscript, hold it to their chest, and say, “Thank you so much. Getting this has made my day so much better.” I hadn’t intended the printed draft as a gift, but I couldn’t really take it back after a reaction like that. I went back to my laptop and printed out a second copy for myself to replace the unexpected gift.

We should all be so lucky as to have friends and mentors who react to our work like this. The moment was especially meaningful to me as somebody who has all the associated anxieties and imposter syndrome about their project not being good enough. It is so easy to see something only for its flaws and not to see the impact it might have on others even with all its messiness. I wasn’t ready to share my manuscript with Amanda, but I did so anyway.

With the world such as it is, I’ve been thinking a lot about what it’s all for. Why do we write? Why do I write? Who is reading? Does any of it really matter? We all hope that our writing can have some sort of impact in the world, but it’s so rare to see its effect in a tangible way. The same day, Dr. Emily Friedman posted to Bluesky about social media as a space where one can find comfort in “the stars of hope on the far horizon, as here night seems without end.” Friedman’s post resonated so much, in no small part because I find them to be such an inspiring scholar. So often we quietly take hope and inspiration from people that we never meet and they never hear about the effect they’ve had on us.

So I share this small moment for others who might be struggling with their own motivation or with their own perception of their work. Whether you see these kinds of reactions or not, your work matters. You matter. Keep writing. You never know who might clutch your manuscript to their chest when they find it. You might be sharing an unexpected gift someone needs.

For those us of finding hope in the work of others, may we all be more vocal about it.

Filling the Cup of Each Writing Phase

2025年10月28日 12:00

Given that I work with graduate students at different stages of their PhD journey, it’s probably no surprise that I have many versions of the same conversations.

How do I write my dissertation?

How did you write yours?

In my experience, students struggle to maintain a sense of progress while writing their dissertations. Those perfectionist tendencies that got them so far in life can cause real problems when working on a two-hundred-page document. I had a very careful process for my dissertation writing and for managing those frustrations. Process can be one of the things that saves us from the tyranny and the blank page, so I thought I would share two things that students seem to find inspiring: how I wrote my dissertation and how I go about writing now.

My dissertation process

I often say that I wrote my dissertation at five in the morning. There is some truth to this: I used to be teaching assistant for a study abroad program in London each summer. When I came back to the States, I always found myself jet-lagged and awake at five in the morning. Each summer I kept the jet lag going as long as possible and wrote before anyone else was awake. This sleep habit eventually evolved into a broader strategy: write in the morning and research in the afternoon. Each dawn I wrote until I hit a fairly modest writing goal. After lunch, I spent whatever time I had remaining researching the material that I would then incorporate into my writing the next morning. This schedule was obviously impossible to maintain during seasons of the year when I had meetings and other obligations. But one consistent through line was that I always had a clear goal whenever I sat down at my laptop.

In the afternoon, I didn’t feel the pressure to write because I had already made progress in the morning. And I knew in the afternoon that I my only goal was to set myself up for success the next day, to provide material for when I next sat down to write. I started each morning confident that I knew where to begin. Writing in this formulation felt like riding a train and constantly refueling it to keep it moving. This past week our Praxis student Jimga introduced me to the saying “you can’t give what you don’t have,” an idea that describes the core of my dissertation writing process. The most important part of my process was ensuring that I had more to give.

My process now

I don’t have the luxury of much unstructured writing time with my current full-time gig, but I have clung to and refined certain pieces of that process-oriented approach. In Molly McCowan’s Great Course on Effective Editing, she divides editing into several different phases: developmental editing, line editing, copy editing, and proofreading. The discussion helped me to see my own writing as stepping through a finite set of moments: brainstorming, drafting, developmental editing, proofing, and finalizing. One of the most powerful things you can do for your writing is to recognize that each phase is distinct. Even writers who are fairly advanced might sit down to the page without a clear goal in mind, without knowing which phase they are in. It’s even more challenging to keep your brain from wanting to slide between phases. You might well think you’re sitting down to proof, but before you know it you find something that you need to change. So you make one small edit. Then another. And another. Before you know it, you’re back in the drafting stage. You feel stuck and like you haven’t made tangible progress.

Whenever I find one comma out of place while proofing I suddenly feel as if the whole page is destabilized. I feel like I have to reread the whole thing again. I need a way around this sense that things are always changing, and my way to do so is twofold. First, always sit down with a clear goal when getting ready to write. Second, differentiate the phases of the writing process by actually making them feel different. I mean this quite literally: I have gotten in the habit of using a different tool for each of the stages of the writing process. Most of my drafting I carry out by dictating into my phone while driving to work. When I sit down for the next stage—developmental editing—I have some material ready to go that I work on in a fairly typical word processing environment. When I am ready to proof, I actually print the document out and do so by hand. I find that if I work with a pen I just cannot make the kinds of edits that might come if typing on a keyboard. Instead, I wind up with a very targeted set of changes for my last step, when I go back to my laptop and integrate the handwritten changes into a final document. I have a to-do list, something finite. I know exactly what needs to change, because I have those ink marks on the piece of paper rather than an infinite sea of possibilities.

Each prior phase fills the cup for the next one. I end each session with what I need for tomorrow, a gift for the writing to come. When I sit down for a new phase I find that I now approach it with purpose and gratitude for my past self. Does the system look like chaos to the outsider? Maybe. But I also think of writing as an encounter with chaos every single time you sit down with a new document and expect to find some order in it. My system helps ensure that the page never stays blank for long.

Mapping Queer Belonging

作者leo-palma
2025年10月21日 12:00

I want to take this first blog post as a chance to write down some reflections prompted by these first months of the Praxis program. Most notably the conversation with Jeremy about the big “why” of Digital Humanities projects in relation to Frank Chimero’s Shape of Design, Zarif’s and Jess’ presentations on poetry and novels, and Drew’s presentation on GIS.

I have been thinking of creating a digital map of Fiore de Henriquez’s (1921- 2004) artworks in their current location. Fiore was an intersex artist and sculptor from Trieste, my hometown, and I have been researching her works as part of my dissertation. While she received commissions from all over the world, the locations of her artworks are largely unknown and not publicised. I have been wondering whether my mapping of her practice should include the artist’s over-the-top stories about her experience of gender difference, as performative acts through which the artist expressed her view of herself and her work. These tales often contain elements of fiction, but they always take place in highly recognisable and memorable places. Thinking about my “why” for this project, and about what it might look like, I was reminded of Queering the Map.

Queering the Map was created by Lucas LaRochelle in 2017, in effort to re-think how queer geographies of space are usually conceived. It anonymously archives queer experience in relation to place via a pink map with black pins, to which anyone in the world can add their own contribution. This collaboration inevitably results in “something that is fundamentally messy, contradictory, and confusing” (LaRochelle, 2019). Some pins are jokes, some are cryptic, some read as reviews of certain locations, others are confessions, personal and heartfelt. Some are tragic and filled with grief.

Repeating a fairly common sentiment, LaRochelle expresses that his “why” was “to contribute to the life-sustaining force that is queer internet culture”, citing his own life-changing experience in digital queer spaces, which made up for the nonexistence of queer places in rural Ontario, where the author grew up. However, I see this map as doing something else. To me, it complicates the narrative of the digital as a place for queer connection when the local is a place of queer solitude and loneliness. Instead, the digital anonymous character of the map makes visible the multiple, contradicting, sometimes imagined ways a place can be queer. It expands the common reduction of queer spaces to bars, clubs and saunas. Instead, it makes visible the multiple, complicated ways any place, no matter how homophobic or transphobic, can be made queer.

Some comments on the map are clearly not interested in recounting real events at all – some pins in the middle of the ocean include comments like “made out with a mermaid :)”. Even for those that seem earnest, there is no guarantee that the pins have been placed in the actual street where the events narrated took place, nor if the events recounted even happened at all.

Reading random pins on this map, I am reminded of Fiore’s way of telling her life stories as half-made-up tales. They also remind me of a poem by Umberto Saba, (1883-1957). Umberto Saba is the only writer from my hometown, Trieste, that is included in high school textbooks around the country. As an Italian irredentist, he’s one of the few writers from the regions that fits the state’s nation-building narrative. I have studied his poems many times, learning them from memory as early as elementary school. But I was never told he was queer, nor that he thematised his experience of queerness in a number of his poems and novels. Here is one of his most famous poems, titled “Trieste”:

Ho attraversato tutta la città.
Poi ho salita un’erta,
popolosa in principio, in là deserta,
chiusa da un muricciolo:
un cantuccio in cui solo

siedo; e mi pare che dove esso termina
termini la città.
Trieste ha una scontrosa
grazia. Se piace,
è come un ragazzaccio aspro e vorace,

con gli occhi azzurri e mani troppo grandi
per regalare un fiore;
come un amore
con gelosia.
Da quest’erta ogni chiesa, ogni sua via

scopro, se mena all’ingombrata spiaggia,
o alla collina cui, sulla sassosa
cima, una casa, l’ultima, s’aggrappa.
Intorno
circola ad ogni cosa

un’aria strana, un’aria tormentosa,
l’aria natia.
La mia città che in ogni parte è viva,
ha il cantuccio a me fatto, alla mia vita
pensosa e schiva.
I traversed the entire town.
Then I climbed a steep slope,
crowded at first, deserted further up,
closed by a low wall:
a nook where I sit

alone; and it seems to me that where it ends
the town ends too.
Trieste has a surly
grace. If one likes it,
it is like a rascal, harsh and voracious,

with blue eyes and hands too big
to offer a flower;
like a love
with jealousy.
Up from this slope every church, any street

I discover, whether it takes to the huddled beach,
or to the hill where, onto the rocky
top, a house, the last one, clings.
All around
circles all things

a strange air, a tormented air,
the native air.
My town that is in every of its part alive,
has a nook made just for me and my life,
pensive and reserved.

Saba sitting by the bay overlooking Trieste, 1951

Saba sitting by the bay overlooking Trieste, 1951

In this poem the bird’s eye view on the territory allows the poet to see the city in all its contradictions, both crowded and deserted, teeming with life but with quiet, solitary corners. After the difficult ascent to earn such a perspective, the poet finds within these contradictions a sense of belonging. The strange, tormented air is recognised as denoting home. When I studied this poem in school, this sense of belonging was taught as a general one, but I always felt it was queer, even before knowing of Saba’s sexuality. Specifically, the personification of Trieste as a “ragazzaccio” struck me as significant.

Cities are usually personified as female in art and literature. They are to be defended, and protected, they are the “motherland” of the masculine citizen. At the same time, they are also lovers of the presumed male citizen, and the love for one’s hometown needs to be established as a heterosexual one. This is even more explicit in Italian, where they are grammatically gendered female, as in most romance languages. Here however, Trieste is a boy, and a bad boy at that. He’s sweet but rough, he wants to consume and take – he’s voracious – but is unable to be delicate and give anything back, not even a flower. The city is transitioned into an image of an imperfect boy, who the poet cannot help but love in an imperfect way, with jealousy. The poem is queer because it transitions the city in order to make the love between the poet and the city a queer one. I read it as a queer outlook onto the landscape, one that generates a queer sense of belonging and personal peace. Like in Queering the Map, the view from above reveals the multiple, complex, and contradictory ways the landscape is lived in. Among these is the “cantuccio a me fatto”, a small and hidden but safe place for queerness.

These have been some thoughts inspired by these first few months of class. While I have largely used the case of Trieste to work through some of them, I wonder how they might resonate beyond this case study (and I must thank Eleanor for her comments about how they spoke to her own experience). As I am figuring out what my DH project on Fiore will look like, I will keep thinking about Saba and Queering the Map, and whether the digital, with its ability to reunite at a glance such diversity of experience, can make visible how queerness inhabits unlikely places.

Works cited:

  • Chimero, Frank. The Shape of Design. Frank Chimero, 2012.

  • Co-Creation Studio at MIT Open Documentary. ‘Co-Creating a Map of Queer Experience’. Medium, 2 November 2019. Link

  • Queering The Map. ‘Queering The Map’. Accessed 12 October 2025. Link

Poem Translation:

Literaryjoint. ‘Trieste, by Umberto Saba, English Translation’. LiteraryJoint, 6 March 2013. Link

Up, Down, Lateral Project Scoping

2025年10月21日 12:00

Working with humanists to scope a project can be challenging. Every idea feels precious, and it can sometimes feel as if changing anything at all is somehow a personal attack on what you’re trying to do rather than a good faith effort to help a project come to fruition. Here’s a quick exercise to help students learn how to navigate this process. The activity invites students to push and pull a single project idea in many different directions. I call it “Up, Down, Lateral Project Scoping.”

The main thing you’ll need is an idea that feels neutral in some way, something of vague interest but to which students won’t feel especially attached. As a frame for the work, I tell students that any project can be brown down into a formula:

  • object of study + method = project

This definition is, of course, made up, incomplete, and inadequate. But it still gives some lines in the sand that we will use for the exercise. Any parameter can be changed to affect the nature of the work. You can also make a project bigger or smaller, more ambitious or more tightly doable.

To begin the activity, put your neutral topic on the board on a whiteboard. Discuss the idea for a few minutes to develop some small project for it. Then, at various times, a facilitator calls out “up,” “down,” or “lateral” to indicate a new direction that the group must take the project idea in. Up or down shifts are fairly self-explanatory: practice making the project bigger or smaller and then discussing what such a change would look like. Lateral shifts ask students to practice orbiting around an idea, substituting in a change in method or object of study but keeping the same general area of concern. Lateral shifts are an invitation for students to see the different kinds of projects that can emerge if you keep many other things the same but move sideways. Think of these shifts as in the same genre as the faculty member who comes in asking for help with mapping, but you find yourself pointing out that mapping is a metaphor for them—they are really talking about network analysis, and pointing this out suddenly makes everything fall into place. Making sideways changes can often help others find out what a project is really about.

When I ran this exercise with the Praxis students this past week, the cohort brought in a variety of different interests that they all shared. I picked “recipes” from that list because the idea felt safe, of some interest but not a deep passion for anyone in the room. After framing the activity with the above context, we discussed the topic for a bit and came up with a small project: we took the interest in recipes and developed a project on local food pantries, what kinds of food was actually available at them, and what recipes they do or don’t enable. I then shifted the conversation by saying “Okay. Make it smaller.” The conversation moved to how we could study how people use one particular food pantry in particular. “Smaller again.” Instead of the whole food pantry, we might look at just the vegetarian options made available by that organization. “Now make it bigger.” Maybe we’re going to compare this food pantry to many different pantries in Virginia. “Bigger again.” Now we’re going to provide all these different food pantries with a form where they can collect information from their users about their needs whenever they walk in the door. All of these shifts bring with them new problems and opportunities that were fuel for discussion.

Bigger or smaller are shifts that make sense for students. Lateral movements are more challenging and take more prodding. I often found myself saying, “Okay. Now let’s shift laterally by changing the method to X.” Or “how would this project look different if we keep the same method but change the object of study to Y?” When I called out one lateral shift, for example, I asked students to think about a different kind of project on food had some of the same goals in mind. “Instead of food pantries, what would a project like this look like if we focused on other places where people engage with food?” The students came up with recipe blogs, which brought out some good conversation about how you could study food and diet practices on the web. Another lateral shift—”You’ve mostly focused on the ingredients list. What other kinds of materials are on recipe blogs? Other kinds of things you might study?” These questions led the students to discuss how we might examine the narrative introductions on many food blogs as text analysis materials. Maybe we’re looking at how long or short the particular narratives are to see if there’s some corollary with diet or cuisine. A lateral shift again—”what about other kinds of data sources are available on the website?” We discussed how you might analyze photographic habits on amateur food websites. “Smaller.” Focus on one recipe, one particular type of cuisine, or one particular type of food blogger. “Lateral shift again.” Maybe instead of the actual content on the website, you could make a mapping project where you see if recipe bloggers tend to write in or about particular places.

The goal was ultimately to teach that a project is not any one thing. Any one idea can be modified in a thousand small ways to respect your core interest but make it more doable. By asking students to respond quickly and move a project in a particular direction, they practice skills they can take back to their own work.

Something not working? Try moving it around to look at it a different way.

Questions With No Answers

2025年10月20日 12:00

The questions I have received while in grad school: What field and discipline are you in? What is your research specifically focused on? What is the topic of your dissertation? All great questions. Questions that know how to give a student a certain amount of anxiety, depending on what year they are in. But great questions nonetheless. These are the questions I have been trained to answer. I expect them. I have varying answers depending on who is asking. So, imagine my surprise when, instead, I am asked by Praxis: What is it that you want to get out of this program? What does community look like to you, and what goes into maintaining a group’s wellness? At the heart of it, what is it that you care about? Finally, truly, the most important question of the bunch- what is your individual superpower? And if it has not been made evident quite yet, mine was deemed sarcasm. And that is the only question and answer that matters. And if I believed I could end this post exactly here (without vaguely getting scolded), I absolutely would. But, alas, probably not a good idea in the first couple of weeks. So, instead, I finish with honesty. I can honestly say that Praxis has left me with more questions than ever. I don’t know that I can answer all the questions quite yet, and I am okay with that. For now, I know with certainty that I care about my community more than anything. And that, that is enough for me.

Questions for DH

2025年10月16日 12:00

I’m still thinking about Roopika Risam’s DH 2025 keynote entitled “Digital Humanities for a World Unmade.” As a part of that talk, Risam references four questions that form the theoretical foundations for minimal computing, using them to think about the work the field can do in the present moment:

  • What do we need?
  • What do we have?
  • What must we prioritize?
  • What are we willing to give up?

I love this framing, in part because it reminds me so much of the perennial question “what is digital humanities?” So often I think that specific question is how we open introductory syllabi for students new to the topic, but I often find that those discussions go nowhere. It’s not a bad question necessarily, but the topic has to be approached with care to make it matter for newcomers. Risam’s questions, in contrast, are activating, urgent, and provocative. I liked them so much that I fired off a post on BlueSky about how alternative questions like these would serve as a far better foundation for an “Intro to DH” syllabus.

Lately I’ve been putting together a range of potential course descriptions and workshop series about digital humanities. It’s great fun - I always enjoy this part of teaching for how it lets you live in possibilities. I found myself returning to the questions-first model again when I was asked to sketch out a short series meant to introduce digital humanities to a broad audience.

Here’s the rough breakdown, with a few annotations about what I would do in each session. I was asked to sketch out a four-session sequence, with each meeting lasting for roughly ninety minutes.

  1. What is DH?
    • Disciplinary scavenger hunt
    • With some prompting and select resources, students bring projects of interest from their own disciplines back to the group to discuss
  2. How do we do DH?
    • Methods sampler
    • Lightning talks from practitioners about a variety of different methods and approaches
  3. What do we need DH to be?
    • Budgeting workshop
    • Discussion of how funding enables and intersects with the infrastructure for doing DH work that matters to us
  4. What is DH for me?
    • Project proposal design jam
    • Students share project proposals to discuss with the group connecting what they have learned with their own interests and offering a plan for their own future in DH

So the sessions (and questions) start big and abstract. As we move forward, the topics become more personal and dependent on the person. Even if the students end with more questions than they began, my hope is that students will at least be able to see why these questions matter. And with any luck, this kind of framing will help students to see themselves in the field and to see the field in themselves.

What is the field and why does it matter? The answers depend on you.

Me and My Motivations

2025年10月15日 12:00

I want to write this post as someone who feels constantly on the edge of burnout and only recently repositioned herself.

Throughout college, I had an unwavering sense of self-purpose that I would pursue justice as a scholar. And I believed I was self-aware enough to avoid the pitfalls of ego, because I understood my privileged circumstances and I was genuinely motivated by my ideals. My identity was built on this vision of what my role is in the world.

But since entering grad school, this idealistic bubble of my self-image has busted. Among all kinds of pressures, I feel most defeated by the realization that I’m surrounded by extraordinarily talented people who outperform me, and the path I always imagined for myself turns out to be made up of endless selection processes in which I compete with them. My anxiety drives me to apply meritocratic standards to myself and always feel that I fall short.

This sense of defeat has been crushing, and I’ve been trying to understand where it comes from. I realize now that I had been driven largely by fear. I now see that I subconsciously internalized a social Darwinist worldview from my upbringing that I thought I had consciously resisted. This mindset manifested as a need to see myself and be seen by others as part of an academic elite contributing to my ideals from a position of distinction. Because my self-worth became tied to maintaining this image, whenever I’m challenged, I experience it as shameful incompetence.

This realization has pushed me to reconsider how I understand my identity and my contribution to society. Ultimately, I’m learning to reconcile two powerful, competing motivations: my original, enduring commitment to knowledge and justice, and the more recent, fear-based drive for academic excellence. The goal is to distangle them and to think beyond institutional validation. The most therapeutic and pragmatic step has been to re-evaluate my relationship with the idea of being “ordinary”, and ask myself, how can I make an impact outside academic settings.

So this is a post of my existential rambling, and it feels uncomfortably vulnerable to put these reflections on public record. But I want to do this to help de-stigmatize these feelings which are essentially part of a transformative period of my life. By sharing it, I hope to connect with others who might be navigating a similar journey.

Digital Artefacts Series: Concept & Format

2025年11月19日 13:00

From Shrine to Screen: Reimagining Ìbejì Through Analog and Digital Lenses

Analog Photograph of Twins

Fig. 1. Taiwo holding a multiple-printed photograph representing herself and her deceased twin sister.1

In a black-and-white photograph from the 1970s (fig. 1), a young girl stands before a cracked mud wall, clutching a framed image that seems to speak beyond words. The light falls softly across her face, illuminating both her stillness and the quiet intensity of what she holds. The girl, Taiwo, is actually holding the photograph depicting herself beside her deceased twin sister. The sister did not live to take the picture when they were still babies, but the photographer was able to transform imagination into reality by printing Taiwo’s image twice, side by side, within a single frame. What the camera captures and the darkroom reproduces is not simply likeness but longing made visible—a visual invocation of return. Within the frame, two toddlers sit side by side, identical in posture and dress, summoned into being through the darkroom’s alchemy of double exposure.

Here, the photograph becomes more than representation: it is a vessel of memory, a surrogate body standing in for the lost twin. The image performs the ritual labor once carried by the carved ìbejì her mother would have cherished, transforming silver salts and pigment into a spiritual medium. In this quiet act of holding, the boundaries between presence and absence blur. One twin is gone, yet through this image—tinted by grief, devotion, and the faint shimmer of hand-applied color—her spirit endures, luminous within the photograph’s fragile surface.

In Yorùbá cosmology, where twins (ìbejì)2 are regarded as sacred, such portraits exceed mere commemoration. They function as ritual technologies,visual acts of spiritual equilibrium, mourning, and metaphysical repair. In that moment, the darkroom becomes a shrine; the photograph, a surrogate body. Before photography, the Yorùbá carved wooden figures (ère ìbejì) to represent departed twins, embodying presence through stylized form (fig.2). These sculptural surrogates served as tactile conduits between the living and the spirit world, each polished and adorned as if alive.

Ere Ibeji - wood sculpture

Fig. 2. Ere Ibeji with Beaded Gown (Yoruba twin figure), Wood, fabric, glass beads, string, metal, pigment, H: 36.0 cm, W: 9.5 cm, D: 9.0 cm. Fowler Museum at UCLA. https://jstor.org/stable/community.12004960.

Fast forward to 2018: a new image materializes—sharp, hyperreal, and unmistakably digital. Created by Bénédicte Kurzen and Sanne De Wilde3, their collaborative series on Yorùbá twins revisits this visual and spiritual terrain through the lens of contemporary technology. In this photograph (fig. 3), a young girl meets the viewer’s gaze, her likeness mirrored and doubled through software. The symmetry is deliberate—an homage to twinship, rendered not in the darkroom but on the digital screen. Photoshop replaces the enlarger; code performs the ritual labor.

Twin Image - digital manipulation

Fig. 3. Twins at Igbo-Ora, Nigeria, Digital image by Bénédicte Kurzen and Sanne De Wilde as part of the series Land of Ìbejì.Published in The Guardian, 12 May 2019.

From hand-carved ère ìbejì to analog portraiture to digital manipulation, the act of duplication no longer merely restores presence—it extends it, transforming remembrance into possibility and ritual into a new form of technological devotion.

Through such digital reanimations, the dialogue between ritual and reproduction extends beyond the material to the virtual. Artists continue to navigate this liminal space, where ancestral cosmologies encounter algorithmic systems and the act of remembrance becomes a gesture of creative resistance. These works trace a continuum of visual thought that resists erasure by adapting across media. Memory, in this context, is not an archive of the past but a living process—reconfigured, remixed, and projected into the digital future.

Notes
  1. Sprague, Stephen. “Yoruba Photography: How the Yoruba See Themselves,” African Arts 12, no. 1 (1978): 253.
  2. For further discussion of Twins Images in Yoruba traditions, see George Chemeche, John Pemberton, and John Picton, Ìbejì: The Cult of Yoruba Twins. Hic Sunt Leones II. Milan: 5 Continents Editions, 2003.
  3. Bénédicte Kurzen (b. 1980) and Sanne De Wilde (b. 1987) are award-winning photographers whose collaborative projects, including Land of Ìbejì, merge documentary and conceptual practices to explore cross-cultural mythologies, identity, and perception through experimental and visually poetic storytelling.

Anxiety and the Monte Carlo Method Part 2

作者shane-lin
2025年10月9日 12:00

This is a quick follow-up to my last post about using the Monte Carlo method to predict how easy it will be to schedule Praxis sessions next year.

In that post, I calculated that we might easily be in trouble if students have even a few fixed obligations beyond an average teaching load.

graph showing the success rate of 10000 simulations for number of busy hours in the week per student using random distribution, with a steep drop-off at around 7-8 hours

I also mentioned that I’d like to incorporate the actual distribution of classes at UVA into this model. Lou’s List, a long-running and unofficial UVA course listing created by professor emeritus of physics Lou Bloomfield, conveniently has scraped the exact data that I need from UVA’s unfriendly official course selection site. The course search page at Lou’s List even offers convenient CSV downloads (gotta love physics professors).

Even though I’m only interested in the scheduling data, it’s still messy enough that it needs to be cleaned up first. The format is days-of-the-week and then a time range (“TuTh 11:00am - 12:15pm”), so parsing it was a little more involved than usual. There are also a lot of “TBA” values and some probable placeholders (e.g. “MoTuWeThFrSaSu 7:00am - 6:00pm”) to filter out.

Since I want to use this data for scheduling Praxis, I only care about the times that overlap the Scholars’ Lab’s working hours.1 And for this purpose, a class that ends at 12:15pm is functionally the same for us as one that ends at 12:50pm so I rounded down start times and rounded up end times. Crunching through the Fall 2024 undergraduate course data results in this distribution:

graph showing the distribution of hour slots when UVA classes are scheduled, with 9am classes and Friday being less common

I modified my previous code to incorporate Python’s built-in random.choices function to generate random schedules for students weighted by this distribution and that pretty much got me to where I wanted to be.

And it’s good news! Well, good news and bad news. The chances of us finding two 2-hour slots for Praxis are much better since the curve drops off much less steeply. But presumably this is because the chances of us having to have early morning and Friday sessions have gone up.

graph showing the success rate of 10000 simulations for number of busy hours in the week per student, with schedules distributed by Lou's List data. The drop-off still starts around 8 hours, but drops off much less steeply

Since for whatever reason the syntax highlighting only seems to be working for my local build, I guess I’ll just link to the repo on GitHub.

  1. And here’s where I made a mistake, because I’m throwing away slots that fall outside of our business hours but students may well be assigned to a section in those times. But it should be close enough that I’m not going to fix it. 

Anxiety and the Monte Carlo Method

作者shane-lin
2025年10月7日 12:00

The Praxis Program fellowship will shortly undergo dramatic funding changes as consequences of UVA Library austerity budget cuts (as Brandon Walsh has thoughtfully documented in his recent post). Starting the next academic year, we will no longer be able to buy out our fellows’ teaching obligations. One consequence of this is that they will have a substantially larger number of fixed times where they cannot attend Praxis sessions. The modern Praxis curriculum consists of two 2-hour sessions in a typical week, and it has occasionally been irksome to find times to meet for 5 fellows even when they did not have to teach. With decreased availability, I am anxious that this problem will become insurmountable and the program that we have refined over fifteen years will need to be substantially reconfigured. My way of coping with this anxiety is to crunch the numbers, under the dubious theory that having greater insight about future calamity will make it easier to face. So, what’s the likelihood that we’ll be able to find two free slots a week in common, assuming that each student has a certain number of hours that are already taken? At what point does this number drop off?

The problem is that I don’t really know anything about statistics. I have to look up combination and permutation every time to know which one is which. Happily, for people who know how to code but don’t know how to do stats, there’s the Monte Carlo Method. If we can straightforwardly model the rules of a problem, but it’s onerous to map it to an abstract statistical approach, we can just have a computer try out different random permutations (or is it combinations?) over and over again to create an approximation of the outcome.

In this case, we start with assuming 8-hour workdays and a 5-day workweek, 5 students, and some variable number of hours each week when the student will be teaching (or other inflexible obligations). To simulate the scheduling for one semester for a given number of obliged student-hours, we can start by assuming that these obligations are evenly distributed across the entire week. Then, we create a random schedule for each student, represented by a boolean list of length 40. Since we only really care about when every student is free, we can just take the union of all the times they are busy. After that, we can simply check if there are two 2-hour blocks of contiguous free time to determine the outcome of this run.

Arbitrarily, we can run this 10,000 times for each number of obliged hours per week from 0 to 20 and graph the results.

graph showing the success rate of 10000 simulations for number of busy hours in the week per student, with a steep drop-off at around 7-8 hours

Here, I’ve also run the numbers for both the case where we enforce that each session be on different days (ideal) or if we will allow them to be on the same day (barbarous) to see if that unenviable prospect buys us anything. From this graph, we can see that, either way, there’s a pretty steep drop-off starting at 8 hours and falling below 50% success rate at 10 hours. Allowing sessions to be on the same day only gets us about 0.5 hours of leeway, which doesn’t seem worth the torturous cost. Typically, a graduate teaching assistant for a single large course may be required to attend three hours of classes and preside over three more hours of discussion sections in a week. There are many more obligations that are either more flexible or require less time, but this represents a reasonable floor for our consideration. This means that we’re relying on students having at most about 2-4 additional hours a week of fixed obligations before we are likely to be in trouble.

There’s a lot of assumptions here and we can maybe make our model more complex using, say, real historical course schedule distribution data from Lou’s List, but I think this does provide a reasonable initial approximation.

So does this make me feel better? Maybe, sort of, yes. The numbers aren’t great but there is a narrow path to success. And I think this is also helpful in that it gives us a lot of time to put mitigation strategies into motion, some of which may also be strengthened by having these numbers. Maybe we can act sooner and steal a march on other, easier to schedule things or work with our fellows’ home departments. And maybe I’ll just keep playing around with refining this model with Lou’s List datasets, just for the sake of anxiety.

Here’s my code, just in case it’s useful for anyone.

"""
Simple simulation of Praxis scheduling
"""

import random
import csv

NUM_PEOPLE = 5
SIMULATIONS = 10000
ENFORCE_MULTIDAY = True
DAYS = 5
HOURS_PER_DAY = 8

# track separately the outcome if we enforce
# multi-day and if we allow same day sessions
success_rates_multiday = [0]*21
success_rates_sameday = [0]*21
for hours_busy in range(21):
    successes_multiday = 0
    successes_sameday = 0
    # Iterate over simulations
    for i in range(SIMULATIONS):
        busy = [False] * DAYS * HOURS_PER_DAY
        # For each person, independently mark off hours_busy hours as busy
        # Result is a list of DAYS*HOURS_PER_DAY booleans representing slots
        # where each person is busy (True) or free (False)
        for j in range(NUM_PEOPLE):
            for k in random.sample(range(DAYS * HOURS_PER_DAY), hours_busy):
                busy[k] = True
        
        # Calculate successes if we enforce multi-day slots 
        # Split busy slots into days
        days = [busy[i*HOURS_PER_DAY:i*HOURS_PER_DAY+HOURS_PER_DAY] for i in range(DAYS)]
        days_free = [False]*DAYS
        # Determine if each day has a free slot or not
        for k in range(len(days)):
            d = days[k]
            # a day is free if it has two consecutive free hours
            days_free[k] = any(not a and not b for a, b in zip(d, d[1:]))
        if sum(days_free) >= 2:
            successes_multiday+=1

        # Calculate successes if we allow same-day slots 
        count = 0
        i = 0
        while i < len(busy) - 1:
            if not busy[i] and not busy[i+1]:
                count += 1
                if count == 2:
                    successes_sameday+=1
                    break
                # skip ahead to avoid overlap
                i+=2
            else:
                i += 1
    
    success_rates_multiday[hours_busy] = successes_multiday/SIMULATIONS
    success_rates_sameday[hours_busy] = successes_sameday/SIMULATIONS

with open("freeslots.csv","w",encoding="UTF8") as fp:
    fieldnames = ["Hours busy per person", f"Success rate enforcing multi-day slots", "Success rate allowing same day slots"]
    csvwriter = csv.writer(fp)
    csvwriter.writerow(fieldnames)
    for i in range(21):
        csvwriter.writerow([i,success_rates_multiday[i],success_rates_sameday[i]])

Historical Look at Praxis Funding Structures

2025年9月29日 12:00

One of my basic job duties has always been trying to figure out how we can best match the goals of our fellowship programs to the funds that we have available for them. This is true now more than ever. Everyone in higher education is trying to figure out how to make do in a climate of increasing austerity. Right now, we’re all dealing with cuts, budget freezes, canceled hires, and more. Given the present challenges, I thought I would take some time to put a bit of institutional memory out into the world about how our own fellowships have been constructed over the years. In what follows I am not talking here about the funding source for our programs—that topic could be a separate post on its own. Instead, I’ll focus on the various forms in which we’ve decided to distribute funds to students and the reasons for doing so. A lot goes into such decisions, and the pedagogical choices are likely to be invisible for most people not on this side of the fence. I’ll focus on the shape of the financial structure of the award associated with the Praxis Program, a program in its fifteenth year. My knowledge during the first through sixth years of the program comes from either my first-hand experience as a student fellow or second-hand discussions with friends in the fellowships. I took on my current role in year six, so I have more direct experience after that point. What follows, then, is a mix of speculation and evidence-based analysis. I’ll try to make clear which is which.

Praxis was not actually originally advertised as a research fellowship. If you look back in the Scholars’ Lab archives, you’ll find an advertisement for “Scholars’ Lab Research & Development Assistants.” The position sounds like something else entirely, focusing on a range of R&D tasks, but there are pieces that flag the position as the nascent Praxis Program:

Students will have the opportunity to partner on Scholars’ Lab collaborations with UVa faculty and to help test Omeka plug-ins and craft geo-temporal scholarly arguments using Neatline, a tool we’re building with funding from the Library of Congress and in partnership with the Rosenzweig Center for History and New Media. We’ll also be undertaking a brand-new project with our R&D assistants in Fall 2011: “Crowdsourcing Interpretation.”

“Crowdsourcing Interpretation” would go on to become Prism, the project developed by the first two fellowship cohorts. By that time, the focus of the program had shifted more towards original research on a particular topic. That first year the program was advertised as an hourly wage position, and, according to friends in the cohort, the students filled out time cards each week. I know from anecdotal conversations with students in the program that this fact made them feel compelled to put in the full amount of work every week.

The second-year cohort was formulated differently, which I know first-hand because this was the year Shane Lin and I were fellows in the program. In this second year, the fellowship award was now dispersed as a lump sum stipend given at the beginning of the year. I can imagine all sorts of reasons why this change might have been made. I wasn’t actually a staff at the time, though, so I can only speak to my own experience years later. There are many restrictions on what things can be paid out on an hourly wage basis versus what things can be paid out as stipends. It’s a complicated question, because some of these are university policies, some state, and some federal. The guidelines are also meant to cover both humanities research and lab experience, which is often an imperfect fit for work like ours. After all, our humanities inflected research is pretty distinct from the kind of lab work science students take on working in an advisor’s research for 40 hours. I suspect that the change in funding structure naturally followed the change in the program’s framing from being a research assistantship towards a fellowship.

At a certain point in the subsequent years, the fellowship changed from offering an outright award on top of a student’s package to, instead, providing funding to relieve a student’s teaching. In this new model, a student’s overall take home financial package remains the same, but they no longer have to teach. In case it’s easier to have numbers in front of you, this is the distinction I am making:

  • Under the old system, a student who would normally make a $20,000 stipend (partially made up of teaching wages) would receive a Praxis award of $10,000 for a total of $30,000 (including teaching wages).
  • Under the new system, a student who would normally make a $20,000 stipend (partially made up of teaching wages) would continue to make $20,000 for the year. But now there would be no teaching (the Praxis award slides in to take the place of teaching wages lost).

This shift also coincided with the development of the PHD+ program at UVA, which sought to gather and cultivate similar professional development programs across campus, and their internships are typically structured as teaching replacements. By relieving a student’s teaching, we hopefully were able to make space in their schedule for them to focus on their work with us. There is also a complicated policy at UVA wherein graduate students can only receive up to a maximum of 130% of their financial package before their financial support from the university starts to be reduced. Switching to a teaching buyout instead of a flat-out award meant that we no longer had to worry about this policy that sometimes required us to frame part of the funding as a summer research award.

There are, of course, some drawbacks to this formulation. Teaching should not exclusively be framed as a burden: some students want to teach, either for professional development or because they have a legitimate interest in pedagogy. The structure also impacts the students’ home departments more directly, as they lose graduate instructors from their course listings. Smaller departments, especially, feel a greater impact. Because of this, we’ve moved the Praxis application to the fall instead of the spring in the hopes that we can give departments early notice about complications to their teaching logistics. Another important point: not all graduate students have teaching to relieve. The first year of Praxis was open to master’s degree students, but our shift to teaching buyouts precluded that option. As a terminal MA recipient myself, I regularly think about what kinds of opportunities master’s students have—or more often don’t have—available to them. Different schools at UVA also have different teaching requirements, which makes the program difficult to explain to, say, an architecture student who might be interested in applying. And, of course, many students living on impoverished graduate student wages would rather take the time burden in favor of more funding.

This teaching replacement structure has remained the norm for us for a number of years. For several of those years, graduate teaching wages remained relatively stable. But, happily, teaching wages have started increasing. The Virginia General Assembly mandated annual raises for state employees at a certain point, and graduate students qualified. Furthermore, the Graduate School, significantly revamped packages last year to greatly increase student packages. This means that the amount of funding that it costs per student for teaching buyout has increased every year (at present about 50% more than when I started in this job). These changes have been difficult to map onto our budget for the fellowships, which has followed the opposite trajectory, steadily decreasing for a range of reasons. We’ve been able to make things work through a combination of careful budgeting and strategic cuts (the program now typically takes five students instead of six), but we are approaching our limit to match funding needs to costs.

Now that we have extreme cuts coming down the pipe through the various political and economic climates that we live in, I was forced to weigh the increased costs of the program against significant decreases in the amount of funding to take on such costs. Do we reduce the number of students further? Do we close the program? Do we end a different program to preserve this one? After considering all the options, we decided to return to the previous funding model, where the award consists of a single lump sum instead of a teaching buyout. One significant change: we now have good models in place for how students can still elect to relieve themselves of one semester of teaching and keep the rest of the Praxis funding. The single lump sum approach also loosens some of our eligibility requirements, streamlining things with the other schools at UVA and making it easier for their students to participate in the programs. We had our first information session last week, and I had double the number of students I typically have attend those meetings.

This post has gotten lost in the weeds a bit, as it’s probably clear that I’m trying to work out in real time what the best option is for the future of our programs. Hopefully it’s useful for someone else out there who might also be making their way through the underbrush of their own institution. I want to close with one final, important point: I am very happy that graduate wages are increasing. Students deserve a fair and living wage, now more than ever. Institutional memory should never lead us towards inertia, towards leaving things the way they are because that’s how they’ve always been. Institutional memory is only useful insofar as it helps us know what is possible and what is not, insofar as it helps stretch our funding as far as we can to do the most good with it that we can.

❌