Timothy O'Connell

  Media Production, Art Projects and Information Systems

"Underground Lounge" Facebook Event Banner

I designed this Facebook event banner for a show my band was playing.

The idea was to demonstrate some of the new AI skills I had been learning at the time, including how to work with live tracing/image tracing to turn low-res logos into vectors. All of the logo-type text came from low-res (e.g. 300x400px) bitmaps and had to be captured, manipulated, etc. in order to look consistent with the full-res (1900x1080px) elements.

2018-08-21 - Adobe Illustrator, art, design, posters, the jack draculas

Personal Wedding Website Framework

As a personal challenge, I decided to develop a minimalist personal wedding website framework that was totally files-driven (i.e. no database, all content data stored as JSON in the JS app) and did not require a server (e.g. Flask, Node, etc.).

I developed and deployed the initial draft in about half an hour: the RSVP form, which had validation and an email component, took longer.

Source Code on GitHub.

2018-05-04 - angularjs, css, design, development, html, javascript, nginx, wedding

"Space Time Hate Fire" EP Design

On November 11, 2016, my band, The Jack Draculas, released our debut EP, "Space Time Hate Fire".

(Spoiler alert: it's a metal record.)

The EP was recorded and produced by Brian Nielsen in Chicago, IL.

I designed and created the cover art. The wooden frame and background were actually created (they're a "practical" effect), painted and photographed by me. Above that, is a layer of space transparency effects and then the logo text for the band name and EP title (all done by me).

Accompanying the release is a wide-aspect press/DSP photo that I designed, photographed and edited.

2016-11-08 - adobe illustrator, design, music, photography

Halloween Costume: Mark Antony

I based my costume design on Richard Burton's white leather armor from the 1963 Liz Taylor Cleopatra.

The red under-tunic is flannel--I designed a the (very simple) pattern and sewed it--and the armor is made of foam, shaped with a heat gun and bonded with Barge's contact rubber cement.

The embellishments were partially 3D printed (the repetitive ones, e.g. the gold "flowers") and partially urethane: I made the mold for the sword from card stock, hosed it down in releaser and then used Smooth-Cast 300 in the mold.

Mostly the "armor" was spray-painted, but I did the pinstripes by hand.

Charlotte, my Cleopatra and the love of my life, deserves special credit for putting up with me while I worked obsessively on the thing for nearly two weeks straight. Looking back, it's all a blur, but I know how I am when I get a late start on a big project and I'm sure I was an absolute basket case.

2016-11-08 - 3D printing, Halloween, art, costumes, foam

"Chicago Fangs" T-shirt

I designed this t-shirt for my band, The Jack Draculas.

I did the original vector art for the front and the back in Adobe Illustrator. The rear font is "American Typewriter".

VG Kids did the screen printing; the original run was done on two colors of shirt, black and "heather graphite".

2016-10-09 - Adobe Illustrator, art, design, fashion, graphic design

Slimline Gear Grid Design for Kingdom Death: Monster

In 2016, I a 3D printer as a birthday gift. In order to teach myself how to use it, I tasked myself with designing a replacement item for a paper asset from the hobby game "Monster" by Kingdom Death.

The basic idea was to replace a piece of paper with an extremely lightweight plastic part that held square cards in place on a table.

The challenge was not only to teach myself how to use 3D CAD and builder software by building a better mousetrap, but to do it with a critical limitation: the part that I was trying to replace is actually larger than the build plate on the printer, so I had to come up with a design that could be printed in one shot (and then assembled).

When I was finished, published a long, detailed blog post about the learning and design process.

Tinkercad link | Thingiverse link

2016-05-31 - Kingdom Death, Tinkercad, boardgames, design

"All Mammals Can Scream" EP Design

I play the drums in a band called The Nix. On April 4th, 2016, we released an EP of four songs called, "All Mammals Can Scream".

The title is an homage to the Simpson's couch gag by Don Hertzfeldt.

I played the drums on the album and designed the album art.

The background is acrylic and spray paint; the lettering, including the band log, is hand-vectored. The title lettering is based on the "Rift" font by Keymaster Games.

2016-04-04 - Adobe Illustrator, art, graphic design

"Sword Swallower" Concert Poster

I did this poster in Illustrator and GIMP.

The basic process was this: I started with a monotone painting, photographed it, manually translated it to vectors in AI (so I could alter the position an orientation of the elements from the painting) and then colored the vector shapes to "contour" it.

The whole process took about two days.

2016-02-13 - 22, Adobe Illustrator, GIMP, art, graphic design, posters

ember-cli Traceback: Missing template processor

I was working on rolling out a new app using ember-cli and I had to use npm link to change the binaries that the app was using.

After I ran my npm-link commands, I attempted to start the server (i.e. with ember serve), I got this big, strange tracback:

Missing template processor
Error: Missing template processor
  at module.exports.preprocessTemplates (/home/thewatcher/node_modules/ember-cli/node_modules/ember-cli-preprocess-registry/preprocessors.js:164:11)
  at EmberApp._processedTemplatesTree (/home/thewatcher/node_modules/ember-cli/lib/broccoli/ember-app.js:675:48)
  at EmberApp.appAndDependencies (/home/thewatcher/node_modules/ember-cli/lib/broccoli/ember-app.js:913:24)
  at EmberApp.javascript (/home/thewatcher/node_modules/ember-cli/lib/broccoli/ember-app.js:1031:34)
  at EmberApp.toArray (/home/thewatcher/node_modules/ember-cli/lib/broccoli/ember-app.js:1389:10)
  at EmberApp.toTree (/home/thewatcher/node_modules/ember-cli/lib/broccoli/ember-app.js:1411:30)
  at module.exports (/home/thewatcher/kdm-manager/v2/ember-cli-build.js:23:14)
  at Class.module.exports.Task.extend.setupBroccoliBuilder (/home/thewatcher/node_modules/ember-cli/lib/models/builder.js:57:19)
  at Class.module.exports.Task.extend.init (/home/thewatcher/node_modules/ember-cli/lib/models/builder.js:91:10)
  at new Class (/home/thewatcher/node_modules/ember-cli/node_modules/core-object/core-object.js:18:12)

A lot of the stackoverflow questions were similar errors were thrown were resolved by clearning the npm and bower caches and trying again.

In my case, clearing the caches didn't solve the problem.

What I had to do was run these commands from the app's root directory:

$ npm install ; bower install

After that, the missing dependencies were loaded and the app server started right up.

2016-01-21 - ember ember-cli sysadmin

KD:M Manager!

KD:M Manager is an interactive campaign manager for the hobby game "Monster" by Kingdom Death.

I began development on the manager in December of 2015 and maintain it presently. At the time of this writing, the utility has 1017 registered users and, according to Google Analytics, averages about 1000 unique user sessions a month at a bounce rate percentage in the low 30's.
Rather than leveraging an existing framework, one of the development/design goals for me when I began the project was to do everything "from scratch", from the user-facing javascript helpers to the server-side administration and application design.

I also developed all of the visual assets, including logos and designs as well as color schemes and layout, etc.

Beyond the design challenge inherent in automating the book-keeping of a game famous for its sprawling design and tortuous business logic, the most important lessons of developing and maintaining the Manager has been the ones I have learned from the users about their priorities.

Specifically, if I had it all to do again (or when I start version two), I would sweat the minutiae of presentation and UX and worry less about back-end and book-keeping automation. Which, to put that another way, is to say that my main take-away at this point is that most users are willing to overlook or work around absent or incomplete features, so long as they like the overall presentation.

2015-11-29 - CSS, HTML, board game league, development, mongodb, python, software

Use Nginx as a Proxy for a Mojolicious App

We've got this mission-critical legacy webapp at the office that uses Mojolicious.

As part of a year-end clean-up project, we had to move it to our central application server, which basically meant moving it from a dev server where it was the only thing running to a multi-tenant tools server where pretty much everything else lives.

Once we got it ported (i.e. dependencies handled, executing user updated, etc.) and running on port 3000 (i.e. the default port for Mojolicious apps), it fell to me to set up the nginx proxy.

Normally, when we use nginx to proxy to CGI apps, we just use generic/vanilla proxy setups:

location ~ /whatever/ {
  include     /usr/local/nginx/conf/proxy.conf;

...where /usr/local/nginx/conf/proxy.conf is just a generic proxy config like the one on the Nginx example site.

Setting up the proxy to the Mojo app, however, ended up being a little bit more complex:

location ~ /application_name/(?<app_request>.*) {
  include     /usr/local/nginx/conf/fastcgi.conf;

Basically, there's three things to notice here:

  1. The capture group app_request is used to take whatever URL is coming from the user and pass everything after /application_name/ to the Mojo server as the actual requested URL: the user's browser sends '/application_name/view?param=whatever' and we pass '/view?param=whatever' to the Mojo server.

  2. We have to include /usr/local/nginx/conf/fastcgi.conf (again, see the Nginx example site: we use the vanilla one) because we need to get some additional http request elements proxied over to the Mojo server for our application to work correctly.

  3. Finally, the $is_args and $args variables we plug into to the proxy_pass get those special http request elements we need proxied over to our Mojo server.

2015-11-20 - mojolicious, nginx, servers, sysadmin

Board Game League!

Board Game League is a weekly board game event I host.

After the first few meetings, I started writing summaries. A friend suggested setting them to video. Another friend pointed out that Reaper, the DAW that I use for pro audio, recently added support for video.

The stars aligned.

Watch the videos, including a "behind the scenes" featurette I made about my process, on YouTube.

2015-11-18 - board game league, reaper, video, youtube

The Order - WOLF

In September of 2015, I designed three accessories for The Order's third collection, "WOLF": a collar and two headband/tiara-type pieces.

They were used in a pair of promotional films called "BAIT".

2015-09-25 - black, design, fashion, masks, production

Velvit - Yang

In December of 2014, I was a model for Velvit's Yang campaign.

Lara Deez is the photographer.

2014-12-05 - black, fashion, modeling

WIthin the Woods Concert Posters

Two concert posters I designed for my band, "Within the Woods".

I used GIMP (and nothing else!) to create and design these. Since then, I have switched to a hybrid GIMP/Adobe Illustrator approach, but the old process produced some nice results.

I did two posters:

  • Within the Wolf - the name of the band appears within the silhouette of a wolf; the logo texture is "distressed". This one started as a charcoal sketch.

  • Within the Snakes - this one is the result of buying a $12 bag of a few dozen rubber snakes, photographing them, turning the photographs into silhouettes and then collaging them in GIMP.

2014-02-06 - 22, GIMP, art, graphic design, posters

A Hundred Dead Bees

I wrote the short story below for inclusion in the March 2013 edition of Digital Literary Magazine. Download an illustrated, nicely-formatted version of the story in PDF form (along with the rest of the mag) at this URL: http://digitalliterary.com/issue-one

A hundred dead bees.

Some had come to rest atop rubbery boughs of desiccated, green-gray fennel. Others had insinuated themselves among a clutch of rotten-looking hazelnuts.

A few, Mary now noticed, had fallen from the shelves to the floor.

These dead (or were these ones dying?) bees on the pantry floor were hard to make out at first. Midnight got them lost in the dark shadows between the wisps of moonlight that smoked dustily up through the gaps between the black planks.

Among the ringing silence and the stale things of the pantry, there had somehow come to be scores of dead and dying bees.

Her mind had been wandering, she realized, and now, as it was finally finding its way back to her, Mary was surprised to learn that her eyes had settled on her own bare feet. Normally Mary's feet were fish-belly white, but now she saw they were silvered by the full moon. She squinted down at her own two feet like they were a stranger's and wondered how it could be that she was totally unafraid that she might step on the bees.

So she looked up. And there were goosefoot seeds. And they had been left, uncovered, in a splintering basket and looked like they had already been ground. Or crushed, at any rate: unbaked is thy bread.

Of course there were bees on the tiny hill of seeds, just like everything else in the moonlit pantry. Mary imagined that she could look at one and tell apart each of its little black legs. There were four bees on the crushed goosefoot seeds. All on their back and each one's legs twitching the same waterwheel rhythm.

Dead bees doing a backstroke through a blanch-gray heap of broken seeds.

It came to her then that her eyes had managed to adjust to the light and she was scanning more rapidly now and finding some of the heat making its way back into her face as she went. On a low shelf, there moldered a limp-looking canvas pouch that she was sure would contain at least a handful of knotgrass seeds. She could make out the bottoms of some tin ramekins on a high shelf and she was somehow sure that they were the kind that would hold oats. Cut ones. Or maybe barley.

"There's bees," she said.

And then came the knuckles-on-treebark scrape of the Thing's icy ribs grinding against her spine. And in her mind, Mary cursed. And then she felt the shuddering palsy of the Thing's ribs make its way into the Thing's throat. Its greasy chin fell against her shoulder and she made vain bargins with God.

Eventually, the freezing spittle pricked at her ear.

"These old eyes," came the sneering, nasally whisper.

Then, with those words, the Thing seemed to pause, its quavering throat chugging the dead-bee leg-rhythm against her shoulder as it hugged its left arm--that arm as strong as any living man's--tighter around her neck and pulled its dead weight higher on her back. She squeezed her eyes shut in anticipation of the Thing and its awful talking.

"These old eyes can still see the emerald green, Mary Culhane. Clear as day, Mary."

The Thing's disgusting mouth was nearly touching her ear now. It had no breath, but when the Thing spoke, the speaking somehow felt cold against the growing hotness in her face; the damp fishiness of it against her fire-hot ear made her squeeze her eyes shut even tighter. Her front teeth dug into her lower lip and she squeezed her stomach as tight as it would squeeze.

"Can still see the curl of the living smoke and the bone straight of the dead plumb line, Mary Culhane."

The words came faster and Mary felt tears push through, slip down and collect at the corners of her mouth in tepid pools.

"These eyes, Mary, can see you clear as the cold river; keen as the cracked ice. Can see through all girls like you. Can see everything that you see, Mary Culhane. Can see every little thing that you see."

"I can make porridge," she gasped. "That's all. That is all that's here and is..."

Her voice broke and her words fell from her and came apart like a handful of burning straw into the well. She struggled bitterly, her eyes suddenly open and rolling backwards in her head, but she could not find her voice and she could not find her words. Such things, in that moment, forever irretrievable.

"Ah, Mary Culhane. There is no need," the Thing's heavy arm loosening from her neck, "no apologies necessary."

"I'll have to draw water, if it's porridge you want."

"No, Mary Culhane, we shall not leave this house now for water."

"Then what do you expect me to do without it? I can't do what you are asking me to do," she choked.

Another pause. The Thing was winding up to speak again. Ribs like knuckles again, grating against her spine: the shuddering as it tried again and failed to draw breath.

Mary tried to remember anything.

"Take the little point, Mary Culhane; the sharp little razor knife: the one you wear like a watch in your waistcoat."

Mary could not feel anything but an electric tingling between her fingers and toes. She focused on the tingling and shut her eyes until violet sunspots pulsed in whorls on the black.

*   *   *

And then she remembered that she was a girl, that her name was Mary and that it was very late.

Slowly at first, and then faster and faster, the same way that laces come loose, it came to Mary that she had fallen. Somehow she had fallen back and to her left and landed directly on top of the Thing: its back was pressed to the floor and her back was pressed to the horrible iron-hard ribs that held its yellow skin taught as tent leather. Its legs had come out from around her middle and were bent up underneath her, though its left arm was still tight around her neck.

Then she knew, in a flash, that the burrowing chill of that strong arm must have gone through her skin and chilled the life from her heart and made her faint; the nauseating two-legged bear hug and the freezing meat of the Thing's long, slender legs had finally numbed her middle and chased the warmth all the way to her toes.

Her toes, where there was no trace of the old tingling.

Mary could not remember ever having felt so cold as she did on the floor of the pantry with the blood coming back into her trunk from her face and her hands.

And there, lying on her back, staring up at the boards, the blood beginning to flow, she remembered the night.

Disconnected for a long, silent eternity from hands, wrists, forearms and all the far-off places that her heart's blood had evidently fled, Mary was vaguely astonished by the sudden reality of her own skin, the spots where a bruise felt tender or a scrape lazily oozed.

She remembered how she had carried the Thing to this house; Mary remembered her hours-long journey and how she went color-blind in the full moon light and she remembered how at first her legs were sore and then, during the long walk back from the graveyard to the town, how her legs had stopped hurting and didn't feel anything at all.

Now she could move them--she tried them, and they moved a little--but she hadn't been able to move them before, even as her legs carried her into town and her arms and hands unlatched the gate and opened the door.

Mary wondered when she had lost the ability to control her arms and legs. Was it when the Thing's arm shot out from the open grave, hooked her ankle and pulled her down into the earth? Had she struck her head on a stone when that happened?

Maybe she lost control later, once the Thing had wrapped itself around her and forced its first foul words through its grave-cold nose and into her ear: "Now you just turn around and you climb out of this grave, Mary Culhane."

No, Mary felt like she at least must have climbed out of the grave on her own, though she had no idea where she had found the strength to do so with the Thing wrapped around her. So when, then, did she lose control? When did the Thing take control of her arms and legs?

The fall to the pantry floor had brought the Thing's face closer than it had been since the two of them tumbled and struggled in the open grave. Mary observed again how strongly the Thing stank of earth. And then she noticed that she was standing again.

Standing without thinking about it. Thinking about it without remembering it. The Thing's strong left arm wrapped around her neck; the Thing's legs wrapped around her waist. Feeling cold, and then feeling nothing.

"Reach out with your right. Reach out and take it, Mary."

When she reached out with her right, she observed that she had to let go of the Thing's right leg to do so, and its dead weight pulled hard and the cold of it dug deep into her.

But she reached out with her right and she took the basket of crushed goosefoot.

Then, turning and spinning on a silver-sandaled heel, she faced away from the pantry and plunged into the placid blackness of the kitchen, half expecting to break its flat, black surface and send out a glittering, Mary-shaped ripple.

"Now how many steps from the pantry to the stairs, Mary Culhane?"

She took seven small steps, her right arm outstretched, her left cradling the Thing's leg. She found the top of the first step with her right foot and took the next two automatically.

"Now how many more to the top?"

She mouthed the words, "Four to the landing."

"Now four to the landing. How many more make the top?"

"Nine steps to the top," she thought to herself.

Delivered gradually from the musty closeness and impenetrable black of the stairs, Mary eventually recognized the waxy moonlight seeping through the top of a shuttered, glassless window at the far end of the narrow hall into which she had emerged.

The air hung thick and greasy in the hall: whoever lived here burned tallow at night and the effect was to give the upstairs rooms an animal warmth that Mary could smell, even if she could not feel it.

When she was at the top of the steps, she whispered, to no one in particular, "They are asleep."

The grating waterwheel rhythm of ribs on spine, throat on shoulder distant now: unbaked is thy bread; I shall not have thee.

"Who is asleep, Mary Culhane?"

"All of them is who's asleep. The Dunn boys and their old father: I know this house. I knew I knew this house."

"I knew you knew it, Mary. I know it too."

With the basket of pulverized seed held out before her and the Thing clutching its freezing death grip, Mary followed the goosefoot seed and four dead bees through the stale-smelling gray hall and into the Dunn boys' room.

Three boys slept on their sides and all in a row: the first boy on his side, facing her. The other two, sleeping on their sides, facing away. Mary knelt at Michael's bedside.

By inches and in breathless silence, she rolled forward on the balls of her bare feet and closer to the sleeper's gaping face. In the darkness she could just barely make out the boy's blocky features. Michael was the oldest of the three. And he was very ugly: an angry spray of red raised the skin of his forehead and his cheeks. A purplish pimple on his chin glistened flatly in the pale light.

By millimeters now, Mary carefully brought her face closer to his. Her own face was becoming hot again, and she could feel cold coming from his.

The Thing began to pull hard on Mary's neck, bringing its own face closer to the sleeper. The Thing pulled itself so close that Michael's broad, squarish nose rubbed the cold leather of the Thing's forehead.

"This one," exhaled the Thing, "is first. This one first, and then the others."

And so Mary placed the basket on the bed, next to Michael's head. Then she thrust her right hand into the pocket of her waistcoat.

With her old dad's knife, Mary drew a smooth, perpendicular stripe across Michael's throat. To her, it felt like pulling a spoon through fresh cream.

She held the knife in space for a moment, squinting at the marble gleam of it: someone else's hand, someone else's knife--to her, it felt like something she ought to be afraid of.

But Mary was not afraid.

*   *   *

In the kitchen, Mary stood by the pantry, looking in, hoping to see the bees.

Some of the heat had come back to her face, and she imagined that she could see steam coming from her own neck where the Thing's left arm curled around it.

"And now Mary Culhane, payment for this night's toils: take, take and drink."

Mary twisted her head to her right, pulling against the weight of the Thing's arm, and saw that she was holding the basket of crushed goosefoot and the steaming blood of the three Dunn boys aloft on her palm, tilting it in the direction of where the Thing's head must have been.

She could not see the Thing's face--had not seen it all night--but, craning her neck, she could see where it had spilled the steaming gore and the crushed seed on its narrow, jutting chin.

Her hands felt hot--like there was too much of her own boiling blood within her fingers. She struggled to feel the basket, but like Michael's face had felt in the dark, it was cool to her touch.

And her touch, the feel of her fingers on the basket, felt nothing like a basket. To her own growing confusion, her touch felt more of the dancing electric tingle than of the coarse weave of the splintering, gore-slick basket.

Mary felt the Thing relax its grip, and some of the heat go out of her face. She raised the basket to her mouth, and poured the steaming porridge from the edge of the basket. As she saw the porridge creeping towards the edge of the basket, she inhaled sharply, squeezed her eyes as tight as they would go and mashed her lips together.

The blood porridge went over her nose, slid down her lips and around her chin. She felt a torrent of it go down the front of her dress and collect in the frayed houndstooth neckerchief that she had worn out to the graveyard that night.

But the porridge kept coming, and it filled the hammock-shaped hollow created by the neckerchief past what it could hold. Blood and mangled seed raced down the front of Mary's chest, boiling hot between her breasts and along her ribs. She felt where it collected and started to cool at the top of her belt and the snug parts of her waistcoat.

When the basket was empty, she lowered it and wiped blood porridge from her nose and mouth with the back of her sleeve. She took a long breath. She could taste the tin of it on her lips.

"Now, Mary Culhane, how many steps to the door?"

She opened her eyes, spun again on her heel, and walked through the pitch-black kitchen to the front door of the house. It was open, but the moonlight was little more than a dim glow coming in from the street now. Mary walked through the door, basket in her right hand and the Thing clinging hard on her back, down the steps and into the garden.

As they made the street, they turned right. From the corner of her eye, Mary could see the house and the open door.

The Thing squeezed hard, ratcheting itself up her back, and shuddered once again into speech.

"Do you see what the Dead can do, Mary Culhane? Do you know what happens to girls who walk in open graves at night, Mary Culhane?"

Tears again, this time cool: cooler than they had felt before. They slipped off of her lips and turned into dark spots on her waistcoat. The blood porridge in the houndstooth neckerchief still felt hot against her sternum.

The heat in Mary's face was nearly unbearable as they came to the edge of the well in the middle of the town. Mary raised her hand, held the basket out over the edge and dropped it down.

The Thing writhed and shook against her. Mary shut her eyes.

"Do you know what happens to girls who play in open graves, Mary Culhane?"

The Thing was squeezing harder--harder than before--and its bony, blood-slick chin was lolling against her shoulder obscenely as its voice rose in pitch and volume. She felt the old tingle in her hands and feet as it squeezed.

"Do you know what happens to girls who drink the living blood, Mary Culhane?" the Thing shrilled at the top of its awful, nasally sneer.

Huge, racking shudders now. Mary realized that the Thing was laughing at about the same time that she realized that she was running, headlong, away from the town and back up the long hill to the graveyard. The thing bouncing up and down, half because of her pace and half because of its horrible, undulating laughter.

Her face was too hot: a bladder full of boiling water. Her hands tingled as she ran, and her feet felt a mile away.

The Thing cackled wildly as it rode her harder and faster from the town, up the hill, back to the yawning grave and the stench of the earth.

The whorls and pin-pricks of violet began to creep in from the corners of Mary's eyes. And then, just like that, she fainted dead away.

Mary fell face-first, the Thing clutching hard as the two of them rolled in the dust of the road. As they came to a stop, Mary's face was in the dust, and the Thing's left arm and both legs were pinned underneath her.

The sun rose, as it always had, from behind the hill.

The first ray, two identical spheres of liquid gold floating motionlessly in the depthless black of the Thing's eyes.

2013-03-02 - fiction, horror, writing