-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
546 lines (458 loc) · 42.2 KB
/
Copy pathindex.html
File metadata and controls
546 lines (458 loc) · 42.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Metadata -->
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Michael Vail</title>
<link rel="icon" type="image/x-icon" href="/assets/icon-CnFYqVp2.png" />
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Quicksand:wght@300..700&display=swap" rel="stylesheet" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MGP63G8DHX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MGP63G8DHX');
</script>
<script type="module" crossorigin src="/assets/index-BjGx2mRb.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CCwNBAnW.css">
</head>
<body>
<canvas id="bg"></canvas>
<div id="terminal-overlay">
<div id="terminal-box">
<div id="terminal-scroll">
<pre id="terminal-text"></pre>
</div>
<button id="terminal-continue">Skip</button>
</div>
</div>
<main>
<div id="section-frame">
<button id="prev-section" class="arrow-btn"></button>
<button id="next-section" class="arrow-btn"></button>
<div id="nav">
<span class="nav-dot" data-index="0"></span>
<span class="nav-dot" data-index="1"></span>
<span class="nav-dot" data-index="2"></span>
<span class="nav-dot" data-index="3"></span>
<span class="nav-dot" data-index="4"></span>
<span class="nav-dot" data-index="5"></span>
<span class="nav-dot" data-index="6"></span>
</div>
<section id="about" class="section">
<div class = "content-wrapper">
<h1>
Hello world!
<span style="white-space: nowrap;">( ^‿^ )ノ゙</span>
</h1>
<h3>My journey</h3>
<div class="entry">
<div class="date">2025–Present</div>
<div class="details">
<div class="role">PhD Student in Psychology (Cognitive and Comparative Psychology)</div>
<div class="org">CUNY Graduate Center</div>
</div>
</div>
<div class="entry">
<div class="date">2025–Present</div>
<div class="details">
<div class="role">Teaching Fellowship</div>
<div class="org">Queens College</div>
</div>
</div>
<div class="entry">
<div class="date">2025–2026</div>
<div class="details">
<div class="role">Pedagogy Fellowship</div>
<div class="org">CUNY K16 Initiatives</div>
</div>
</div>
<div class="entry">
<div class="date">2024–2025</div>
<div class="details">
<div class="role">VENLab Manager</div>
<div class="org">Brown University</div>
</div>
</div>
<div class="entry">
<div class="date">2024</div>
<div class="details">
<div class="role">Research Associate</div>
<div class="org">College of the Holy Cross</div>
</div>
</div>
<div class="entry">
<div class="date">2020–2024</div>
<div class="details">
<div class="role">BA, Computer Science and Psychology</div>
<div class="org">College of the Holy Cross</div>
</div>
</div>
<h3>I have worked with</h3>
<p><img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/cplusplus/cplusplus-original.svg" alt="cplusplus logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="python logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/lua/lua-original.svg" alt="lua logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/sqlite/sqlite-original.svg" alt="sqlite logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/matlab/matlab-original.svg" alt="matlab logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/java/java-original.svg" alt="java logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="javascript logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original.svg" alt="html5 logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original.svg" alt="css3 logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/julia/julia-original.svg" alt="julia logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/androidstudio/androidstudio-original.svg" alt="androidstudio logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/dotnetcore/dotnetcore-original.svg" alt="dotnetcore logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/git/git-original.svg" alt="git logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/illustrator/illustrator-plain.svg" alt="illustrator logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/photoshop/photoshop-plain.svg" alt="photoshop logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg" alt="vscode logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/visualstudio/visualstudio-plain.svg" alt="visualstudio logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/r/r-original.svg" alt="r logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/rstudio/rstudio-original.svg" alt="rstudio logo" height="40" />
<img src="https://raw.githubusercontent.com/michaelvail/michaelvail.github.io/3348a71988d65f764f911040bcc88467e6a026bc/files/eprime.svg" alt="eprime logo" height="40" /></p>
<h3><a href="mailto:michaelcvail@gmail.com">✉︎ Contact me! ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧</a></h3>
</div>
</section>
<section id="research" class="section">
<div class = "content-wrapper">
<h2>Previous Research</h2>
<details>
<summary>Guiding locomotion with a vibrotactile belt: Sensory substitution for visual-spatial information <small>Traffic and Granular Flow, 2026</small></summary>
<p><b>Abstract:</b> This study investigates the potential of a vibrotactile belt for guiding locomotion. In a virtual reality experiment, participants walked towards targets using either visual information in the form of goal poles or tactile information provided by vibrations around their waists. Results show that tactile guidance only slightly increased the mean path tortuosity and the mean stopping distance from the final target, but considerably prolonged walking time compared to visual trials. There was no effect of burst rate information for target distance. Overall, the use of a vibrotactile belt is sufficient to reach the intended targets while walking.</p>
</details>
<br>
<details>
<summary><a href="https://github.com/michaelvail/michaelvail.github.io/blob/master/files/Higher%20quality%20narrative%20results%20in%20better%20video%20gaming%20experience%20but%20only%20for%20higher%20quality%20graphics.pdf">Higher quality narrative results in better video gaming experience but only for higher quality graphics</a> <small>Psychonomic Society, 2025</small></summary>
<p><b>Abstract:</b> Better narrative and graphics quality can enhance the video game experience by “transporting” users into a virtual world. We created low versus high narrative quality by varying vocabulary imaginativeness, relevant details, irrelevant details, and conciseness. Texture resolution and polygon count were changed to create low versus high graphics quality. Seventy-five undergraduate participants played a text-choice-based interactive video game in an immersive desktop environment. Results show that narrative quality had a main effect on narrative experience satisfaction, narrative transportation, presence, and social presence. Graphics quality had the main effect only on visual aesthetics. A high-quality narrative resulted in a better video gaming experience than a lower-quality narrative, but only in the higher-graphics condition. Females experienced more enjoyment, visual aesthetics, and presence than males. Our findings show that improving the narrative quality more than the graphics quality of a text-choice-based interactive video game can improve users’ gaming experience, with some gender effects.</p>
</details>
<br>
<details>
<summary><a href="https://github.com/michaelvail/michaelvail.github.io/blob/3f0d9b9d7ad2a9f8afbe02165bf52efc4a9ba825/files/Narrative%20Quality%20Affects%20Narrative%20Satisfaction%2C%20Narrative%20Transportation%2C%20and%20Social%20Presence%20of%20Story-Driven%20Video%20Games%20(Brown%20CoPsy%20Retreat%202025).pdf">Narrative quality affects narrative satisfaction, narrative transportation, and social presence of story-driven video games</a> <small>Association for Psychological Science, 2025; Brown University CoPsy Department Retreat, 2025</small></summary>
<p><b>Abstract:</b> We manipulated high versus low levels of narrative and graphics quality, examining their effects on participants’ text-choice-based video gaming experience in an immersive desktop environment. We found that narrative quality, more than graphics quality, enhances participants’ narrative experience satisfaction, narrative transportation, and social presence, with some gender effects.</p>
</details>
<br>
<details>
<summary><a href="https://github.com/michaelvail/michaelvail.github.io/blob/425bcf4472945c287bc713af5a4853c70aac4b16/files/Effects%20of%20narrative%20quality%20and%20graphics%20quality%20on%20virtual%20story-driven%20experience%20(Psychonomics%202024).pdf">Effects of narrative quality and graphics quality on virtual story-driven experience</a> <small>Psychonomic Society, 2024</small></summary>
<p><b>Abstract:</b> Virtual reality (VR) technology’s consumer usage has grown unprecedentedly. VR media creators leverage narrative-driven factors (e.g., a captivating plot) to maximize users’ engagement and enhance presence (the subjective quality of “being there” in a virtual environment) and enjoyment. These story-driven experiences can also be influenced by graphics quality. Participants played an interactive desktop VR game. Using a 2 × 2 experimental design, we measured participants’ experiences in high versus low narrative quality conditions (varying in imaginativeness of vocabulary, amount of relevant and irrelevant details, and conciseness) and high versus low graphics quality conditions (varying in texture resolution and polygon count). Preliminary results suggest interactions between narrative and graphics quality for total playtime, presence, social presence, attitude alignment, visual aesthetics, and motion sickness. Higher graphics quality enhanced users’ enjoyment, donation amount, and narrative transportation. Both manipulations affected story-driven experiences, but graphics quality had stronger effects.</p>
</details>
<p>
<a href="https://github.com/michaelvail/michaelvail.github.io/blob/3f0d9b9d7ad2a9f8afbe02165bf52efc4a9ba825/files/A%20Social%20Synchrony%20Task%20for%20Evaluating%20Differences%20in%20Social%20Connectedness%20(NEURON%202024).pdf">A social synchrony task for evaluating differences in social connectedness</a> <small>NEURON, 2024</small>
</p>
<details>
<summary><a href="https://ieeexplore.ieee.org/document/10536275">Effect of ambulatory conditions and virtual locomotion techniques on distance estimation and motion sickness of a navigated VR environment</a> <small>IEEE VR, 2024</small></summary>
<p><b>Abstract:</b> We present preliminary results from a 2 X 2 between-subjects experiment. Our two IVs were ambulatory-restrictive (i.e., without locomotion) postural conditions (sitting vs. standing), and virtual navigation techniques (steering vs. teleporting). Participants navigated a complex virtual environment comprising outdoor and indoor environments for 10 minutes. We found that teleporting may result in less online distance estimation error than steering. Motion sickness was lower while teleporting than steering and when sitting than standing. Teleporting also resulted in better system usability than steering. We discuss the results' implications for VR usability.</p>
</details>
</div>
</section>
<section id="vr" class="section">
<div class = "content-wrapper">
<h2>VR Environments</h2>
<div class="repo-card">
<img src="/assets/parkhigh--n_x7XQV.png" alt="The Park" class="repo-image">
<div class="repo-content">
<div class="repo-title">The Park</div>
<p>A visual novel story game I created for my first independent research project. Includes fully functional game logic, cutscenes, dynamically-appearing dialogue, user choices, and animations.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/venlab-G6utLKwX.png" alt="VENLab" class="repo-image">
<div class="repo-content">
<div class="repo-title">Spatiotemporal Integration</div>
<p>This project tests users' spatiotemporal integration of moving avatars. The system facilitates:
<ul>
<li>Trial generation with varied crowd sizes and perturbation parameters.</li>
<li>Session setup and management for user-run experiments.</li>
<li>Real-time data collection of participant and object motion and eye tracking.</li>
<li>JSON progress saving and CSV data export.</li>
<li>Session recreation directly in the Unity editor.</li>
</ul>
</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/photoshop/photoshop-plain.svg" alt="photoshop logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/venlab-G6utLKwX.png" alt="VENLab" class="repo-image">
<div class="repo-content">
<div class="repo-title">Haptic Belt</div>
<p>Tests the feasibility of a vibrotactile belt for providing haptic feedback in a zero-vision environment.
<ul>
<li>Generates paths using all specified angle/distance pairs within a limited space.</li>
<li>Includes serial communication with an Arduino using Java helper methods.</li>
<li>Positional and rotational tracking of the subject.</li>
<li>Load trial configurations from CSV and save progress in JSON.</li>
</ul>
</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/androidstudio/androidstudio-original.svg" alt="androidstudio logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/java/java-original.svg" alt="java logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/venlab-G6utLKwX.png" alt="VENLab" class="repo-image">
<div class="repo-content">
<div class="repo-title">Mutual Avoidance</div>
<p>A multiplayer walking experiment in augmented reality for testing avoidance between two human subjects.
<ul>
<li>Multiplayer networking via Unity Netcode and Unity Transport Protocol. One user hosts on the local network and the other joins the session as a client.</li>
<li>Dynamic spawning of home and goal poles in a passthrough environment.</li>
<li>Positional and rotational tracking of subjects with synchronized data collection.</li>
<li>Audio cues signaling trial phases (start, pause, end, speed changes).</li>
<li>Load trial configurations from CSV and save progress in JSON.</li>
</ul>
</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/venlab-G6utLKwX.png" alt="VENLab" class="repo-image">
<div class="repo-content">
<div class="repo-title">Single Avoidance</div>
<p>A walking experiment for testing human avoidance of a virtual object.
<ul>
<li>Initializes object position and motion from an input file.</li>
<li>Positional and rotational tracking of the subject and object.</li>
<li>Load trial configurations from CSV and save progress in JSON.</li>
</ul>
</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/unity/unity-original.svg" alt="unity logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/csharp/csharp-original.svg" alt="csharp logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/android/android-original.svg" alt="android logo" height="40" />
</div>
</div>
</div>
</div>
</section>
<section id="sidequests" class="section">
<div class = "content-wrapper">
<h2>Side Quests</h2>
<div class="repo-card">
<img src="/assets/discography-CUecMHvm.png" alt="BetterDiscography" class="repo-image">
<div class="repo-content">
<div class="repo-title"><a href="https://github.com/michaelvail/better-discography">Better Discography</a></div>
<p>A Spicetify extension that improves Spotify’s artist discography pages by adding a more detailed filter for release types.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="javascript logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original.svg" alt="html5 logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original.svg" alt="css3 logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/guienhancer-DAmaMhnf.png" alt="GeniusUIEnhancer" class="repo-image">
<div class="repo-content">
<div class="repo-title"><a href="https://github.com/michaelvail/genius-ui-enhancer">Genius UI Enhancer</a></div>
<p>A Chromium extension for Genius that removes clutter and offers lyric page customization.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="javascript logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original.svg" alt="css3 logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/anilistplus-BSYkGRNd.png" alt="AniListExtension" class="repo-image">
<div class="repo-content">
<div class="repo-title"><a href="https://github.com/michaelvail/anilist-rating-extension">AniList Rating Dimensions</a></div>
<p>A Chromium extension that adds custom rating dimensions to your AniList.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="javascript logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original.svg" alt="html5 logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original.svg" alt="css3 logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/maomao-zoVA6mnu.jpg" alt="Maomao" class="repo-image">
<div class="repo-content">
<div class="repo-title"><a href="https://github.com/michaelvail/civ-6-maomao">Civilization VI: Maomao Leader Pack</a></div>
<p>A mod that introduces a new leader and civilization to the game.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/lua/lua-original.svg" alt="lua logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/sqlite/sqlite-original.svg" alt="sqlite logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/receptionist-BXT1oqbq.png" alt="Receptionist" class="repo-image">
<div class="repo-content">
<div class="repo-title"><a href="https://github.com/michaelvail/telegram-receptionist">Telegram Receptionist</a></div>
<p>A friendly AI-powered receptionist bot for Telegram.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="python logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/icon-CnFYqVp2.png" alt="Website" class="repo-image">
<div class="repo-content">
<div class="repo-title">This Website!</div>
<p>Developed using Three.js.</p>
<div class="repo-language">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="javascript logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original.svg" alt="html5 logo" height="40" />
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original.svg" alt="css3 logo" height="40" />
</div>
</div>
</div>
<div class="repo-card">
<img src="/assets/secret-project-DLWIn507.png" alt="Secret Project" class="repo-image">
<div class="repo-content">
<div class="repo-title">Secret Project</div>
<p>Coming soon...</p>
</div>
</div>
</div>
</section>
<section id="articles" class="section">
<div class = "content-wrapper">
<h2>Articles</h2>
<p>During my undergraduate years at the College of the Holy Cross, I wrote for <em>The Spire</em>, the official student newspaper. I began as a staff writer, soon promoted to editor and then chief editor of the satire and creative writing section. My goal with every article was to make you laugh; if not laugh, smile; if not smile, wonder, <em>I don’t know what I just read—but I’m glad I read it. I’m a changed person now.</em><br><small>⭐ Recommended articles</small></p>
<p><a href="https://drive.google.com/file/d/15ia5TPialnsmJS3agPfc9QJ5dAO-sm_W/view">Scooby-Doo: Fair Trade or Exploitment?</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/15Udr4BPIoMH2XvTyXcZrQfReyCKzhW3I/view">Graduation Day</a></p>
<p><a href="https://drive.google.com/file/d/1AqLK2_sxFMuMMkf1gKq3Sa1IXeNJJAQl/view">Netflix Announces Innovative Policy Changes</a></p>
<p><a href="https://drive.google.com/file/d/15vBJ9b5TLd0HXMsjWfLRoq2ywnrzSuuv/view">Optimizing Your Reaction Time for Enrollment</a></p>
<p><a href="https://drive.google.com/file/d/1yQraMU9I5-bH-MHkVvu4xCY9e2zCO1Vt/view">BREAKING: Congressmen Expose TikTok’s Development Failures</a></p>
<p><a href="https://drive.google.com/file/d/11WK4EVI6gm6MHKqioilXAnPyZalBAiFb/view">Gaming & Esports Club Touches Grass: An Interview With Sebastian Johns ‘23</a></p>
<p><a href="https://drive.google.com/file/d/1Ejrfc8M0F4RDrJXfIn71XX2acAy0Wx6v/view">A Deep Dive Into Upcoming Events on myHC</a></p>
<p><a href="https://drive.google.com/file/d/110L740lQzZ76gq31zxlSo86vzpYbW6fN/view">Holy Cross Theatre Premieres Musical <em>Company</em></a></p>
<p>⭐ <a href="https://drive.google.com/file/d/1uJKIPsK20sfz0YBC4dELp8KGqjvnxkIM/view">Report: “Can Robots Feel Pain?”</a></p>
<p><a href="https://drive.google.com/file/d/1Mb9XrMrIoek6EvBnjUFVGkTczUrc0MV0/view">Surviving the Worcester Winter</a></p>
<p><a href="https://drive.google.com/file/d/1ZpurnUvXLBBJHP8mxAmYXzSyotw-LxLS/view">My Resume (Royalty-Free)</a></p>
<p><a href="https://drive.google.com/file/d/110D0Yrsx_0wQOQPT5yX15jLFnYmlUpqL/view">The Last Spire</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/1NRgKxF5D1dpr4MZz4MfBnss6vsCUuC2d/view">Unfocused Group #1: Self-Driving Cars and Microwaves</a></p>
<p><a href="https://drive.google.com/file/d/1hhX6ZIT27MFBdZgleNIZb5FyOnj_pNUu/view">BREAKING: Joe Biden Stays in Power Following 2022 Election</a></p>
<p><a href="https://drive.google.com/file/d/13PYMdWRBQ1rKbPszgiAUWVEQglIXFK-k/view">My Spring 2023 Course Recommendations</a></p>
<p><a href="https://drive.google.com/file/d/1NiwBIEn3VzTGVJjRyBKZTjfV_BiOiniX/view">Family Weekend Account From a Holy Cross Father</a></p>
<p><a href="https://drive.google.com/file/d/1ktgkf2ycdVK3NWYxRAcL5qCH4ozZVyBo/view">The Holy Cross Mission</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/1k-y927nfbTmM3wSHmCl_Xfckyc5gTnLJ/view">“Theory:</a></p>
<p><a href="https://drive.google.com/file/d/17aeqfpKSVV0f1SdSli8O0DOGv58rh-fk/view">President Rougeau Beats Colgate in Intense Football Match</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/17Bm8VSbGtb0WcEvJ6xJXjuCCAt0Mjv8F/view">The Dunkin’ Runner</a></p>
<p><a href="https://drive.google.com/file/d/1nUMnHwbG-oOYvpE_62vmimCbySY26W-i/view">What is Going On With Orientation?</a></p>
<p><a href="https://drive.google.com/file/d/10tiNUInP-PPu0smzY8aijAbVfHjLscpn/view">Author’s Note</a></p>
<p><a href="https://drive.google.com/file/d/19lu_SysLqJp86cIUh1b8RK4zYfw7BPWC/view">Holy Cross Sued For Sledding Tragedy</a></p>
<p><a href="https://drive.google.com/file/d/154EGNaNDEPHQQkhN6iQoxySE0EnOxrCz/view">How to Have Fun in Kimball</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/12YGRDhTUyksSQcOiDqijG1MaRM0GH8Ld/view">The Case of the Disappearing Snow</a></p>
<p><a href="https://drive.google.com/file/d/14JzguDhWw82oE0V9WfRGBOJj-9qdKtpP/view">Bird Poem</a></p>
<p><a href="https://drive.google.com/file/d/1na3PrdXdEgbCXN4F4pAY8H0NJ5vj1RCc/view">Campus Contemplations, Pt. 2</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/1rXG_D74VZYYBxxDBf1yyOFIvHdlpBZpG/view">A Night to Remember</a></p>
<p><a href="https://drive.google.com/file/d/1t4XBn8Ys2fgIquoWZZAZl1tq5RPVxqkq/view">Campus Contemplations, Pt. 1</a></p>
<p><a href="https://drive.google.com/file/d/1J6ktwDU5QVKHFc6ZMSrD3lOH18Qhl2ms/view">My Experience With That Leroy Kid</a></p>
<p><a href="https://drive.google.com/file/d/1Uqg_oa6xbJCkv4S_69qvrHgiePtUw1In/view">This is not just to say…</a></p>
<p><a href="https://drive.google.com/file/d/1_Y2L9fJuT44wxdtCQILQrUH2olBuFALA/view">A Comprehensive Guide to the Science Complex</a></p>
<p><a href="https://drive.google.com/file/d/11SFD09chIwWxZjrxmAM962YxUl-WBZj0/view">The Sodium Diet</a></p>
<p><a href="https://drive.google.com/file/d/1-BJDKsBaF3t4UsLQJhND8TGTkN_EcnHc/view">Job Posting – All Students Eligible!</a></p>
<p><a href="https://drive.google.com/file/d/1TdG9aBeF4mBI-1D37xr0KQz4FT13fc-g/view">Student Artist Makes a Commotion, Fire Department Called</a></p>
<p><a href="https://drive.google.com/file/d/1nDK8mYf3jRGT3ic17QTBmapFy0vbnb5v/view">The New Equipment at the Jo</a></p>
<p><a href="https://drive.google.com/file/d/1Qh2SF-DyThHD7a6w8kzPTEwLzED896fC/view">Live from Cool Beans: Milkshake Tier List</a></p>
<p>⭐ <a href="https://drive.google.com/file/d/1ldMJeUu21ga5LT2nOAFz4cjXeFfuMi5S/view">Building Snowmen On the Hill</a></p>
<p><a href="https://drive.google.com/file/d/1whklJXJ3NDEP1gouxWxa0K_R9HOoOGmo/view">Recorded Phone Call from 2-11-2021</a></p>
<p><a href="https://drive.google.com/file/d/1tismJebf9XTbJ5j3tYiSy73WE2MmQ0RF/view">They Took Away Our Campus, and Now They’re Taking Away Halloween</a></p>
<p><a href="https://drive.google.com/file/d/1k-oFAjw6o4Ba9je2fNEYYzge7E1x2JCE/view">There is a Monster on Campus. Please Believe Me.</a></p>
<p><a href="https://drive.google.com/file/d/1dVVWR9NMTLjsvBPLQ_XLakWzHj9gzi-w/view">A Tale of a Freshman</a></p>
</div>
</section>
<section id="dining" class="section">
<div class = "content-wrapper">
<h2>Asymptotic Dining Model</h2>
<p>When we eat highly tasty food, we tend to start off with a large bite and continuously take smaller bites throughout the meal to savor it. This "asymptotic dining" effect is particularly potent when the food is expensive and each bite reminds you to get your money's worth.</p>
<br>
<div class="header" id="header">
<div class="slider-container">
<label>Initial bite size: <span id="initVal">0.1</span></label><br>
<input type="range" id="initSlider" min="0.01" max="0.5" step="0.01" value="0.1">
</div>
<div class="slider-container">
<label>Decay factor (r): <span id="rVal">0.9</span></label><br>
<input type="range" id="rSlider" min="0.5" max="0.99" step="0.01" value="0.9">
</div>
<div class="slider-container">
<label>Minimum bite size (epsilon): <span id="epsVal">0.01</span></label><br>
<input type="range" id="epsSlider" min="0.001" max="0.099" step="0.0001" value="0.01">
</div>
</div>
<div id="plot1" class="plot"></div>
<div id="plot2" class="plot"></div>
<div id="plot3" class="plot"></div>
</div>
</section>
<section id="hokey" class="section">
<div class = "content-wrapper">
<h2>The Hokey Pokey</h2>
<p>
I immensely dislike the Hokey Pokey.<br><br>
It is, inherently, a flawed dance. In each verse, it instructs the dancer to "do the Hokey Pokey," a step that is never explicitly defined and presumably refers to the dance in and of itself. This results in a recursive loop without an end condition.<br><br>
Consider the following C++ program, which attempts to implement the Hokey Pokey but will inevitably run into a stack overflow error due to infinite recursion:
</p>
<pre><code>
#include <iostream>
#include <vector>
using namespace std;
class BodyPart {
public:
string type;
string side;
BodyPart() = default;
BodyPart(string t, string s) : type(t), side(s) {}
void PutIn() { cout << "You put your " << side << " " << type << " in." << endl; }
void PutOut() { cout << "You put your " << side << " " << type << " out." << endl; }
void ShakeAllAbout() { cout << "You shake your " << side << " " << type << " all about." << endl; }
};
// Initialize body parts
BodyPart leftFoot("foot", "left");
BodyPart rightFoot("foot", "right");
BodyPart leftHand("hand", "left");
BodyPart rightHand("hand", "right");
BodyPart head("head", "");
BodyPart wholeSelf("self", "");
vector<BodyPart*> bodyParts = { &leftFoot, &rightFoot, &leftHand, &rightHand, &head, &wholeSelf };
void HokeyPokey();
void TurnYourselfAround();
int main() {
HokeyPokey();
}
void HokeyPokey() {
for (BodyPart* part : bodyParts) {
part->PutIn();
part->PutOut();
part->PutIn();
part->ShakeAllAbout();
HokeyPokey(); // This is where the infinite recursion occurs
TurnYourselfAround();
}
}
void TurnYourselfAround() {
cout << "You turn yourself around." << endl;
}
</code></pre>
</div>
</section>
</div>
</main>
</body>
</html>